[CALU]

  • From: Günther Wimpassinger <e0525147@xxxxxxxxxxxxxxxxxxxx>
  • To: "CALU G. Wimpassinger" <calu-ss2010-tuwien@xxxxxxxxxxxxx>
  • Date: Tue, 13 Apr 2010 23:35:08 +0200

Hallo alle,

nachdem ich es jetzt endlich geschafft habe meine Funktionen zu implementieren will ich hier meine Eindruecke unserer ISA und die Zusammenfassung unserer Diskussionen darlegen.

Die Multiplikation habe ich so implementiert, dass das Produkt 32bit gross ist. Wenn wir das auch so in der Hardware machen, dann ist es nicht notwendig zwischen unsigned und signed multiply zu unterscheiden. Und es sind recht schlanke Funktionen geworden, wie ich finde. Ich hoffe nur, dass sich kein Fehler darin verbirgt.

Bei der Division ist mir aufgefallen, das wir keine Modulo-Operation in der ISA haben. Sollten wir evtl. doch noch eine Mehrtaktdivision implementieren, dann ist die Modulo-Operation quasi geschenkt. Bei "div" lassen sich die signed/unsigned Varianten nicht zusammenfuehren.

Das "setze Flags" bei arithmetischen Operationen ist, soweit ich das durch meine Beispielprogramme beurteilen kann, notwendig. Ich mache davon bei "div" Gebrauch.


==========
Zusammenfassung der Diskussion:
-) Enable/Disable Interrupt Instruktion STI/CLI
-) Wir streichen MULI* und DIVI*
-) Wir fueren LB, LBS, LHW, LHWS Instruktionen ein
    Byte und Halbwoerter muessen nicht ausgerichtet sein,
    Doppelwoerter hingegen an 2 Byte Grenzen, wenn wir 32
    bit Zugriff auf SRAM lassen. -) Ein Predicate ist immer auf 1 (p15)
-) Wir benoetigen Predicate-Define Befehle fuer "register CMP register" und
    "register CMP immediate".
-) Den Vorschlag von benedikt fuer die Predicate-Define Befehle finde ich
    OK, auch wenn ich zur Zeit noch den "alten" 24bit ISA Satz verwendet
    habe.
-) wir haben KEIN 0-register. -) wir haben static branch prediction (brach possible bit in der Instruktion) -) ALU Flags werden an bestimmte predicate register weiter geleitet, wenn in der Instruktion angegeben.

=============
Ich habe Vorgeschlagen, bei manchen Instruktionen mit Immediates statt
ra <= rb OP im, ra <= ra OP im zu verwenden, damit die Konstanten laenger
werden. Dass heisst aber automatisch dass ein "addi r0,r2,0" als move-Ersatz
nicht funktioniert. Bei Add/Sub reichen die kurzen Immediates meiner Meinung
nach.

Bei OR/AND/NOR/XOR haben die kurzen Imms kaum Sinn. Mir faellt im Moment keiner einer.

============
Wir brauchen unbedingt eine Instruktion die laengere Immediates laden kann.
Ein Vorschlag war eine "unpredicated load constant" instruction. Meine zwei Vorschlaege, oder eher hacks, lauten wie folgt:
(a)
-) Wir definieren ein bestimmtes Predicate immer auf 0
-) dadurch kann ich jede beliebiege Instruktion zu einem NOP machen
-) das aktuelle NOP wir zu einem LoadConstant in ein bestimmtes Register, wobei
   23:20 predicate
      19 1 (immediate)
   18:14 OPCODE 00000
   13:12 position
   11: 0 immediate

  semantik:
   position=b00 => r0 = immediate (mit sign extension)
   position=b01 => r0 = ro | (immediate << 12) (mit sign extension)
   position=b10 => r0 = ro | (immediate << 24) (kein sign ext. notwendig)

(b)
-) Die aktuelle NOP Instruktion ist nur dann ein echtes NOP wenn im Predicate-Teil (23:20) p0 steht. Sonst eine LoadConstant Instruktion. Beispielsweise wie bei (a).

=========================
Wir haben 52 4096 Bit Speicher am Cyclone, 512Byte, 128DWord/Memory.

x1 Speicherbloecke als STACK mit fixer Groesse
x2 Speicherbloecke fuer BIOS/Programm direkt am FPGA (mit Quartus raufspielen)
x3 Speicherbloecke als Instructionscratchpad, in dem Teile des aktuellen
   Programmcodes stehen, welcher ausgefuerht wird.

Derzeit gehen wir noch von einer "von Neumann" Architektur aus. Wenn wir das aendern, wir unser Instructionscratchpad zum Program-Memory und das SRAM zum Daten-Memory Dann wir der Speicherblock fuer BIOS die komplette Anwendung.

Bleiben wir bei von Neumann, muss es eine Moeglichkeit geben, Instruktionen in das Scratchpad zu bringen.
Wie genau/ungenau machen wir das jetzt mit dem Instruction-Scratchpad?

----
ich schick es jetzt mal weg, damit ihr es lesen und kommentieren koennt.

Guenther



Other related posts:

  • » [CALU] - Günther Wimpassinger
  • » [CALU] - Günther Wimpassinger