Hallo, ich meine irgendwo gelesen zu haben, dass in einem Case-Statement in allen Cases jedes Signal, welches in diesem Statement vorkommt, eine Zuweisung haben muss. Mit anderen Worten, wenn ich in einer "when-Abfrage" einem bestimmten Signal etwas zuweise, so muss ich in allen übrigen "when-Abfragen" diesem Signal auch etwas zuweisen, auch wenn sich dieses Signal bei den übrigen Bedingungen nicht ändern soll. Stimmt das? (hoffe, ich habe es verständlich erklärt)
Zeig mal ein Beispiel. Interessant ist dabei: hast du das case in einem synchronen/getakteten oder einen kombinatorischen Prozess? Denn wenn du in einm case etwas zuweist, und in eineme anderen nicht, dann muß das entsprechende signal speichern können. In einem getakteten Prozess wird das ein unkritisches Flipflop. In einem kombinatorischen Prozess wird in einem zwielichtigen Latch gespeichert.
Lothar Miller schrieb: > In einem > kombinatorischen Prozess wird in einem zwielichtigen Latch gespeichert. Gerade das war mein Problem. Ich hatte das in einem kombinatorischen Prozess. Meine FSM ist hängen geblieben. Ich habe Warnungen von Lattice Diamond näher angeschaut und fand, dass Latches generiert werden. Nun habe ich die Zuweisungen ergänzt und alles läuft wie geschmiert. Ich bedanke mich!
> habe ich die Zuweisungen ergänzt
Was danach klingt, als hättest du jetzt jeden when-Fall einzeln
versorgt. Die Latches vermeidet man viel konsequenter, wenn man als
erstes im Prozess allen Signalen einen "Defaultwert" zuweist. Ein
späteres if/case kann das problemlos überschreiben und man kann nicht
einzelne Fälle vergessen.
Georg A. schrieb: > wenn man als > erstes im Prozess allen Signalen einen "Defaultwert" zuweist. Meinstu du so:
1 | process (C) begin |
2 | A <= '0'; -- Default Value |
3 | B <= '0'; -- Default Value |
4 | case C is |
5 | when '0' => A <= '1'; |
6 | when '1' => B <= '1'; |
7 | end case; |
8 | end process; |
Ja. Denn es gilt: In einem Prozess "gewinnt" die letzte Zuweisung an ein Signal. Und wenn nach der Defaultzuweisung nichts mahr kommt, dann ist das Signal trotzdem definiert, und muß kein Speicherverhalten aufweisen.
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.