Hardware Reference
In-Depth Information
U
V
1
1
U
V
x
1
x
2
¯x
1
∧
¯x
2
¯x
1
x
1
y
p
y
n
y
p
y
p
y
p
y
y
y
y
y
n
y
n
y
n
x
2
x
1
∨
x
2
x
1
∧
x
2
0
x
1
x
2
x
1
0
x
2
x
1
00
f
p
f
n
0
y
p
y
n
y
1 1
x
2
x
1
f
p
f
n
y
p
y
n
y
00 01 1 1
Z
10 10 0 0
1
Z
10 0 Z
Z
0 Z Z
01 10 0 0
Z
11 10 0 0
01 0 Z
1 1 1
11 10 0 0
a)
Z
b)
Z
Abb. 4.7. CMOS-Gatter a) NOR-Gatter b) Gatter, dessen Ausgang auch hoch-
ohmig gesteuert werden kann
4.1.3 Signale mit mehreren Quellen
In allen zuvor behandelten VHDL-Modellen hatte ein Signal genau eine Quel-
le. In dem gerade eingeführten Gatter-Modell hat das Signal für den Gat-
terausgang zwei oder mehr Quellen. Ein Signal mit mehreren Quellen benö-
tigt eine Auflösungsfunktion (engl. resolution function), die aus den einzelnen
Quellenwerten den Signalwert der Leitung berechnet. In VHDL ist diese Auf-
lösungsfunktion an den Datentyp gebunden. Die Zuordnung erfolgt in einer
speziellen Untertypvereinbarung:
subtype
tAflTyp
is
AufloesFkt tTyp;
(tTyp - Basistyp; AufloesFkt - Auflösungsfunktion; tAflTyp - Untertyp mit
Auflösungsfunktion). Die Auflösungsfunktion berechnet aus einem oder meh-
reren Eingabewerten vom Basistyp einen Rückgabewert vom Basistyp. Der
Typ des Eingabeparameters der Auflösungsfunktion ist entsprechend ein Vek-
tor mit dem Basistyp als Elementtyp und variablem Indexbereich:
type
tTyp_Vector (natural<>)
of
tTyp;
function
AufloesFkt(qv: tTyp_Vector)
return
tTyp
is
...;
Der vom Standard empfohlene Bit-Typ std_logic ist ein solcher Untertyp.
Der Basistyp ist std_ulogic, dessen Vektortyp ist std_ulogic_vector
und die Auflösungsfunktion heißt hier resolved(...):
type
std_ulogic
is
(
'U'
,
'X'
,
'0'
,
'1'
,
'Z'
, ...);
type
std_ulogic_vector
is array
(natural<>)
of
std_ulogic;
subtype
std_logic
is
resolvedstd_ulogic;
Die Auflösungsfunktion resolved(...) fasst in einer Schleife immer paarweise
zwei Quellenwerte zu einem gemeinsamen Signalwert zusammen: