Hardware Reference
In-Depth Information
und eine Konstante für die Tabellenüberschrift definiert, mit denen zusammen
eine Ausgabe in der folgenden Form erzeugt werden kann:
|PC|| Instr ||ORA|ORB|ORY1|OpCode|CtrlEX||Ergebnis|CtrlRW|ORY2||r0r1r2r3r4r5r6r7|
|00||ungueltig ||XX|XX|XX| XX| xx||XX:cUsUzU| xx|XX||XXXXXXXXXXXXXXXX|
|01||initr0,23 ||XX|XX|XX| XX| xx||XX:cXsXzX| xx|XX||XXXXXXXXXXXXXXXX|
|02||initr1,34 ||23|XX|r0|smov| wr||XX:cXsXzX| xx|XX||XXXXXXXXXXXXXXXX|
|03||initr2,45 ||34|XX|r1|smov| wr||23:cXsXzX| wr|r0||XXXXXXXXXXXXXXXX|
|04||initr3,56 ||45|XX|r2|smov| wr||34:cXsXzX| wr|r1||23XXXXXXXXXXXXXX|
|05||initr4,67 ||56|XX|r3|smov| wr||45:cXsXzX| wr|r2||2334XXXXXXXXXXXX|
|06||initr5,78 ||67|XX|r4|smov| wr||56:cXsXzX| wr|r3||233445XXXXXXXXXX|
|07||initr6,89 ||78|23|r5|smov| wr||67:cXsXzX| wr|r4||23344556XXXXXXXX|
|08||initr7,a0 ||89|34|r6|smov| wr||78:cXsXzX| wr|r5||2334455667XXXXXX|
||a0|23|r7|smov| wr||89:cXsXzX| wr|r6||233445566778XXXX|
|09||clrcy
|0a||addr1,r0 ||45|23|r2| add|clrc||a0:cXsXzX| wr|r7||23344556677889XX|
|0b||subr2,r3 ||34|23|r1| add| wr||a0:c0sXzX|clrc|r2||23344556677889a0|
|0c||subr1,r1 ||45|56|r2| sub| wr||57:c0s0z0| wr|r1||23344556677889a0|
|0d||nop ||34|34|r1| sub| wr||ef:c1s1z0| wr|r2||23574556677889a0|
|0e||nop ||23|23|r0| add|non||ff:c1s1z0| wr|r1||2357ef56677889a0|
|0f||incr2,r1 ||23|23|r0| add|non||ff:c1s1z0|non|r0||23ffef56677889a0|
|10||nop ||ef|ff|r2| inc| wr||ff:c1s1z0|non|r0||23ffef56677889a0|
|11||nop ||23|23|r0| add|non||00:c1s0z1| wr|r2||23ffef56677889a0|
|12||st@(r2+0),r0||23|23|r0| add|non||00:c1s0z1|non|r0||23ff0056677889a0|
|13||st@(r2+1),r1||00|00|r0|sadd| st||00:c1s0z1|non|r0||23ff0056677889a0|
|14||st@(r2+2),r2||01|00|r1|sadd| st||00:c1s0z1| st|r0||23ff0056677889a0|
|15||st@(r2+3),r3||02|00|r2|sadd| st||01:c1s0z1| st|r1||23ff0056677889a0|
|16||jmpr3,r2 ||03|00|r3|sadd| st||02:c1s0z1| st|r2||23ff0056677889a0|
|00||nop ||17|00|r3|smov| wr||03:c1s0z1| st|r3||23ff0056677889a0|
|01||initr0,23 ||23|23|r0| add|non||17:c1s0z1| wr|r3||23ff0056677889a0|
|02||initr1,34 ||23|56|r0|smov| wr||17:c1s0z1|non|r0||23ff0017677889a0|
|03||initr2,45 ||34|67|r1|smov| wr||23:c1s0z1| wr|r0||23ff0017677889a0|
Der eigentliche Testrahmen für die Übergangsfunktion ist relativ einfach auf-
gebaut. Er definiert eine Konstante T
P
für die Dauer eines Pipeline-Schritts,
je eine Konstante für den Befehlsspeicher und den Konstantenspeicher und
je ein Signal für das Pipeline-Objekt, den Registersatz und den Datenspei-
cher. Aus der Zeitkonstanten wird in den nachfolgenden Entwurfsschritten
die Taktperiode. Der Befehlsspeicher wird mit einer Befehlsfolge initialisiert
und der Konstantenspeicher mit Beispielkonstanten. Der Pipeline-Zustand,
der Inhalt des Registersatzes und der Inhalt des Datenspeichers sind zum
Simulationsbeginn bis zu ihrer Initialisierung ungültig:
constant
tp:delay_length:=
10ns
;
signal
pp: tPipeline;
signal
RegSet: tDatMem(
0
to
7
);
constant
InstrMem: tInstrMem(
0
to
30
):=(
0
=>
'1'
&
x"23"
&
"000"
,
-- init r0,23
...);
signal
DatMem: tDatMem(
0
to
30
);
constant
KonstMem: tDatMem(
0
to
30
):= (
0
=>
x"1a"
,
others
=>
x"00"
);
Der Prozess des Testrahmens initialisiert den Befehlszähler des Pipeline-
Objekts mit dem Wert null und ruft in einer Schleife die Prozedur mit der
Übergangsfunktion des Prozessors immer wieder auf. Vor der Schleife wird
einmal der Text mit der Tabellenüberschrift und nach jedem Prozeduraufruf
eine Tabellenzeile ausgegeben. Die Warteanweisungen für eine Taktperiode