www.mikrocontroller.net

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


Autor: KaiNX (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!
entity test is
  port(
  clk : in std_logic;
  rst : in std_logic;
  led1 : out std_logic);
end entity test;

architecture Behavioral of test is  
  signal cnt: integer range 0 to 7;
  type fsmStates is (s1, s2);
  signal state : fsmStates;
begin
process(clk)
begin
  if clk'event and clk = '1' then
    if rst = '1' then
      state <= s1;
      cnt <= 0;
      led1 <= '0';
    else
    case state is
     when s1 =>
       state <= s1;
       led1 <= '1';
       
       if cnt < 7 then
         cnt <= cnt+1;
       else
         cnt <= 0;
         state <= s2;
       end if;
     
     when s2 =>
       state <= s2;
       led1 <= '0';
             
       if cnt < 7 then
        cnt <= cnt+1;
       else
         cnt <= 1;
         state <= s1;
       end if;
      end case;    
    end if;
  end if;
end process;
  
end Behavioral;

Autor: mac4ever (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.