\section{Spear2}
Die Spear2-Architektur wurde an der TU-Wien entwickelt und versuchte dadurch ein relativ einfaches
Design ohne Lizenzkosten verfügbar zu machen. Daher fällt der Kern der Architektur
relativ simple als RISC-Architektur aus.
\subsection{Einsatzgebiet}
Die Spear2-Architektur beschreibt einen Softcore-Prozessor, d.h. dieser kann den eigenen Bedürfnissen
angepasst werden. Einerseits kann zwischen einer 16/32-Bit Architektur gewählt werden, andererseits besteht
die Möglichkeit eigene oder dritte Module an den internen oder AMBA-Bus anzuschließen. Somit sind
viele der in der GRLIB enthaltenen Module kompatibel.
Der Grund warum ARM heutzutage in vielen ES eingesetzt wird, besteht in der Flexibilität. Oftmals
werden einfach nicht viele I/O-Pins oder eben rechenleistung benötigt, wie sie Hardcore-Architekturen
anbieten. Hier versucht sich die Spear2-Architektur ebenfalls einzureihen. Somit bleibt dem
Entwickler die Wahl, welchen Algorithmus er in Hardware und welchen Software implementieren möchte.
\subsection{Conditional Instructions und Jumps}
Alle Abhängigkeiten werden von der Hardware überprüft und entsprechend behandelt. D.h.
im ISA-Level müssen keine Abhängigkeiten berücksichtigt werden. Im Falle von CI wird entweder
ein NOP-eingefügt (bzw. Ctrl-Signale deaktiviert) oder die Instruktion wird normal behandelt.
Alle Conditional- und Jump Tests passiern in der Decode-Stufe und die eigentliche Ausführung wird in der Exec-Stage
abgeschlossen, wobei Ctrl-Signale an die Decode-Stufe zurückgeführt werden. Es wurden keine
Stalls oder ähnliches eingeführt, damit die Programm Execution
\subsection{Ziele}
Das Ziel dieser Architektur besteht darin eine große Flexibilität zu bieten. Dadurch kann die Spear2-Architektur
dem Einsatzgebiet angepasst werden. D.h. falls notwendig kann z.B. ein FFT oder eine Multiplikation der Architektur
hinzugefügt werden um mehr Performance zu erreichen. Falls Schnittstellen an die Umgebung fehlen, können
diese als Erweiterungsmodule implementiert werden. Somit kann der Spear2 relativ klein gehalten werden (Cost, Performance)
und eine höhere Taktrate erzielen als eine Hardcore-Architektur. Außerdem ist SW leichter zu warten und verstehen, dies
wiederrum verkürzt die Etwicklungszeit. Dennoch wird ein Fixedfunction-Core bessere Ergebnisse erzielen, wenn sich
die Funktionalität des Softcore-Prozessors nicht mehr von diesem unterscheidet.
Da aber die ISA relativ begrenzt ist (add, sub, comp, load, store,...), wird die Programmgröße (fixed OP-Code) natürlich
bei komplexen Operationen wachsen. Dennoch ist der OP-Code mit 16-Bit relativ klein.

Damit auf Extension-Module oder Speicher schnell zugegriffen werden kann (Stackoperation), gibt es sogenannte Framepointer.
Dieser lädt ein Wort von der dort hinterlegten Adresse und zählt ein Offset hinzu. Somit können wortweise Zugriffe
innerhalb von einem Zyklus erfolgen.
\subsection{Wünsche}
Prinzipiell ist diese ISA eine sehr kompakte und elegante Form einer RISC-Architektur, dennoch wäre z.B. ein dedizierter Stackpointer
wünschenswert gewesen, da bei verschachtelten Subroutine-Calls die Software die Rücksprungadresse speichern muss. Für
einen Stackähnlichen Betrieb kann natürlich ein Framepointer herangezogen werden. Dennoch wächst dadurch der Code.
\subsection{Listing}
Register r14 wird für die Rücksprungadresse verwendet, r0 für den Rückgabewert und r1-r4 für die Argumente.
r5-r8 wird für temporäre Register verwendet (Caller-Save).
\begin{lstlisting}[caption=Spear2 Code]{Spear2-Code}
ldli r0, 0   #sum=0
ldli r5,-20  #Framepointer X
ldli r6, 0   #i=0
stw r2, r5   #fpx -> &arr[0]

cmp_eq r1, r6 #for
jmpi_ct, 4    #i<len

ldfpx r7,0   #arr[i]
add r0, r7   #sum+=arr[i]
addi r6, 1   #i++

jmpi -5      #for end
rts
\end{lstlisting}
Man erkennt, dass innerhalb der Schleife 6 Instruktionen ausgeführt werden (inkl. Bedingungen). Ein Jump bewirkt
einen Flush in der Decode-Stufe. Also wird jump zu einem jump+nop. Also solange die Schleife exekutiert wird, ergibt sich eine
Laufzeit von 7 Zyklen, bei 6 Befehlen was einer Codesize des Loops von 12 Bytes entspricht.
