www.mikrocontroller.net

Forum: FPGA, VHDL & Co. finite state machine


Autor: nikolaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

ich will ein kleines projekt machen. zu der angabe wurde mir empfohlen
eine finite state machine zu machen.

kennt vielleicht jemand ein gutes tutorial auf deutsch mit beispielen
was eine fsm ist

mfg

Autor: breti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

also das zählt zu den grundlegendsten Grundlagen. Bemüh mal google und
du wirst sofort fündig.

Gruß,
       Thomas

Autor: Christoph Kessler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine beliebte Aufgabe für den Anfang ist die Ampelsteuerung auf einer
Modellbahnanlage. Die Hersteller von CPLDs und FPGAs stellen oft solche
Applikationen zur Verfügung, schau mal bei www.xilinx.com oder
www.altera.com
73
Christoph

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nich lange um den heißen Brei geredet, hier ist mal ein Beispiel
für eine simple FSM mit 3 States, die auf ein Startsignal
wartet und dann 2 Bytes nacheinander auf einem Port ausgibt :

type STATE_TYPE is (IDLE, B1, B2); -- FSM hat 3 States
signal state : STATE_TYPE; -- Signal, welches den aktuellen State
speichert

-- irgendwelche Datenbytes
constant DATA1 : std_logic_vector(7 downto 0) := x"12";
constant DATA2 : std_logic_vector(7 downto 0) := x"FF";

process(reset, clk)
begin
   if reset='1' then
      state <= IDLE;

   elsif rising_edge(clk) then

      case state is -- in welchem State sind wir gerade ?

        when IDLE => -- wir warten hier auf den Startschuss
           if start='1' then -- jetzt wirds Zeit, was zu tun
              state <= B1;
              d_out <= DATA1; -- schieb das 1. Byte zum Port d_out
           end if;

        when B1 =>
           state <= B2;
           d_out <= DATA2; -- und jetzt das 2. Byte

        when B2 =>
           if acknowledge='1' then -- eine Bestätigung abwarten
              state <= IDLE;
           end if;
      end case;
   end if;
end process;

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder, wie es einem in der Schule beigebracht wird, noch mal das obige
Beispiel in drei Prozesse Eingabe, Zustandsspeicher und Ausgabe.
Wie man sieht, es ist ein Mealy-Automat ;)

type STATE_TYPE is (IDLE, B1, B2); -- FSM hat 3 States
signal state : STATE_TYPE; -- Signal, welches den aktuellen State
speichert
signal new_state: STATE_TYPE;

-- irgendwelche Datenbytes
constant DATA1 : std_logic_vector(7 downto 0) := x"12";
constant DATA2 : std_logic_vector(7 downto 0) := x"FF";

-- Eingabe-Logik
process(acknowledge, start, state)
begin
   case state is
      when IDLE =>
         if start = '1' then
            new_state <= IDLE;
         end if;
      when B1 =>
         new_state <= B2;
      when B2 =>
         if acknowledge = '1' then
            new_state <= IDLE;
         end if;
      when others => new_state <= IDLE;
   end case;
end process

-- Zustandsspeicher
process(reset, clk, new_state)
begin
   if reset = '1' then
      state <= IDLE;
   elsif clk = '1' and clk'event then
      state <= new_state;
   end if;
end process;

-- Ausgabe-Logik
process(state, start)
begin
   case state is
      when IDLE =>
         if start = '1' then
            d_out <= DATA1;
         end if;
      when B1 =>
         d_out <= DATA2;
      when others => null;
   end case;
end process;

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alex
gibs zu, das Schulbeispiel ist komplizierter als es für
die Praxis nötig ist .... :-)))

Autor: nikolaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

danke für eure schnellen antworten.

@fpga user
dein bsp ist schon mal nicht schlecht nur weiß ich nicht genau was da
gemacht wurde und wie das hergeleitet wurde.

@alex
auf diese art habe ich auch gelernt vhdl zu programmieren.

jetzt wurde mir gesagt dass ich ein bsp. mit fsm lösen sollte.

mich interessiert jetzt was der unterschied zwischen prozessen und fsm
ist und wie man ein fsm beispiel löst. angeblich geht das mit
irgendwelchen kreisen.

kennt vielleicht jemand eine gute doku dazu

Autor: Christoph Kessler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das geht mit Kringeln und Bögen... eine Statemachine oder auf Deutsch
Zustandsdiagramm ist eine Möglichkeit, einen Programmablauf
darzustellen, ähnlich wie ein Flußdiagramm. Ein einfacher
Vier-Bit-Zähler hat beispielsweise 16 Zustände nämlich die Zahlenwerte
von 0 bis 15. Das Zustandsdiagramm ist sehr einfach, jeder Zustand ist
ein Kreis, der mit einer der 16 Zahlen nummeirert ist, und von Kreis
Nr. 0 geht ein gebogener Pfeil zu Zustand Nr.1 usw. Von Zustand 15
gehts wieder zu Nr. 0
Ein Reseteingang sorgt schon für einige weitere Pfeile, die alle auf
Nr.0 enden.
Neben jedem Pfeil wird die Bedingung beschriftet, unter der dieser
Zustandsübergang stattfindet.

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

schau mal bei Wikipedia vorbei:
http://de.wikipedia.org/wiki/Automat_%28Informatik%29

Feadi

Autor: Michael Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.