School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm:...

Post on 06-Apr-2015

108 views 2 download

Transcript of School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm:...

School ofEngineering

VHDL 7: Automaten 1

School ofEngineeringBlockdiagramm:

Vorwärts/Rückwärtszähler

QD

!Q

QD

!Q

QD

!Q

Q0

Q1

Q2

Takt

E

School ofEngineeringMoore Automat

Q

!Q

AnsteuerLogik

n = Anzahlder FFs

n

Takt

nAusgangs-

Logik

Et

Et = Eingangsvektor

Zt = Zustandssvektor zum gegenwärtigen Zeitpunkt t

Zt+1 = Zustandssvektor nach dem Taktimpuls

Zt

Zt+1 = (Zt, Et)At = (Zt)

m

Gegenwärtiger(Aktueller) Zustand

Folge Zustand

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

School ofEngineering

Knightrider Moore

aktueller_zustand

clk

bl_links

bl_rechts

bremse

Steuer-logik

Ausgangslogik

QD

!Q

n

folge_zustand

Led_out(1)

Led_out(2)

Led_out(3)

Led_out(4)

reset

School ofEngineering

Eingänge und Ausgänge

bl_links

bl_rechts

bremse

reset

KnightriderAutomat

clk

Led_out(1)

Led_out(2)

Led_out(3)

Led_out(4)

School ofEngineering

led2 led3

brms

led4

idle

led1

Definition der unterscheidbarenZustände

School ofEngineering

led2 led3

brms

led4

idle

led1

bl_rechts = ‚1‘

bl_links = ‚1‘

bremsen = ‚1‘

bl_rechts = ‚0‘bl_links = ‚0‘

bremsen = ‚0‘

Ermitteln der Zustandsübergänge

School ofEngineering

led2 led3

brms

led4

idle

led1

bl_rechts = ‚1‘

bl_links = ‚1‘

bremsen = ‚1‘bl_rechts = ‚0‘bl_links = ‚0‘

bremsen = ‚0‘

Ermitteln der Zustandsübergänge

School ofEngineering

led2

brms

led4

idle

led1

bl_rechts = ‚1‘

bl_links = ‚1‘

bremsen = ‚1‘bl_rechts = ‚0‘bl_links = ‚0‘

bremsen = ‚0‘

Ermitteln der Zustandsübergänge

School ofEngineering

led2 led3

brms

led4

idle

led1

bl_rechts = ‚1‘bl_links = ‚1‘

bremsen = ‚1‘

bl_rechts = ‚0‘bl_links = ‚0‘

bremsen = ‚0‘

Ermitteln der Zustandsübergänge

School ofEngineering

led2 led3

brms

led4

idle

led1

bl_rechts = ‚1‘ bl_links = ‚1‘

bremsen = ‚1‘

bl_rechts = ‚0‘bl_links = ‚0‘

bremsen = ‚0‘

Ermitteln der Zustandsübergänge

School ofEngineering

led2 led3

brms

led4

idle

led1

bl_rechts = ‚1‘

bl_links = ‚1‘

bremsen = ‚1‘

bl_rechts = ‚0‘bl_links = ‚0‘

bremsen = ‚0‘

Ermitteln der Zustandsübergänge

School ofEngineering

led2 led3

brms

led4

idle

led1

Blinker links=0blinker rechts=0

bremesen=0

Blinker links=0blinker rechts=0

bremesen=0

Blinker rechts=1Blinker rechts=1 Blinker rechts=1

Blinker rechts=1

Reset

Blinker links = 1

Blinker links = 1Blinker links = 1Blinker links = 1

Blinker links = 1

Bremsen=1 Bremsen=1

Bremsen=1

Zustandsübergangsdiagramm des Knightriders

School ofEngineering

Zustand Q2 Q1 Q0

idle 0 0 0

led1 1 0 0

led2 1 1 0

led3 0 1 1

led4 0 0 1

brms 1 1 1

undef1 1 0 1

undef2 0 1 0

Zustandscodierung

School ofEngineering

led2 led3

brms

led4

idle

led1

Blinker links=0blinker rechts=0

bremesen=0

Blinker links=0blinker rechts=0

bremesen=0

Blinker rechts=1Blinker rechts=1 Blinker rechts=1

Blinker rechts=1

Reset

Blinker links = 1

Blinker links = 1Blinker links = 1Blinker links = 1

Blinker links = 1

Bremsen=1 Bremsen=1

Bremsen=1000 111

100 110 011 001

Zustandsübergangsdiagramm des Knightriders

School ofEngineering

ENTITY knightrider IS

PORT(clk,reset, bl_links, bl_rechts, bremse: IN std_logic;led_out : OUT std_logic_vector(4 downto 1));

END knightrider;

ARCHITECTURE rtl OF knightrider IS

SIGNAL folge_zustand : std_logic_vector(2 downto 0);SIGNAL aktueller_zustand : std_logic_vector(2 downto 0);

--Zustands KodierungCONSTANT state_idle : std_logic_vector(2 downto 0) := "000";CONSTANT state_led1 : std_logic_vector(2 downto 0) := "100";CONSTANT state_led2 : std_logic_vector(2 downto 0) := "110";CONSTANT state_led3 : std_logic_vector(2 downto 0) := "011";CONSTANT state_led4 : std_logic_vector(2 downto 0) := "001";CONSTANT state_bremsen : std_logic_vector(2 downto 0) := "111";

BEGIN

Zustandsübergangsdiagramm des Knightriders

School ofEngineering

Aktueller Zustand

clk

bl_links

bl_rechtsbremse

Steuer-logik

Ausgangslogik

QD

!Q

nFolge

ZustandLed_out(1)

Led_out(2)

Led_out(3)

Led_out(4)reset

SteuerLogik

Prozess

GetakterProzess

moore_gegenwart

moore_folge

clk

reset

4

4

AusgangsProzess

Eingänge

Prozesse des Automaten

School ofEngineering

clocked: PROCESS (clk, reset)

BEGIN

IF reset = '1' THEN

aktueller_zustand <= "000";

ELSIF clk'EVENT AND clk = '1' THEN

aktueller_zustand <= folge_zustand;

END IF;

END PROCESS clocked;

Getakteter Process des Knightrider

School ofEngineering

knight_logic: PROCESS (aktueller_zustand, bl_links, bl_rechts, bremse) BEGINCASE aktueller_zustand ISWHEN state_idle =>

IF bremse = '1' THEN folge_zustand <= state_bremsen;ELSIF bl_links = '1' THEN folge_zustand <= state_led4;ELSIF bl_rechts = '1‘ THEN folge_zustand <= state_led1;ELSE folge_zustand <= state_idle;END IF;

WHEN state_led1 => IF bremse = '1‚ THEN folge_zustand <= state_bremsen;ELSIF bl_links = '1' THEN folge_zustand <= state_led4;ELSIF bl_rechts = '1‚ THEN folge_zustand <= state_led2;ELSE folge_zustand <= state_idle;END IF;

.

.

WHEN OTHERS => folge_zustand <= state_idle;END CASE;

END PROCESS knight_logic;

Steuer Logik des Knightrider Automaten

School ofEngineering

aktueller_zustand

clk

bl_links

bl_rechts

bremse

Steuer-logik

Ausgangslogik

QD

!Q

n

folge_zustand

Led_out(1)

Led_out(2)

Led_out(3)

Led_out(4)

reset

Ausgangslogik des Knightrider Automaten

25

School ofEngineering

knight_ausg: PROCESS (aktueller_zustand)

BEGINCASE aktueller_zustand IS

WHEN state_led1 => led_out <= "1000";WHEN state_led2 => led_out <= "0100";WHEN state_led3 => led_out <= "0010";WHEN state_led4 => led_out <= "0001";WHEN state_bremsen => led_out <= "1111";WHEN OTHERS => led_out <= "0000";

END CASE;

END PROCESS knight_ausg;

Ausgangslogik des Knightriders