Ich versuche zu verstehen, wie man einen binären Ripple-Zähler nach oben / unten implementiert. Grundsätzlich habe ich ein paar D-Flipflops und verbinde clk des nächsten Flipflops mit Äther Q oder Q'.
Wenn ich also die Zählrichtung ändern möchte, schalte ich einfach alle clk-Multiplexer zwischen Q und Q' um, und der Zähler beginnt in die entgegengesetzte Richtung zu zählen.
Das Problem ist jedoch, dass Flipflops beim Umschalten der Eingänge zwischen Q und Q 1 Zählen, sodass mein Zähler von einer anderen Nummer zählt.
Dh ich kann nicht so etwas haben wie: 0->1->2->3(Richtungswechsel)->2->1->0, es wird wie 0->1->2->3(Richtungswechsel)-> c->b->a->9...
Was vermisse ich?
Die wichtigsten Punkte sind:
Stellen Sie sicher, dass nach dem Gating die neue Anordnung logisch sinnvoll ist. dh warum sollte es jetzt RUNTER zählen. Wenn Sie nicht der Logik dessen folgen, was Sie Ihrer Meinung nach tun sollten, können Sie nicht allzu überrascht sein, wenn es Ihnen nicht zustimmt :-)
Schalten Sie immer in einen "neutralen" Zustand. Stellen Sie sicher, dass Taktleitungen oder andere zustandsrelevante Leitungen vor und nach der Änderung in einem Zustand sind, der keine vorübergehende Zustandsänderung verursacht.
Eine "funktionierende" Schaltung von hier
Ein wunderbares (& kostenloses) Tool
Logisim - ein Lehrmittel zum Entwerfen und Simulieren digitaler Logikschaltungen
Man sagt:
Wenn Sie einen Ripple-Zähler wünschen, der bidirektional zählt, ist es möglich, einen bidirektionalen Gray-Code-Zähler mit Quadratureingang zu implementieren, der vollständig pegelempfindliche Latches verwendet. Die obersten zwei Bits einer Stufe können in die nächste Stufe eingespeist werden. Selbst wenn einer der Eingänge für eine Weile metastabil wird, verhält sich der Zähler, vorausgesetzt, dass sich der metastabile Eingang stabilisiert, bevor sich der andere Eingang ändert.
BarsMonster