isa_cmp: layout stuff and minor fixes again
[calu.git] / 1_isacmp / spear2.tex
index 2f222adb46c6cafcb1bf8253f94e755fdfd424b0..291be4e9cf47e8cb4c42d071bddff06592a3e80c 100644 (file)
@@ -14,7 +14,7 @@ Entwickler die Wahl, welchen Algorithmus er in Hardware und welchen Software imp
 \subsection{Conditional Instructions und Jumps}\r
 Alle Abh\"angigkeiten werden von der Hardware \"uberpr\"uft und entsprechend behandelt. D.h.\r
 im ISA-Level m\"ussen keine Abh\"angigkeiten ber\"ucksichtigt werden. Im Falle von CI wird entweder\r
-ein NOP-eingef\"ugt (bzw. Ctrl-Signale deaktiviert) oder die Instruktion wird normal behandelt.\r
+ein \texttt{NOP} eingef\"ugt (bzw. Ctrl-Signale deaktiviert) oder die Instruktion wird normal behandelt.\r
 Alle Conditional- und Jump Tests passiern in der Decode-Stufe und die eigentliche Ausf\"uhrung wird in der Exec-Stage\r
 abgeschlossen, wobei Ctrl-Signale an die Decode-Stufe zur\"uckgef\"uhrt werden. Es wurden keine\r
 Stalls oder \"ahnliches eingef\"uhrt, damit die Programm Execution einer Instruktion konstant bleibt.\r
@@ -26,7 +26,8 @@ diese als Erweiterungsmodule implementiert werden. Somit kann der Spear2 relativ
 und eine h\"ohere Taktrate erzielen als eine Hardcore-Architektur. Au\ss erdem ist SW leichter zu warten und verstehen, dies\r
 wiederrum verk\"urzt die Entwicklungszeit. Dennoch wird ein Fixedfunction-Core bessere Ergebnisse erzielen, wenn sich\r
 die Funktionalit\"at des Softcore-Prozessors nicht mehr von diesem unterscheidet.\r
-Da aber die ISA relativ begrenzt ist (add, sub, comp, load, store,...), wird die Programmgr\"o\ss e (fixed OP-Code) nat\"urlich\r
+Da aber die ISA relativ begrenzt ist (\texttt{add}, \texttt{sub}, \texttt{comp},\r
+\texttt{load}, \texttt{store},...), wird die Programmgr\"o\ss e (fixed OP-Code) nat\"urlich\r
 bei komplexen Operationen wachsen. Dennoch ist der OP-Code mit 16-Bit relativ klein.\r
 \r
 Damit auf Extension-Module oder Speicher schnell zugegriffen werden kann (Stackoperation), gibt es sogenannte Framepointer.\r
@@ -37,24 +38,25 @@ Prinzipiell ist diese ISA eine sehr kompakte und elegante Form einer RISC-Archit
 w\"unschenswert gewesen, da bei verschachtelten Subroutine-Calls die Software die R\"ucksprungadresse speichern muss. F\"ur\r
 einen stack\"ahnlichen Betrieb kann nat\"urlich ein Framepointer herangezogen werden. Dennoch w\"achst dadurch der Code.\r
 \subsection{Listing}\r
-Register r14 wird f\"ur die R\"ucksprungadresse verwendet, r0 f\"ur den R\"uckgabewert und r1-r4 f\"ur die Argumente.\r
-r5-r8 wird f\"ur tempor\"are Register verwendet (Caller-Save).\r
+Register \texttt{r14} wird f\"ur die R\"ucksprungadresse verwendet, \texttt{r0} f\"ur den R\"uckgabewert und \texttt{r1-r4} f\"ur die Argumente.\r
+\texttt{r5-r8} wird f\"ur tempor\"are Register verwendet (Caller-Save).\r
 \begin{lstlisting}[caption=Spear2 Code]{Spear2-Code}\r
-ldli r0, 0   #sum=0\r
-ldli r5,-20  #Framepointer X\r
-ldli r6, 0   #i=0\r
-stw r2, r5   #fpx -> &arr[0]\r
+ldli r0, 0    #sum=0\r
+ldli r5,-20   #Framepointer X\r
+ldli r6, 0    #i=0\r
+stw r2, r5    #fpx -> &arr[0]\r
 \r
 cmp_eq r1, r6 #for\r
 jmpi_ct, 4    #i<len\r
 \r
-ldfpx r7,0   #arr[i]\r
-add r0, r7   #sum+=arr[i]\r
-addi r6, 1   #i++\r
+ldfpx r7,0    #arr[i]\r
+add r0, r7    #sum+=arr[i]\r
+addi r6, 1    #i++\r
 \r
-jmpi -5      #for end\r
+jmpi -5       #for end\r
 rts\r
 \end{lstlisting}\r
-Man erkennt, dass innerhalb der Schleife 6 Instruktionen ausgef\"uhrt werden (inkl. Bedingungen). Ein Jump bewirkt\r
-einen Flush in der Decode-Stufe. Also wird jump zu einem jump+nop. Solange die Schleife exekutiert wird, ergibt sich eine\r
-Laufzeit von 7 Zyklen, bei 6 Befehlen was einer Codesize des Loops von 12 Bytes entspricht.\r
+Man erkennt, dass innerhalb der Schleife sechs Instruktionen ausgef\"uhrt werden (inkl. Bedingungen). Ein Jump bewirkt\r
+einen Flush in der Decode-Stufe. Also wird \texttt{jump} zu einem\r
+\texttt{jump+nop}. Solange die Schleife exekutiert wird, ergibt sich eine\r
+Laufzeit von sieben Zyklen, bei sechs Befehlen was einer Codesize des Loops von 12 Bytes entspricht.\r