Hallo, warum ist der Bau von Latches in einem VHDL-Code überhaupt so kritisch ? Überall liest man nur Vorsicht vor Latches, um Gottes Willen keine Latches bauen etc. Gruß Gregor
Weil Latches nicht mit der Flanke Daten übernehmen, sondern pegelgesteuert. Wenn jetzt den Latch-Enable-Eingang (das, was bei getakteten Flip-Flops der Takteingang ist) durch andere kombinatorische Logik angesteuert wird, bekommst Du ganz schnell Probleme. Kombinatorische Logik mit mehr als einem Eingang hat nämlich die unangenehme Eigenschaft, bei Änderung der Eingangssignale durch Gatterlaufzeiten kurzeitig sog. "Glitches" (Störimpulse) am Ausgang zu erzeugen. Diese Glitches, können - falls der betreffende Ausgang an einem Latch-Enable hängt - dazu führen, das dann Daten zu einem Zeitpunkt ins Latch geschrieben werden, wenn es gar nicht gewollt ist. Glitches kannst Du Dir übrigens mit jedem VHDL-Simulator bei einer Timingsimulation anschauen (d.h. mit Gatterlaufzeiten simulieren).
Ach ja, die Gatterlaufzeit - und damit auch die Länge der Glitches - ist übrigens u.a. abhängig von der Temperatur.
Dann tut man das eben. Latches sollte man in synchronen digitalen Schaltungen vermeiden, sie sind aber nicht absolut verboten. Es kann unter bestimmten Umständen sinnvoll sein, auch Latches zu verwenden. ciao, Stefan.
Latches sind ja nicht schlimmes. Wenn es so wäre, würde man sie ja wohl nich synthetisieren könne. Man muss halt nur wissen, wann und wo man ein Latch einsetzt. Wenn man ein Latch bekommt, wo man eigentlich nur Kombinatorik will, wird sich die Schaltung möglicherweise unvorgesehen verhalten.
Latches sind, wie oben geschildert, pegelabhängige Speicherlemente, im Gegensatz zu Register, welche ihre Daten flankengesteuert übernehmen. Gelegentlich werden auch latches synonym für Register genommen - die Bedeutung erschliesst sich aus dem Kontext, also aufpassen. Wenn ich es richtig verstanden habe, werden Latches überall dort automatisch eingefügt, wo Zustände über Clock Periods zB. (das gängigste) gespeichert werden müssen. Je nachdem wo man nun seine Zuweisung schreibt, wird (kommentarlos von xst) ein Register erzeugt [vhd] if rising_edge(clk) then if (clock_enable = '1') then ... [/vhdl] oder ein latch
1 | if (enable = '1') then |
2 | my_signal <= '1'; |
3 | ...
|
unten fehlt ein else Zweig (in einem weiteren Prozess wird synchron my_signal abgefragt) es wird also definitiv ein latch erzeugt und keine komb. Logik. Nach welchen Kriterien xst nun die Bemerkung 'found latch' rauswirft konnte ich noch so ganz feststellen. Mir ist nur aufgefallen, wenn ich bewusst ein Latch eingebaut habe, kam idR. keine Warnung. Bleibt die Frage, wann setze ich Latches ein. Ich benutze sie, um grosse Blöcke von Komb. logik zusammenzufassen um sie hinterher doch wieder zu synchronisieren. Die Glitches kann ich zB. dann auch in Modelsim sehen. Aufgrund der Synchronisation kommen sie aber nicht zur Folgeschaltung. Die Warnung bezieht sich imo mehr auf das generelle Design. Viele Grüße Olaf
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.