Wie kann man in einem Schieberegister parallel verschieben?

Ich versuche, einen einfachen Taschenrechner zu entwerfen, der mit Logisim sub, mul und div addieren kann. Um die Operanden zu speichern, werde ich Schieberegister verwenden. Ich habe kürzlich etwas über sie erfahren und verstehe, was serielle Eingabe und parallele Last sind. Ich weiß auch, wie man die Bits verschiebt. Ich habe dieses universelle Schieberegister aus meinem Lehrbuch kopiert. (Digitales Design von Morris Mano)Universelles Schieberegister

Der Rechner funktioniert nur mit 4 Ziffern. Deshalb habe ich 4 Universal Shift Registers auf folgende Weise kombiniert4-Wort-Speicher

Hier verschiebt sich das Register jedes Mal, wenn ich den Wert (links oder rechts) verschiebe, nur um 1 Bit. Was ich brauche, ist in der Lage zu sein, 4 Bits gleichzeitig zu verschieben. Da ich meine Ziffern in BCD speichere, muss ich in der Lage sein, alle 4 Bits in einem einzigen Taktimpuls zusammen nach rechts oder links zu verschieben.

Ich habe dies bei Google gesucht und alles, was ich finden konnte, waren: Serial In Serial Out Shift Register,
Serial In Parallel Out Shift Register,
Parallel In Serial Out Shift Register,
Parallel In Parallel Out Shift Register.

Aber alle diese Register können nur ein Bit pro Taktimpuls verschieben. Wie kann ich also die Bits parallel verschieben (4 Bits gleichzeitig), um meine BCD-Darstellungen speichern zu können?

Oder sollte ich die Uhr irgendwie steuern, damit sie nur 4 Mal pulsiert? (Wenn ja, erkläre mir bitte wie)

Bitte erwähnen Sie, ob es einen besseren Weg gibt, meine Operanden zu speichern.

Lassen Sie uns eine Sekunde zurückgehen. Warum denkst du, dass du hier ein Schieberegister brauchst ?
Es ist das einzige Speicherelement, das ich im Moment kenne. Und ich verwende das Shift-Register, damit ich die Backspace-Funktion einfach nutzen kann. Wenn eine Ziffer angeklickt wird >> 4 Bits nach rechts verschieben. Wenn die Rücktaste angeklickt wird, wird << um 4 Bits nach links verschoben.
Übrigens, Verschiebung nach links 4 ist Drehung nach rechts 12
Sie können einen Mux verwenden, um zwischen "Shift 1" und "Shift 4" zu wählen
Um 4 Bit zu verschieben, sollten Sie 4 Schieberegister parallel statt in Reihe schalten.
Ich denke, der gesuchte Begriff ist "Barrel Shifter".

Antworten (3)

Ich weiß nicht, wie der Rest Ihres Designs aussieht, aber die Operanden müssen irgendwo herkommen. Ich nehme an, das ist der 4-Bit-Bus in der unteren linken Ecke.

Um 4 Bit vorwärts und rückwärts zu verschieben, müssen Sie vier Schieberegister parallel schalten . Sie haben sie in Reihe geschaltet.

Das Hintereinanderschalten von zwei Schieberegistern verdoppelt die Tiefe.
Durch Parallelschalten von zwei Schieberegistern wird die Breite verdoppelt.

Danke, können Sie bitte erklären, was Sie mit "vier Schichten parallel schalten" meinen. Wie mache ich es? Irgendwelche Ressourcen, wo ich nachschlagen kann?
Sie müssen vier Schieberegister nehmen und jedes Ihrer vier Eingangsbits in den rechten Eingangsport jedes Schieberegisters einspeisen. Dann bewegen sich bei jedem Takt alle vier Bits parallel. (Dies bedeutet auch, dass Sie die Eingabeports in0..in3 löschen können. Sie benötigen sie nicht.)

Du schaltest nur 4 mal.

Frühe Taschenrechner verwendeten eine 4-Bit-CPU, da dies alles ist, was Sie für BCD-Mathematik benötigen.

Aber innerhalb dieser 4-Bit-CPU verwendeten sie eine 1-Bit-Arithmetik-Logik-Einheit, um die eigentlichen Additionen durchzuführen. Sie haben die 4 Bits seriell durch die 1-Bit-ALU verschoben und dabei 1-Bit-Add-with-Carry durchgeführt. (spätere 8-Bit-CPUs taten dasselbe)

Sobald Sie sich mit dieser Idee vertraut gemacht haben, stellen Sie fest, dass die Durchführung mehrerer Präzisionsberechnungen auf einer 1-Bit-ALU nicht schwieriger ist als auf einer 32-Bit-CPU - nur langsamer, aber mit viel weniger Transistoren.

Es ist immer noch mehrfach präzise Mathematik.

Und wenn Sie einen Taschenrechner erstellen, müssen Sie immer noch mehrere Präzisionsberechnungen durchführen, selbst wenn Sie einen 32-Bit-ARM verwenden.

Es scheint mir, dass Sie nur zwei 16-Bit-Einweg-Schieberegister (Operanden X, Y) mit einem 4-Bit-Parallel-Load-Input-Nibble benötigen .

Sie können X durch 16 Einzelbitverschiebungen nach Y kopieren. Sie können um 15 nach links verschieben, nach rechts drehen. Sie können mit einer 1-Bit-ALU mit Übertrag rechnen. Sie benötigen eine clevere Dezimalanpassung für jedes Nibble. Sie benötigen einen ladbaren 4-Bit-Zähler für die Verschiebungssteuerung, da Sie 4-Bit-, 1-Bit-, 15-Bit- und 16-Bit-Verschiebungen haben

Ich glaube also wirklich nicht, dass Sie überhaupt bidirektionale oder parallele Lastverschiebungswiderstände benötigen. Die meisten logischen Operationen und das Muxen erfolgen alle 1 Bit breit am Ende des SR.

Die in der Frage gezeigte Schaltung ist eine Einzelbitverschiebung, da A3 in den Mux von A2 eingespeist wird. 3-2 = 1, also Verschiebung um ein Bit.

Wenn stattdessen A6 in den Mux von A2, A7 in A3, A5 in A1 usw. eingespeist wird, unterstützt es eine 4-Bit-Verschiebung in einer einzigen Operation.

Wenn Sie für eine BCD-Codierung entwerfen, ist eine Verschiebung um 4 eine gute Idee und eine erhebliche Zeitersparnis gegenüber der Wiederholung einer Verschiebung um 1.

Beachten Sie, dass Sie, wenn Sie die Shift-by-4-Registerverbindungen nehmen und die Register in einer Matrix von 4 Zeilen und N/4 Spalten anstelle einer einzelnen Zeile von N Spalten anordnen würden, die "Parallelverbindung von 4" sehen würden Schieberegister", von denen einige der Kommentare sprechen.