Hallo,
ich soll eine FSM(Finite State Machine) programmieren, die 4
aufeinanderfolgende "0en" oder "1en" erkennt, zum erzeugen der "0en" und
"1en" wird sw(0) benutzt, zur Vorgabe des Taktes key(0) und mit key(1)
soll das ganze geresetet werden! Wenn die Signalfolge erkannt wurde,
wird ledg(0) auf "1" gesetzt!
Mein Problem: wie soll ich den RESET einfügen?
1 | library ieee;
|
2 | use ieee.std_logic_1164.all;
|
3 |
|
4 | entity Test is
|
5 | port( key : in std_logic_vector(3 downto 0);
|
6 | sw : in std_logic_vector (9 downto 0);
|
7 | ledg : out std_logic_vector (3 downto 0));
|
8 | end Test;
|
9 |
|
10 |
|
11 | architecture a of Test is
|
12 | type zustand is (a, b, c, d, e, f, g, h, i); --Zustände
|
13 | signal s, t: zustand; signal x: std_logic;-- s ist aktueller Zustand, t ist naechster Zustand
|
14 |
|
15 | begin
|
16 |
|
17 |
|
18 |
|
19 | process(sw(0), s, key(0)) begin -- Berechnung des neuen Zustands/Ausgangs
|
20 | case s is
|
21 | when a => if sw(0) = '0' then t <= b; x <= '0'; else t <= f; end if;
|
22 |
|
23 | when b => if sw(0) = '0' then t <= c; x <= '0'; else t <= f; end if;
|
24 | when c => if sw(0) = '0' then t <= d; x <= '0'; else t <= f; end if;
|
25 | when d => if sw(0) = '0' then t <= e; x <= '0'; else t <= f; end if;
|
26 | when e => if sw(0) = '0' then t <= e; x <= '1'; else t <= f; end if;
|
27 |
|
28 | when f => if sw(0) = '1' then t <= b; x <= '0'; else t <= g; end if;
|
29 | when g => if sw(0) = '1' then t <= b; x <= '0'; else t <= h; end if;
|
30 | when h => if sw(0) = '1' then t <= b; x <= '0'; else t <= i; end if;
|
31 | when i => if sw(0) = '1' then t <= b; x <= '1'; else t <= i; end if;
|
32 | end case;
|
33 |
|
34 |
|
35 |
|
36 | end process;
|
37 |
|
38 |
|
39 | process(key) begin -- Übernahme des neuen Zustands/Ausgangs
|
40 | if falling_edge(key(0)) then s <= t; ledg(0) <= x; end if;
|
41 | --JETZT DER RESET:
|
42 | if falling_edge(key(1)) then s <= a; end if; -- HIER BEKOMM ICH DEN FEHLER "couldn't implement registers for assignements on this clock edge"
|
43 | end process;
|
44 | end a;
|
Vielen Dank im Vorraus!