Anfängerfrage zu FSMs

Gast #1977594
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;
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.