Forum: FPGA, VHDL & Co. finite state machine


von nikolaus (Gast)


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

von breti (Gast)


Lesenswert?

Hi,

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

Gruß,
       Thomas

von Christoph Kessler (Gast)


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

von FPGA-User (Gast)


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;

von alex (Gast)


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;

von FPGA-User (Gast)


Lesenswert?

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

von nikolaus (Gast)


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

von Christoph Kessler (Gast)


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.

von Feadi (Gast)


Lesenswert?

Hi,

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

Feadi

von Michael Werner (Gast)


Lesenswert?


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.