Hardware Reference
In-Depth Information
signal
x, y:std_logic_vector(
2
downto
0
);
constant
th:delay_length:= ...;
constant
td:delay_length:= ...;
...
y <= "
XXX
"
after
th, fWTab(x)
after
td ;
In der Synthesebeschreibung entfallen die grau unterlegten Beschreibungsbe-
standteile
3
. Eine Package-Funktion zur Beschreibung des Eingabe-Ausgabe-
Verhaltens einer kombinatorischen Schaltung wird in einem Entwurfsprojekt
mehrfach verwendet: einmal für den separaten Test, mindestens einmal im
Simulationsmodell und mindestens einmal in der Funktionsvorgabe für die
Synthese. Deshalb ist die Auslagerung in ein Unterprogramm auch zu emp-
fehlen.
Felder mit variablem Indexbereich
Die lokalen Variablen und Konstanten eines Unterprogramms werden erst
beim Aufruf angelegt und initialisiert. Dadurch ist es möglich, die Anfangs-
werte der Datenobjekte und die Größe der Felder aus den Werten der Aufruf-
parameter berechnen zu lassen. Das gilt insbesondere auch für Konstanten.
Ein Beispiel für eine VHDL-Funktion mit einer Bitvektorvariablen, deren
Größe und Anfangswert von einem Eingabeparameter festgelegt wird, sei die
Übergangsfunktion eines Spezialzählers zur Erzeugung von Testeingaben vom
Typ std_logic_vector. Der Zähler soll zyklisch alle gültigen und auch
alle Eingabevariationen mit einem einzelnen ungültigen Bit erzeugen. In Abb.
3.9 a ist die Zählreihenfolge für einen 3-Bit-Zustandsvektor dargestellt. Ein
function
countx(x:std_logic_vector)
return
std_logic_vector
is
variable
y:std_logic_vector(x'range):=x;
begin
for
idx
in
x'low
to
x'high
loop
if
y(idx)=
'0'
then
y(idx) :=
'1'
;
exit
;
elsif
y(idx)=
'1'
and not
is_X(y(y'high
downto
idx+
1
))
then
y(idx) :=
'X'
;
exit
;
else
y(idx) :=
'0'
;
end if
;
end loop
;
return
y;
end function
;
x
2
x
1
x
0
x
2
x
1
x
0
x
2
x
1
x
0
00
1
X
0
0
0
0
1
1
1
0
1
X
1
1
1
1
1
0
0
1
X
X
X1
0
0
0
0
011
0
0
1
X
X
0
1
1
1
1
X0
X
1
0
1
0
X
X
X
0
1
1
0
0
a)
b)
⇒
Web-Projekt:P3.1/UPpack.vhdl
Abb. 3.9. Übergangsfunktion eines Spezialzählers zur Erzeugung von Testeinga-
ben a) Zählzyklus b) VHDL-Funktion
3
Außerdem darf in einer Synthesebeschreibung der Pseudo-Werte für ungültig auch
in Unterprogrammen weder ausgewertet noch zugewiesen werden.