Post on 06-Apr-2015
School ofEngineering
VHDL 3: Sequential Statements(Process)
School ofEngineering
Inhalt
● Sequential Statements○Process○ If Statement○Case Statement○Wait○Assert
School ofEngineering
Process
School ofEngineering
ARCHITECTURE comb OF rsff IS
BEGIN
q <= not (r or qn);
qn <= not (s or q);
END comb;
Architecture mit Concurrent Statements
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
School ofEngineering
detect_overflow: process (zaehler)begin
end process detect_overflow;
if (zaehler > “11111110“) thenoverflow <= ‘1‘;
end if;
overflow <= ‘0‘;
Beispiel Process
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
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
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
School ofEngineering
Ablauf von Process-en
De
ltaz
eit
(Re
ch
ne
rzei
t)
Simulationszeit
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.
School ofEngineering
Sequentielle Statements
(Statements im Process)
School ofEngineering
If-Then-Else Statement
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.
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
School ofEngineeringWahrheitstabelle
Eingänge Ausgänge
primär sekundär drehzahl grün gelb orange rot
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
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
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
School ofEngineering
if condition_1 then sequential statementselsif condition_2 then sequential statementselse sequential statementsend if ;
IF-THEN-ELSE statement
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
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
School ofEngineering
CASE Statement
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
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
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;
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
School ofEngineering
case eingang iswhen wähler => sequential statementswhen wähler => sequential statements
end case;
Case statement
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.
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]
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]
School ofEngineering
Sequentiell(innerhalb Prozess)
priorisierend If-Then-Else
nicht priorisierend Case
Übersicht über mögliche Fallunterscheidungen in VHDL
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;
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
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
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
School ofEngineering
Testbench
steig
clk
resetflin
Logische Funktion
StimulusGenerator
ErwarteteErgebnisse
Simulation
Assert
testbench.vhd
dut.vhd
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
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
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