Hardware Reference
In-Depth Information
-- EX: Zielregisteradresse und Kontrollwert weitergeben
-- pp.Ergebnis<=ALU(...); => Fallunterscheidung EX-Phase
pp.ARegY2 <= pp.ARegY1;
pp.Ctrl_RW <= pp.Ctrl_EX;
-- Ergebnis schreiben => Fallunterscheidung RW-Phase
(
tInstr...'range - Indexbereich des Befehlswortes, in dem der entsprechende
Befehlsbestandteil steht). Die hier verwendete Read-Funktion und die in der
Prozedur »PipeStep(...)« weiter unten verwendete Write-Prozedur wurden in
Abschnitt 3.4.3 als allgemeine Bearbeitungsmethoden für Blockspeicher ent-
wickelt.
Befehlsabhängige Datenflussänderungen in der OF-Phase
Bei Abarbeitung eines Befehls zur Initialisierung eines Registers ra mit einer
Konstanten c8
init ra , c8
wird in Abweichung vom Standarddatenfluss dem ersten Operanden-Register
»OReg_A« eine Konstante aus dem Befehlswort und dem Operationscodere-
gister der Spezialoperationscode »für unverändert weiterleiten und Flags nicht
verändern« zugewiesen (vgl. Abschnitt 5.4.2):
if pp.Instr(cInstr_Init'range)=cInstr_Init then
pp.OReg_A <= pp.Instr(tInstrC8'range);
pp.Opcode <= sopc_mov;
Für Verarbeitungsbefehle ist nichts zu verändern:
elsif pp.Instr(cInstr_Op'range)=cInstr_Op then null ;
Die Lade- und Speicherbefehle unterscheiden sich in der OF-Phase darin, dass
in das Operandenregister »OReg_A« die 2-Bit-Konstante aus dem Befehls-
wort, verlängert um führende Nullen, in das Operationscode-Register der Spe-
zialoperationscode für Adressrechnung und in das Kontrollregister »Ctrl_Ex«
das Symbol für die Art des Datenaustausches geschrieben wird:
elsif pp.Instr(cInstr_st'range)=cInstr_st then
pp.OReg_A <= "000000" & pp.Instr(tInstrC2'range);
pp.OpCode <= sopc_add;
pp.Ctrl_EX <= st;
elsif pp.Instr(cInstr_ldd'range)=cInstr_ldd then
pp.OReg_A <= "000000" & pp.Instr(tInstrC2'range);
pp.OpCode <= sopc_add;
pp.Ctrl_EX <= ldd;
elsif pp.Instr(cInstr_ldc'range)=cInstr_ldc then
pp.OReg_A <= "000000" & pp.Instr(tInstrC2'range);
pp.OpCode <= sopc_add;
pp.Ctrl_EX <= ldc;
Search WWH ::




Custom Search