Hardware Reference
In-Depth Information
Pseudo-Zufallsgenerator-Prozedur
Pseudo-zufällig bedeutet, dass die Auswahl Zufallscharakter hat, aber dass
bei einer Wiederholung exakt dieselben Signalverläufe erzeugt werden. Eine
zufällige Testauswahl hat unter anderem den Vorteil, dass die so ausgewählten
Testbeispiele vorrangig die Fehler finden, die die Verlässlichkeit am stärksten
beeinträchtigen [29]. Reproduzierbarkeit ist wichtig für die sich an den Test
anschließende Fehlerlokalisierung, falls die Ausgaben des Testobjekts und des
Referenzobjekts voneinander abweichen.
Die vordefinierte VHDL-Prozedur zur Erzeugung von Pseudo-Zufallszahlen
ist
procedure uniform(seed1, seed2: inout positive; x: out real);
aus dem standardisierten Package math_real (vgl. Abschnitt 3.1.5). Sie
erzeugt aus den zwei ganzzahligen positiven Parametern »seed1« und »seed2«,
die den Zustand des Pseudo-Zufallsgenerators beschreiben, zwei pseudo-zufäl-
lige Folgewerte und einen Ausgabewert x im Bereich 0 x 1.
Die zu entwerfende Prozedur soll ein Takteingabesignal haben und ein
pseudo-zufälliges Bitvektorsignal vom Typ std_logic_vector mit einem
erst beim Aufruf festzulegenden Indexbereich erzeugen. Zusätzlich zu den bei-
den Signalen sollen der Prozedur über ihre Aufrufschnittstelle optional drei
Parameter übergeben werden, ein Wichtungsvektor
w
und zwei positive Zah-
lenwerte. Der Wichtungsvektor hat den Typ
subtype tWeight is real range 0.0 to 1.0 ;
type tWeightArray is array (natural range <>) of tWeight;
und legt die Auftrittshäufigkeit des logischen Wertes »1« für die einzelnen
Ausgabebits fest
18
. Die beiden positiven Zahlenwerte bilden den Anfangszu-
stand des internen mit der Prozedur »uniform(...)« beschriebenen Pseudo-
Zufallsgenerators. Die Prozedurbeschreibung lautet wie folgt:
procedure RTPG( signal T:std_logic; signal y: out std_logic_vector;
w: tWeightArray:=( 0 => 0.5 ); seed1, seed2:positive:= 1 ) is
variable ww: tWeightArray(y'range):=( others => 0.5 );
variable yy:std_logic_vector(y'range);
variable s1:positive:=seed1;
variable s2:positive:=seed2;
variable p: tWeight;
begin
if w'length=y'length then ww := w; end if ;
loop
for idx in y'range loop
math_real.uniform(s1, s2, p);
if p<ww(idx) then yy(idx) := '1' ;
18 Die Wichtung ist ein Mittel, um die Fehlerüberdeckung eines Pseudo-
Zufallstestsatzes bei gleicher Testsatzlänge deutlich zu erhöhen [22, 49].
Search WWH ::




Custom Search