\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\r
+Stalls oder \"ahnliches eingef\"uhrt, damit die Programm Execution einer Instruktion konstant bleibt.\r
\subsection{Ziele}\r
Das Ziel dieser Architektur besteht darin eine gro\ss e Flexibilit\"at zu bieten. Dadurch kann die Spear2-Architektur\r
dem Einsatzgebiet angepasst werden. D.h. falls notwendig kann z.B. ein FFT oder eine Multiplikation der Architektur\r
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
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