[CALU] Zeichnung

  • From: Elshuber Martin <e9825286@xxxxxxxxxxxxxxxxxxxx>
  • To: calu-ss2010-tuwien@xxxxxxxxxxxxx
  • Date: Thu, 20 May 2010 19:54:17 +0200

Zeichnung: block-v2-mult.XXX im diagramme order

Am 20.05.2010 19:30, schrieb Elshuber Martin:
Diese optimierung bringt hauptsächlich was für die multiplikation.
Die IO variante für die multiplikation ist ziemlich sinnlos, da da man dan 4 instruktionen brauchen würde. für die division macht das durauch sinn, da dann während der division andere ops exekutiert werden können.

bez. der muliplikation denke ich da an eine variante von b.
ich zeichne es einfach mal, dann sollte es klar sein wie ich mir das vorstelle

lg martin

Am 20.05.2010 19:09, schrieb Günther Wimpassinger:
Zitat von Martin Elshuber <e9825286@xxxxxxxxxxxxxxxxxxxx>:

aller voraussicht werden wir bei der multiplikation 2 zyklen brauchen und bei der division noch mehr.

Ziemlich sicher sogar.

unsere derzeitige pipeline muss daher die pipline bei der multiplikation 1 zyklus lang stallen.

Darum wollte Benedikt das "DIV"/"DIVS" keine ALU Operation sind, sondern
ein externes per I/O angeschlossenes Modul.

IO-DIV (bei einem Store auf die 2te addr beginnt div zu arbeiten):
ldc r0,DIV_MODULE_BASE
st  r0,r5
st  r0+4,r6
;wait cycles- do other instructions
ld  r0,r0

ist das selbe wie, nur ohne pipeline stallt:
div r0,r5,r6

Jedoch muss der Programmierer dafür sorgen, dass sich die DIV Operationen nicht überschneiden.

wenn man sich darüber gedanken macht ist dieses stall meiner ansicht nach nicht nötig.

warum: was macht die wb stufe bei einer multiplikation? nichts.
(keine stack op, keine predikat op, keine sram op)

Das macht dir aber
a) einen comb. Pfad vom id2ex_reg ins Register File (der zwei cycles brauchen dürfte)

b) eine MUL Instruktion die über zwei Stufen ausgeführt wird. So zusagen wird in EX "mul_half" berechnet und in WB "mul_full".

Ich nehme an, du meinst sowieso die Variante "b"


zusätzlich könnte man auch den shifter genau so wie die multiplikation in 2 zyklen implementieren und den 2ten zyklus in der WB stufe ausführen

ALU_ADD,ALU_SUB,ALU_SLL stellt kein problem dar. Das zu synthetisieren bring mir ein Design mit ca 90 MHz. Ich werd mir am WE mal ansehen, wie das ist, wenn ich den "Pre"-Shifter für die Speicheradress Berechnung in ID verlagere oder eine eigene MEM_ALU mache. Auch gilt es zu testen, was passiert, wenn man ALU_MUL/ALU_DIV/ALU_DIVS aus der Typdefinition löscht.

nicht müglich ist diese optimierung bei der addition da sie für die ld/st ops benötigt wird

wie ist eure meinung?








Other related posts:

  • » [CALU] Zeichnung - Elshuber Martin