Hardware Reference
In-Depth Information
n
signal a, b: tUnsigned(n- 1 downto 0 );
signal y: tUnsigned(n downto 0 );
signal c, s:std_logic;
...
if s= '0' then y <= ( '0' & a)+b+c;
else
a
b
n +1
n
+
0
1
c
y
n
+
n +1
y <= ( '0' & a)-b-c;
s
end if ;
Wie bei einem ROBDD (reduziertes geo
dnetes binäres Entscheidungsdia-
gramm, Abschnitt 2.3.2) können bei einem Multiplexer identische Operationen
an den Eingängen zu einer gemeinsamen Operation am Ausgang zusammenge-
fasst werden. Die Addition und die Subtraktion werden beide durch Addierer
nachgebildet, einmal mit dem direkten und einmal mit dem bitweise inver-
tierten zweiten Operanden. Die resultierende Schaltung hat nur noch einen
Addierer und einen Multiplexer am zweiten Addierereingang:
r
n
a
signal a, b: tUnsigned(n- 1 downto 0 );
signal y: tUnsigned(n downto 0 );
signal c, s:std_logic;
...
variable vb: tUnsigned(n- 1 downto 0 );
variable vc: tUnsigned( 0 downto 0 )
...
if s= '0' then vb := b;
n +1
n
+
y
b
0
1
c
s
vc( 0 ) := c;
else
vb := not b; vc( 0 ) := not c;
end if ;
y <= ( '0' & a)+vb+vc;
Wenn die Synthese diese Optimierungsmöglichkeit nicht erkennt, muss die
Beschreibung auch hier an die gewünschte Zielstruktur angepasst werden. In
der Beschreibung links daneben werden zuerst in einer Fallunterscheidung
der Übertrag und der zweite Summand optional invertiert und in Variablen
gespeichert. Dann folgt die Addition.
Die Umschaltung zwischen dem direkten und dem invertierten zweiten
Operanden kann weiter durch eine bitweise EXOR-Verknüpfung ersetzt wer-
den (Abb. 2.92). Auch diese Zielstruktur lässt sich in VHDL beschreiben. Das
lohnt aber weniger, weil die Synthese bei der bitorientierten Optimierung im
Allgemeinen recht gut ist und solche Optimierungsmöglichkeiten selbst findet.
a
b
=1
+
y
c
s =1
Abb. 2.92. Optimierte Schaltung zur wahlweisen Addition oder Subtraktion
 
Search WWH ::




Custom Search