Hardware Reference
In-Depth Information
natorischen Prozesses von einer nachfolgenden Signalzuweisung überschrieben
werden. Eine Fortsetzung einer If-Anweisung mit einem Elsif-Zweig wird in
einen zweiten Multiplexer übersetzt, der wieder zwischen zwei Werten aus-
wählt. Mehrere Elsif-Zweige werden in eine Multiplexerkette übersetzt (Abb.
2.6).
signal a, b, c, d, p, q, r, y:
std_logic;
...
process(a, b, c, d, p, q, r)
begin
if
p=
'1'
then
y <= a;
elsif
q=
'1'
then
y <= b;
elsif
r=
'1'
then
y <= c;
else
a
b
1
y
1
0
c
1
0
0
d
p
q
r
y <= d;
end if;
end process;
⇒
Web-Projekt:P2.1/SynthMux2.vhdl
Abb. 2.6. Nachbildung einer If-Elsif-Anweisung durch Multiplexer
Operatoren mit Bitvektoren als Operanden und komplexe Fallunterschei-
dungen werden als parametrisierte Funktionsblöcke extrahiert und an Schal-
tungsgeneratoren weitergereicht. Das erste Beispiel sei die Auswahlanweisung
in Abb. 2.7. Die Auswahlgröße ist ein 2-Bit-Vektor mit vier zulässigen Wer-
ten. Die Synthese bildet diese Auswahlanweisung durch einen Multiplexer
mit vier Dateneingängen nach. Im Gegensatz zur Beschreibung mit If-Elsif-
Anweisungen, die durch mehrere verkettete Multiplexer mit je zwei Daten-
eingängen nachgebildet werden, überlässt die Auswahlanweisung die Struk-
turentscheidung dem Schaltungsgenerator, der auf diese Weise mehr Optimie-
rungsmöglichkeiten erhält.
signal
s:std_logic_vector(
1
downto
0
);
signal
x1, x2, x3, x4, y:std_logic_vector(
3
downto
0
);
...
process
(s, x1, x2, x3, x4)
begin
case s is
when
"00"
=> y <= x1;
when
"01"
=> y <= x2;
when
"10"
=> y <= x3;
when others => y <= x4;
end case;
end process
;
4
x
1
x
2
x
3
x
4
s
00
01
4
4
10
y
4
4
11
2
⇒
Web-Projekt:P2.1/SynthCase.vhdl
Abb. 2.7. Multiplexerbeschreibung mit einer Auswahlanweisung