Hey, wisst ihr ob es in VHDL einen Befehl gibt, ein Signal nicht zu verändern ? Also ich habe eine Case - Schleife und weise einem Signal nur in einem Fall einen Wert zu. In den anderen Cases wird diese Variable nicht verändert. case state is when a => variable_a <= "0001"; when b => variable_a <= variable_a; when others => variable_a <= variable_a; end case; Also ich suche nach etwas wie : variable_a <= null; Also was vom Hintergrund her so aussehen sollte. Habt ihr ne Ahnung oder muss ich dem Signal immer dasselbe Signal zuweisen, was ja eigentlich nicht gut ist. Grüße, Helmut
Helmut schrieb: > variable_a <= null; Soso, Variable also. Da wären wir mal wieder bei dem C-Programmierer, der VHDL machen will/soll/muss/darf... Siehe zum Thema den Beitrag "Variable vs Signal" Seis drum. Wenn dir das nicht gefällt: variable_a <= variable_a; Dann lass die Zuweisung einfach komplett weg. Wenn keiner an einem Signal was ändert, bleibt der alte Wert erhalten. Und du hast höchstwahrscheinlich ein Latch an der Backe, weil/wenn du das in einem kombinatorischen Prozess machst...
Und wie macht man das in einem kombinatorischen Prozess ohne latch Erzeugung? auch so variable_a <= variable_a;?
hiall schrieb: > Und wie macht man das in einem kombinatorischen Prozess ohne latch > Erzeugung? Gar nicht. Wenn in einem kombinatorischen Prozess etwas gespeichert werden soll, dann geht das nur mit einem Latch. Und das ist in diesem Fall hier extrem gefährlich, wei die FSM beim Umschalten von state Glitches erzeugen wird und deshalb irgendwelche kurzen Spikes auf den Latch-Enable Eingang des Latches kommen werden, und dann natürlich genau der Müll gespeichert werden wird, der zu dem Zeitpunkt gerade zufällig anliegt. Sinnvollerweise speichert man aber in einem getakteten Prozess, dann bekommst du nämlich ein hübsches und gewünschtes Flipflop. BTW: wo ein Latch ist, ist auch die legendäre kombinatorische Schleife nicht weit. Zur Vertiefung: http://www.lothar-miller.de/s9y/archives/42-Kombinatorische-Schleifen.html
Formale richtig wäre z.B.:
1 | case state is |
2 | when a => |
3 | variable_a <= "0001"; |
4 | when b => |
5 | null; |
6 | when others => |
7 | null; |
8 | end case; |
Das "null" braucht man, damit irgendetwas in der Zeile steht.
Bronco schrieb: > Das 'null' braucht man, damit irgendetwas in der Zeile steht. Sollte eher heißen "nimmt man", den brauchen tut man eigentlich nichts. Und da merkt man dann auch schön das "ungewisse" Gefühl, dass dann "irgendwie irgendwas" fehlt...
Lothar Miller schrieb: > wo ein Latch ist, ist auch die legendäre kombinatorische Schleife > nicht weit. Klingt fast wie eine Weisheit von meiner Großmutter ;-)
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.