Forum: FPGA, VHDL & Co. Befehl für keine Signalzuweisung


von Helmut (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von hiall (Gast)


Lesenswert?

Und wie macht man das in einem kombinatorischen Prozess ohne latch 
Erzeugung?

auch so variable_a <= variable_a;?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Bronco (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Klaus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.