tabellen vorlage
[hwmod.git] / spec / spec.tex
index d1cf16d4fa532884ef35dfbffd597c3dcc28a41e..fba8fb4fe2955532d4bf8d8ff45906b19f19ca45 100644 (file)
@@ -143,17 +143,25 @@ Ersteres wuerde ich unter Logisches Interface verstehen.
 %TODO Module soll der Parser in einer "`Schleife"' alle Teilberechnungen an die ALU weiterleiten und zB Zwischenergebnisse speichern? Die ALU könnte dann nur 2 Zahlen addieren/bla.
 %Da in der History Zahlen als Character Strings abgelegt sind müssen diese für die ALU in Binärdarstellung umgewandelt werden - und Umgekehrt natürlich!
 
+\begin{landscape}
 \paragraph{VGA}
+siehe Tabelle \ref{tab:vga}.
 
-TODO: How to control the VGA component ?= schnittstelle + beschreibung des vga moduls?
+\THEAD{vga}{Interfaces f\"ur das VGA Modul}
+vga\_clk & in & 1 & std\_logic & PLL & VGA-Clock \ZE
+vga\_res\_n & in & 1 & std\_logic & PLL & VGA-Reset \ZE
 
-vorgegeben:
-
-allgemein: sys\_clk (in), sys\_res\_n (in)
+vsync\_n & out & 1 & std\_logic & Bildschirm & Vertikale Synchronisation\ZE
+hsync\_n & out & 1 & std\_logic & Bildschirm & Horizontale Synchronisation\ZE
 
-zu den hardware pins: vga\_clk (in), vga\_res\_n (in), vsync\_n (out), hsync\_n (out), ? bits r (out), ? bits g (out), ? bits b (out)
+r & out & 3 & std\_logic\_vector & Bildschirm & Ausgabe der Farbe Rot \ZE
+g & out & 3 & std\_logic\_vector & Bildschirm & Ausgabe der Farbe Gr\"un \ZE
+b & out & 2 & std\_logic\_vector & Bildschirm & Ausgabe der Farbe Blau \ZE
 
-zum modul display: 8 bit command (in), 32 bit command\_data (in), 1 bit free (out)
+command & in & 8 & std\_logic\_vector & Display & Kommando an das VGA Modul \ZE
+command\_data & in & 32 & std\_logic\_vector & Display & Daten f\"ur das Kommando \ZE
+free & in & 1 & std\_logic & Display & Signalisiert Bereitschaft \ZE
+\TEND
 
 \paragraph{PS/2}
 
@@ -180,14 +188,6 @@ externe Pins f
 
 zum modul pc-kommunikation: 8 Empfangsbits (out), 1 Received Flag (out), 8 Sendebits (in), 1 Sendflag (in)
 
-\begin{table}%
-\begin{tabular}{lcr}
-
-\end{tabular}
-\caption{}
-\label{}
-\end{table}
-
 \paragraph{Scanner}
 
 TODO
@@ -230,7 +230,7 @@ zu modul history: 5 bit zeile (2*14+1) (out), 7 bit spalte (71 zeichen - 0 am en
 
 an modul bin/dez-converter: 11*8 bit char (vorzeichen + dezimalstellen; ok, das ist ein overkill...) (in/out), 32 bit binärstellen (in/out), 1 bit do\_deztobin (out), 1 bit do\_bintodez (out), 1 bit bintodez\_done (in), 1 bit deztobin\_done (?) (in)
 
-zu modul alu: 32 bit operator1 (out), 32 bit operator2 (out), 32 bit result (in), 1 bit do\_calc (out), 1 bit calc\_done (in)
+zu modul alu: enum opcode (out), 32 bit operator1 (out), 32 bit operator2 (out/in), 1 bit do\_calc (out), 1 bit calc\_done (in)
 
 zu modul scanner: 1 bit finnnnnished\_result (out) (selbe signal wie an history modul. kann man das
 doppelt nehmen?)
@@ -253,7 +253,7 @@ TODO
 
 allgemein: sys\_clk (in), sys\_res\_n (in)
 
-zum parser: 32 bit operator1 (in), 32 bit operator2 (in), 32 bit result (out), 1 bit do\_calc (in), 1 bit calc\_done (out)
+zum parser: enum opcode (in), 32 bit operator1 (in), 32 bit operator2 (in/out), 1 bit do\_calc (in), 1 bit calc\_done (out)
 
 \paragraph{Display}
 
@@ -280,6 +280,7 @@ ein Pin zum externen Button (in)
 zum modul rs232: 8 Empfangsbits (in), 1 Received Flag (in), 8 Sendebits (out), 1 Sendflag (out)
 
 zum modul history: 5 bit zeile (2*14+1) (out), 7 bit spalte (71 zeichen - 0 am ende notwendig?) (out), 1 get bit (out), 1 done bit (in), 8 daten bits (in)
+\end{landscape}
 
 \subsubsection{Verhalten der Interfaces}
 
@@ -336,7 +337,7 @@ wie schauen interne strukturen aus? (speicher, logische bloecke, parallele proze
 \includegraphics[width=0.9\textwidth]{sm/scanner.pdf}
 \centering
 \caption{Statemachine zum Scannen des Inputs der PS/2 Schnittstelle}
-\label{fig:rs232-rs}
+\label{fig:scanner}
 \end{figure}
 
 \begin{itemize}
@@ -357,10 +358,87 @@ Modul wird dadurch getriggert das anliegende Zeichen in den Buffer zu \"ubernehm
 \subsection{History}
 
 \subsection{Parser}
+\begin{figure}[!ht]
+\includegraphics[width=0.9\textwidth]{sm/parser.pdf}
+\centering
+\caption{Statemachine zum Parsen der aktuellen Expression}
+\label{fig:parser}
+\end{figure}
+
+\begin{lstlisting}
+procedure exec() {
+       z := z*s;
+       switch(opp) {
+               case NOP: 
+                       if(aktop != '\0')
+                               c1();
+                       break;
+               case '-':
+                       z := z * (-1);
+               case '+':
+                       c1();
+                       break;
+
+               case '/':
+               case '*':
+                 if(aktop in ['+','-','\0']) {
+                         alu(opp, z, punkt);
+                         do_calc = 1;
+                         while(calc_done == 0);
+
+                         alu(ADD, punkt, strich);
+                         punkt = 1;
+                 }
+                 else if (aktop in ['*','/']) {
+                         alu(opp, z, punkt);
+                 }
+                 break;
+       }
+       do_calc = 1;
+       opp = aktop;
+}
+
+procedure c1() {
+       if(aktop in ['+','-','\0']) {
+               alu(ADD, z, strich);
+       }
+       else if (aktop in ['*','/']) {
+               alu(MUL, z, punkt);
+       }
+}
+\end{lstlisting}
+
+\begin{itemize}
+\item \textbf{idle}: Das Modul ist unt\"atig und wartet auf eine steigende Flanke von \emph{do\_it}.
+
+\item \textbf{read char}: Lokale Variablen werden zur\"uckgesetzt und das n\"achste Zeichen wird vom
+History Modul angefordert.
+
+\item \textbf{sign}: Ggf. wird das Vorzeichen auf '-' gesetzt.
+
+\item \textbf{calc}: Zeichen f\"ur Zeichen wird eingelesen und die Zahl wird daraus berechnet.
+
+\item \textbf{ALU}: Punkt- und Strichrechnungen m\"ussen getrennt behandelt werden, daher ergibt
+sich dieses Konstrukt im Codebeispiel.
+
+\item \textbf{null}: Sonderbehandlung ist n\"otig wenn die Expression mit '\textbackslash 0'
+abgeschlossen wird.
+
+\item \textbf{done}: In diesem Zustand wird das Ergebnis das sich je nach \emph{opp} in
+\emph{strich} oder \emph{punkt}  befindet als String in den Ergebnisbuffer des History Modules
+geschrieben und danach wird \emph{finnnnnished\_result} f\"ur einen Zyklus auf high gesetzt.
+
+\item \textbf{error}: Zwecks \"Ubersichtlichkeit wurden die Transitionen zu diesem Zustand
+vernachl\"assigt. Dieser Zustand wird erreicht sobald ein Grammatikfehler oder ein Fehler der ALU
+auftritt. Es wird der String ``Error'' in den Ergebnisbuffer geschrieben und
+\emph{finnnnnished\_result} wird f\"ur einen Zyklus auf high gesetzt.
+\end{itemize}
+
 
 \subsection{Bin/Dez-Converter}
 
 \subsection{ALU}
+opcodes: NOP, ADD, MUL, DIV, DONE (als enum)
 
 \subsection{Display}