From a94fb37bf14e4e29cda876264f32e9f3545abb08 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Thu, 25 Mar 2010 00:40:58 +0100 Subject: [PATCH] tabellen: history, parser und alu --- spec/sm/scanner.pdf | Bin 13651 -> 13643 bytes spec/sm/scanner.tex | 2 +- spec/spec.tex | 129 +++++++++++++++++++++++++------------------- 3 files changed, 75 insertions(+), 56 deletions(-) diff --git a/spec/sm/scanner.pdf b/spec/sm/scanner.pdf index 04c8586fc78d88814dad591dc07b378624b9742b..60f7a37b950c891c76c02a5fa9299dc9eab00963 100644 GIT binary patch delta 2725 zcmaiyc{mj88pbnO$2vu!NwyJT`!%5KO~ ziJBIqvM*W7QpOh2SEsLY&UJP2$NBGhf6skC_w~Hj^TzLmU+Go=07YQCsBB|H0g6n4 z?<5@NG{62n39NDX>?XT#Bp$NlL0Fz*$%kcw|y3x|)n&M$g}k<7E;)v05zR+j+m&dfqEnm0eXY`a}@ zauv~s_f^!V$IXS1=43;H_$`A0>&#diLW24B#`-W~WE7%aaVWKV4~eIfqON13V+TS* z`j(b@1>?QLt+J%3dgYvN!5Jfb+_$-@;ikt=E1Hs-%8k+3Mqc6FJr3r(C%;#cgpX>4 zhgOl^w?DF4t#9ZO>09gh^4QkA>&y32oI_W(!%^!bhf5TXZ=R*1VoOMhH$VW-MIJpyq{8Uf8dW}?Uw_pz3EP_3 z8?SXF* zHa(krG3!ldZlJ)Kp}P+CM2jejX6y2S{m;Te?61X|>P-b7+B$Ua32sR^?dqF|R=<%f zTaaN=K*^d^H1~dixUDet`@#yhKnwQbN?`wcJX3ee{v5Y@ZCmQ*OZBrI ztv&8ow;aSZ{D~g$s9G2&v75G4uWEGpjzjFOFY&D((Eu%gLv~e7$8>h+hoB&?h5owK zn}|;6L>Z(ZqoRS$$la@%gL!d$TcCyYUEXV#B%<6D-Q==%ZYVyFCHi%15)3((k(7E9 zl94{7DU)Md%Y4NnI?{w$W0A0$A=vQ@XIZ)Y4)2bMPKB4v)tjLaZ0%?J0V0_SMS*)C zmz(XVxP{ZW>QPqa+mkcu1{nn9l0k9~`6Z1D2JE`=YH&iAM?_4xjg72^>9TC($3@Db7Q;&NC!F{W0o zabL6q!Bbc(U2Q?iZo4lK*-aS(-Ih?MrXgliJcYb-15bmcKW;Ja!-xyXS0vOzB*dTc z4X*ZQ=$`9d3CLktvW|f8O0Ua53;gVP)7q;Se3Dz=E6qNT;gpw1z_ZKUcY1;-_(|@CGGlNP8?B8 zTY;QnQ+r3Y3z0-CbPq8ZOHXV_G6ngzxE zq1s8-%b#Nk4Z|%dUWbqk8aEf@HPzm6n0q0woijY>4f9ah^s(EL!^$shj?47A8rRwb zZQ5sBzQ?X-_Hqw=T)O+>MDTsKh=eoqIy=*xt7|naQ0o9?3|K4X^_Mnn#}`e=Zjzz0 zNRm5_o$gyPx-_tvz%jJ2>2pX;uhEtyTNs-g##fkJ(&U7QCQwG!78nwY1lX4R!i9qp z42$Jt3{85xpJs2yTIO2iI2JH?*fZ@03hDADm5!Y#*+u;>k?}?oZ!hEXJDK-1InwF{GeMe2k z-gU^$?oPk}fV2lPaT*lrZlnX-HJEuXij|934crGkZ&?c|^f3hPn?S7P`=DOJF1^rx z9$u-(KG{mGyOjcr0QoDAGevSdQ8x;ZpRJ|HNir4%NczDL;%ID1&+|uiGdG2Tf%k7B z+%d=~5&g(*+NoxChigo_7DN-$`71|?aFHC6W7)X+#eDHnMW@DVSb0TTWZr_dUN-CO zXW>cSOkKY0u1#8j@qhsp9?G7M zxF169k84_io^%hkhorq21`dZ4;23s;B>2B|#e2y~$bTN#-x^r90MP-!quGy<223F^sF77pJKf<`a5#+N1|b0h|C1q*SoojY{bU#{yBbY&HKmxEpzstV1_3uQLtsttWHgeDK~s#e pl%E%2iXy7+{lAi9szf3%nBf-02n+J`0wR9i02T;=m>r-1{{@&qf@1&x delta 2784 zcmaiyc{tQ-8^=W*!jMTAiNV;n*%w=6EXfi|LUz>vl z$s{{9_Fcvy^DZMWRaR zZB3FC^Uc*6xSB0{FEI`*n-sxeRj(%yBhbIJz%}$r)*))racy8-l0n|u=;{~>5{c2K zUo5k8Z+H>fx{H5&+KB#bc$Q7RxmAU4-1CP|X0Lu8TlG&wUiOh{uVe2Xlg~$3551v2`& z>x$r>!P6_r!MHuHKPBq#I#&+V>S<*UJBjf!hChDZB6U0tG>y9o_;)a4<4=P6SrJZc zbMY3MAA=$VMM}gl$5BJtZHZrDnqC`cMbp^+Juam(8xZvj#!$&+$pN)e7m)&$>^M$D z#)WbpW}6-2I1?6^WKN$EZXf@;y4kQDGaen+dqh4G^hBUobUX5)t-pToz#bRBiIw%o zu^Vjj7H^*mb^Z*X#nLGum93W(xmM)u8Ez14$LbL2VsS7#R0Sgj?RD z)`+gsHYyK1Ij<%=b$^v6#C?8A#)j-P?{QMgp{~NU1jBeot;_k-W!>fzKSiRdi!(z9(Y`ah-6%SBm zp!P4L7Azm1@rfz%>Tl)S1bSr1c1ZLxF5+@CBbip35bvSzih!R=)(yste>Dv=w&W-z z6noG_oB*C<%($J(#~Q2=tCxKo^O`91rV|Q;g!SdRsbgY(0h!tgb&P%@)Wr5oMTQQ);ENMw69+`n+FT5> zTo1a7-VcmDck%%hZm(4~WhT&fc%DnC5=7xJYzC$^fOi+Y-j{_zsz49vGR!GRTO4OA zhV`aX;99&I>F5lk{C;`NTWQHV7Yc8Ju;bP$PQIF$9Wuo;-a^(z2Ht9aE5>%VzAlC8 zW*$1^k={>rQlhBM=VvW9S-k|l9eayn3+UBMT z>aF-lufd>IKIK`R7K+@LeAcICDEKO{$S6{+Qf3xayvpaw)D*LK?l6}rSgHN}5SI*H z(^LP{9JxI<$O5GDR$D!&^xQ-HDCJqZA`+;xdf95hCDoItqZ(A|#o={eqS5$xnxWn8=D8EZ%1-!elIu&TYwOHeuxy7mZ`U?#9ZXD>02yQ72r5cGys8AuP(!y* ziq_m2M73?sxE_0Pp0{35&e!T=T^{hUyueTQX~PF&{l?b=xA@#!Vq}8e1I=D8;njBz zRxO9Qy}w$&9GFG?at~~@-c^Z$`QG#OYnmgtu1+o{ReX~5eCf~Du!8G7vbLFb8*(pV zE$Z7;VE7E_YmxR!&^lw2vx}*~-mh7HiahleOwq%?={qJ5?T{GWg8>PZ8**j*Yt~mB zo`iD-N{3PY00(sNn86IDAi3)Ah22XM+GNd+qN|~9gU35LyY(g)@Zvpki4_h{M=kg~NDbiW=`xB03lV**#gC9{D+{R{?(qNts)U`%=FFrnw#|?&Jn`DmTNwH`*6OdXBia z)TCEq&1<2t)cWV0z4RfP#@t46r+1()_0VAl;8JqB2~G9P!YZOiC}q@4?Ab_ZlL)?G zn!+LAm;?x6YZoe{A|ygM0+eqhXH`6x{QkQlvB^=1p+`KTB~B|Z^Mey!uTRf|=fDmy z6U*sB@Lci&#JgGiO;thOdB1C0PlA+TN_Rbr@;oGGoN0V-!lS#pqIk3b z$J5F+D?#!u4o<3${i?~v!bjqW_qx~X4c8Xaoj!GhKR&Ua-Q@2nxg^1tL7-pjLw;FPtb*e&OMrdb7> zJrRWHfgZ8n#4{SBM0NR6+H)0Y4$|HscZiIsJ=G7#8#}UJ*aZjyX;4G#sypN Z`sIM@Hv_JacoE-s0L?2WXJ~1}`(JqquD$>O diff --git a/spec/sm/scanner.tex b/spec/sm/scanner.tex index 24b26ce..d0e5ce2 100644 --- a/spec/sm/scanner.tex +++ b/spec/sm/scanner.tex @@ -28,6 +28,6 @@ \ncarc[arcangle=-20]{read}{take}\ncput*[npos=.40]{g\"ultiges zeichen} \ncarc[arcangle=-15]{bs}{idle} -\ncarc[arcangle=25]{doit}{idle}\ncput*[npos=.50]{finnnnnished\_result$\uparrow$} +\ncarc[arcangle=25]{doit}{idle}\ncput*[npos=.50]{finished\_result$\uparrow$} \ncarc[arcangle=-25]{take}{idle} \end{document} diff --git a/spec/spec.tex b/spec/spec.tex index 35bdffb..f4d4dfe 100644 --- a/spec/spec.tex +++ b/spec/spec.tex @@ -158,76 +158,95 @@ tx\_new & out & 1 & std\_logic & PC-Kommunikation & Signalisiert dass das anlieg \TEND \paragraph{Scanner} - -TODO - %Empfängt die Scan-Codes vom PS/2 Modul und leitet nur für die Eingabezeile erlaubte Zeichen dekodiert in das CP850 Format an die History weiter, bei einem empfangenen Enter wird der Beginn der Berechnung an das Parser Modul signalisiert +\THEAD +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 -allgemein: sys\_clk (in), sys\_res\_n (in) - -von modul ps/2: 8 bit data (in), 1 bit new\_data (in) +char & out & 8 & character & History & Zeichen das vom History Modul \"ubernommen werden soll \ZE +take & out & 1 & std\_logic & History & Signalisiert Datenfeld char \ZE +backspace & out & 1 & std\_logic & History & Signalisiert Backspace (letztes Zeichen im Buffer soll gel\"oscht werden) \ZE -an modul history: 8 bit char (out), 1 bit take (out), 1 bit backspace (out) +do\_it & out & 1 & std\_logic & Parser & Auswertung beginnen (ENTER) \ZE +finished & in & 1 & std\_logic & Parser & Auswertung fertig \ZE +\TEND -an modul parser: 1 bit do\_it (out), 1 bit finnnnnished\_result \paragraph{History} - -TODO - -%Verwaltung des dahinterliegenden Buffers von vergangenen Berechnungen und der aktuellen Eingabezeile, bei Aktualisierung der aktuellen Eingabezeile und bei Empfang eines Ergebnisses vom Parser Modul signalisiert es das an das Display Modul - -allgemein: sys\_clk (in), sys\_res\_n (in) - -zum modul pc-kommunikation: 5 bit zeile (2*14+1) (in), 7 bit spalte (71 zeichen - 0 am ende notwendig?) (in), 1 get bit (in), 1 done bit (out), 8 daten bits (out) - -vom modul scanner: 8 bit char (in), 1 bit take (in), 1 bit backspace (in) - -an modul display: 1 bit new\_eingabe (out), 1 bit new\_result (out), 5 bit zeile (2*14+1) (in), 7 bit spalte (71 zeichen - 0 am ende notwendig?) (in), 1 get bit (in), 1 done bit (out), 8 daten bits (out) - -an modul parser: 5 bit zeile (2*14+1) (in), 7 bit spalte (71 zeichen - 0 am ende notwendig?) (in), 1 get bit (in), 1 done bit (out), 8 daten bits (out), 8 bit write\_result (in), 1 bit first\_result\_char (in), 1 bit write\_char (in), ? 1 bit finnnnnished\_result (triggert fortschalten des ringpuffer pointers) (in) +%Verwaltung des dahinterliegenden Buffers von vergangenen Berechnungen und der aktuellen +%Eingabezeile, bei Aktualisierung der aktuellen Eingabezeile und bei Empfang eines Ergebnisses vom +%Parser Modul signalisiert es das an das Display Modul +\THEAD +pc\_zeile & in & 7 & std\_logic\_vector & PC-Kommunikation & Zeilenadressierung (50 * 2 Zeilen = 100)\ZE +pc\_spalte & in & 7 & std\_logic\_vector & PC-Kommunikation & Spaltenadressierung (71 Zeichen inklusive \textbackslash 0) \ZE +pc\_get & in & 1 & std\_logic & PC-Kommunikation & Signalisiert Speicheranforderung \ZE +pc\_done & out & 1 & std\_logic & PC-Kommunikation & Signalisiert dass Daten anliegen \ZE +pc\_char & out & 8 & character & PC-Kommunikation & enth\"alt angeforderne Daten \ZE + +s\_char & in & 8 & character & Scanner & Zeichen das vom Scanner Modul \"ubernommen werden soll \ZE +s\_take & in & 1 & std\_logic & Scanner & Signalisiert Datenfeld char \ZE +s\_backspace & in & 1 & std\_logic & Scanner & Signalisiert Backspace (letztes Zeichen im Buffer soll gel\"oscht werden) \ZE + +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\_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\_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 + +p\_wdo & in & 1 & std\_logic & Parser & Signalisiert Schreibanforderung \ZE +p\_wdone & out & 1 & std\_logic & Parser & Signalisiert dass Daten anliegen \ZE +p\_write & out & 8 & character & Parser & enth\"alt zu schreibende Daten \ZE + +p\_finished & in & 1 & std\_logic & Parser & Auswertung fertig \ZE +\TEND \paragraph{Parser} - -TODO - %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\_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 + +h\_wdo & in & 1 & std\_logic & History & Signalisiert Schreibanforderung \ZE +h\_wdone & out & 1 & std\_logic & History & Signalisiert dass Daten anliegen \ZE +h\_write & out & 8 & character & History & enth\"alt zu schreibende Daten \ZE + +h\_finished & in & 1 & std\_logic & History & Auswertung fertig \ZE + +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 +op2 & inout & 32 & SIGNED(32-1 downto 0) & ALU & zweite Operand und gleichzeitig der Zieloperand \ZE +do\_calc & out & 1 & std\_logic & ALU & Signalisert Berechnungstart \ZE +calc\_done & in & 1 & std\_logic & ALU & Berechnung fertig \ZE + +do\_it & in & 1 & std\_logic & Scanner & Auswertung beginnen (ENTER) \ZE +finished & out & 1 & std\_logic & Scanner & Auswertung fertig \ZE +\TEND -allgemein: sys\_clk (in), sys\_res\_n (in) - -zu modul history: 5 bit zeile (2*14+1) (out), 7 bit spalte (71 zeichen - 0 am ende notwendig?) (out), 1 get bit (out), 1 done bit (in), 8 daten bits (in), 8 bit write\_result (in), 1 bit first\_result\_char (out), 1 bit write\_char (out), ? 1 bit finnnnnished\_result (triggert fortschalten des ringpuffer pointers) (out) - -an modul bin/dez-converter: 11*8 bit char (vorzeichen + dezimalstellen; ok, das ist ein overkill...) (in/out), 32 bit binärstellen (in/out), 1 bit do\_deztobin (out), 1 bit do\_bintodez (out), 1 bit bintodez\_done (in), 1 bit deztobin\_done (?) (in) - -zu modul alu: enum opcode (out), 32 bit operator1 (out), 32 bit operator2 (out/in), 1 bit do\_calc (out), 1 bit calc\_done (in) - -zu modul scanner: 1 bit finnnnnished\_result (out) (selbe signal wie an history modul. kann man das -doppelt nehmen?) - -\paragraph{Bin/Dez-Converter} - -TODO - -%Konvertiert 10 CP850-codierte Dezimalziffern mit Vorzeichen in eine Binärzahl und umgekehrt - -allgemein: sys\_clk (in), sys\_res\_n (in) - -zum modul parser: 11*8 bit char (vorzeichen + dezimalstellen; ok, das ist ein overkill...) (in/out), 32 bit binärstellen (in/out), 1 bit do\_deztobin (in), 1 bit do\_bintodez (in), 1 bit bintodez\_done (out), 1 bit deztobin\_done (?) (out) \paragraph{ALU} - -TODO - %Führt die tatsächlichen Berechnungen von Addition, Subtraktion, Multiplikation und Division durch +\THEAD +opcode & in & 3 & enum OPS & Parser & die auszuf\"uhrende Art der Berechnung \ZE +op1 & in & 32 & SIGNED(32-1 downto 0) & Parser & erste Operand \ZE +op2 & inout & 32 & SIGNED(32-1 downto 0) & Parser & zweite Operand und gleichzeitig der Zieloperand \ZE +do\_calc & in & 1 & std\_logic & Parser & Signalisert Berechnungstart \ZE +calc\_done & out & 1 & std\_logic & Parser & Berechnung fertig \ZE +\TEND -allgemein: sys\_clk (in), sys\_res\_n (in) - -zum parser: enum opcode (in), 32 bit operator1 (in), 32 bit operator2 (in/out), 1 bit do\_calc (in), 1 bit calc\_done (out) \paragraph{Display} - TODO - %Liest einzelne Zeichen aus der History aus und leitet diese an das VGA Modul weiter, um sie in der entsprechenden Zeile anzeigen zu lassen allgemein: sys\_clk (in), sys\_res\_n (in) @@ -395,12 +414,12 @@ 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 und danach wird \emph{finnnnnished\_result} f\"ur einen Zyklus auf high gesetzt. +geschrieben und danach wird \emph{finished} f\"ur einen Zyklus 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{finnnnnished\_result} wird f\"ur einen Zyklus auf high gesetzt. +\emph{finished} wird f\"ur einen Zyklus auf high gesetzt. \end{itemize} -- 2.25.1