sm: rs232
authorBernhard Urban <lewurm@gmail.com>
Fri, 26 Mar 2010 18:19:19 +0000 (19:19 +0100)
committerBernhard Urban <lewurm@gmail.com>
Fri, 26 Mar 2010 18:35:40 +0000 (19:35 +0100)
spec/sm/rs232-rs.pdf [new file with mode: 0644]
spec/sm/rs232-rs.tex [new file with mode: 0644]
spec/sm/rs232-ts.pdf [new file with mode: 0644]
spec/sm/rs232-ts.tex [new file with mode: 0644]
spec/sm/rs232.pdf [deleted file]
spec/sm/rs232.tex [deleted file]
spec/spec.tex

diff --git a/spec/sm/rs232-rs.pdf b/spec/sm/rs232-rs.pdf
new file mode 100644 (file)
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 (file)
index 0000000..3265bf7
--- /dev/null
@@ -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 <martinp> http://pastebin.com/tcp16Gp minimales "sample"
+% 01:53:07 <martinp> die nodes werden deine lieblinge sein ;)
+% 01:53:19 <martinp> ncline, ncarc und nccircle
+% 01:53:32 <martinp> angle und arcangle als parameter sind ganz nützlich ;)
+% 01:54:08 <martinp> rest siehst eh in dem "sample" von mir ;)
+% 01:55:08 <martinp> aja, was du auf jedenfall vermeiden solltest sind leere reihen in der psmatrix
+% 01:55:14 <martinp> da kommt dann immer blödsinn raus
+% 01:55:39 <martinp> wennst mehr platz zwischen den nodes brauchst solltest colsep und rowsep verändern
+% 01:56:02 <martinp> eine \mbox{ } als knoten hab ich noch nicht probiert, könnte vlt aber auch gehen
+% 01:56:40 <martinp> \ncarc[arcangle=20]{rs}{i}^{bla} setzt bla als label über die linie
+% 01:56:45 <martinp> \ncarc[arcangle=20]{rs}{i}_{bla} unter die linie
+% 01:57:07 <martinp> die ncput in dem sample in die linie (ohne * wird die linie auch nicht ausgeblendet)
+% 01:57:55 <martinp> ^ und _ sind eigentlich nur abkürzungen für naput oder so in die richtung
+% 01:58:13 <martinp> [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 <martinp> und wennst böse kanten hast die du stark biegen musst
+% 01:59:03 <martinp> 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 (file)
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 (file)
index 0000000..77d5481
--- /dev/null
@@ -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 <martinp> http://pastebin.com/tcp16Gp minimales "sample"
+% 01:53:07 <martinp> die nodes werden deine lieblinge sein ;)
+% 01:53:19 <martinp> ncline, ncarc und nccircle
+% 01:53:32 <martinp> angle und arcangle als parameter sind ganz nützlich ;)
+% 01:54:08 <martinp> rest siehst eh in dem "sample" von mir ;)
+% 01:55:08 <martinp> aja, was du auf jedenfall vermeiden solltest sind leere reihen in der psmatrix
+% 01:55:14 <martinp> da kommt dann immer blödsinn raus
+% 01:55:39 <martinp> wennst mehr platz zwischen den nodes brauchst solltest colsep und rowsep verändern
+% 01:56:02 <martinp> eine \mbox{ } als knoten hab ich noch nicht probiert, könnte vlt aber auch gehen
+% 01:56:40 <martinp> \ncarc[arcangle=20]{rs}{i}^{bla} setzt bla als label über die linie
+% 01:56:45 <martinp> \ncarc[arcangle=20]{rs}{i}_{bla} unter die linie
+% 01:57:07 <martinp> die ncput in dem sample in die linie (ohne * wird die linie auch nicht ausgeblendet)
+% 01:57:55 <martinp> ^ und _ sind eigentlich nur abkürzungen für naput oder so in die richtung
+% 01:58:13 <martinp> [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 <martinp> und wennst böse kanten hast die du stark biegen musst
+% 01:59:03 <martinp> 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 (file)
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 (file)
index 8bab98a..0000000
+++ /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 <martinp> http://pastebin.com/tcp16Gp minimales "sample"
-% 01:53:07 <martinp> die nodes werden deine lieblinge sein ;)
-% 01:53:19 <martinp> ncline, ncarc und nccircle
-% 01:53:32 <martinp> angle und arcangle als parameter sind ganz nützlich ;)
-% 01:54:08 <martinp> rest siehst eh in dem "sample" von mir ;)
-% 01:55:08 <martinp> aja, was du auf jedenfall vermeiden solltest sind leere reihen in der psmatrix
-% 01:55:14 <martinp> da kommt dann immer blödsinn raus
-% 01:55:39 <martinp> wennst mehr platz zwischen den nodes brauchst solltest colsep und rowsep verändern
-% 01:56:02 <martinp> eine \mbox{ } als knoten hab ich noch nicht probiert, könnte vlt aber auch gehen
-% 01:56:40 <martinp> \ncarc[arcangle=20]{rs}{i}^{bla} setzt bla als label über die linie
-% 01:56:45 <martinp> \ncarc[arcangle=20]{rs}{i}_{bla} unter die linie
-% 01:57:07 <martinp> die ncput in dem sample in die linie (ohne * wird die linie auch nicht ausgeblendet)
-% 01:57:55 <martinp> ^ und _ sind eigentlich nur abkürzungen für naput oder so in die richtung
-% 01:58:13 <martinp> [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 <martinp> und wennst böse kanten hast die du stark biegen musst
-% 01:59:03 <martinp> 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}
index bd42452e4868a7b331bbdeb75bef4a2c4324215c..cc9125e62158e6b13054e9928d57685ad8937181 100644 (file)
@@ -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.