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

25
School of Engineerin g VHDL 7: Automaten 1

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

Page 1: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

School ofEngineering

VHDL 7: Automaten 1

Page 2: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

School ofEngineeringBlockdiagramm:

Vorwärts/Rückwärtszähler

QD

!Q

QD

!Q

QD

!Q

Q0

Q1

Q2

Takt

E

Page 3: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD 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

Page 4: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

Page 5: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

Page 6: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

Page 7: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

School ofEngineering

L1 L2 L3 L4

Blinker links Blinker rechts

Bremse

Beispiel: Knightrider FSM

Page 8: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 9: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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)

Page 10: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

School ofEngineering

led2 led3

brms

led4

idle

led1

Definition der unterscheidbarenZustände

Page 11: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 12: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 13: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 14: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 15: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 16: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 17: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 18: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 19: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 20: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 21: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 22: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 23: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 24: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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

Page 25: School of Engineering VHDL 7: Automaten 1. School of Engineering Blockdiagramm: Vorwärts/Rückwärtszähler QD !Q QD QD Q0 Q1 Q2 Takt E.

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