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
Hi, also das zählt zu den grundlegendsten Grundlagen. Bemüh mal google und du wirst sofort fündig. Gruß, Thomas
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
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;
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;
@Alex gibs zu, das Schulbeispiel ist komplizierter als es für die Praxis nötig ist .... :-)))
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.