spec: dies und das
[hwmod.git] / spec / spec.tex
index e51c562298d1552f99693c58a1e0a62a51b58f21..29bdfcaf4ca928ff18b3c70bb0e1d019be5fb67d 100644 (file)
@@ -77,8 +77,6 @@ vorigen Rechnung usw.}
 
 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
@@ -96,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
@@ -115,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
@@ -134,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
@@ -148,7 +146,7 @@ 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
@@ -167,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
@@ -343,7 +342,6 @@ alle requirements muessen von testfaellen abgedeckt werden!
 
 
 \section{Detailed Design Description}
-
 \subsection{VGA}
 siehe \textit{hwmod\_ipcores.pdf}
 
@@ -355,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}
@@ -406,7 +449,7 @@ 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.
+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.