Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
VHDL 7: Automaten 1
2
Blockdiagramm: Vorwärts/Rückwärtszähler
Q D !Q Q0 Q1 Q2 Takt E
3
d Moore Automat Zt Gegenwärtiger(Aktueller) Zustand At = m (Zt)
Zt+1 = d (Zt, Et) Q Ausgangs- Logik n AnsteuerLogik n n = Anzahl der FFs Et m !Q d Folge Zustand Takt Et = Eingangsvektor Zt = Zustandssvektor zum gegenwärtigen Zeitpunkt t Zt+1 = Zustandssvektor nach dem Taktimpuls
4
Beispiel: Knightrider FSM
Blinker links Blinker rechts Bremse
5
Beispiel: Knightrider FSM
Blinker links Blinker rechts Bremse
6
Beispiel: Knightrider FSM
Blinker links Blinker rechts Bremse
7
Beispiel: Knightrider FSM
Blinker links Blinker rechts Bremse
8
Knightrider Moore n Led_out(1) aktueller_zustand folge_zustand
bl_links D Q Led_out(3) Steuer- logik bl_rechts bremse !Q Led_out(4) reset Ausgangslogik clk
9
Eingänge und Ausgänge Knightrider Automat bl_links Led_out(1)
bl_rechts Led_out(2) Knightrider Automat bremse Led_out(3) reset Led_out(4) clk
10
Definition der unterscheidbaren Zustände
led1 led2 led3 led4 idle brms
11
Ermitteln der Zustandsübergänge
led1 led2 led3 led4 bl_rechts = ‚1‘ bremsen = ‚1‘ idle brms bl_links = ‚0‘ bl_rechts = ‚0‘ bl_links = ‚1‘ bremsen = ‚0‘
12
Ermitteln der Zustandsübergänge
bl_links = ‚1‘ led1 led2 led3 led4 bl_rechts = ‚1‘ bl_links = ‚0‘ bremsen = ‚1‘ bl_rechts = ‚0‘ bremsen = ‚0‘ idle brms
13
Ermitteln der Zustandsübergänge
bl_links = ‚1‘ led1 led2 led4 bl_rechts = ‚1‘ bl_links = ‚0‘ bl_rechts = ‚0‘ bremsen = ‚0‘ bremsen = ‚1‘ idle brms
14
Ermitteln der Zustandsübergänge
bl_links = ‚1‘ bl_rechts = ‚1‘ led1 led2 led3 led4 bl_links = ‚0‘ bl_rechts = ‚0‘ bremsen = ‚0‘ bremsen = ‚1‘ idle brms
15
Ermitteln der Zustandsübergänge
bl_rechts = ‚1‘ bl_links = ‚1‘ led1 led2 led3 led4 bl_links = ‚0‘ bl_rechts = ‚0‘ bremsen = ‚0‘ bremsen = ‚1‘ idle brms
16
Ermitteln der Zustandsübergänge
led1 led2 led3 led4 bl_links = ‚0‘ bl_rechts = ‚1‘ bl_rechts = ‚0‘ bremsen = ‚0‘ bl_links = ‚1‘ idle brms bremsen = ‚1‘
17
Zustandsübergangsdiagramm des Knightriders
Blinker rechts=1 Blinker links = 1 led1 led2 led3 led4 Blinker rechts=1 Blinker rechts=1 Blinker rechts=1 Bremsen=1 Blinker links=0 blinker rechts=0 bremesen=0 idle brms Reset Bremsen=1
18
Zustandscodierung Zustand Q2 Q1 Q0 idle led1 1 led2 led3 led4 brms
led1 1 led2 led3 led4 brms undef1 undef2
19
Zustandsübergangsdiagramm des Knightriders
Blinker rechts=1 Blinker links = 1 led1 led2 led3 led4 100 110 011 001 Blinker rechts=1 Blinker rechts=1 Blinker rechts=1 Blinker links=0 blinker rechts=0 bremesen=0 Bremsen=1 idle brms Reset 000 111 Bremsen=1
20
Zustandsübergangsdiagramm des Knightriders
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 Kodierung CONSTANT 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
21
Prozesse des Automaten
Aktueller Zustand n Folge Zustand Led_out(1) bl_links Steuer- logik D Q Led_out(2) bl_rechts bremse Led_out(3) !Q Led_out(4) reset clk Ausgangslogik moore_folge Eingänge 4 Steuer Logik Prozess Getakter Prozess clk Ausgangs Prozess reset 4 moore_gegenwart
22
Getakteter Process des Knightrider
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;
23
Steuer Logik des Knightrider Automaten
knight_logic: PROCESS (aktueller_zustand, bl_links, bl_rechts, bremse) BEGIN CASE aktueller_zustand IS WHEN 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;
24
Ausgangslogik des Knightrider Automaten
Led_out(1) aktueller_zustand folge_zustand Led_out(2) bl_links D Q Led_out(3) Steuer- logik bl_rechts bremse !Q Led_out(4) reset clk
25
Ausgangslogik des Knightriders
knight_ausg: PROCESS (aktueller_zustand) BEGIN CASE 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;
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.