school of engineering vhdl 3: sequential statements (process)

40
School of Engineerin g VHDL 3: Sequential Statements (Process)

Upload: anneken-kerlin

Post on 06-Apr-2015

114 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: School of Engineering VHDL 3: Sequential Statements (Process)

School ofEngineering

VHDL 3: Sequential Statements(Process)

Page 2: School of Engineering VHDL 3: Sequential Statements (Process)

School ofEngineering

Inhalt

● Sequential Statements○Process○ If Statement○Case Statement○Wait○Assert

Page 3: School of Engineering VHDL 3: Sequential Statements (Process)

School ofEngineering

Process

Page 4: School of Engineering VHDL 3: Sequential Statements (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

Page 5: School of Engineering VHDL 3: Sequential Statements (Process)

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)

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)

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)

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)

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)

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)

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)

School ofEngineering

Sequentielle Statements

(Statements im Process)

Page 13: School of Engineering VHDL 3: Sequential Statements (Process)

School ofEngineering

If-Then-Else Statement

Page 14: School of Engineering VHDL 3: Sequential Statements (Process)

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)

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)

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)

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)

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)

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)

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)

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)

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)

School ofEngineering

CASE Statement

Page 24: School of Engineering VHDL 3: Sequential Statements (Process)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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