Hardware Reference
In-Depth Information
Übergangs- und Ausgabefunktion für einen Pseudo-Zufallsgenerator gedacht
ist:
procedure uniform(seed1, seed2: inout positive; w: out real);
Der Zustand wird durch zwei positive ganze Zahlen beschrieben. Bei jedem
Aufruf bildet die Prozedur aus dem durch »seed1« und »seed2« beschriebenen
Ist-Zustand den Folgezustand und einen Ausgabewert im Bereich 0 w < 1.
In einer unreinen Funktion kann der Zustand in globalen Variablen versteckt
werden, die die Funktion liest, verändert und für die Berechnung des Ausga-
bewertes benutzt:
library ieee; use ieee.math_real;
...
shared variable seed1, seed2:positive;
...
impure function rand return real is
variable y:real;
begin
ieee.math_real.uniform(seed1, seed2, y);
return y;
end function ;
)WEB-Projekt:P3.1/Rand_pack.vhdl
Die so definierte Funktion hat keine Aufrufparameter und gibt bei jedem
Aufruf einen Zufallswert zurück. Die nachfolgende Anweisungsfolge im Prozess
eines Testrahmens ruft hintereinander zehnmal diese Funktion auf und gibt
jeweils den Rückgabewert aus:
-- Anweisungsfolge im Testprozess
for idx in 1 to 10 loop
write( "Zufallswert " & str(idx) & ": " & str(rand));
end loop ;
wait ;
)
WEB-Projekt:P3.1/TestRand.vhdl
3.1.6 Operatorfunktionen
Die Operatorausdrücke »ab« und »b« (a - linker Operand; b - rechter Ope-
rand;- Operatorsymbol) sind Spezialschreibweisen für Funktionsaufrufe. Die
in VHDL vordefinierten Operatorsymbole können für beliebige Operandenty-
pen neu- oder umdefiniert werden. Die Vereinbarung einer Operatorfunktion
gleicht fast der Vereinbarung einer normalen Funktion:
function ""([a: Typ;] b: Typ) return Rückgabetyp;
Der Funktionsname ist das in doppelte Hochkommas eingeschlossene Opera-
torsymbol. Die Anzahl der Operanden darf nur eins oder zwei betragen und
 
Search WWH ::




Custom Search