M. M. schrieb:
> Wenn der Taster nicht gedrückt wird, haben bei Signale den Wert 0.
> Nun wird der Taster gedrückt und in dem Takt danach wird dem Signal0 der
> Wert 1 zugeschrieben, Signal1 behält seinen aktuellen Wert.
Nein, sig1 bekommt immer den alten Wert von sig0. sigt1 ist damit nichts
anderes als eine um einen Takt verzögerte Kopie von sig0
> Außerdem
> werden beide Signale in diesem Takt auf eine steigende Flanke untersucht
> und dann auch erkannt.
Der FPGA untersucht nichts auf Flanke, sondern das steht in deiner
Beschreibung. Deine orginale Variante ist da schwer zu durchschauen,
in Lothars verreinfachter Form ist es offensichtlich wie es
funktioniert,
1 | if ( sig0='1' and sig1='0' ) then
|
esultat:
>
> Dass Signale immer erst am Ende eines Prozesses zugewiesen werden ist
> mir bekannt, ich versuche es immer im Hinterkopf zu behalten aber es ist
> doch schwierig aus der Zeile-für-Zeile Denkweise herauszukommen wenn man
> so lange mit Mikrocontrollern vorher zu tun hatte.
Einfache Betrachtungsweise:
Was rechts von einer Zuweisung steht ist der Zustand vor der
Taktflanke, die Zuweisung bestimmt was bei der Flanke passieren soll,
und damit den Zustand nach der Taktflanke.
Wenn ein Signal mehrfach auf der linken Seite einer Zuweisung vorkommt,
gilt die letzte im Prozess, eventuell in Abhängigkeit von Bedingungen.
Kombinatorische Prozesse sind etwas komplexer, da bei korrekter
Sensititvitylist der Prozess gleich noch mal zum Tragen kommt, wenn sich
ein Signal ändert, das sowohl auf der rechten als auf der linken Seite
einer Zuweisung steht. Das ist fast immer unerwünscht (Kombinatorische
Schleife) also unbedingt vermeiden.
Auch sollte man im kombinatorischen Prozess darauf achten, dass ein
Signal unter allen Bedingungen zugeweisen wird, sond kassiert man
unerwünschte Latches. Kann man damit sicherstellen, dass man am Anfang
Defaultzuweisungen hinschreibt, und erst danach bedingte Zuweisungen.