From 3ca80cda379741f8e678d70a0085f686b62d592d Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Fri, 30 Apr 2010 19:51:12 +0200 Subject: [PATCH] spec: signale ein wenig umbenannt; layout angepasst --- spec/TODO | 1 - spec/sm/alu.tex | 8 +-- spec/sm/display.tex | 4 +- spec/sm/parser.tex | 2 +- spec/sm/pckomm.tex | 2 +- spec/speck.tex | 127 ++++++++++++++++++++------------------------ 6 files changed, 66 insertions(+), 78 deletions(-) diff --git a/spec/TODO b/spec/TODO index a3ccaeb..6964ae4 100644 --- a/spec/TODO +++ b/spec/TODO @@ -1,4 +1,3 @@ -- signale einheitlicher benennen - buttonmodul (mit debouncing) fuer power-on-reset und rs232 dump - PLL - am liebsten haette ich (das gilt auch fuer unsere spezifikation) moore-state-machines. diff --git a/spec/sm/alu.tex b/spec/sm/alu.tex index 47adeeb..483f75f 100644 --- a/spec/sm/alu.tex +++ b/spec/sm/alu.tex @@ -21,15 +21,15 @@ \ncline[linestyle=dotted]{res}{idle} -\ncarc[arcangle=20]{idle}{add}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \&\&\\opc = ADD}} +\ncarc[arcangle=20]{idle}{add}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \emph{\textbf{and}}\\opc = ADD}} \ncarc[arcangle=20]{add}{idle} -\ncarc[arcangle=20]{idle}{sub}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \&\&\\opc = SUB}} +\ncarc[arcangle=20]{idle}{sub}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \emph{\textbf{and}}\\opc = SUB}} \ncarc[arcangle=20]{sub}{idle} -\ncarc[arcangle=20]{idle}{mul}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \&\&\\opc = MUL}} +\ncarc[arcangle=20]{idle}{mul}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \emph{\textbf{and}}\\opc = MUL}} \ncarc[arcangle=20]{mul}{idle} -\ncarc[arcangle=20]{idle}{div}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \&\&\\opc = DIV}} +\ncarc[arcangle=20]{idle}{div}\ncput*[npos=.50]{\shortstack{do\_calc$\uparrow$ \emph{\textbf{and}}\\opc = DIV}} \ncarc[arcangle=20]{div}{idle} \end{document} diff --git a/spec/sm/display.tex b/spec/sm/display.tex index e50da4d..62bdc6b 100644 --- a/spec/sm/display.tex +++ b/spec/sm/display.tex @@ -24,8 +24,8 @@ \ncarc[arcangle=0]{zeile}{idle}\ncput*[npos=.50]{$s>71$} \nccircle[angleA=0]{zeile}{.80cm}\ncput*[npos=0.5]{$s\le71$} -\ncarc[arcangle=0]{idle}{eingaddr}\ncput*[npos=.50]{new\_eingabe$\uparrow$} -\ncarc[arcangle=0]{idle}{ergaddr}\ncput*[npos=.50]{new\_result$\uparrow$} +\ncarc[arcangle=0]{idle}{eingaddr}\ncput*[npos=.50]{d\_new\_eingabe$\uparrow$} +\ncarc[arcangle=0]{idle}{ergaddr}\ncput*[npos=.50]{d\_new\_result$\uparrow$} \ncarc[arcangle=0]{eingaddr}{zeile} \ncarc[arcangle=0]{ergaddr}{zeile} diff --git a/spec/sm/parser.tex b/spec/sm/parser.tex index 51d11c8..2bd3382 100644 --- a/spec/sm/parser.tex +++ b/spec/sm/parser.tex @@ -54,6 +54,6 @@ \ncarc[arcangle=0]{int}{null}\ncput*[npos=.50]{aktop = '\textbackslash 0'} \ncarc[arcangle=0]{null}{calc} -\ncarc[arcangle=0]{calc}{read}\ncput*[npos=.50]{int\_done$\uparrow$} +\ncarc[arcangle=0]{calc}{read}\ncput*[npos=.45]{else} \ncarc[arcangle=0]{calc}{done}\ncput*[npos=.50]{aktop = DONE} \end{document} diff --git a/spec/sm/pckomm.tex b/spec/sm/pckomm.tex index e9b397f..5805517 100644 --- a/spec/sm/pckomm.tex +++ b/spec/sm/pckomm.tex @@ -19,7 +19,7 @@ \ncline[linestyle=dotted]{res}{idle} \ncarc[arcangle=30]{idle}{zeile}\ncput*[npos=.50]{\shortstack{rx\_new$\uparrow$ -\&\&\\rx\_data='\textbackslash 0'}} +\emph{\textbf{and}}\\rx\_data='\textbackslash 0'}} \ncarc[arcangle=0]{idle}{zeile}\ncput*[npos=.50]{btn$\uparrow$} \ncarc[arcangle=40]{zeile}{idle}\ncput*[npos=.50]{$z>50$} diff --git a/spec/speck.tex b/spec/speck.tex index 736d92c..34cba26 100644 --- a/spec/speck.tex +++ b/spec/speck.tex @@ -116,14 +116,14 @@ free & out & 1 & std\_logic & Display & signalisiert Bereitschaft \ZE \subsubsection{Display} \THEAD -new\_eingabe & in & 1 & std\_logic & History &die aktuelle Eingabe ist zu aktualisieren \ZE -new\_result & in & 1 & std\_logic & History & das Ergebnis ist zu aktualisieren \ZE -zeile & out & 5 & std\_logic\_vector & History & Zeilenadressierung ($2 \cdot 15$ Zeilen $=30$) \ZE -spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 +d\_new\_eingabe & in & 1 & std\_logic & History &die aktuelle Eingabe ist zu aktualisieren \ZE +d\_new\_result & in & 1 & std\_logic & History & das Ergebnis ist zu aktualisieren \ZE +d\_zeile & out & 5 & std\_logic\_vector & History & Zeilenadressierung ($2 \cdot 15$ Zeilen $=30$) \ZE +d\_spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 Zeichen inkl. \textbackslash 0) \ZE -get & out & 1 & std\_logic & History & signalisiert Speicheranforderung \ZE -done & in & 1 & std\_logic & History & Daten liegen an \ZE -char & in & 8 & character & History & enth\"alt angeforderne Daten \ZE +d\_get & out & 1 & std\_logic & History & signalisiert Speicheranforderung \ZE +d\_done & in & 1 & std\_logic & History & Daten liegen an \ZE +d\_char & in & 8 & character & History & enth\"alt angeforderne Daten \ZE \hline command & out & 8 & std\_logic\_vector & VGA & Kommando an das VGA Modul \ZE command\_data & out & 32 & std\_logic\_vector & VGA & Daten f\"ur das Kommando \ZE @@ -152,13 +152,13 @@ rx\_new & in & 1 & std\_logic & RS232 & signalisiert ein neu empfangendes Byte \ tx\_data & in & 8 & std\_logic\_vector & RS232 & Datenfeld f\"ur das \"Ubertragen \ZE tx\_new & in & 1 & std\_logic & RS232 & signalisiert dass das anliegende Byte gesendet werden soll \ZE \hline -zeile & out & 7 & std\_logic\_vector & History & Zeilenadressierung ($50 \cdot +pc\_zeile & out & 7 & std\_logic\_vector & History & Zeilenadressierung ($50 \cdot 2$ Zeilen $=100$)\ZE -spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 +pc\_spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 Zeichen inkl. \textbackslash 0) \ZE -get & out & 1 & std\_logic & History & signalisiert Speicheranforderung \ZE -done & in & 1 & std\_logic & History & Daten liegen an \ZE -char & in & 8 & character & History & enth\"alt angeforderne Daten \ZE +pc\_get & out & 1 & std\_logic & History & signalisiert Speicheranforderung \ZE +pc\_done & in & 1 & std\_logic & History & Daten liegen an \ZE +pc\_char & in & 8 & character & History & enth\"alt angeforderne Daten \ZE \TEND \newpage @@ -177,10 +177,10 @@ ps2\_data & inout & 1 & std\_logic & Tastatur & Datenleitung zum Keyboard \ZE new\_data & in & 1 & std\_logic\_vector & PS/2 & signalisiert neuen Scancode \ZE data & in & 8 & std\_logic\_vector & PS/2 & Scancode laut Codepage 850 \ZE \hline -char & out & 8 & character & History & Zeichen das \"ubernommen werden soll \ZE -take & out & 1 & std\_logic & History & signalisiert Datenfeld char \ZE -done & in & 1 & std\_logic & History & signalisiert die \"Ubernahme der Daten \ZE -backspace & out & 1 & std\_logic & History & letztes Zeichen soll gel\"oscht werden \ZE +s\_char & out & 8 & character & History & Zeichen das \"ubernommen werden soll \ZE +s\_take & out & 1 & std\_logic & History & signalisiert Datenfeld char \ZE +s\_done & in & 1 & std\_logic & History & signalisiert die \"Ubernahme der Daten \ZE +s\_backspace & out & 1 & std\_logic & History & letztes Zeichen soll gel\"oscht werden \ZE \hline do\_it & out & 1 & std\_logic & Parser & Auswertung beginnen (ENTER) \ZE finished & in & 1 & std\_logic & Parser & Auswertung fertig \ZE @@ -189,18 +189,18 @@ finished & in & 1 & std\_logic & Parser & Auswertung fertig \ZE \subsubsection{Parser} \THEAD -h\_rw & out & 1 & std\_logic & History & 0 = read (Expression), 1 = write (Ergebnis) \ZE -h\_spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 +p\_rw & out & 1 & std\_logic & History & 0 = read (Expression), 1 = write (Ergebnis) \ZE +p\_spalte & out & 7 & std\_logic\_vector & History & Spaltenadressierung (71 Zeichen inkl. \textbackslash 0) \ZE -h\_rget & out & 1 & std\_logic & History & signalisiert Leseanforderung \ZE -h\_rdone & in & 1 & std\_logic & History & Daten liegen an \ZE -h\_read & out & 8 & character & History & enth\"alt angeforderne Daten \ZE +p\_rget & out & 1 & std\_logic & History & signalisiert Leseanforderung \ZE +p\_rdone & in & 1 & std\_logic & History & Daten liegen an \ZE +p\_read & out & 8 & character & History & enth\"alt angeforderne Daten \ZE -h\_wtake & out & 1 & std\_logic & History & signalisiert Schreibanforderung \ZE -h\_wdone & in & 1 & std\_logic & History & Daten liegen an \ZE -h\_write & in & 8 & character & History & enth\"alt zu schreibende Daten \ZE +p\_wtake & out & 1 & std\_logic & History & signalisiert Schreibanforderung \ZE +p\_wdone & in & 1 & std\_logic & History & Daten liegen an \ZE +p\_write & in & 8 & character & History & enth\"alt zu schreibende Daten \ZE -h\_finished & out & 1 & std\_logic & History & Auswertung fertig \ZE +p\_finished & out & 1 & std\_logic & History & Auswertung fertig \ZE \hline opcode & out & 3 & enum OPS & ALU & die auszuf\"uhrende Art der Berechnung \ZE op1 & out & 32 & SIGNED(32-1 downto 0) & ALU & erste Operand \ZE @@ -366,6 +366,7 @@ aktuellen Berechnung entspricht. Danach soll eine RS232 \"Ubertragung (einmal pe per PC) in Gang gesetzt werden. Am PC sollen nur die letzten 50 Berechnungen ersichtlich sein.} Erf\"ullt \textbf{Req 9, 10} +\newpage \section{Detailed Design Description} \subsection{VGA} siehe \textit{hwmod\_ipcores.pdf} @@ -433,6 +434,9 @@ gesetzt werden. auf high gesetzt werden. \end{itemize} +\subsection{PS/2} +siehe \textit{hwmod\_ipcores.pdf} + \subsection{PC-Kommunikation} \begin{figure}[!ht] @@ -454,9 +458,6 @@ Spaltencounter erh\"oht. \end{itemize} -\subsection{PS/2} -siehe \textit{hwmod\_ipcores.pdf} - \subsection{Scanner} \begin{figure}[!ht] \includegraphics[width=0.9\textwidth]{sm/scanner.pdf} @@ -466,19 +467,19 @@ siehe \textit{hwmod\_ipcores.pdf} \end{figure} \begin{itemize} -\item \textbf{idle}: Setzt alle Steuersignale \emph{backspace}, \emph{take} und \emph{do\_it} low. +\item \textbf{idle}: Setzt alle Steuersignale \emph{s\_backspace}, \emph{s\_take} und \emph{do\_it} low. \item \textbf{read}: Bei steigender Flanke auf \emph{new\_data} wird das anliegende Byte des PS/2-Modules \"ubernommen. Je nach Wert wird in den n\"achsten Zustand gewechselt. \item \textbf{enter}: Wurde die Entertaste gedr\"uckt wird der Parser getriggert (per Signal \emph{do\_it}). Der Scanner befindet sich so lange in diesem Zustand bis der Parser das Ergebnis berechnet hat. \item \textbf{l\"oschen}: Teilt dem History Modul mit das letzte Zeichen im -Buffer zu l\"oschen (per Signal \emph{backspace}). +Buffer zu l\"oschen (per Signal \emph{s\_backspace}). \item \textbf{mod}: Da wir nur Zeichen des Numpads \"ubernehmen wollen, ist dieser Zwischenzustand 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} +eingegeben wurde, wird jenes Zeichen an \emph{s\_char} angelegt und \emph{s\_take} wird auf high gesetzt. Das History Modul wird dadurch getriggert um das Zeichen in den Buffer zu \"ubernehmen. \end{itemize} @@ -491,6 +492,32 @@ in den Buffer zu \"ubernehmen. \caption{Statemachine zum Parsen der aktuellen Expression} \label{fig:parser} \end{figure} +\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{int}: Zeichen f\"ur Zeichen wird eingelesen und die Zahl wird daraus berechnet. + +\item \textbf{calc}: 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. Danach wird \emph{p\_finished} bzw. \emph{finished} 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{p\_finished} bzw. \emph{finished} wird auf high gesetzt. +\end{itemize} + \begin{lstlisting} procedure exec() { @@ -535,32 +562,6 @@ procedure c1() { } \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{int}: Zeichen f\"ur Zeichen wird eingelesen und die Zahl wird daraus berechnet. - -\item \textbf{calc}: 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. Danach wird \emph{finished} 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{finished} wird auf high gesetzt. -\end{itemize} - \subsection{ALU} \begin{figure}[!ht] @@ -605,17 +606,5 @@ Ist das History Modul mit der Speicheranfrage fertig, wird das andere Modul \"ub \emph{done}-Leitung benachrichtigt. Wurde das Signal vom entsprechenden \emph{*\_\{get,take,do\}}-Signal quittiert kann der n\"achste Request verarbeitet werden. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%LISTINGS -%\newpage -%\appendix -%\section{Listings} -%howto include src files -%\subsection{einfache Variante -- generierter Sourcecode} -%\label{att:einfachsrc} -%\lstinputlisting{../einfach/einfach.src} -%\lstinputlisting[firstnumber=24, firstline=24, lastline=34]{bla.src} %firstnumber shouldn't be necessary, but there is probably a bug - \end{document} -- 2.25.1