Hallo,
hab nen kleines Problem mit einer Taktabfrage...
Wieso wird bei folgenden Code vom Webpack beim Synthetisieren
gemeckert, und zwar "bad synchronous description"?
Hab mit Modelsim simuliert, lief 1A. Ich muss halt das Signal
fusstaster asynchron abfragen aber nur in dem Zustand status.
Habt ihr eine Idee?
1. Fehler :
die VHDL-Beschreibung ist falsch, bei Deiner Sensitivity-List
mit 4 Signalen erwartet die Synthese einen rein kombin.
Prozess, also nur eine Gatter-Beschreibung,
dann kommt aber plötzlich in Zeile 5 eine Taktabfrage -
das geht nicht
2. :
Ist die Statemachine extra oder soll sie in diesem
Prozess realisiert werden ? (Ich nehme mal an, da
gibts irgendwo noch einen Clock im Design???)
Warum muss "fusstaster" auf die steigende Flanke
abgefragt werden ?
Kann man hier nicht den Zustand '1' abfragen und dann
in einem folgenden State warten, bis "fusstaster" wieder
0 ist ?
andere Idee:
Fusstaster mit 2 Flip-Flops einlesen, dann ist eine synchrone
Flankenerkennung möglich, etwa so:
reg1 <= fusstaster; -- mit einem vorh. Clock eintakten
reg2 <= reg1,
if (reg1 ='1' and reg2 = '0') then -- steigende Flanke
...
evt. sind noch Maßnahmen zum entprellen erforderlich
Verstehe ich richtig, dass man bei getakteten Prozessen dann keine
anderen Signale ausser dem Clock in der Sens.liste stehen haben darf?
Das Problem mit dem Taster ist, dass er nicht nur bei der Flanke von
clk erkannt werden soll, sondern auch dazwischen. Ne Möglichkeit wäre
wohl, das Signal des Tasters zu speichern bis zur nächsten Flanke. An
dem Punkt kam ich aber nicht weiter, nen Latch schied da aus, oder habe
es nicht hinbekommen wie ich es wollte.
Hier mal der komplette Code:
du könntest das Signal z.B. im Prozess ampel
mit clk_geteilt in einem Flip-Flop speichern:
fusstaster_q <= fusstaster;
Ein asynchrones Signal in einer Statemachine abzufragen
ist sehr gefährlich. Alle Signale, die einen Einfluss
auf die States haben können, müssen mit dem Takt
der Statemachine einsynchronisiert sein, sonst
kann es zu unerwünschten Effekten kommen.
Mhm, ich werd am besten den Takt mal nicht soweit runterteilen, damit
ich bei kurzen Drücken des Tasters auch ne Flanke erwische. In dem
obigen Design sind es ja nach Teilung nur noch 1Hz...mit 100Hz dürfte
ich wohl hinkommen. Damit würden sich ja dann die Probleme erledigen.
Da kann ich dann wieder alles synchron machen... Danke für die Hinweise
:-)
So. Hab jetzt mal nur auf 100Hz geteilt. Damit geht es nun, frage nur
noch den Zustand von dem Taster ab und alles funzt. Ausserdem hab ich
mal die 3 Latches im Prozess folge weggemacht, is mir vor der Synthese
gar ni aufgefallen. Für was Warnungen alles gut sind ;-)
Grüße
T.M.
na gut :-)
noch zu Deiner Frage :
ja, in der Sens-Liste von getakteten Prozessen gibt es
normalerweise das Clock-Signal und evt. noch 1 bis 2
Signale für asynchronen Set / Reset.
Du musst übrigens die Statemachine nicht in Register
und Kombinatorik trennen, es geht auch beides in einem
Prozess, das ist manchmal besser lesbar.