Hallo Leute,
hat jemand ne Ahnung wie man eine FSM auf steigender und fallender
reagieren lässt. Ich bräuchte eine FSM die bei steigender und bei
fallender Taktflanke den Status ändern kann. Gibt es eine einfach
Lösung, oder muss ich den takt mit pll verdoppeln.
Das nachfolgende Beispiel (nur als Test gedacht) funktioniert leider
nicht.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
ENTITY myEntity IS
PORT
(
clk : IN std_logic;
engine : IN std_logic;
detection : OUT std_logic
);
END myEntity;
ARCHITECTURE myEntityArch OF myEntity IS
SIGNAL counter : signed(15 DOWNTO 0);
TYPE fsmstates IS (stop, starting);
SIGNAL fsmstate : fsmstates := stop;
SIGNAL nextfsmstate : fsmstates := stop;
BEGIN
PROCESS (clk)
BEGIN
IF rising_edge(clk) THEN
fsmstate <= nextfsmstate;
END IF;
IF falling_edge (clk) THEN
fsmstate <= nextfsmstate;
END IF;
CASE fsmState IS
WHEN stop =>
IF (engine = '1') THEN
nextfsmstate <= starting;
ELSE
nextfsmstate <= stop;
END IF;
detection <= '0';
WHEN starting =>
IF (engine = '1') THEN
nextfsmstate <= starting;
ELSE
nextfsmstate <= stop;
END IF;
detection <= '1';
WHEN OTHERS =>
detection <= '0';
END CASE;
END PROCESS ;
END myEntityArch;
Danke
@ ThomasM >hat jemand ne Ahnung wie man eine FSM auf steigender und fallender >reagieren lässt. Geht praktisch so gut wie nicht. > Ich bräuchte eine FSM die bei steigender und bei >fallender Taktflanke den Status ändern kann. Gibt es eine einfach Sicher? Warum? Wie ist die Schaltung? >Lösung, oder muss ich den takt mit pll verdoppeln. Wäre eine Möglichkeit, wenn das mit der steigenden/fallenden Flanke WIRKLICH gebraucht wird. Eine andere wäre, die Statemachine auf zwei Prozesse aufzuteilen und in jedem eine Flanke auszuwerten. >Das nachfolgende Beispiel (nur als Test gedacht) funktioniert leider >nicht. Logisch, kann gar nicht. So gut wie keine Arhitektur hat FlipFlops, welche auf beide Flanken gleichzeitig reagieren können (Ausnahme Coolrunner-II von Xilinx). Ausserdem ist deine Beschreibung falsch. Man müsste schreiben if clk'event then -- reagiert auf beide Flanken MfG Falk
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.