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)
Der Rechner funktioniert nur mit 4 Ziffern. Deshalb habe ich 4 Universal Shift Registers auf folgende Weise kombiniert
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.
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.
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.
Benutzer39382
Sabbir Mollah
Heinrich Krun
HKOB
Benutzer253751
DKNguyen