Bitweise Verschiebungsoperation von NAND?

Ich baue einen 8-Bit-Computer mit den Videos von Ben Eater und möchte die ALU verbessern, z. B. eine n- und bitweise Operation hinzufügen, da alle Logikgatter daraus gebaut werden können.

Aber ich frage mich, ob es möglich wäre, mit diesem NAND-Gatter einen Shift-Betrieb (links / rechts) zu haben?

Ein Schieberegister (links/rechts) kann mit Flip-Flops hergestellt werden. Diese Flip-Flops können auch mit NAND-Gatter hergestellt werden. Also ja, es ist möglich
Mir ist aufgefallen, dass Ben sich nicht darauf beschränkt, nur NAND-Gatter zu verwenden, um alle anderen Funktionen zu erstellen. Warum also nicht einfach einen geeigneten Schieberegister-IC verwenden und sich den Ärger ersparen?
@M.Ferru, eine ALU würde keine Flip-Flops verwenden, einen Taktzyklus verschwenden, sie wäre kombinatorisch.
@TonyM Der Schiebevorgang dauert mit Flip-Flops nur 1 Taktzyklus. Habe ich recht?
Aber @M.Ferru, wie KillKem sagt, ist eine feste Verschiebung nur die Verdrahtung in den Feedback-Mux der ALU. Ist bei CPUs seit den 70ern so. Warum einen zweiten Taktzyklus über den hinaus verschwenden, den Sie benötigen, um das Ergebnis zu registrieren?

Antworten (1)

Eine Shift-Operation, wie sie ein >> oder << kompiliert, wird mit einem (Barrel-)Shifter durchgeführt .

Sie können einen bauen, indem Sie einen Decoder und eine Kreuzschiene mit UND-Gattern verwenden, die die Vertikalen und die Horizontalen verbinden. Dann läuft der Ausgang des Decoders diagonal.

Eine andere Möglichkeit besteht darin, Multiplexer zu verwenden und mehrere Schichten zu haben:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Dies ist eine logische 4-Bit-Rechtsverschiebungsschaltung. ShiftAmount0 ist das niedrigstwertige Bit und ShiftAmount1 ist das nächstniedrigstwertige Bit.

Sie können diese Schaltung erweitern, indem Sie den 1-Eingang des Mux den doppelten Sprung machen, den er macht. Sie können auch die 1-Eingänge der höherwertigen Bits mit den niederwertigen Bits (für Barrel-Shift) oder dem höchsten Bit (für arithmetische Verschiebung) verbinden. Dies können Sie mit ein paar UND-Gattern tun, um das richtige Verhalten auszuwählen.