Block: First version
[calu.git] / 4_block / blockdesc.tex
diff --git a/4_block/blockdesc.tex b/4_block/blockdesc.tex
new file mode 100644 (file)
index 0000000..342a95d
--- /dev/null
@@ -0,0 +1,48 @@
+\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