Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

School of Engineering Synthetisierbares VHDL Regeln & Empfehlungen.

Ähnliche Präsentationen


Präsentation zum Thema: "School of Engineering Synthetisierbares VHDL Regeln & Empfehlungen."—  Präsentation transkript:

1 School of Engineering Synthetisierbares VHDL Regeln & Empfehlungen

2 School of Engineering Kombinatorische Prozesse Grundstruktur Comb : PROCESS( ) BEGIN ; END PROCESS Comb; Regeln Alle Eingänge müssen in der Sensitivity Liste stehen If-, case statements müssen auskodiert werden, sonst werden Speicherelemente synthetisiert Kein wait-Statement Kein clkevent darf verwendet werden Sonderform: concurrent statement (direkte Zuweisung in der Architecture) x <= not a and b or c and not a; Entspricht einem kombinatorischen Prozess mit den Eingängen a,b, c und wird vom Simulator genauso behandelt

3 School of Engineering Clocked Process Der Clocked Process wird benutzt um die Funktionalität von flankengetriggerten Speicherelementen nachzubilden. Grundform ohne Reset: DFF: process (clk) begin if clkevent and clk=1 then q <= d; end if; end process DFF; Grundform mit Reset: DFF: process (clk,reset) begin if reset=1 then q <= 0; elsif clkevent and clk=1 then q <= d; end if; end process DFF;

4 School of Engineering Clocked Process (2) Nicht synthetisierbare Varianten Verboten !! DFF: process (clk) begin if clkevent and clk=1 and a=1 then q <= d; end if; d <= d + 1; end process DFF; Kein sequentielles statement ausserhalb der Taktflanken-Abfrage! Die Abfrage der Taktflanke darf nicht mit einer anderen logischen Abfrage verknüpft werden Wichtig: Diese Konstrukte sind erlaubt in VHDL, werden aber von den Synthese-Tools nicht richtig interpretiert.

5 School of Engineering Übung2, Aufgabe 3

6 School of Engineering VHDL Kapitel 5 Zähler

7 School of Engineering Zähler Grundprinzip Beispiel Dekadenzähler Umwandlungsroutinen Ein Prozess Zähler Up/Down Zähler Zähler mit nicht gewichtetem Code Inhalt

8 School of Engineering Ein Zähler ist eine Schaltung, die nach einem Taktimpuls von einem Ausgangszustand in einen vorbestimmten anderen Zustand übergeht Definition des Zählers

9 School of Engineering QD !Q QD QD Q0 Q1 Q2 Takt L0 L1 L2 RTL Beschreibung eines synchronen Zählers (RTL = Register Transfer Level)

10 School of Engineering Gegenwärtiger Zustand Folge- Zustand Zustandsdiagramm des Würfel-Zählers

11 School of Engineering Folge- Zustand Gegenwärtiger Zustand Zustandsdiagramm des Würfel-Zählers

12 School of Engineering Folge- Zustand Gegenwärtiger Zustand Zustandsdiagramm des Würfel-Zählers

13 School of Engineering QD !Q QD QD Q0 Q1 Q2 Takt L0 L1 L2 Grundstruktur eines synchronen Zählers

14 School of Engineering Prozess mit Kombinatorischer Logik comb_ Prozess mit getakteter Logik reg_ cnt_gegenwart cnt_folge clk reset 4 4 Prozesse des Zählers

15 School of Engineering LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; ENTITY zaehl_einfach IS PORT( clk,reset: IN std_logic; cnt_out : OUT std_logic_vector(3 downto 0) ); END zaehl_einfach; Paket mit arithmetischen Funktionen Paket mit std_logic, std_logic_vector Grundprinzip des Zählers in VHDL

16 School of Engineering ARCHITECTURE rtl OF zaehl_einfach IS SIGNAL cnt_folge: INTEGER range 0 TO 15; SIGNAL cnt_gegenwart: INTEGER range 0 TO 15; BEGIN logik : PROCESS(cnt_gegenwart) BEGIN cnt_folge <= cnt_gegenwart + 1 ; END PROCESS logik; flip_flops : PROCESS(clk, reset) BEGIN IF reset = '1' THEN cnt_gegenwart <= 0; ELSIF clk'EVENT AND clk = '1' THEN cnt_gegenwart <= cnt_folge ; END IF; END PROCESS flip_flops; cnt_out <= std_logic_vector(to_unsigned(cnt_gegenwart,4)); END rtl; Umwandlung Integer zu Vektor + Zuweisung Zwischen-Signal zum Ausgangssignal Logik:Process Takt:Process Grundprinzip des Zählers in VHDL

17 School of Engineering Aufgabenstellung: 1.Der Zähler soll 4-bit breit sein. 2.Bei Reset soll der Zähler synchron auf den Hexadezimalwert 0x5 gesetzt werden. 3.Die Zählfolge ist 0->1->2->3..9->0 Beispiel: Dekadenzähler

18 School of Engineering ARCHITECTURE RTL of DekadenZaehler SIGNAL cnt_folge, cnt_gegenwart: integer range 0 to 9; BEGIN comb_logik : PROCESS(cnt_gegenwart,reset) BEGIN IF reset = '1' THEN cnt_folge <= 5 ; ELSE IF cnt_gegenwart < 9THEN cnt_folge <= cnt_gegenwart + 1 ; ELSE cnt_folge <= 0; END IF; END IF; END PROCESS comb_logik; reg_flip_flops : PROCESS(clk) BEGIN IF clk'EVENT AND clk = '1' THEN cnt_gegenwart <= cnt_folge ; END IF; END PROCESS reg_flip_flops; END ARCHITECTURE RTL: Handelt es sich hier um einen synchronen oder asynchronen Reset ? Beispiel: Dekadenzähler

19 School of Engineering Übung1 RTL Diagram vom Code zeichnen Mit getrennten Prozessen umschreiben Synchronen Reset einfügen

20 School of Engineering Übung1- Lösung

21 School of Engineering Umwandlungsroutinen

22 School of Engineering signal cnt_out : std_logic_vector(3 downto 0)); signal cnt: integer RANGE 0 to 15; integer Eingangswert std_logic_vector Ausgangswert Umwandlungsfunktionen (Aufruf von 2 Subroutinen) cnt_out <= std_logic_vector(to_unsigned(cnt,4)); Anzahl bits zur Umwandlung std_logic_vector 2 Konvertierungsroutinen: Integer Unsigned std_logic_vector integer LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; Umwandlung von Type integer in Type std_logic_vector

23 School of Engineering ARCHITECTURE RTL OF DekadenZaehler SIGNAL cnt_folge: INTEGER RANGE 0 to 15 ; SIGNAL cnt_gegenwart: INTEGER RANGE 0 to 15 ; BEGIN logik : PROCESS (cnt_gegenwart) BEGIN cnt_folge <= cnt_gegenwart + 1 ; END PROCESS logik; flip_flops : PROCESS (clk, reset) BEGIN IF reset = '1' THEN cnt_gegenwart <= 0; ELSIF clk'EVENT AND clk = '1' THEN cnt_gegenwart <= cnt_folge ; END IF; END PROCESS flip_flops; cnt_out <= std_logic_vector(to_unsigned(cnt_gegenwart,4)); END ARCHITECTURE rtl; Handelt es sich hier um einen synchronen oder asynchronen Reset Achtung: Einschränken mit Range, da Sonst Synthesizer unnötig viele FF zuteilt Beispiel am Dekadenzähler

24 School of Engineering ARCHITECTURE rtl OF DekadenZaehler IS SIGNAL cnt_folge: unsigned (3 downto 0); SIGNAL cnt_gegenwart: unsigned (3 downto 0); CONSTANT increment: natural range 0 to 3 :=1; BEGIN logik : PROCESS (cnt_gegenwart) BEGIN cnt_folge <= cnt_gegenwart + increment ; END PROCESS logik; flip_flops : PROCESS (clk, reset) BEGIN IF reset = '1' THEN cnt_gegenwart <= 0000; ELSIF clk'EVENT AND clk = '1' THEN cnt_gegenwart <= cnt_folge ; END IF; END PROCESS flip_flops; cnt_out <= std_logic_vector(cnt_gegenwart); END ARCHITECTURE rtl; Dekadenzähler Alternative mit Datentyp Unsigned

25 School of Engineering Achtung: Nicht zusammen mit conv_std Routinen verwenden IEEE numeric_std Konvertierungsroutinen

26 School of Engineering cnt <= to_integer(signed(data)); Convertierung std_logic_vector -> signed Convertierung signed -> integer Eingang: std_locic_vector Ausgang: Integer Umgekehrte Umwandlung: std_logic_vector in Integer

27 School of Engineering LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; ENTITY counter IS PORT (clk, reset : IN std_logic; cnt_out : OUT std_logic_vector(3 downto 0)); END counter; ARCHITECTURE rtl OF counter IS SIGNAL cnt: integer range 0 to 9; BEGIN cnt_out <= cnt; cntr : PROCESS (clk, reset) BEGIN IF reset = '1' THEN cnt <= 0 ; ELSIF clk'EVENT AND clk = '1' THEN cnt <= cnt + 1 ; END IF; END PROCESS cntr; cnt_out <= std_logic_vector(to_unsigned(cnt, 4)); END rtl; Zähler mit einem Prozess Takt und Logik in einem Prozess (möglichst vermeiden)

28 School of Engineering Up/down Zähler

29 School of Engineering Up = 0 Up = 1 Vorwärts/Rückwärtszähler

30 School of Engineering IF reset = '1' THEN cnt_folge 0THEN cnt_folge <= cnt_gegenwart - 1 ; ELSE cnt_folge <= 9; END IF; END IF; END IF; Geschachtelte if-else statements beim up/down counter

31 School of Engineering IF reset = '1' THEN cnt_folge 0 THEN cnt_folge <= cnt_gegenwart - 1 ; ELSE cnt_folge <= 9; END IF ; END IF; END IF ; Geschachtelte if-else statements beim up/down counter

32 School of Engineering IF reset = '1' THEN cnt_folge 0THEN cnt_folge <= cnt_gegenwart - 1 ; ELSE cnt_folge <= 9; END IF; END IF ; END IF ; Geschachtelte if-else statements beim up/down counter

33 School of Engineering Mux Diagramm UP-Down Zähler

34 School of Engineering Zähler mit nicht gewichteten Code

35 School of Engineering NQ(2)Q(1)Q(0)N+1Q(2)Q(1)Q(0) 0000-> Zustandsfolgetabelle Zähler in Graycode

36 School of Engineering Zustand Graycode Zustandsdiagramm des Gray Zählers

37 School of Engineering 37.q.d.q.d.q.d gray_out(0) gray_out(1) gray_out(2) clk L0 L1 L2.ar reset gray_gegenwart(0) gray_folge(0) gray_folge(1) gray_folge(2) gray_gegenwart(1) gray_gegenwart(2) Gegenwärtiger Zustand Folge Zustand Blockschaltplan Gray Zähler

38 School of Engineering logik: Prozess flip_flops: Prozess gray_gegenwart gray_folge clk reset 4 4 Prozesse des Gray Zählers

39 School of Engineering 39 gray_logic: PROCESS (gray_gegenwart) BEGIN CASE gray_gegenwart IS WHEN "000"=> gray_folge gray_folge gray_folge gray_folge gray_folge gray_folge gray_folge gray_folge <= "000"; END CASE; END PROCESS gray_logic; Gegenwärtiger Zustand Folge Zustand Logik Process des Gray Zähler

40 School of Engineering 40 ARCHITECTURE rtl OF graycnt IS signal gray_gegenwart: std_logic_vector(2 downto 0) signal gray_folge: std_logic_vector(2 downto 0); BEGIN gray_out <= gray_gegenwart ; count: PROCESS (clk, reset) BEGIN IF reset = '1' THEN gray_gegenwart <= "000"; ELSIF clk'EVENT AND clk = '1' THEN gray_gegenwart <= gray_folge; END IF; END PROCESS count; Gegenwärtiger Zustand Folge Zustand Getakteter Process des Gray Zählers


Herunterladen ppt "School of Engineering Synthetisierbares VHDL Regeln & Empfehlungen."

Ähnliche Präsentationen


Google-Anzeigen