06.11.2013 Views

Beispiel

Beispiel

Beispiel

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 1. . .<br />

V H D L<br />

Tim Köhler<br />

April 2005


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 2. . .<br />

Übersicht<br />

1. Einleitung<br />

2. Syntax<br />

3. Spezielle Probleme<br />

4. <strong>Beispiel</strong><br />

5. Ausblick


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 3. . .<br />

VHDL<br />

– VHDL : VHSI Hardware Description Language<br />

Very High Speed IC Hardware Description Language<br />

– 1983 vom amerikanischen DoD initiiert<br />

– 1987 als IEEE 1076 normiert<br />

– 1993, 2000 Überarbeitungen<br />

– Erweiterungen, z.B. 1999 AMS (Analog and Mixed Signal)<br />

Zweck:<br />

– Beschreibung/Design von (digitalen) Systemen<br />

– Simulation von (digitalen) Systemen


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 4. . .<br />

Entwurfsparadigmen<br />

– Hierarchie (Unterteilung in Komponenten)<br />

– Modelle (unterschiedliche Beschreibungsebenen): Verhalten, Struktur,. . .<br />

– Datenhaltung (Wiederverwendung, Herstellerbibliotheken)<br />

– Design-Alternativen (u.a. Trennung von Schnittstelle und Implementation)<br />

. . . (mehr im Vortrag Übersicht/Entwurfsablauf)


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 5. . .<br />

Syntax: Hello World!<br />

01<br />

02 -- ‘‘Hello World!’’ in VHDL<br />

03<br />

04 library IEEE;<br />

05 use ieee.std logic 1164.all; -- gross/klein egal!<br />

06<br />

07 entity HelloWorld is<br />

08 port(<br />

09 A, B: in bit;<br />

10 C : out bit<br />

11 );<br />

12 end; -- end HelloWorld; / end entity HelloWorld;<br />

13<br />

14 architecture Version1 of HelloWorld is<br />

15 begin<br />

16 C


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 6. . .<br />

Einheiten der Sprache VHDL<br />

– entity = Schnittstelle<br />

– architecture = Implementierung<br />

– configuration = Auswahl von Design-Alternativen<br />

– package = “Kopf” einer Bibliothek<br />

– package body = Implementierung einer Bibliothek<br />

Verteilung der Einheiten auf Dateien von CAD-Software abhängig!


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 7. . .<br />

entity<br />

01<br />

02 . . .<br />

03<br />

07 entity Demo is<br />

08 port(<br />

09 A, B : in bit;<br />

10 C : out bit;<br />

11 reset : in std logic;<br />

12 ack : out std logic;<br />

13 Daten : inout std logic;<br />

14 Adresse: in bit vector(9 downto 0)<br />

15 );<br />

16 end; -- end Demo; / end entity Demo;<br />

17<br />

18<br />

1. Bezeichner<br />

2. Richtung<br />

3. Typen


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 8. . .<br />

Typen<br />

01<br />

02 -- Typen in VHDL<br />

03<br />

04 TYP WERTE BEISPIEL<br />

05<br />

06 bit ’0’,’1’ on


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 9. . .<br />

Eigene Typen definieren<br />

01<br />

02 -- Typ definieren:<br />

03<br />

04 type ZUSTAENDE is (RESET, INITIERUNG, RUNNING, HALT);<br />

05<br />

06<br />

07 -- Typ verwenden:<br />

08<br />

09 signal AktuellerZustand : ZUSTAENDE;<br />

10 signal NaechsterZustand : ZUSTAENDE;<br />

11<br />

12 AktuellerZustand


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 10. . .<br />

architecture (1/2)<br />

01 architecture Variante1 of Demo is<br />

02 signal temp: std logic;<br />

03 signal Ack2: std logic;<br />

04 begin<br />

05 Ack


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 11. . .<br />

architecture (2/2)<br />

01 architecture Version1 of Demo2 is<br />

02 signal zaehler: Integer;<br />

03 begin<br />

04 . . .<br />

05 C


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 12. . .<br />

Komponenten wiederverwenden (1/3)<br />

01<br />

02 entity VollAdd is<br />

03 port(<br />

04 A, B : in std logic;<br />

05 C in : in std logic;<br />

06 Sum : out std logic;<br />

07 C out: out std logic<br />

08 );<br />

09 end VollAdd;<br />

10<br />

11 architecture Version1 of VollAdd is<br />

12 signal AxorB : std logic;<br />

13 begin<br />

14 AxorB


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 13. . .<br />

Komponenten wiederverwenden (2/3)<br />

01 entity TwoAdd is<br />

02 port(<br />

03 ZahlA, ZahlB : in std logic vector(1 downto 0);<br />

04 Summe: out std logic vector(2 downto 0)<br />

05 );<br />

06 end TwoAdd;<br />

07<br />

08 architecture Version1 of TwoAdd is<br />

09 component VollAdd is<br />

10 port(<br />

11 A, B : in std logic;<br />

12 C in : in std logic;<br />

13 Sum : out std logic;<br />

14 C out: out std logic<br />

15 );<br />

16 end component VollAdd;<br />

17 . . .<br />

18


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 14. . .<br />

Komponenten wiederverwenden (2/3)<br />

07 . . .<br />

08 architecture Version1 of TwoAdd is<br />

09 component VollAdd is<br />

10 port(<br />

11 A, B : in std logic;<br />

12 C in : in std logic;<br />

13 Sum : out std logic;<br />

14 C out: out std logic<br />

15 );<br />

16 end component VollAdd;<br />

17 signal Carry : std logic;<br />

18 begin<br />

19 LSB ADD: VollAdd port map(ZahlA(0), ZahlB(0),<br />

20 ’0’, Summe(0), Carry);<br />

21 MSB ADD: VollAdd port map(ZahlA(1), ZahlB(1),<br />

22 Carry, Summe(1), Summe(2));<br />

23 end architecture Version1;<br />

24


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 15. . .<br />

Komponenten wiederverwenden (2/3)<br />

08 architecture Version1 of TwoAdd is<br />

09 component VollAdd is<br />

10 port(<br />

11 A, B : in std logic;<br />

12 C in : in std logic;<br />

13 Sum : out std logic;<br />

14 C out: out std logic<br />

15 );<br />

16 end component VollAdd;<br />

17 signal Carry : std logic;<br />

18 begin<br />

19 LSB ADD: VollAdd port map(<br />

20 A => ZahlA(0),<br />

21 B => ZahlB(0),<br />

22 C in => ’0’,<br />

23 C out => Carry,<br />

24 Sum => Summe(0)<br />

25 );


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 16. . .<br />

Komponenten wiederverwenden (3/3)<br />

01 entity MultiAdd is<br />

02 port(<br />

03 ZahlA, ZahlB : in std logic vector(31 downto 0);<br />

04 Summe: out std logic vector(32 downto 0)<br />

05 );<br />

06 end TwoAdd;<br />

07<br />

08 architecture Version1 of MultiAdd is<br />

09 component VollAdd is<br />

10 port(<br />

11 A, B : in std logic;<br />

12 C in : in std logic;<br />

13 Sum : out std logic;<br />

14 C out: out std logic<br />

15 );<br />

16 end component VollAdd;<br />

17 . . .<br />

18


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 17. . .<br />

Komponenten wiederverwenden (3/3)<br />

08 architecture Version1 of MultiAdd is<br />

09 component VollAdd is<br />

10 port(<br />

11 A, B : in std logic;<br />

12 C in : in std logic;<br />

13 Sum : out std logic;<br />

14 C out: out std logic<br />

15 );<br />

16 end component VollAdd;<br />

17 signal Carry in : std logic vector(32 downto 0);<br />

18 begin<br />

19 Addierer: for I in 0 to 31 generate<br />

20 ADD I: VollAdd port map(<br />

21 ZahlA(I), ZahlB(I),<br />

22 Carry in(I), Summe(I), Carry in(I+1));<br />

23 end generate Addierer;<br />

24 Carry in(0)


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 18. . .<br />

Arithmetik in VHDL<br />

01<br />

02 -- Variante 1 : Wie in anderen Sprachen<br />

03<br />

04 . . .<br />

05 signal int1, int2, int3: Integer range 0 to 131071;<br />

06 signal databus: std logic vector(15 downto 0);<br />

07 . . .<br />

08 int3


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 19. . .<br />

Arithmetik in VHDL<br />

01<br />

02 -- Variante 2 : Optimierte Implementierung<br />

03<br />

04 . . .<br />

05 signal int1bus, int2bus, int3bus: std logic vector(16 downto 0);<br />

06 signal databus: std logic vector(15 downto 0);<br />

07 . . .<br />

08 Addierer: LPM ADD port map(<br />

09 A => int1bus,<br />

10 B => int2bus,<br />

11 Sum => int3bus,<br />

12 );<br />

13 . . .<br />

14 databus


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 20. . .<br />

Speicher<br />

01<br />

02 -- Variante 1: RS-FF Strukturbeschreibung<br />

03<br />

04 entity RSFF is<br />

05 nR, nS : in bit;<br />

06 Q, nQ : out bit;<br />

07 end entity RSFF;<br />

08<br />

09 architecture V1 of RSFF is<br />

10 signal nand1, nand2: bit;<br />

11 begin<br />

12 nand1


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 21. . .<br />

Speicher<br />

01 -- Variante 2: RS-FF Verhaltensbeschreibung<br />

02<br />

03 entity RSFF is<br />

04 nR, nS : in bit;<br />

05 Q, nQ : out bit;<br />

06 end entity RSFF;<br />

07<br />

08 architecture V2 of RSFF is<br />

09 begin<br />

10 Q nQ: process(nS, nR)<br />

11 begin<br />

12 if nS = ’0’ then<br />

13 Q


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 22. . .<br />

Speicher<br />

01 -- Variante 3: D-FF Verhaltensbeschreibung<br />

02<br />

03 entity DFF is<br />

04 D, CLK, nRESET : in bit;<br />

05 Q, nQ : out bit;<br />

06 end entity DFF;<br />

07<br />

08 architecture V1 of DFF is<br />

09 begin<br />

10 Q nQ: process(nRESET, CLK, D)<br />

11 begin<br />

12 if nRESET = ’0’ then<br />

13 Q


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 23. . .<br />

Speicher<br />

01 -- Variante 4: D-FF Verhaltensbeschreibung II<br />

02<br />

03 entity DFF is<br />

04 D, CLK, nRESET : in bit;<br />

05 Q, nQ : out bit;<br />

06 end entity DFF;<br />

07<br />

08 architecture V2 of DFF is<br />

09 begin<br />

10 Q nQ: process(nRESET, CLK, D)<br />

11 begin<br />

12 if nRESET = ’0’ then<br />

13 Q


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 24. . .<br />

<strong>Beispiel</strong><br />

– Cola-Automat<br />

– Akzeptiert werden sollen: 1 DM-, 2 DM- und 5 DM-Stücke<br />

– Bei Erreichen von 5 DM soll eine Flasche Cola (0.2l) ausgegeben werden


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 25. . .<br />

<strong>Beispiel</strong><br />

01 -- Cola-Automat in VHDL<br />

02<br />

03 entity ColaAutomat is<br />

04 port(<br />

05 nRESET : in std logic;<br />

06 CLK : in std logic;<br />

07 Muenze : in std logic;<br />

08 Wert : in std logic vector(1 downto 0);<br />

09 Ausgabe: out std logic;<br />

10 );<br />

11 end entity ColaAutomat;<br />

12<br />

13 architecture TolleFassung1 of ColaAutomat is<br />

14 type ZUSTAENDE is (WARTE, DM1, DM2, DM3, DM4, AUSWURF);<br />

15 constant MUENZE1DM : std logic vector(1 downto 0) := ‘‘00’’;<br />

16 constant MUENZE2DM : std logic vector(1 downto 0) := ‘‘01’’;<br />

17 constant MUENZE5DM : std logic vector(1 downto 0) := ‘‘10’’;<br />

18 . . .


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 26. . .<br />

<strong>Beispiel</strong><br />

13 architecture TolleFassung1 of ColaAutomat is<br />

14 type ZUSTAENDE is (WARTE, DM1, DM2, DM3, DM4, AUSWURF);<br />

15 constant MUENZE1DM : std logic vector(1 downto 0) := ‘‘00’’;<br />

16 constant MUENZE2DM : std logic vector(1 downto 0) := ‘‘01’’;<br />

17 constant MUENZE5DM : std logic vector(1 downto 0) := ‘‘10’’;<br />

18 signal ZustandAktuell : ZUSTAENDE;<br />

19 signal NeuerZustand : ZUSTAENDE;<br />

20 begin<br />

21<br />

22 -- Globale, zentrale Zuweisungen (hier nicht)<br />

23<br />

24 -- Zustandsspeicher<br />

25 . . .<br />

34 -- Zustandsuebergangsfunktion<br />

35 -- (hier kombiniert mit Ausgabefunktion)<br />

36 . . .<br />

127 end architecture TolleFassung1;<br />

128


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 27. . .<br />

<strong>Beispiel</strong><br />

24 -- Zustandsspeicher<br />

25 Zustandsspeicher: process(nRESET, CLK, NeuerZustand)<br />

26 begin<br />

27 if nRESET=’0’ then<br />

28 ZustandAktuell


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 28. . .<br />

<strong>Beispiel</strong><br />

34 -- Zustandsuebergangsfunktion<br />

35 -- (hier kombiniert mit Ausgabefunktion)<br />

36 Funktion: process(ZustandAktuell, Muenze, Wert)<br />

37 begin<br />

38 case ZustandAktuell is<br />

39 when WARTE =><br />

40 . . .<br />

53 when DM1 =><br />

54 . . .<br />

104 when DM4=><br />

105 . . .<br />

121 when AUSWURF=><br />

122 . . .<br />

124 end case;<br />

125 end process Funktion;<br />

126<br />

127 end architecture TolleFassung1;<br />

128


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 29. . .<br />

<strong>Beispiel</strong><br />

38 case ZustandAktuell is<br />

39 when WARTE =><br />

40 if Muenze=’1’ then<br />

41 case Wert is<br />

42 when MUENZE1DM =><br />

43 NeuerZustand <br />

45 NeuerZustand <br />

47 NeuerZustand


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 30. . .<br />

<strong>Beispiel</strong><br />

53 when DM1 =><br />

54 if Muenze=’1’ then<br />

55 case Wert is<br />

56 when MUENZE1DM =><br />

57 NeuerZustand


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 31. . .<br />

<strong>Beispiel</strong><br />

70 when DM2 =><br />

71 if Muenze=’1’ then<br />

72 case Wert is<br />

73 when MUENZE1DM =><br />

74 NeuerZustand


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 32. . .<br />

<strong>Beispiel</strong><br />

87 when DM3 =><br />

88 if Muenze=’1’ then<br />

89 case Wert is<br />

90 when MUENZE1DM =><br />

91 NeuerZustand


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 33. . .<br />

<strong>Beispiel</strong><br />

104 when DM4 =><br />

105 if Muenze=’1’ then<br />

106 case Wert is<br />

107 when MUENZE1DM =><br />

108 NeuerZustand


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 34. . .<br />

121 when AUSWURF =><br />

122 NeuerZustand


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 35. . .<br />

Ausblick<br />

Zum <strong>Beispiel</strong>: VHDL zum Test in Simulationen<br />

“Testbench” ist eine entity, die die zu testende Baugruppe (entity) umgibt<br />

An den Ausgängen der Testbench werden Stimuli angelegt<br />

(verbunden mit den Eingängen des Prüflings)<br />

An den Eingängen der Testbench (Ausgänge Prüfling) können Signalverläufe<br />

• analysiert<br />

• mitgeschrieben<br />

und<br />

werden


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 36. . .<br />

Ausblick<br />

01<br />

02 -- Ausschnitt VHDL-Testbench<br />

03 . . .<br />

04 Takt: process<br />

05 begin<br />

06 Clk DataBus DataBus


I EINLEITUNG SYNTAX SPEZIELLE PROBLEME BEISPIEL AUSBLICK . . . 37. . .<br />

Literatur<br />

– Andreas Mäder: VHDL Kompakt<br />

http://tams-www.informatik.uni-hamburg.de<br />

– Lee: Digital system design using VHDL<br />

– Chang: Digital design and modeling with VHDL and synthesis

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!