Hardware Reference
In-Depth Information
function
resolved(s:std_ulogic_vector)
return
std_ulogic
is
variable
result:std_ulogic:=s(s'low);
begin
for
idx
in
s'low+
1
to
s'high
loop
result :=resolution_table(result, s(idx));
end loop
;
return
result;
end function
;
Die Regeln für die paarweise Zusammenfassung sind in einer zweidimensio-
nalen Konstantentabelle festgelegt, die jedem Paar von std_ulogic-Werten
ein std_ulogic-Ergebnis zuordnet
2
.
type
stdlogic_table
is array
(std_ulogic,std_ulogic)
of
std_ulogic;
constant
resolution_table:stdlogic_table:=(
-------------------------------------------
-- ...
X
0
1
Z
...
|
|
-------------------------------------------
( ..., ..., ..., ..., ..., ... ), -- | U |
( ...,
'X'
,
'X'
,
'X'
,
'X'
, ... ), -- | X |
( ...,
'X'
,
'0'
,
'X'
,
'0'
, ... ), -- | 0 |
( ...,
'X'
,
'X'
,
'1'
,
'1'
, ... ), -- | 1 |
( ...,
'X'
,
'0'
,
'1'
,
'Z'
, ... ), -- | Z |
...
);
Wenn beide Signalquellen denselben Wert liefern, ist der Tabelleneintrag der
übereinstimmende Wert. Bei Abweichungen setzt sich »X«, der Pseudo-Wert
für ungültig, gegenüber allen anderen Werten und »0« oder »1« gegenüber
»Z« durch.
Mit dem Typ std_logic lässt sich der Ausgang eines Gatters auch in
VHDL als ein Signal mit mehreren Quellen beschreiben. Für das NOR-Gatter
aus Abb. 4.7a ergeben sich die logischen Ausgabewerte der Transistornetz-
werke über folgende Fallunterscheidungen:
8
<
:
8
<
:
Z für x
1
_x
2
= 0
0
1 für x
1
_x
2
= 0
Z für x
1
_x
2
= 1
X
y
n
=
für x
1
_x
2
= 1
y
p
=
X
sonst
sonst
Die Auflösungsfunktion berechnet daraus den Gatterausgabewert. In einem
ereignisgesteuerten Simulationsmodell sind die beiden Fallunterscheidungen in
einen kombinatorischen Prozess einzurahmen, der die Werte von y
n
und y
p
bei
jeder Änderung von x
1
oder x
2
neu berechnet und zuweist. Der Gatterausgang
wird mit zwei nebenläufigen Signalzuweisungen an y beschrieben:
2
Auch Aufzählungstypen sind als Indexbereiche für Felder zugelassen (vgl. Ab-
schnitt 3.2.5).