spec: dies und das
[hwmod.git] / spec / spec.tex
index 628d28a7c8e633e766fc57b7e627d216251368c9..29bdfcaf4ca928ff18b3c70bb0e1d019be5fb67d 100644 (file)
@@ -53,7 +53,9 @@ EXPRESSION = OPERAND \{ OPERATOR OPERAND \} ;
 
 \req{Die Anzeige der Ein- und Ausgaben erfolgt über einen VGA Monitor.}
 
-\req{Es wird pro Zeile eine Eingabe oder Ausgabe angezeigt. Die aktuelle Eingabezeile befindet sich zuoberst, darunter das Ergebnis der vorigen Rechnung, darunter die Eingabe der vorigen Rechnung und so weiter}
+\req{Es wird pro Zeile eine Eingabe oder Ausgabe angezeigt. Die aktuelle Eingabezeile wandert nach
+unten, dar\"uber befindet sich das Ergebnis der vorigen Rechnung, dar\"uber die Eingabe der
+vorigen Rechnung usw.}
 
 \req{Auf die in zuvor angegebene Methode sollen zusätzlich zur aktuellen Eingabezeile die letzten 14 Ein- und Ausgaben dargestellt werden}
 
@@ -75,8 +77,6 @@ EXPRESSION = OPERAND \{ OPERATOR OPERAND \} ;
 
 In Abbildung \ref{fig:arch} ist der Aufbau des Taschenrechners zu sehen. Der Taschenrechner besteht aus folgenden Modulen:
 
-%\subsection{Module}
-
 \begin{itemize}
 \item \textbf{VGA} - Zeichenweises Ansprechen des Monitors
 \item \textbf{Display} - Liest einzelne Zeichen aus der History aus und leitet diese an das VGA Modul weiter, um sie in der entsprechenden Zeile anzeigen zu lassen
@@ -94,7 +94,7 @@ Berechnungs-Endergebnis wird jedoch wieder in einzelne Charakter umgerechnet und
 
 
 \begin{landscape}
-\subsection{Logische und physikalische Interfaces der Module}
+\subsection{Logische und physikalische Interfaces}
 
 \subsubsection{VGA}
 \THEAD
@@ -113,7 +113,7 @@ command\_data & in & 32 & std\_logic\_vector & Display & Daten f\"ur das Kommand
 free & out & 1 & std\_logic & Display & Signalisiert Bereitschaft \ZE
 \TEND
 
-
+\newpage
 \subsubsection{Display}
 %Liest einzelne Zeichen aus der History aus und leitet diese an das VGA Modul weiter, um sie in der entsprechenden Zeile anzeigen zu lassen
 \THEAD
@@ -122,7 +122,7 @@ auszulesen \ZE
 new\_result & in & 1 & std\_logic & History & Aufforderung der History das aktuelle Ergebnis
 auszulesen \ZE
 zeile & out & 5 & std\_logic\_vector & History & Zeilenadressierung ($2 * 15$ Zeilen $=30$) \ZE
-spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 Ziechen inklusive \textbackslash 0) \ZE
+spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 Zeichen inklusive \textbackslash 0) \ZE
 get & out & 1 & std\_logic & History & Signalisiert Speicheranforderung \ZE
 done & in & 1 & std\_logic & History & Signalisiert dass Daten anliegen \ZE
 char & in & 8 & character & History & enth\"alt angeforderne Daten \ZE
@@ -132,7 +132,7 @@ command\_data & out & 32 & std\_logic\_vector & VGA & Daten f\"ur das Kommando \
 free & in & 1 & std\_logic & VGA & Signalisiert Bereitschaft \ZE
 \TEND
 
-
+\newpage
 \subsubsection{RS232}
 %Senden und Empfangen von Nachrichten vom/zum PC über die serielle Schnittstelle
 \THEAD
@@ -146,11 +146,11 @@ tx\_data & out & 8 & std\_logic\_vector & PC-Kommunikation & Datenfeld f\"ur das
 tx\_new & out & 1 & std\_logic & PC-Kommunikation & Signalisiert dass das anliegende Byte gesendet werden soll \ZE
 \TEND
 
-
+\newpage
 \subsubsection{PC-Kommunikation}
 %Auf eine vom PC eintreffende Bufferübermittlungsanforderung oder ein Drücken des entsprechenden Board-Buttons, liest es Zeichen für Zeichen aus dem History Modul aus und leitet es an das RS232 Modul weiter
 \THEAD
-btn & in & 1 & std\_logic & externer Button & zum Triggern der RS232 Kommunikation \ZE
+btn\emph{A} & in & 1 & std\_logic & externer Button & zum Triggern der RS232 Kommunikation \ZE
 
 rx\_data & in & 8 & std\_logic\_vector & RS232 & Datenfeld f\"ur das Empfangen \ZE
 rx\_new & in & 1 & std\_logic & RS232 & Signalisiert ein neu empfangendes Byte \ZE
@@ -165,6 +165,7 @@ char & in & 8 & character & History & enth\"alt angeforderne Daten \ZE
 \TEND
 
 
+\newpage
 \subsubsection{PS/2}
 \THEAD
 new\_data & out & 1 & std\_logic\_vector & Scanner & Signalisiert neuen Scancode \ZE
@@ -195,7 +196,7 @@ finished & in & 1 & std\_logic & Parser & Auswertung fertig \ZE
 %Wertet die Eingabezeile der History aus und liefert als Antwort entweder einen Fehler zurück oder gibt die einzelnen Berechnungen von je zwei Zahlen an die ALU weiter, die vom History Modul ausgelesenen zusammenhängenden Dezimalstellen werden mit dem Bin/Dez-Converter Modul in Binärzahlen umgerechnet, das Berechnungs-Endergebnis wird wieder in mit dem Converter Modul in einzelne Charakter umgerechnet und in der History gespeichert
 \THEAD
 h\_rw & in & 1 & std\_logic & History & 0 = read (Expression), 1 = write (Ergebnis) \ZE
-h\_spalte & in & 7 & std\_logic\_vector & History & Spaltenadressierung (71 Ziechen inklusive \textbackslash 0) \ZE
+h\_spalte & in & 7 & std\_logic\_vector & History & Spaltenadressierung (71 Zeichen inklusive \textbackslash 0) \ZE
 h\_rget & in & 1 & std\_logic & History & Signalisiert Leseanforderung \ZE
 h\_rdone & out & 1 & std\_logic & History & Signalisiert dass Daten anliegen \ZE
 h\_read & in & 8 & character & History & enth\"alt angeforderne Daten \ZE
@@ -247,13 +248,13 @@ s\_backspace & in & 1 & std\_logic & Scanner & Signalisiert Backspace (letztes Z
 d\_new\_eingabe & out & 1 & std\_logic & Display & Fordert Display auf die Eingabe auszulesen \ZE
 d\_new\_result & out & 1 & std\_logic & Display & Fordert Display auf das Ergebnis auszulesen \ZE
 d\_zeile & in & 5 & std\_logic\_vector & Display & Zeilenadressierung ($2 * 15$ Zeilen $=30$) \ZE
-d\_spalte & in & 7 & std\_logic\_vector & Display & Spaltenadressierung (71 Ziechen inklusive \textbackslash 0) \ZE
+d\_spalte & in & 7 & std\_logic\_vector & Display & Spaltenadressierung (71 Zeichen inklusive \textbackslash 0) \ZE
 d\_get & in & 1 & std\_logic & Display & Signalisiert Speicheranforderung \ZE
 d\_done & out & 1 & std\_logic & Display & Signalisiert dass Daten anliegen \ZE
 d\_char & out & 8 & character & Display & enth\"alt angeforderne Daten \ZE
 
 p\_rw & in & 1 & std\_logic & Parser & 0 = read (Expression), 1 = write (Ergebnis) \ZE
-p\_spalte & in & 7 & std\_logic\_vector & Parser & Spaltenadressierung (71 Ziechen inklusive \textbackslash 0) \ZE
+p\_spalte & in & 7 & std\_logic\_vector & Parser & Spaltenadressierung (71 Zeichen inklusive \textbackslash 0) \ZE
 p\_rget & in & 1 & std\_logic & Parser & Signalisiert Leseanforderung \ZE
 p\_rdone & out & 1 & std\_logic & Parser & Signalisiert dass Daten anliegen \ZE
 p\_read & in & 8 & character & Parser & enth\"alt angeforderne Daten \ZE
@@ -341,7 +342,6 @@ alle requirements muessen von testfaellen abgedeckt werden!
 
 
 \section{Detailed Design Description}
-
 \subsection{VGA}
 siehe \textit{hwmod\_ipcores.pdf}
 
@@ -353,14 +353,59 @@ siehe \textit{hwmod\_ipcores.pdf}
 \label{fig:display}
 \end{figure}
 
+\begin{itemize}
+\item \textbf{idle}: In diesem Zustand wird die lokale Variable \emph{s}, die der Spaltenberechnung
+dient, zur\"uckgesetzt.
+\item \textbf{addr\_eingabe}: Das Modul weiss nun, dass eine neue Eingabe vorliegt, es wird daher
+aufgefordert jenige zu aktualisieren. Daf\"ur wird nun die passende Zeile berechnet (mit Hilfe der
+Variable \emph{z}).
+\item \textbf{addr\_ergebnis}: In diesem Zustand weiss das Modul, dass ein neues Resultat vorliegt,
+es muss sich also nun die Zeilennummer mit Hilfe der internen Variable \emph{z} berechnen.
+\item \textbf{read/put}: Hier wird Zeichen f\"ur Zeichen das von der berechneten Zeilen vom
+History Modul angefordert und per VGA Modul auf den Bildschirm ausgegeben. F\"ur den Fall dass nicht
+die vollen 71 Zeichen in der entsprechenden Zeile enthalten sind\footnote{ein String wird mit
+\emph{` \textbackslash 0'} abgeschlossen}, wird der Rest der Zeile am Bildschirm mit dem Leerzeichen
+\emph{` '} ausgef\"ullt.
+\end{itemize}
+
 \subsection{RS232}
-%test, TODO
+Es soll eine Baudrate von 115200 bauds und die 8N1 Codierung (8bit Daten, keine Parity und ein
+Stopbit) verwendet werden. Da das FPGA Design um ein Vielfaches schneller als 115200Hz \footnote{
+n\"amlich $33.33$MHz} ist muss bei der Implementierung zus\"atzlich ein Taktgeber f\"ur das RS232
+Modul implementiert werden um BT zu erzeugen (BT steht dabei f\"ur BitTime), das soll mit einem
+Takteiler realisiert werden. Ausserdem ist zu beachten dass das LSB zuerst geschickt wird.
+
 \begin{figure}[!ht]
 \includegraphics[width=0.9\textwidth]{sm/rs232-rs.pdf}
 \centering
-\caption{Statemachine zum Empfangen auf der RS232 Schnittstelle (8N1)}
-\label{fig:rs232-rs}
+\caption{Statemachine des RS232 Modules zum Empfangen von Daten}
+\label{fig:rs232rx}
 \end{figure}
+\begin{itemize}
+\item \textbf{idle}: die lokale Variable \emph{bc} wird zur\"uckgesetzt.
+\item \textbf{read startbit}: Eine fallende Flanke auf \emph{rxd} signalisiert dass eine
+Byte\"ubertragung beginnt.
+\item \textbf{read}: In diesem State werden die Datenbits nacheinander \"uber \emph{rxd} empfangen.
+\item \textbf{read stopbit}: Um das Ende einer Byte\"ubertragung zu signalisieren wird \emph{rxd}
+auf high gesetzt. Dadurch weiss das RS232 Modul bescheid dass die Byte\"ubertragung zu ende ist und
+kann dem PC-Kommunikation Modul signalisieren, dass ein Byte vollst\"andig empfangen wurde.
+\end{itemize}
+
+
+\begin{figure}[!ht]
+\includegraphics[width=0.9\textwidth]{sm/rs232-ts.pdf}
+\centering
+\caption{Statemachine des RS232 Modules zum Senden von Daten}
+\label{fig:rs232tx}
+\end{figure}
+\begin{itemize}
+\item \textbf{idle}: die lokale Variable \emph{bc} wird zur\"uckgesetzt.
+\item \textbf{write startbit}: Um eine \"Ubertragung in Gang zu setzen muss \emph{txd} auf low
+gesetzt werden.
+\item \textbf{write}: In diesem State werden die Datenbits nacheinander an \emph{txd} angelegt.
+\item \textbf{write stopbit}: Um das Ende einer Byte\"ubertragung zu signalisieren muss \emph{txd}
+auf high gesetzt werden.
+\end{itemize}
 
 
 \subsection{PC-Kommunikation}
@@ -403,6 +448,8 @@ einen Takt lang high). Der Scanner befindet sich so lange in diesem Zustand bis
 Ergebnis berechnet hat.
 \item \textbf{l\"oschen}: Teilt dem History Modul mit das letzte Zeichen im Buffer zu l\"oschen
 (\emph{backspace} ist einen Takt lang high).
+\item \textbf{mod}: Da wir nur Zeichen des Numpads \"ubernehmen wollen, ist dieser Zwischenstate
+n\"otig, da Scancodes vom Numpad einen Modifier mitschicken (\emph{0xe0}).
 \item \textbf{\"ubernehmen}: Wenn ein g\"ultiges Zeichen laut Requirements eingegeben wurde, wird
 jenes Zeichen an \emph{char} angelegt und \emph{take} wird einen Takt lang high gesetzt. Das History
 Modul wird dadurch getriggert das anliegende Zeichen in den Buffer zu \"ubernehmen.