School of Engineering VHDL 3: Sequential Statements (Process)
-
Upload
anneken-kerlin -
Category
Documents
-
view
108 -
download
1
Transcript of School of Engineering VHDL 3: Sequential Statements (Process)
![Page 1: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/1.jpg)
School ofEngineering
VHDL 3: Sequential Statements(Process)
![Page 2: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/2.jpg)
School ofEngineering
Inhalt
● Sequential Statements○Process○ If Statement○Case Statement○Wait○Assert
![Page 3: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/3.jpg)
School ofEngineering
Process
![Page 4: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/4.jpg)
School ofEngineering
ARCHITECTURE comb OF rsff IS
BEGIN
q <= not (r or qn);
qn <= not (s or q);
END comb;
Architecture mit Concurrent Statements
![Page 5: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/5.jpg)
School ofEngineering
ARCHITECTURE comb OF rsff IS
BEGIN
END comb;
P1:Process(xxx)Begin…End process p1;
P2: Process(xxx)Begin…End process p2;
Concurrent Statements
Architecture mit Process
![Page 6: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/6.jpg)
School ofEngineering
detect_overflow: process (zaehler)begin
end process detect_overflow;
if (zaehler > “11111110“) thenoverflow <= ‘1‘;
end if;
overflow <= ‘0‘;
Beispiel Process
![Page 7: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/7.jpg)
School ofEngineering
•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.
Process
![Page 8: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/8.jpg)
School ofEngineering
Prozess_name: process (sensitivity liste)deklarationen (variablen etc.)
begin sequentielle statements
end process prozess_name;
Sequentiellestatements
Sensitivity ListeBenennung
signal overflow : std_logic;signal zaehler : std_logic_vector(7 DOWNTO 0);
Eingangssignal
Ausgangszuweisung
detect_overflow: process (zaehler)begin
overflow <= ‘0‘;if (zaehler > “11111110“) then
overflow <= ‘1‘; end if;
end process detect_overflow;
Ausgangssignal
Process
Default Statement
![Page 9: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/9.jpg)
School ofEngineering
P1: process (reset,A,M)Begin if reset = ‘ 1‘ then next_q <= ‘ 0‘; else
next_q <= A and M; end if;end process P1;
P2: process (clock,next_q)Begin if clock‘event and clock= ‘ 1‘ then q <= next_q; end if;end process P2;
Process 1
Process 2
Die Prozesse selbst sind ein„concurrent statement“ undlaufen innerhalb der Architekturgleichzeitig ab
Sequentiellestatements: Innerhalb einesProzesses laufenStatements sequentiell ab.
Ablauf von Process-en
![Page 10: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/10.jpg)
School ofEngineering
Ablauf von Process-en
De
ltaz
eit
(Re
ch
ne
rzei
t)
Simulationszeit
![Page 11: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/11.jpg)
School ofEngineering
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 imProzess zugewiesenen Signale aktualisiert, danach „stirbt“der Process.
• Hat ein Process keine Sensitivity Liste, ist er immer aktiv.
![Page 12: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/12.jpg)
School ofEngineering
Sequentielle Statements
(Statements im Process)
![Page 13: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/13.jpg)
School ofEngineering
If-Then-Else Statement
![Page 14: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/14.jpg)
School ofEngineeringBeispiel für Priorität:
Alarmpanel im KKW
In einem Kernkraftwerk soll ein Alarmpanel auftretende Störungen in Alarmstufeneinteilen (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 demAlarm mit der grössten Dringlichkeit. Wenn z.B. Sekundärkreislauf und Generatordrehzahl Alarm melden, dann ist die Alarmstufe orange.
![Page 15: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/15.jpg)
School ofEngineering
Entity des Alarmpanels
Druck Primärkreislauf
Druck Sekundärkreislauf
Generatordrehzahl gering
rot
orange
gelb
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
![Page 16: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/16.jpg)
School ofEngineeringWahrheitstabelle
Eingänge Ausgänge
primär sekundär drehzahl grün gelb orange rot
![Page 17: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/17.jpg)
School ofEngineering
Unvollständige Wahrheitstabelle
Eingänge Ausgänge
primär sekundär drehzahl grün gelb orange rot
1 x x 0 0 0 1
0 1 x 0 0 1 0
0 0 1 0 1 0 0
0 0 0 1 0 0 0
![Page 18: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/18.jpg)
School ofEngineering
primar
sekundar
drehzahl
rot
orange
gelb
grün
ENTITY kkw IS PORT( primar,sekundar,drehzahl : IN std_logic; rot,orange,gelb,gruen : OUT std_logic );END kkw;
Entity des Alarmpanels
![Page 19: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/19.jpg)
19
School ofEngineering
LIBRARY ieee;USE ieee.std_logic_1164.all;
ARCHITECTURE rtl OF kkw IS
BEGIN p1: PROCESS (primar, sekundar, drehzahl) BEGIN
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
Prioritätsencoder mit „IF-THEN-Else“ Statement
Eingangs Bedingung
![Page 20: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/20.jpg)
School ofEngineering
if condition_1 then sequential statementselsif condition_2 then sequential statementselse sequential statementsend if ;
IF-THEN-ELSE statement
![Page 21: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/21.jpg)
School ofEngineering
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
![Page 22: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/22.jpg)
School ofEngineering
IF Then ELSE
0
10
0
10
0
10
0
10
0
10
orange~0
gelb~1gelb~0
gruen~1gruen~0
primar
sekundar
drehzahl
rot
orange
gelb
gruen
![Page 23: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/23.jpg)
School ofEngineering
CASE Statement
![Page 24: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/24.jpg)
School ofEngineering
Komb.Logik 1
Gray(0)
Komb.Logik 2
Gray(1)
Komb.Logik 3
Gray(2)
Binary(0)
Binary(1)
Binary(2)
Beispiel: Codewandler Binary-Gray
![Page 25: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/25.jpg)
School ofEngineering
Gray
0 0 0
0 0 1
0 1 1
0 1 0
1 1 0
1 1 1
1 0 1
1 0 0
0 0 0
BCD
0000
1
1
0
0
1
1
0
0
117
016
115
014
103
002
101
000
Wahrheitstabelle Codewandler Binary-Gray
![Page 26: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/26.jpg)
School ofEngineering
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;
![Page 27: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/27.jpg)
School ofEngineering
Wählerbcd2gray: process (bcd)Begin
case bcd iswhen “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;
Eingangssignal
Ausgangs Zuweisung
Code Wandler mit CASE statement
![Page 28: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/28.jpg)
School ofEngineering
case eingang iswhen wähler => sequential statementswhen wähler => sequential statements
end case;
Case statement
![Page 29: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/29.jpg)
School ofEngineering
Case statement
• Nicht priorisierend, jede Zeile wird gleich behandelt • Jede mögliche Eingangskombination muss vorkommen fallsam 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 zumbeschreiben von Automaten verwendet.
![Page 30: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/30.jpg)
School ofEngineering
Generic View Case Statement
SEL[1..0]
DATA[3..0]OUT
MUX
SEL[1..0]
DATA[3..0]OUT
MUX
Mux0
4' h6 --
Mux1
4' h6 --
binary[2..0]gray[2..0]
![Page 31: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/31.jpg)
School ofEngineering
Technology Map von Case
DATAC
DATADCOMBOUT
LOGIC_CELL_COMB (0FF0)
DATAC
DATADCOMBOUT
LOGIC_CELL_COMB (0FF0)
Mux1~9
Mux0~9
gray[0]
gray[1]
gray[2]
binary[0]
binary[1]binary[2]
![Page 32: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/32.jpg)
School ofEngineering
Sequentiell(innerhalb Prozess)
priorisierend If-Then-Else
nicht priorisierend Case
Übersicht über mögliche Fallunterscheidungen in VHDL
![Page 33: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/33.jpg)
School ofEngineering
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)
BEGIN
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;
![Page 34: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/34.jpg)
School ofEngineering
Concurrent(ausserhalb Prozess)
Sequential(innerhalb Prozess)
overflow <= ‘0‘ ;..
overflow <= ‘1‘ ;
Nicht möglich – Fehlermeldung
overflow <= ‘0‘ ;..
overflow <= ‘1‘ ;
Möglich – Software arbeitet Zeile für Zeile ab das Signal wird erst am Ende des Prozesses aktualisiert
Mehrmalige Zuweisung von Signalen
![Page 35: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/35.jpg)
School ofEngineering
wait until condition;
wait on signal_list;
wait for time;
wait;
Wait until CLK= ‘1‘;
Wait for 10 nS;
Wait on A,B;
Warten bis ein bestimmter Zustand eintritt
Warten bis ein bestimmte(s) Signal(e) wechselt
Eine bestimmte Zeit warten
Unbestimmt Warten
Beispiele:
Wait Statements
![Page 36: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/36.jpg)
School ofEngineering
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
![Page 37: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/37.jpg)
School ofEngineering
Testbench
steig
clk
resetflin
Logische Funktion
StimulusGenerator
ErwarteteErgebnisse
Simulation
Assert
testbench.vhd
dut.vhd
![Page 38: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/38.jpg)
School ofEngineering
Assert Statement
assert condition report string severity severity_level ;
Mögliche level sind:notewarningerrorfailure (bricht Simulation ab)
Beispiele:
• „ASSERT“ erlaubt bei einer bestimmten Bedingung im Simulations-programm einen Bericht auszugeben oder das Simulationsprogrammganz zu stoppen.• Assert wird bei der Synthese ignoriert.
assert (A = B) report “A ungleich B“ severity error ;
assert false report “Test programm beendet“ severity note ;
Falls „Condition“ nicht erfüllt,wird ein Report generiert
![Page 39: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/39.jpg)
School ofEngineering
STIMULUS: process begin bcd <= "000" ; wait for 10 nS; assert (gray = "000") report "expected „000“ " severity failure; wait for 100 nS;
bcd <= "111"; wait for 10 nS; assert (gray = "100") report "expected „100“ " severity failure; wait for 100 nS;
assert false report " --- ALL TESTS PASS ---" severity note;
wait; end process;
Testprogramm zum Austesten desbcd-gray Kodewandlers
![Page 40: School of Engineering VHDL 3: Sequential Statements (Process)](https://reader035.fdocuments.us/reader035/viewer/2022062417/55204d7649795902118cbaf4/html5/thumbnails/40.jpg)
School ofEngineeringCompile Script (compile.do) für funktionale
Simulation
# create work library
vlib work
# compile project files
vcom -2002 -explicit -work work ../../source/flanken.vhd
vcom -2002 -explicit -work work ../../source/tb_flanken.vhd
# run the simulation
vsim -t 1ns -lib work work.tb_flanken
do ../scripts/wave.do
run 1800.0 nsStartet Simulator
Bildet Workverzeichniss „work“
Compiliert VHDL und legt es im „work“ ab
Lässt Simulator für 1800 ns laufen
Öffnet Waveform Betrachter