Hi,
ich habe in VHDl eine State Machine mit zwei Prozessen gebaut.
Der erste ist getaktet und schaltet vom alten zum neuen state. Der
andere ist ungetaktet und definiert die Ausgänge im jeweiligen state.
Ich habe jetzt einen idle state, der wartet bis irgendwas passiert. Bis
jetzt war das das Signal von einem Taster. Wenn dieses 1 wurde, ist die
state machine angelaufen. Soweit so gut.
Jetzt möchte ich den Taster ersetzen. Eine andere Komponente schickt
dabei für einen Takt lang (beide Komponenten laufen auf dem gleichen
Takt) einen Impuls. Mit diesem Impuls soll meine state machine starten.
Wenn ich jetzt einfach in meinem idle state
1 | if impuls = '1' then
|
2 | state_neu <= next_state;
|
3 | else
|
4 | state_neu <= idle;
|
5 | end if;
|
so abfrage, dann kann es ja passieren, dass der neue state nicht
übernommen wird, weil der Impuls nicht während einer steigenden Flanke 1
ist.
Mein Ansatz war jetzt, dass ich in einem extra Prozess die steigende
Flanke des externen Impulses abfrage, damit dann ein Signal setze
(dieses wird dann im idle state auf 1 geprüft) und dieses Signal erst
zurücksetze, wenn meine state machine auch wirklich im nächsten Zustand
ist.
Die Umsetzung bereitet mir allerdings Probleme. Mein grober Plan sieht
so aus:
1 | process (rdy)
|
2 | begin
|
3 | if rising_edge(rdy) then
|
4 | start <= '1';
|
5 | elsif state = w2 then
|
6 | start <= '0';
|
7 | end if;
|
8 | end process;
|
Allerdings habe ichd ann ein Problem, dass das Signal laut Fehlermeldung
nicht gehalten wird. Eine Zurücksetzung im getakteten Teil der state
machien geht ja auch nicht wegen dem multiple driver Problem.
Kann mir da jemand bitte helfen?
Beste Grüße