spartan3e: bootrom_v1.bit
[calu.git] / 1_isacmp / ppc.tex
index 79cd18dad4a791305277d0155bbb2c7c1df5c300..b12fe38d9616b5c42cc6ceae40346e27334bdbd6 100644 (file)
@@ -1 +1,126 @@
 \section{PowerPC}
+% Does it describe a CISC or RISC architecture?
+Die PowerPC Architektur wurde 1991 durch ein Konsortium aus Apple, IBM und
+Motorola spezifiziert. PowerPC steht dabei f\"ur \textit{\textbf{P}erformance
+\textbf{o}ptimization \textbf{w}ith \textbf{e}nhanced \textbf{R}ISC
+\textbf{P}erformance \textbf{C}hip} und ist, wie der Name schon sagt, eine RISC
+% Does the ISA describe an accumulator, a register, or a stack machine?
+und eine Load-Store Architektur. Je nach Bedarf kann eine konkrete
+Implementierung 32- oder 64-Bit sein; hier wollen wir nur auf 32-Bit eingehen.
+
+
+% Where are processors that implement the ISA deployed? In embedded systems
+% (micro- controllers, communication, multimedia), in servers, in desktop
+% computers?
+\subsection{Einsatzgebiete und Ziele}
+PowerPC wurde mit dem Ziel entwickelt m\"oglichst skalierbar und flexibel zu
+sein, da die tats\"achlichen Anwendungsgebiete recht unterschiedlich sind.
+Man findet diese Architektur daher in verschiedenen Bereichen:
+\begin{description}
+\item[Desktop] Apple verwendete PowerPC, aber mittlerweile von \texttt{x86}
+verdr\"angt
+\item[Embedded] Routern von Cisco, teilweise auf FPGAs von Xilinx und Altera zu
+finden
+\item[Multimedia] Prominentes Beispiel: d-box 2
+\item[Spielekonsolen] GameCube/Wii, Xbox 360 oder PS3\footnote{obwohl die Cell
+Architektur weit mehr ist}
+\item[Server] Vertreten durch beispielsweise POWER7 oder BlueGene
+\end{description}
+% What are the goals of the architecture? Performance, die area, energy
+% efficiency, code size, . . . ?
+% How are these goals reflected in the ISA?
+Die PowerPC Architektur ist also recht vielf\"altig und es gibt daher nicht
+\textit{das} Einsatzgebiet. Im Speziellen gibt es verschiedene \textit{Books}
+die unterschiedliche Bereiche abdecken und je nach den Bed\"urfnissen des CPU
+Herstellers implementiert werden k\"onnen.
+Darunter fallen Themen wie Floating Point, Signal Processing oder
+Vector Operationen. Weiters gibt eine sogenannte Basiskategorie die von allen
+Implementierung umgesetzt werden muss.
+
+\subsection{Beschreibung}
+Bei den meisten Befehle der ISA handelt es sich um Register-zu-Register
+Operationen im Drei-Register Format. Jede Instruktion ist vier Byte gro\ss.
+Durch Load bzw. Store Operationen besteht, wie in jeder Load/Store-Architektur,
+die M\"oglichkeit am Speicher zu operieren -- die Adressierungsarten sind
+hierbei \"au\ss erst eingeschr\"ankt: Zum Beispiel l\"adt die Instruktion
+\mbox{\texttt{lwz r3,4(r1)}} den Inhalt an der Speicherstelle \texttt{r1+4} in
+das Register \texttt{r3}. Weiters kann man die Basisadresse nach der
+Speicheroperationen noch updaten, zum Beispiel: \texttt{stwu r3,4(r1)} speichert
+den Inhalt von \texttt{r3} an die Speicherstelle \texttt{r1+4} und setzt weiters
+\texttt{r1 := r1 + 4}.
+
+Typische Register, plus Erkl\"arung, die in einer PowerPC Implementierung
+vorhanden sind, findet man in Tabelle \ref{tab:ppcreg}.
+\begin{table}[ht!]
+       \begin{tabular}{lp{3cm}p{9cm}}
+       \textbf{Register} & \textbf{Beschreibung} & \textbf{Kommentar}\\
+       \hline
+       \texttt{r0-r31} & General Purpose Register & 32 32-Bit Register\\
+       \texttt{cr0-cr7} & Condition \mbox{Register} Field & PowerPC besitzt acht
+       CRs. Bei einer Instruktion die ein Ergebnis in ein CR ablegt, kann man ein
+       gew\"unschtes CR angeben. Vielen Branchbefehlen kann man ebenfalls ein CR
+       \"ubergeben.\\
+       \texttt{lr} & Link Register & Bei Calls wird die Returnadresse in LR
+       hinterlegt. Bei bestimmten Branchbefehlen kann man angeben ob zu LR
+       gesprungen werden soll (das kann auch mit einem CR verkn\"upft werden).\\
+       \texttt{ctr} & Counter \mbox{Register} & Mit CTR k\"onnen viele Schleifen
+       realisiert werden; es gibt spezielle Branchbefehle die am CTR operieren und
+       z.B. bei ungleich Null einen Sprung durchf\"uhren. Dadurch k\"onnen
+       Spr\"unge sehr gut vorausgesagt werden.\\
+       \end{tabular}
+\centering
+\caption{Register in der PowerPC Architektur}
+\label{tab:ppcreg}
+\end{table}
+% Are latencies handled by the hardware or are they visible at the ISA level?
+% For example, branch delay slots expose the latencies of branches at the ISA
+% level.
+
+Latenzen sind auf ISA Niveau nicht sichtbar, man kann dem Prozessor aber
+Voraussagen mitteilen. Beispielsweise ist bei der gegebenen Funktion
+\texttt{sum()} die L\"ange auf Null zu pr\"ufen. Da im allgemeinen Fall ein Wert
+ungleich Null erwartet wird, kann dem Sprung eine Voraussage mitteilen, wobei
+\texttt{-} f\"ur Sprung wird nicht ausgef\"uhrt und \texttt{+} f\"ur das
+Gegenteil steht. In manchen F\"allen, wie z.B. Branchoperationen auf das CTR
+machen solche Voraussagen nur wenig Sinn, da die Hardware den Sprung ohnehin
+sehr fr\"uh berechnen kann.
+
+% Are conditional branches (compute condition and jump) performed in a single
+% step, or are testing and branching unbundled?
+Weiters k\"onnen Conditional Branches je nach Inhalt eines CR ausgef\"uhrt
+werden. Wie bei vielen anderen ISAs k\"onnen CRs mit Befehlen wie \texttt{cmp}
+gesetzt werden, aber auch mit dem sogenannten \textit{dot suffix}, der bei
+vielen Befehlen wie z.B. \texttt{add}, optional vorhanden ist. Dieser verursacht
+implizit ein Update auf ein CR (meistens CR0).
+
+\subsection{Perlen und W\"unsche}
+% Which features of the ISA do you like, which features would you change?
+\begin{itemize}
+\item \textbf{Gute Branchpreditcion}: Durch die schon genannten Feature wie LR und
+Counter Register sind Spr\"unge fr\"uh in der Pipeline erkennbar.
+\item \textbf{\texttt{rlwinm}}: \textit{Rotate Left Word Immediate then AND with
+Mask}. Ein sehr m\"achter und in verschiedensten Variante oft verwendeter
+Befehl. Um die Funktionsweise zu demonstrieren: Der Aufruft \mbox{\texttt{rlwinm
+rA,rS,SH,MB,ME}}, wobei \mbox{$0 \le \text{SH,MB,ME} \le 31$} gilt, nimmt den
+Inhalt aus \texttt{rS} und rotiert diesen um \texttt{SH} nach links. Danach wird
+auf das Ergebnis mit einer Maske verundet. Die angesprochene Maske ist 32-Bit
+gro{\ss} und von der Stelle MB bis ME mit 1er und ansonsten 0er belegt. Sollte
+$\text{MB} > \text{ME}$ sein, so werden die Stellen ME bis MB mit 0er belegt
+und die anderen Stellen mit 1er. Das Ergebnis wird in \texttt{rD} gespeichert.
+\item
+\textbf{\texttt{cntlzw}}: \textit{Count Leading Zeros Word}
+\item \dots{}
+\end{itemize}
+% TODO wenn mir noch was einfaellt
+W\"unsche: Keine.
+
+\subsection{Listing}
+\lstinputlisting[caption=PowerPC Code]{ppc.s}
+In der Schleife werden also drei Befehle ausgef\"uhrt, wobei \texttt{lwzu} zwei
+Taktzyklen ben\"otigt und \texttt{add} einen Zylus braucht. \texttt{bdnz}
+braucht im allgemeinen Fall \textit{keinen} Zyklus, da die Hardware den Sprung
+schon sehr fr\"uh in der Pipeline berechnen kann
+\footnote{Zyklendauer aus dem Datenblatt des PowerPC 750CXe entnommen}.
+Die Codegr\"o\ss{}e der
+Schleife betr\"agt 12 Byte, da jede Instruktion 4 Byte gross ist.
+