Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

VHDL 3: Sequential Statements (Process)

Ähnliche Präsentationen


Präsentation zum Thema: "VHDL 3: Sequential Statements (Process)"—  Präsentation transkript:

1 VHDL 3: Sequential Statements (Process)

2 Sequential Statements
Inhalt Sequential Statements Process If Statement Case Statement Wait Assert

3 Process

4 Architecture mit Concurrent Statements
ARCHITECTURE comb OF rsff IS BEGIN q <= not (r or qn); qn <= not (s or q); END comb;

5 Architecture mit Process
ARCHITECTURE comb OF rsff IS BEGIN END comb; Concurrent Statements P1:Process(xxx) Begin … End process p1; P2: Process(xxx) Begin End process p2;

6 detect_overflow: process (zaehler) begin
Beispiel Process detect_overflow: process (zaehler) begin end process detect_overflow; overflow <= ‘0‘; if (zaehler > “ “) then overflow <= ‘1‘; end if;

7 Process Ein Process ist ein „Concurrent“ Statement welches eine Ansammlung von „Sequentiellen“ Statements enthält. Prozesse können gleichzeitig mit anderen „Concurrent“ Statements und Prozessen kommunizieren.

8 Sequentielle statements
Process Prozess_name: process (sensitivity liste) deklarationen (variablen etc.) begin sequentielle statements end process prozess_name; signal overflow : std_logic; signal zaehler : std_logic_vector(7 DOWNTO 0); Benennung Eingangssignal Sensitivity Liste detect_overflow: process (zaehler) begin overflow <= ‘0‘; if (zaehler > “ “) then overflow <= ‘1‘; end if; end process detect_overflow; Default Statement Sequentielle statements Ausgangszuweisung Ausgangssignal

9 Ablauf von Process-en P1: process (reset,A,M) Begin
if reset = ‘ 1‘ then next_q <= ‘ 0‘; else next_q <= A and M; end if; end process P1; Sequentielle statements: Innerhalb eines Prozesses laufen Statements sequentiell ab. Process 1 Die Prozesse selbst sind ein „concurrent statement“ und laufen innerhalb der Architektur gleichzeitig ab P2: process (clock,next_q) Begin if clock‘event and clock= ‘ 1‘ then q <= next_q; end if; end process P2; Process 2

10 Deltazeit (Rechnerzeit)
Ablauf von Process-en Deltazeit (Rechnerzeit) Simulationszeit

11 Process In einem Process werden Anweisungen sequentiell (der Reihenfolge nach) abgearbeitet. Hat der Process eine Sensitivity Liste, wird er „zum Leben erweckt“, sobald sich ein Signal, dass sich auf der sensitivity Liste befindet, verändert. Nach Ausführung der letzten Anweisung werden alle im Prozess zugewiesenen Signale aktualisiert, danach „stirbt“ der Process. Hat ein Process keine Sensitivity Liste, ist er immer aktiv.

12 Sequentielle Statements
(Statements im Process)

13 If-Then-Else Statement

14 Beispiel für Priorität: Alarmpanel im KKW
In einem Kernkraftwerk soll ein Alarmpanel auftretende Störungen in Alarmstufen einteilen (Alarmstufe 3 höchste Dringlichkeit, Alarmstufe 1 niedrigste Dringlichkeit). Es gibt drei Hauptgefahrenquellen, die nach Ihrer Dringlichkeit eingeteilt sind (siehe Tabelle). Am Ausgang der Schaltung befinden sich 4 Lampen, die die jeweiligen Alarmstufen anzeigen. Bei einem Druckabfall im Primärkühlkreislauf würde Alarmstufe 3 (rot) aufleuchten. Bei einem Druckabfall im Sekundärkühlkreislauf würde Alarmstufe 2 (orange) aufleuchten. Bei verringerter Generatordrehzahl gibt es nur Alarmstufe 1 (gelb). Meldet keiner der Eingaenge einen Alarm, so leuchtet die gruene Lampe auf. Ist mehr als ein Alarmsignal aktiv, so richtet sich die Alarmstufe immer nach dem Alarm mit der grössten Dringlichkeit. Wenn z.B. Sekundärkreislauf und Generatordrehzahl Alarm melden, dann ist die Alarmstufe orange.

15 Entity des Alarmpanels
rot Druck Primärkreislauf orange Druck Sekundärkreislauf gelb Generatordrehzahl gering grün Störung Signal Alarmstufe Druck im Primärkreislauf primär = 1 Druckabfall Alarm, primär = 0 Druck o.k. rot Druck im Sekundärkreislauf sekundär = 1 Druckabfall Alarm, sekundär = 0 Druck o.k. orange Generator Drehzahl generator = 1 Drezahl Alarm, generator = 0 Drehzahl o.k. gelb Keine Störung grün

16 Wahrheitstabelle Eingänge Ausgänge primär sekundär drehzahl grün gelb
orange rot

17 Unvollständige Wahrheitstabelle
Eingänge Ausgänge primär sekundär drehzahl grün gelb orange rot 1 x

18 Entity des Alarmpanels
rot primar orange sekundar gelb drehzahl grün ENTITY kkw IS PORT( primar,sekundar,drehzahl : IN std_logic; rot,orange,gelb,gruen : OUT std_logic ); END kkw;

19 Prioritätsencoder mit „IF-THEN-Else“ Statement
LIBRARY ieee; USE ieee.std_logic_1164.all; ARCHITECTURE rtl OF kkw IS BEGIN p1: PROCESS (primar, sekundar, drehzahl) IF (primar = '1') THEN rot <= '1'; orange <= '0'; gelb<='0'; gruen <= '0'; ELSIF(sekundar = '1') THEN rot <= '0'; orange <= '1'; gelb<='0'; gruen <= '0'; ELSIF(drehzahl = '1') THEN rot <= '0'; orange <= '0'; gelb<= '1'; gruen <= '0'; ELSE rot <= '0'; orange <= '0'; gelb<= '0'; gruen <= '1'; END IF; END process p1; END rtl; Ausgangs Zuweisungen Eingangs Bedingung

20 IF-THEN-ELSE statement
if condition_1 then sequential statements elsif condition_2 then sequential statements else sequential statements end if ;

21 IF-THEN-ELSE statement
Die erste zutreffende Zeile wird dem Ausgang zugewiesen, alle nachfolgenden fallen heraus. (priorisierend) Bedingungen dürfen sich überlappen if (Y = 5) then ...if (Y <=5) then. „elsif“ und „else“ sind nicht notwendig If –THEN-ELSE statements können nur in einem Process verwendet werden IF-THEN-ELSE statements dürfen verschachtelt werden IF-THEN-ELSE statements sind die „allgemeine“ Form zur Beschreibung von kombinatorischer Logik in VHDL

22 IF Then ELSE

23 CASE Statement

24 Beispiel: Codewandler Binary-Gray
Komb. Logik 1 Gray(0) Binary(1) Binary(2) Komb. Logik 2 Gray(1) Komb. Logik 3 Gray(2)

25 Wahrheitstabelle Codewandler Binary-Gray
BCD Gray 1 1 1 2 1 3 1 1 4 1 5 1 1 6 1 1 7 1 1 1

26 Entity des BCD-Gray Codewandlers
ENTITY bingray IS PORT ( binary : IN std_logic_vector(2 downto 0); gray : OUT std_logic_vector(2 downto 0) ); END bingray;

27 Code Wandler mit CASE statement
Ausgangs Zuweisung bcd2gray: process (bcd) Begin case bcd is when “000“ => gray <= “000“; when “001“ => gray <= “001“; when “010“ => gray <= “011“; when “011“ => gray <= “010“; when “100“ => gray <= “110“; when “101“ => gray <= “111“; when “110“ => gray <= “101“; when OTHERS => gray <= “100“; end case; end process bcd2gray; Wähler Eingangssignal

28 Case statement case eingang is when wähler => sequential statements
when wähler => sequential statements end case;

29 Case statement Nicht priorisierend, jede Zeile wird gleich behandelt
Jede mögliche Eingangskombination muss vorkommen falls am Ende nicht mit „others“ abgeschlossen wird. Keine Eingangskombination darf mehr als 1 x vorkommen Case Statements können nur in einem Process verwendet werden Werden hauptsächlich für Dekodier Funktionen oder zum beschreiben von Automaten verwendet.

30 Generic View Case Statement

31 Technology Map von Case

32 Übersicht über mögliche Fallunterscheidungen in VHDL
Sequentiell (innerhalb Prozess) priorisierend If-Then-Else nicht priorisierend Case

33 ASCII Decoder mit case statement
ARCHITECTURE rtl OF ascii_decoder IS SIGNAL pointer: INTEGER RANGE 0 TO 79; SIGNAL zeichen: STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN comb_decoder : PROCESS(pointer) case pointer IS when 0 => zeichen <= x“48"; when 1 => zeichen <= x“65"; when 2 => zeichen <= x“6c"; when 3 => zeichen <= x“6c"; when 4 => zeichen <= x“6f"; when 5 => zeichen <= x“21"; when OTHERS => zeichen <= x"20"; END case; …. End process;

34 Mehrmalige Zuweisung von Signalen
Concurrent (ausserhalb Prozess) Sequential (innerhalb Prozess) overflow <= ‘0‘ ; . . overflow <= ‘1‘ ; Nicht möglich – Fehlermeldung overflow <= ‘1‘ ; Möglich – Software arbeitet Zeile für Zeile ab das Signal wird erst am Ende des Prozesses aktualisiert

35 Wait Statements wait until condition;
Warten bis ein bestimmter Zustand eintritt wait on signal_list; Warten bis ein bestimmte(s) Signal(e) wechselt wait for time; Eine bestimmte Zeit warten wait; Unbestimmt Warten Beispiele: Wait until CLK= ‘1‘; Wait for 10 nS; Wait on A,B;

36 WAIT Statements WAIT Statements sind sequentielle Statements und dürfen nur im Prozess vorkommen Beim Ausführen des WAIT Statements wird der Process unterbrochen und die zugewiesenen Signale werden aktualisiert Nach Ausführen der WAIT Bedingung wird der Prozess an der Stelle fortgefahren, wo er unterbrochen wurde WAIT ist nicht synthetisierbar

37 Testbench testbench.vhd dut.vhd reset steig flin clk Logische Funktion
Erwartete Ergebnisse reset Assert Stimulus Generator steig flin clk dut.vhd Logische Funktion Simulation

38 Assert Statement assert condition report string severity severity_level ; Mögliche level sind: note warning error failure (bricht Simulation ab) Falls „Condition“ nicht erfüllt, wird ein Report generiert Beispiele: assert (A = B) report “A ungleich B“ severity error ; assert false report “Test programm beendet“ severity note ; „ASSERT“ erlaubt bei einer bestimmten Bedingung im Simulations- programm einen Bericht auszugeben oder das Simulationsprogramm ganz zu stoppen. Assert wird bei der Synthese ignoriert.

39 Testprogramm zum Austesten des bcd-gray Kodewandlers
STIMULUS: process begin bcd <= "000" ; wait for 10 nS; assert (gray = "000") report "expected „000“ " severity failure; wait for 100 nS; bcd <= "111"; assert (gray = "100") report "expected „100“ " severity failure; assert false report " --- ALL TESTS PASS ---" severity note; wait; end process;

40 Compile Script (compile.do) für funktionale Simulation
# create work library vlib work # compile project files vcom explicit -work work ../../source/flanken.vhd vcom explicit -work work ../../source/tb_flanken.vhd # run the simulation vsim -t 1ns -lib work work.tb_flanken do ../scripts/wave.do run ns Bildet Workverzeichniss „work“ Compiliert VHDL und legt es im „work“ ab Startet Simulator Öffnet Waveform Betrachter Lässt Simulator für 1800 ns laufen


Herunterladen ppt "VHDL 3: Sequential Statements (Process)"

Ähnliche Präsentationen


Google-Anzeigen