Forum: FPGA, VHDL & Co. Anfängerfrage zu FSMs


von KaiNX (Gast)


Lesenswert?

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;

von mac4ever (Gast)


Lesenswert?

Ich würde mir beide Varianten im RTL-Viewer anschauen. Da es sich um 
eine Statemachine handelt, kannst du dir auch die Zustandsgleichungen 
anschauen, die der Synthesizer dir bastelt.

Warum bei der "überflüssigen" Zuweisung eine LUT mehr benötigt wird, 
würde ich so erklären: Es gibt eine Bedingung mehr die dem Signal 
"state" den entsprechenden Zustand zuweist. Das muss folglich irgendwo 
auskodiert werden -> am besten in einer LUT.

Wie gesagt, schau dir mal die Resultate auf der RTL-Ebene an und 
vergleiche beide.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.