mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL: Latches


Autor: Gregor P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, die Gatterlaufzeit - und damit auch die Länge der Glitches - ist

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

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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


Volker

Autor: Stefan May (smay4finger)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stephan Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
if (enable = '1') then
  my_signal <= '1';
  ...
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.