Forum: FPGA, VHDL & Co. VHDL: Latches


von Gregor P. (Gast)


Lesenswert?

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

von Xenu (Gast)


Lesenswert?

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

von Xenu (Gast)


Lesenswert?

Ach ja, die Gatterlaufzeit - und damit auch die Länge der Glitches - ist

übrigens u.a. abhängig von der Temperatur.

von Volker (Gast)


Lesenswert?

Hallo,

aber was mach ich denn dann, wenn ich z.B. ein 74XX573 im CPLD
nachbilden möchte.


Volker

von Stefan M. (Gast)


Lesenswert?

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.

von Stephan Walter (Gast)


Lesenswert?

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.

von ope (Gast)


Lesenswert?

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