From: Bernhard Urban Date: Fri, 26 Mar 2010 18:19:19 +0000 (+0100) Subject: sm: rs232 X-Git-Tag: spec-abgabe1~6 X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;ds=sidebyside;h=11a53579d819fc351c422fce5a85414bd13f23c6;p=hwmod.git sm: rs232 --- diff --git a/spec/sm/rs232-rs.pdf b/spec/sm/rs232-rs.pdf new file mode 100644 index 0000000..3a1e908 Binary files /dev/null and b/spec/sm/rs232-rs.pdf differ diff --git a/spec/sm/rs232-rs.tex b/spec/sm/rs232-rs.tex new file mode 100644 index 0000000..3265bf7 --- /dev/null +++ b/spec/sm/rs232-rs.tex @@ -0,0 +1,50 @@ +% http://ftp.univie.ac.at/packages/tex/graphics/pstricks/base/doc/pstricks-doc.pdf +% http://www.tug.org/PSTricks/main.cgi?file=doc/docs + +% 18:59:41 http://pastebin.com/tcp16Gp minimales "sample" +% 01:53:07 die nodes werden deine lieblinge sein ;) +% 01:53:19 ncline, ncarc und nccircle +% 01:53:32 angle und arcangle als parameter sind ganz nützlich ;) +% 01:54:08 rest siehst eh in dem "sample" von mir ;) +% 01:55:08 aja, was du auf jedenfall vermeiden solltest sind leere reihen in der psmatrix +% 01:55:14 da kommt dann immer blödsinn raus +% 01:55:39 wennst mehr platz zwischen den nodes brauchst solltest colsep und rowsep verändern +% 01:56:02 eine \mbox{ } als knoten hab ich noch nicht probiert, könnte vlt aber auch gehen +% 01:56:40 \ncarc[arcangle=20]{rs}{i}^{bla} setzt bla als label über die linie +% 01:56:45 \ncarc[arcangle=20]{rs}{i}_{bla} unter die linie +% 01:57:07 die ncput in dem sample in die linie (ohne * wird die linie auch nicht ausgeblendet) +% 01:57:55 ^ und _ sind eigentlich nur abkürzungen für naput oder so in die richtung +% 01:58:13 [npos=.4] ist auch ganz nett für die puts, damit veränderst die pos. der label auf der +% linie (zwischen start und ende) +% 01:58:33 und wennst böse kanten hast die du stark biegen musst +% 01:59:03 da ist es besser ncurv zu erhöhen als den arcangle (zumindest ab einem bestimmten arcangle +% auch die einzige möglichkeit mehr "kurve" zu bekommen) +\documentclass{minimal} +\pagestyle{empty} + +\usepackage{pstricks} +\usepackage{pst-node} + +\begin{document} + +\begin{psmatrix}[mnode=oval, colsep=2.5cm, rowsep=2.5cm] +[mnode=R,name=res]{sys\_res\_n} & +[name=idle]{\shortstack{\textbf{idle}\\bc:=0;}} & +[mnode=R,name=vars]{int bc := 0;} \\ +%% +[name=rs]{\shortstack{\textbf{read}\\\textbf{startbit}}} & +[name=rb]{\shortstack{\textbf{read}\\wait BT;}} & +[name=rsp]{\shortstack{\textbf{read}\\\textbf{stopbit}\\rxd\_new:=1;}} \\ +\end{psmatrix} + +\psset{arrows=->, shortput=nab} + +\ncline[linestyle=dotted]{res}{idle} +%% receive +\ncarc[arcangle=15]{idle}{rs}\ncput*[npos=.38]{\shortstack{rxd$\downarrow$}} +\ncarc[arcangle=15]{rs}{idle}\ncput*[npos=.38]{rxd=1} +\ncline{rs}{rb}\ncput*{rxd=0} +\ncline{rb}{rsp}\ncput*{$bc \ge 8$} +\nccircle[angle=0]{rb}{.7cm}\ncput*{$bc<8$} +\ncline{rsp}{idle} +\end{document} diff --git a/spec/sm/rs232-ts.pdf b/spec/sm/rs232-ts.pdf new file mode 100644 index 0000000..7850c0b Binary files /dev/null and b/spec/sm/rs232-ts.pdf differ diff --git a/spec/sm/rs232-ts.tex b/spec/sm/rs232-ts.tex new file mode 100644 index 0000000..77d5481 --- /dev/null +++ b/spec/sm/rs232-ts.tex @@ -0,0 +1,49 @@ +% http://ftp.univie.ac.at/packages/tex/graphics/pstricks/base/doc/pstricks-doc.pdf +% http://www.tug.org/PSTricks/main.cgi?file=doc/docs + +% 18:59:41 http://pastebin.com/tcp16Gp minimales "sample" +% 01:53:07 die nodes werden deine lieblinge sein ;) +% 01:53:19 ncline, ncarc und nccircle +% 01:53:32 angle und arcangle als parameter sind ganz nützlich ;) +% 01:54:08 rest siehst eh in dem "sample" von mir ;) +% 01:55:08 aja, was du auf jedenfall vermeiden solltest sind leere reihen in der psmatrix +% 01:55:14 da kommt dann immer blödsinn raus +% 01:55:39 wennst mehr platz zwischen den nodes brauchst solltest colsep und rowsep verändern +% 01:56:02 eine \mbox{ } als knoten hab ich noch nicht probiert, könnte vlt aber auch gehen +% 01:56:40 \ncarc[arcangle=20]{rs}{i}^{bla} setzt bla als label über die linie +% 01:56:45 \ncarc[arcangle=20]{rs}{i}_{bla} unter die linie +% 01:57:07 die ncput in dem sample in die linie (ohne * wird die linie auch nicht ausgeblendet) +% 01:57:55 ^ und _ sind eigentlich nur abkürzungen für naput oder so in die richtung +% 01:58:13 [npos=.4] ist auch ganz nett für die puts, damit veränderst die pos. der label auf der +% linie (zwischen start und ende) +% 01:58:33 und wennst böse kanten hast die du stark biegen musst +% 01:59:03 da ist es besser ncurv zu erhöhen als den arcangle (zumindest ab einem bestimmten arcangle +% auch die einzige möglichkeit mehr "kurve" zu bekommen) +\documentclass{minimal} +\pagestyle{empty} + +\usepackage{pstricks} +\usepackage{pst-node} + +\begin{document} + +\begin{psmatrix}[mnode=oval, colsep=2.5cm, rowsep=2.5cm] +[mnode=R,name=vars]{int bc := 0;} & +[name=ws]{\shortstack{\textbf{write}\\\textbf{startbit}\\txd:=0;}} & +[name=wb]{\shortstack{\textbf{write}\\wait BT;\\bc++;}} \\ +%% +[mnode=R,name=res]{sys\_res\_n} & +[name=idle]{\shortstack{\textbf{idle}\\bc:=0;}} & +[name=wsp]{\shortstack{\textbf{write}\\\textbf{stopbit}\\txd:=1;}} \\ +\end{psmatrix} + +\psset{arrows=->, shortput=nab} + +\ncline[linestyle=dotted]{res}{idle} +%% transmit +\ncline{idle}{ws}\ncput*[npos=.50]{tx\_new = 1} +\ncline{ws}{wb} +\nccircle[angle=0]{wb}{.7cm}\ncput*{$bc<8$} +\ncline{wb}{wsp}\ncput*{$bc \ge 8$} +\ncline{wsp}{idle} +\end{document} diff --git a/spec/sm/rs232.pdf b/spec/sm/rs232.pdf deleted file mode 100644 index 3267e17..0000000 Binary files a/spec/sm/rs232.pdf and /dev/null differ diff --git a/spec/sm/rs232.tex b/spec/sm/rs232.tex deleted file mode 100644 index 8bab98a..0000000 --- a/spec/sm/rs232.tex +++ /dev/null @@ -1,53 +0,0 @@ -% http://ftp.univie.ac.at/packages/tex/graphics/pstricks/base/doc/pstricks-doc.pdf -% http://www.tug.org/PSTricks/main.cgi?file=doc/docs - -% 18:59:41 http://pastebin.com/tcp16Gp minimales "sample" -% 01:53:07 die nodes werden deine lieblinge sein ;) -% 01:53:19 ncline, ncarc und nccircle -% 01:53:32 angle und arcangle als parameter sind ganz nützlich ;) -% 01:54:08 rest siehst eh in dem "sample" von mir ;) -% 01:55:08 aja, was du auf jedenfall vermeiden solltest sind leere reihen in der psmatrix -% 01:55:14 da kommt dann immer blödsinn raus -% 01:55:39 wennst mehr platz zwischen den nodes brauchst solltest colsep und rowsep verändern -% 01:56:02 eine \mbox{ } als knoten hab ich noch nicht probiert, könnte vlt aber auch gehen -% 01:56:40 \ncarc[arcangle=20]{rs}{i}^{bla} setzt bla als label über die linie -% 01:56:45 \ncarc[arcangle=20]{rs}{i}_{bla} unter die linie -% 01:57:07 die ncput in dem sample in die linie (ohne * wird die linie auch nicht ausgeblendet) -% 01:57:55 ^ und _ sind eigentlich nur abkürzungen für naput oder so in die richtung -% 01:58:13 [npos=.4] ist auch ganz nett für die puts, damit veränderst die pos. der label auf der -% linie (zwischen start und ende) -% 01:58:33 und wennst böse kanten hast die du stark biegen musst -% 01:59:03 da ist es besser ncurv zu erhöhen als den arcangle (zumindest ab einem bestimmten arcangle -% auch die einzige möglichkeit mehr "kurve" zu bekommen) -\documentclass{minimal} -\pagestyle{empty} - -\usepackage{pstricks} -\usepackage{pst-node} - -\begin{document} - -\begin{psmatrix}[mnode=oval, colsep=2cm, rowsep=2cm] -[mnode=R,name=vars]{int bc := 0;} & -[name=idle]{\shortstack{\textbf{idle}\\bc:=0;}} & -[name=rsp]{\shortstack{\textbf{read}\\\textbf{stopbit}}} \\ -%% -[mnode=R,name=res]{sys\_res\_n} & -[name=rs]{\shortstack{\textbf{read}\\\textbf{startbit}}} & -[name=rb]{\textbf{read}} \\ -\end{psmatrix} - -\psset{arrows=->, shortput=nab} - -\ncline[linestyle=dotted]{res}{idle} - -\ncarc[arcangle=35]{idle}{rs}\ncput*[npos=.38]{\shortstack{rxd$\downarrow$}} -\ncarc[arcangle=35]{rs}{idle}\ncput*[npos=.38]{rxd=1} - -\ncline{rs}{rb}\ncput*{rxd=0} - -\ncline{rb}{rsp}\ncput*{$bc=8$} -\nccircle[angle=180]{rb}{.5cm}\ncput*{$bc<8$} - -\ncline{rsp}{idle} -\end{document} diff --git a/spec/spec.tex b/spec/spec.tex index bd42452..cc9125e 100644 --- a/spec/spec.tex +++ b/spec/spec.tex @@ -368,18 +368,42 @@ die vollen 71 Zeichen in der entsprechenden Zeile enthalten sind\footnote{ein St \end{itemize} \subsection{RS232} +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.pdf} +\includegraphics[width=0.9\textwidth]{sm/rs232-rs.pdf} \centering -\caption{Statemachine des RS232 Modules} -\label{fig:rs232} +\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}: -\item \textbf{read startbit}: -\item \textbf{read}: -\item \textbf{read stopbit}: +\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} @@ -424,7 +448,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.