marcreichenbachundmichaelschmidt - fau · multiplexer-realisierung in vhdl...
TRANSCRIPT
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Rechenschaltungen 1
Marc Reichenbach und Michael Schmidt
Informatik 3 / RechnerarchitekturUniversität Erlangen Nürnberg
06/12
1 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Gliederung
Schieberegister
Multiplexer
Barrel-Shifter
Zähler
Addierer
2 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Schieberegister
• z.B. für FIFO (First In First Out) benötigt
• Kette von verbundenen DFFs
• Ports:• Takt• serieller Input• serieller Output• optional: Reset, Enable, Paralleler Ladeport, ...
• Entwurf möglichst generisch (Wiederverwendbarkeit) → Übung
3 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Schieberegister
• Beispiel: einfaches 8-Bit Schieberegister
4 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Schieberegister
• Entity-Definition
l i b r a r y i eee ;use i eee . std_logic_1164 . a l l ;
en t i t y s h i f t r e g i s t e r i sport ( c l k , d i n : i n std_log ic ;
dout : out std_log ic ) ;end s h i f t r e g i s t e r ;
a r ch i t e c t u r e b eha v i o r of s h i f t r e g i s t e r i s
s i g n a l tmp : std_logic_vector (7 downto 0 ) ;
begin. . .
5 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Schieberegister-Realisierung in VHDL
• mögliche Modellierung in VHDL
. . . .
process ( c l k )begin
i f c l k ’ e ven t and c l k = ’1 ’ thentmp (0) <= d in ;f o r i i n 1 to 7 loop
tmp( i ) <= tmp( i −1);end loop ;
end i f ;end process ;
dout <= tmp ( 7 ) ;
end b eha v i o r ;
6 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Schieberegister im FPGA
• Realisierung im FPGA (Bsp. Spartan3E)?
• Variante 1: DFFs der Slices
• Variante 2: LUTs in SLICEM als Schieberegister verwendbar
• sogenannte SRL16 Komponente mit 16 Bit
• Vorteil: Einsparung von DFFs durch Abbildung auf LUTs
• WICHTIG: nur OHNE Reset nutzbar!!! (sonst Abbildung aufDFFs)
7 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Schieberegister im FPGA
• Aufbau SRL16 Komponente• 4 Eingänge der LUT definieren Breite des Schieberegisters
(Länge-1 !!!)• letztes Bit wird in DFF des Slices für taktsynchrone Ausgabe
gespeichert
• weiterer Vorteil: Breite des Schieberegisters zur Laufzeitdynamisch anpassbar
8 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Schieberegister im FPGA
• Technologie-Schematic für 8-Bit Schieberegister
9 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Multiplexer
• benötigt für eine Vielzahl von Schaltungen, z.B. Decoder,State Machines, Barrel Shifter,...
• besteht aus Gatterlogik
• Ports:• 2 oder mehr Inputs• Auswahl-Input• Output
10 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Multiplexer
• Beispiel: 2-to-1 Multiplexer
AB OS
• Realisierung in VHDL durch Datenflussbeschreibung oderkombinatorischen Prozess
11 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Multiplexer-Realisierung in VHDL
• Entity-Definition
l i b r a r y i eee ;use i eee . std_logic_1164 . a l l ;
en t i t y m u l t i p l e x e r i sport ( a , b , s : i n std_log ic ;
o : out std_log ic ) ;end s h i f t r e g i s t e r ;
a r ch i t e c t u r e b eha v i o r of s h i f t r e g i s t e r i s
begin. . .
12 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Multiplexer-Realisierung in VHDL
• Realisierung mit Datenflussbeschreibung
with s s e l e c to <= a when ’ 0 ’ ,
b when others ;
• Realisierung mit komb. Prozess
process ( a , b , s )begin
i f s = ’0 ’ theno <= a ;
e l s eo <= b ;
end i f ;end process ;
→ alternativ über case-Anweisung
13 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Multiplexer-Realisierung im FPGA• Abbildung auf LUTs und F5MUX -Komponenten (2-to-1Multiplexer Ressourcen in den Slices)
• Beispiel: 4-to-1 Multiplexer
14 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter
• ermöglicht Verschiebung um mehrere Bitstellen in einemSystemtakt
• wichtig für Rechenwerke
• besteht aus Gatterlogik
• Ports:• Inputvektor• Shiftweite• Outputvektor• optional: Steuersignale
15 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter
• unterschiedliche Realisierungen• Schieberichtung rechts oder links• nicht zyklisch oder zyklisch (Barrel-Rotator)• vorzeichenbehaftet oder nicht vorzeichenbehaftet
• Realisierung üblicherweise mit n · log2(n) Multiplexern• 8 Bit → 8 · log2(8) = 8 · 3 = 24 Multiplexer• 64 Bit → 64 · 6 = 384 Multiplexer
→ hoher Ressourcenverbrauch bei größeren Barrel-Shiftern
→ Probleme auch bezüglich kritischem Pfad
16 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter in VHDL
. . .en t i t y b a r r e l s h i f t e r i s
port ( d i n : i n std_logic_vector (7 downto 0 ) ;s h i f t : i n std_logic_vector (2 downto 0 ) ;dout : out std_logic_vector (7 downto 0)−− o p t i o n a l : S t e u e r s i g n a l e
) ;end b a r r e l s h i f t e r ;
a r ch i t e c t u r e b eha v i o r of b a r r e l s h i f t e r i s
begin
. . . .
17 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter in VHDL
• unterschiedliche Beschreibungsformen möglich
• kombinatorische Logik → über Datenflussbeschreibung oderkombinatorischen Prozess
• Datenflussbeschreibung beispielsweise über withselect-Anweisung
• kombinatorischer Prozess beispielsweise mit case-Anweisung
18 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter in VHDL
• Beispiel: case-Anweisung für nicht vorzeichenbehaftete,logische Rechtsschiebung
. . .process ( d in , s h i f t )begin
case s h i f t i swhen "000" => dout <= d in ;when "001" => dout <= "0" & d in (7 downto 1 ) ;when "010" => dout <= "00" & d in (7 downto 2 ) ;when "011" => dout <= "000" & d in (7 downto 3 ) ;when "100" => dout <= "0000" & d in (7 downto 4 ) ;when "101" => dout <= "00000" & d in (7 downto 5 ) ;when "110" => dout <= "000000" & d in (7 downto 6 ) ;when "111" => dout <= "0000000" & d in ( 7 ) ;when others => dout <= "00000000" ;
end case ;end process ;. . . .
19 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter in VHDL
• Schiebeoperationen alternativ über VHDL-Operatoren• rol - Rotate Left• ror - Rotate Right• sll - Shift Left Logical• srl - Shift Right Logical• sla - Shift Left Arithemtic• sra - Shift Right Arithemtic
20 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter in VHDL
• Bereitstellung über Bibliothek ieee.numeric_std fürvorzeichenbehaftete und nicht vorzeichenbehafteteSchiebeoperationen
< signed_sig > operator < shift_amount_in_integer >;< unsigned_sig > operator < shift_amount_in_integer >;
• WICHTIG: auf Toolunterstützung achten! (von XSTunterstützt)
21 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter in VHDL
• Beispiel: srl-Anweisung für nicht vorzeichenbehaftete, logischeRechtsschiebung über ieee.numeric_std. . .dout <= std_logic_vector ( uns i gned ( d i n ) s r l
to_integer ( uns i gned ( s h i f t ) ) ) ;. . . .
→ kompaktere Schreibweise
22 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Barrel-Shifter im FPGA
• Abbildung im FPGA auf LUTs und MUXF5-Komponenten
• Problem: kritischer Pfad → Lösung?
• weitere Möglichkeit: Nutzung der Multiplizierer (später mehr)
• Schiebeoperation um n durch Multiplikation mit 2n
• für weitere Informationen: xapp195.pdf
23 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Zähler
• weitere wichtige Grundkomponente, z.B. fürAdressberechnungen, Frequenzteiler,... benötigt
• besteht aus Logik und DFFs
• Ports:• Takt• Zähler-Output• optional: Reset, Enable, Init-Port, ...
24 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Zählermodellierung in VHDL
. . .en t i t y coun t e r i s
port ( c l k , r e s e t : std_log ic ;q : out std_logic_vector (3 downto 0 ) ) ;
end coun t e r ;
a r ch i t e c t u r e b eha v i o r of coun t e r i s
s i g n a l tmp : std_logic_vector (3 downto 0 ) ;
begin
. . . .
25 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Zählermodellierung in VHDL
• Modellierung mit “+“ Operator möglich:
. . .
process ( c l k , r e s e t )begin
i f r e s e t = ’1 ’ thentmp <= "0000" ;
e l s i f c l k ’ e ven t and c l k = ’1 ’ thentmp <= tmp + 1 ;
end i f ;end process ;
q <= tmp ;
end b eha v i o r ;
• Hardware-technische Realisierung?
26 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Zählerschaltung
• Herleitung der kombinatorischen Logik wieder überWahrheitstabelle
• Lösung:
• DI1 = DO1 ⊕ ′1′
• DI2 = DO2⊕ (DO1)• DI3 = DO3⊕ (DO1 ∧ DO2)• DI4 = DO4⊕ (DO1 ∧ DO2 ∧ DO3)• ....
27 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Zählerschaltung
• resultierende Schaltung
Q1D1 Q2D2'1' Q3
D3
• Realisierung im FPGA mit LUTs und DFFs
• größere Zähler: Arithmetik mit speziellen Multiplexern undXOR-Gattern (später mehr)
28 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Ripple-Carry Addierer
• Ripple-Carry Addierer (RCA) aus Volladdierern (FA)
• erster Volladdierer kann durch Halbaddierer ersetzt werden (fürreine Addition)
• alle Volladdierer arbeiten parallel, aber Problem: "rippelndeCarries"
29 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Subtraktion mit RCA
• Subtraktion über Zweierkomplement
• Realisierung in Hardware?
30 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Subtraktion mit RCA
• Invertierung eines Operanden mit XOR-Gattern
• Addition der ’1’ über Carry-in des ersten Volladdierers
31 / 32
Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer
Literatur
Bücher
• VHDL-Synthese, Jürgen Reichardt, Bernd Schwarz, 5. Auflage,Oldenbourg Wissenschaftsverlag GmbH, 2009, ISBN978-3-486-58987-0
• The Designer’s Guide to VHDL, P.J. Ashenden, 3. Auflage,Morgan Kaufmann Publisher, 2008, ISBN 978-0-12-088785-9
• Implementing Barrel Shifters Using Multipliers, XAPP195(v1.1), August, 2004
32 / 32