Moin,
ich hab mal eine Anfängerfrage zum grundsätzlichen FSM Design. Es geht
um die Zuweisung, wenn man in einem Zustand bleiben möchte. Im folgenden
Minimalbeispiel ist mir aufgefallen, dass ein 4LUT weniger benötigt
wird, wenn ich die Zuweisung "state <= s1;" im Zustand s1 weglasse.
Kann mir hier jemand einen Tipp geben, welche Variante besser ist und
evt. auch noch eine Begründung? Ich bin bisher davon ausgegangen, dass
die erneute Zuweisung eigentlich keinen Sinn macht.
Danke!
1 | entity test is
|
2 | port(
|
3 | clk : in std_logic;
|
4 | rst : in std_logic;
|
5 | led1 : out std_logic);
|
6 | end entity test;
|
7 |
|
8 | architecture Behavioral of test is
|
9 | signal cnt: integer range 0 to 7;
|
10 | type fsmStates is (s1, s2);
|
11 | signal state : fsmStates;
|
12 | begin
|
13 | process(clk)
|
14 | begin
|
15 | if clk'event and clk = '1' then
|
16 | if rst = '1' then
|
17 | state <= s1;
|
18 | cnt <= 0;
|
19 | led1 <= '0';
|
20 | else
|
21 | case state is
|
22 | when s1 =>
|
23 | state <= s1;
|
24 | led1 <= '1';
|
25 |
|
26 | if cnt < 7 then
|
27 | cnt <= cnt+1;
|
28 | else
|
29 | cnt <= 0;
|
30 | state <= s2;
|
31 | end if;
|
32 |
|
33 | when s2 =>
|
34 | state <= s2;
|
35 | led1 <= '0';
|
36 |
|
37 | if cnt < 7 then
|
38 | cnt <= cnt+1;
|
39 | else
|
40 | cnt <= 1;
|
41 | state <= s1;
|
42 | end if;
|
43 | end case;
|
44 | end if;
|
45 | end if;
|
46 | end process;
|
47 |
|
48 | end Behavioral;
|