school of engineering vhdl 3: sequential statements (process)

Post on 06-Apr-2015

114 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related