2013-06-21 15 views
7

Ich versuche, jr (Sprungregister) Befehlsunterstützung zu einem Single-Cycle-MIPS-Prozessor zu implementieren. In der folgenden Abbildung habe ich einen einfachen Mux gezeichnet, der die Auswahl zwischen dem normalen Ketten-PC oder der Anweisungsadresse (jr) ermöglicht.Implementieren Sprungregistrierungssteuerung zu Single-Cycle-MIPS

MUX

Wie kann ich wissen, dass die Anweisung JR die Mux-Auswahl auf ‚1‘ gesetzt ist? Ich habe bereits jump und jump_and_link gemacht (obwohl das Bild es nicht zeigt, da ich mein Projekt gerade nicht in Händen halte), und um sie zu kontrollieren, überprüfe ich einfach, ob der OP-Code 10 (Sprung) oder ist 11 (jal) in der Hauptsteuerung und dann den Mux Sel auf "1". Aber ich denke, dass ich mit jr nicht dasselbe machen kann, da das Anweisungslayout eindeutig ist.

+1

Ich weiß nicht, wie viel Ihnen das weiterhilft, aber: 'jr $ ra 'springt zu der Stelle, die zuletzt im Rückkehradressenregister gespeichert wurde. – wazy

+2

Ja, und ich hole den "gespeicherten Ort" aus dem Befehlsregister. Aber das Problem ist, wie zu steuern, wann PC zu diesem letzten Ort oder Standard-PC + 4 .. – user2509740

+0

Also wo zu springen? – wazy

Antwort

6

Der Opcode eines JR Anweisung hat Instruction[31:26] == 0 (spezielle) und Instruction[5:0] == 0x08 (JR). Sie müssen sich an diese beiden Bit-Positionen zu suchen, um zu entscheiden, dass dies ein JR Befehl ist. Der Control Block in Ihrem Diagramm muss einen zusätzlichen Eingang von Instruction[5:0]. haben. Das Feld rs in Instruction[25:21] wählt das Quellregister für diese Anweisung aus. Der PC muss rs zugewiesen werden, wenn eine JR Anweisung ausgeführt wird.

+1

Danke @markgz, das war genau das was ich gesucht habe. Aber wie kann ich überprüfen, ob Befehl [5: 0] 0x08 ist? – user2509740

+0

In etwa so: (Inst [3] UND! Inst [2] UND! Inst [1] UND! Inst [0])? – user2509740

+0

Probieren Sie '! Inst [5] &! Inst [4] & Inst [3] &! Inst [2] &! Inst [1] &! Inst [0].' Sie müssen alle Teile von, Instruction 'überprüfen. 5: 0] .' – markgz

0

Ich denke, Sie können die Leistung der Hardware verbessern, indem Sie den JR-Mux vor dem Jump-mux implementieren, da der JR-Mux nicht von der pcnext der Ausgabe des Jump-Sel-mux abhängig ist.