uart: swap status with config half word
[calu.git] / 4_block / blockdesc.tex
index 342a95d948b8cfd02a87dbed71ea9a9db05293a3..cd20deda7a5ccf7927fc28bf95278b43d4980eb3 100644 (file)
@@ -1,48 +1,65 @@
-\section{Allgemein}\r
-%\abbildung{pipeline.png}{so schaut unsre Architektur aus}{fig:pipeline}{1.4\textwidth}{90}\r
-\abbildung{pipeline.png}{Schematische Darstellung der Pipeline}{fig:pipeline}{0.95\textheight}{90} %0.95 weil sonst warning!\r
-Die Pipeline gliedert sich in 4 getrennte Stufen. Jene sind Fetch, Decode, Execute und Writeback.\r
-\section{Fetch-Stage}\r
-Die Aufgaben der Fetch-Stage sind relativ simple in\r
-\begin{itemize}\r
-       \item Anlegen der Instruktionsadresse an den Instruktions-Speicherbus. Daraufhin erhält die Decode-Stage die gewünschte Instruktion im nächsten Zyklus.\r
-       \item Die Instruktionsadresse ist entweder der inkrementierte Programmcounter, Jump-Result oder das Ergebnis der statischen Branchprediction\r
-\end{itemize}\r
-gegliedert.\r
-\section{Decode-Stage}\r
-Die Aufgaben der Decode-Stage fallen schon etwas komplexer aus und sind in\r
-\begin{itemize}\r
-       \item Decodieren der dichten Instruktion in eine aufgespaltene Form.\r
-       \item Laden der Operanden aus dem Registerfile und übergeben der jeweiligen Adressen.\r
-       \item Laden von Immediates in die Operanden.\r
-       \item   Evaluierung der Branchprediction. Rückführung der statischen Sprungadresse\r
-                               und NOP insertion falls die ALU/Writeback springt.\r
-\end{itemize}\r
-gegliedert.\r
-\section{Execute-Stage}\r
-Neben den Berechnungen beinhaltet diese Stufe auch die Forward-Unit welche s\"amtlichen\r
-Konflikte behandelt.\r
-\begin{itemize}\r
-       \item Ausführung der einzelnen Instruktionen auf die Operanden\r
-       \item Signalisieren eines Sprungs (ret vs. jmp). Jumpadresse kommt entweder vom Datenbus oder aus dem ALU-Ergebnis.\r
-       \item Signalisieren eines Registerschreibzugriffs, wobei dieses Ergebnis wieder vom Result oder Datenbus kommt.\r
-       \item   Ansprechen des Datenbusses (RAM, Extension-Module, read, write) und des Statuswortes sowie des Stackpointers.\r
-\end{itemize}\r
-\r
-\r
-Die Forward-Unit muss sämtliche Konflikte behandeln und veraltete Operanden durch die letzten Ergebnisse ersetzen. Sie besteht aus\r
-\begin{itemize}\r
-       \item 2-Register um \"Anderungskonflikte an Registern zu l\"osen.\r
-       \item   Zusammensetzen eines dieser zwei Register mit dem Wert vom Datenbus (load byte etc.).\r
-\end{itemize}\r
-\r
-Die Extensionmodule werden vom Prozessor aus wie der Speicher behandelt. Jedes Modul besitzt einen spezifischen Adressbereich.\r
-Ein eigener Controller mapped die Adressbereiche auf die Extensionmodule und leitet die entsprechenden Daten über ein Register auf das Modul weiter. \r
-Beim Lesezugriff auf einen dieser Speicherbereiche legt das Extensionmodul einen Zyklus sp\"ater seinen Output auf den Datenbus. \r
-\r
-\r
-\section{Writeback-Stage}\r
-\r
-Die Writeback stage übernimmt die Werte aus dem Ergebnisregister der Alu oder aus der Forwardunit(Registerzusammensetzung) und schreibt diese in das Registerfile zurück. \r
-Des weiteren kann die ALU das Jump Result nicht direkt an die Decode stage zurückgeben, da dieses erst im Folgezyklus vorhanden ist (im Falle eines branch-returns).\r
-Somit muss dies auch von der Writeback Stage erledigt werden.
\ No newline at end of file
+\section{Allgemein}
+
+\abbildung{pipeline.png}{Schematische Darstellung der Pipeline}{fig:pipeline}{0.95\textheight}{90} %0.95 weil sonst warning!
+
+Die Pipeline gliedert sich in 4 getrennte Stufen, diese sind Fetch, Decode, Execute und Writeback. Die Aufgaben der jeweiligen Stufen
+werden in den folgenden Abschnitten beschrieben.
+
+
+\section{Fetch-Stage}
+Die Aufgaben der Fetch-Stage sind relativ einfach.
+\begin{itemize}
+       \item Anlegen der Instruktionsadresse an den Instruktions-Speicherbus. Daraufhin erh\"alt die Decode-Stage die gew\"unschte Instruktion im n\"achsten Zyklus.
+       \item Die Instruktionsadresse ist entweder der inkrementierte Programmcounter, Jump-Result oder das Ergebnis der statischen Branchprediction.
+\end{itemize}
+
+
+\section{Decode-Stage}
+
+Die Aufgaben der Decode-Stage fallen schon etwas komplexer aus:
+\begin{itemize}
+       \item Decodieren der dichten Instruktion in eine aufgespaltene Form.
+       \item Anlegen der Adressen der in der Instruktion verwendeten Operandenregister an den Speicherbus des Registerfiles, dessen Inhalt liegt im Folgezyklus der ALU vor.
+       \item Im Falle von Immediate-Operationen wird der Immediatewert in das Nachfolgepipelineregister geschrieben, somit kann dieser von der ALU im Folgezyklus verwendet werden.
+       \item In der Instruktion ist eine statische Branch-prediction codiert. Die Fetch-Stage f\"urt also im Falle eines m\"oglichen Immediate-Sprunges die Sprungadresse an die Fetch-Stage zur\"uck.
+       \item Decode implementiert beim R\"uckschreiben in das Registerfile ''Read through Write'', somit erleichtert dies die Forwardunit der Exec-Stage.
+
+%Evaluierung der Branchprediction. R\"uckf\"uhrung der statischen Sprungadresse
+%                              und NOP insertion falls die ALU/Writeback springt.
+
+
+\end{itemize}
+
+
+\section{Execute-Stage}
+
+Neben den Berechnungen beinhaltet diese Stufe auch die Forward-Unit welche Datenabh\"angigkeiten zusammen mit der Decodestage aufl\"ost.
+
+\begin{itemize}
+       \item Ausf\"uhrung der arithmetischen und logischen Berechnungen
+       \item Signalisieren eines Sprungs (ret vs. jmp). Jumpadresse kommt entweder vom Datenbus des Speichers (Stack) oder aus dem ALU-Ergebnis.
+       \item Setzen von Write-Enable der R\"uckschreibeinheit in Abh\"angigkeit der Predicate Bits und des Statusworts.
+       \item Ansprechen des Datenbusses (RAM, Extension-Module, read, write) und des Statuswortes sowie des Stackpointers.
+\end{itemize}
+
+
+%Die Forward-Unit muss s\"amtliche Konflikte behandeln und veraltete Operanden durch die letzten Ergebnisse ersetzen. Sie besteht aus
+%\begin{itemize}
+%      \item 2-Register um \"Anderungskonflikte an Registern zu l\"osen.
+%      \item   Zusammensetzen eines dieser zwei Register mit dem Wert vom Datenbus (load byte etc.).
+%\end{itemize}
+
+Da die Decode-Stage bereits eine Lese/Schreiblatenz von einem Zyklus auf das Registerfile abdeckt muss sich die Forward Unit der Execute Stage noch das Ergebnis
+der letzten Operation merken um s\"amtliche Datenabh\"angigkeiten aufzul\"osen (Beispiel anhand folgender Instruktionen: r0 = 1; r1 = 2; r2 = r0 + r1). 
+
+Die Extensionmodule werden vom Prozessor aus wie der Speicher behandelt. Jedes Modul besitzt einen spezifischen Adressbereich.
+Ein eigener Controller mapped die Adressbereiche auf die Extensionmodule und leitet die entsprechenden Daten \"uber ein Register auf das Modul weiter. 
+Beim Lesezugriff auf einen dieser Speicherbereiche legt das Extensionmodul einen Zyklus sp\"ater seinen Output auf den Datenbus. 
+
+
+\section{Writeback-Stage}
+
+Die Writeback stage \"ubernimmt die Werte aus dem Ergebnisregister der Alu und schreibt diese in das Registerfile zur\"uck. 
+Des weiteren kann die ALU das Jump Result nicht direkt an die Decode Stage zur\"uckgeben, da dieses erst im Folgezyklus vorhanden ist (im Falle eines branch-returns).
+Somit muss dies auch von der Writeback Stage abgedeckt werden.
+