Line-Decoder-Logik-Rennen

Ich habe ein Problem mit dieser von mir entworfenen Logikschaltung:siehe Zeichnung

Das beabsichtigte Verhalten ist : Wenn der Takt hoch wird, wird der Zustand des Zählers zwischengespeichert und dekodiert

Erwartetes Verhalten

Was passiert ist : Wenn der Takt hoch ist, ist der alte Zustand des Zählers (wenn er beispielsweise im letzten Zyklus inkrementiert wurde) sehr kurz am Eingang des Leitungsdecoders vorhanden, bevor die Latches auf die "neuen" Daten und den Ausgang des Decoders umschalten dann wird richtig

Tatsächliches Verhalten

Das heißt, der 'Fetch'-Modus wird für einige ns wieder aktiviert, bevor der Decoder auf 'Load' umschaltet. Dies führt unter anderem dazu, dass der Zähler wieder hochgezählt wird!

Ich habe versucht, eine Reihe von NICHT-Gattern an der Freigabe des Leitungsdecoders hinzuzufügen, aber es scheint nicht zu helfen. Außerdem habe ich versucht, einen Kondensator + Widerstand zu verwenden, um eine Verzögerung hinzuzufügen, aber dies hilft nur, wenn die erzeugte Verzögerung einige Mikrosekunden beträgt - viel zu lang.

Zusammenfassend muss ich sicherstellen, dass die Daten am Eingang des Decoders gültig sind, bevor er aktiviert wird - um ein falsches Auslösen seiner Ausgänge zu verhindern.

HINWEIS: Der Inkrementeingang wird von anderen Schaltungen bestimmt, die vom Decoder getriggert werden – er ist in Phase mit dem Taktgeber, aber nicht unbedingt mit ihm identisch

tl;dr Leitungsdecoder wird zu früh aktiviert, Gatterketten zur Verzögerung des Signals helfen nicht

Taktt der Abrufausgang den Zähler an IC3? Die Verwendung des Ausgangs eines Decoders wird eine potenzielle Problemquelle sein, egal was Sie hier tun. Decoder sind immer eine potenzielle Quelle für Störungen, wenn sie von einem Eingang zum nächsten wechseln.
Warum müssen Sie die Uhr am Ende mit Ihren drei Ausgängen verUNDen? Eine gute Regel, die Sie befolgen können, ist, dass Taktsignale nur flankenempfindliche Eingänge von Komponenten speisen sollten. Andernfalls können Sie tatsächlich einige Störungen bekommen. Auch zweite Regel: Sie sollten bedenken, dass alle Ihre Signale nur an der steigenden Flanke der Uhr gültig sind. Zu jedem anderen Zeitpunkt können sie sich aufgrund von Ausbreitungsverzögerungen in einem ungültigen Status befinden.
Was macht der Up-Eingang?
Ihre Taktleistung ist klein/gleich Verzögerungszeit....
Ihre Schaltung erwähnt eine "Taste" als Eingabe, was bedeuten könnte, dass eine Taste gedrückt wird. Wenn dies tatsächlich der Fall ist, könnten Sie ein Problem mit Kontaktprellen haben. Ich hatte ähnliche Probleme mit Eingängen zu solchen Logikschaltungen, die Drucktastenschalter beinhalteten, bei denen Kontaktprellen ein Problem war.
Entschuldigen Sie die dumme Frage, aber warum verwenden Sie keinen 3-Bit-Johnson-Zähler? (mit der Uhr, die so eingestellt ist, dass sie nur hochzählt, wenn Sie tatsächlich hochzählen möchten).

Antworten (3)

Generell ist beim Mischen verschiedener Logik-IC-Technologien Vorsicht geboten :
Der Ausgang eines LS-Gatters (zB IC2a, 74LS08) kann nicht direkt für einen Eingang eines CMOS-Gatters (zB IC3, 4029) verwendet werden.

In Ihrem Fall kann dies dazu führen, dass der Reset-Puls viel zu spät erkannt wird.

Zumindest sollten Sie einen Pull-up-Widerstand hinzufügen (weil der LS-High-Ausgang nicht hoch genug für den CMOS-High-Eingang ist) oder besser nur CMOS-UND-Gatter (4081) für IC2 verwenden.

Übrigens: Sie können diese gesamte Schaltung durch einen 4017 IC (Johnson Counter) mit O3, der zum Zurücksetzen kurzgeschlossen ist, und 3 UND-Gattern ersetzen:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Es ist ziemlich ungewöhnlich, dass Eingänge phasengleich mit dem Takt ankommen. Das übliche Design besteht darin, dass Eingänge an der ansteigenden Flanke des Takts abgetastet werden. Sie sehen dies in der 7474, die Sie verwenden; es triggert auf der steigenden Flanke. Siehe zum Beispiel https://commons.m.wikimedia.org/wiki/File:SPI_timing_diagram2.svg .

Wenn Sie zulassen, dass Eingaben gleichzeitig mit der Uhr eingehen, gehen Sie Gefahren ein. Wenn nichts anderes, gibt es das Rennen der Eingabe gegen die Uhr! Wenn Sie versuchen, dies zu umgehen, führen Sie normalerweise Gefahren in anderen Phasen ein – wie Sie hier gesehen haben.

Das ist einer der Gründe, warum man oft Timing-Diagramme mit Anstiegs- und Abfallzeiten sieht (wie im oben verlinkten Beispiel). Es macht deutlicher, wann Ihr Timing Gefahren mit sich bringt.

Vielleicht möchten Sie eine Karnaugh-Karte für Ihre Rennstrecke zeichnen, um Gefahren zu identifizieren und sicherzustellen, dass es Ihnen gut geht.

Ich denke, das liegt an der Latch-Verzögerung in 4514. Sie könnten erwägen, 7474-Flip / Flops zu entfernen, oder wenn Sie sie wirklich brauchen, ersetzen Sie 4514 durch wenige NAND-Gatter. Alles, was Sie brauchen, sind schließlich drei decodierte Ausgänge.