[CALU] Re: Blockdiagramm

  • From: Martin Elshuber <e9825286@xxxxxxxxxxxxxxxxxx>
  • To: calu-ss2010-tuwien@xxxxxxxxxxxxx
  • Date: Wed, 02 Jun 2010 15:41:55 +0200

Günther Wimpassinger schrieb:
Zitat von Elshuber Martin <e9825286@xxxxxxxxxxxxxxxxxxxx>:

Ich hab das 2.te diagramm mal erweitert und 2 forwarding stufen eingebaut.

1) das alu ergebnis kann als eingabe für die nächste op (ra,rb,rx) dienen das ist möglich da das predikat schon in dieser stufe bekannt ist, (es wird vom WB weitergeleitet)
2) das wb.ergebnis kann als eingabe für das rx, im WB dienen

pred r1>r2, p1
add r2,r2,r2 (p1) // kein stall notwendig, forwarding des predikats in die EX stufe xor r3,r2,r1 // kein stall notwendig (predikat von add schon bekannt, forwarding möglich)
ld r1,r3+5
add r2,r1,r2         // stall 1 cycle in der EX stufe
ld r1,r3+5
st r1,r3+5 // kein stall nötig r1 (rx) kann von WB nach WB weitergeleitet werden

meiner meinung nach sollte man das forwarding schon implementieren
warum?
1) natürlich performance
2) wir brauchen sowieso hardware um data hazards zu erkennen. ob man dann noch eine multiplexer leitung dazubaut oder nicht ist meiner ansicht nach schon fast egal

was emint ihr?

Interessant wär es schon. Ich hab mir das zwar noch nicht im Detail überlegt, aber muss beim Forwrding nicht auch das Predicate berücksichtigen. Ich befürchte nur, dass es sich zeitlich nicht ausgehen wird.

ldc r0,1
ldc r1,2
predset r0=r1, p1
add r0,r0,5   (p2)   ;do not store t
st  r10,r0           ;don't use alu forwarding result of register r0

Was ich meine ist folgendes:
In der EX Stufe, musst man anhand des (möglicherweise geforwardeten) Predicates entscheiden, ob man das Ergebnis der WB Stufe nimmt oder den Wert aus ID. In der ID Stufe gibt es das dann zwei mal, einmal Forwarding von EX und einmal Forwrding von WB.

Ich kann diese Fälle im moment nicht im Blockdiagramm sehen, aber es sind schon heftig viele Leitungen drinnen.

Im Diagramm steht:
wp-sel für write predicate select
- wobei mux't du npreds (#bits?) mit 16bit/15bit vom Stack
wp-en für write predicate enable
- übernehme die neuen predicate Werte
wb_sel für write back select
- schreibe ins register file entweder sram, stack oder alu-val

Fragen:
alu_val in WB-Stufe
-ist bits 16..0 absichtlich oder sollte es 15..0 heissen, weil wir p0 nicht speichern müssen.





Forwarding:
Block-v2: Hier gebt es ein forwarding von Predikaten aus der WB stufe in die EX stufe. Dieses Forwarding sollten wir auf jeden fall implementieren. Durch dieses forwarding wird das Problem "Was passiert wenn man ein Register gleichzeitig liest und schreibt?" dahingehend gelöst:
"Der neue Wert wird gelesen?"
Gleiches Gilt auch für das Forwarding von Registern aus der WB stufe ind die ID stufe, sowie das Forwarding aus der WB stufe in die EX stufe für rx (Block-v3) für diese forwardings reicht es wenn man rd-en&(raddr=rd), (register) wp-en(predicates) in den mux leitet. Das letzte forwarding ist etwas komplizierter (EX in ID). Das geht nur wenn in der EX stufe das predikat schon bekannt ist. und das ist es. (Predikate Forwarding)

Wenn man jetzt mal deinen Code anssieht. Ist das ding mit Forwarding natürlich langsamer, hat dafür keine stalls.
Wenn predset in der WB stufe ist passiert folgendendes.

(von links nach rechts lesen, zeilen arbeiten parallel)

WB: npreds wird berechnet     +
FW: mux leitung auf (forward) + FW: fetch pa,pb,pred (3, 16 auf 1 muxe)
EX: preds  lesen              +                                         + mux 
auswerten rd_en'<=rd_en&pval
ID:                                                                             
                            + muxsel-setzen
EX: rb shift                  + rb sel                                  + 
alu_operation
EX: ra sel es stellt sich nun die frage um die alu sache nicht sowieso der kritische pfad ist, was ich denke speziell die addition.

busbreite von preds
alle preds pfade haben 15 bit, wenn 16 bit benötigt werden kann ja einfach vorne eine 1 dazugegeben werden. das spart uns etwas logic, und würde rein theoretisch einen 17bit PC erlauben.
das erklärt auch die bits bei alu_val in WB
0..16 (17bits) => PC, 17..31 (15bits) sind die preds.

das gleiche gilt für wp-sel, da werden nur 15 bits gemuxed.


lg martin


Other related posts: