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].