prot2: weiterer text und ich muss weg
[dide_16.git] / bsp2 / Protokolle / chapter2.tex
1 \chapter{Design-Flow}
2
3 \section{Frequenzanpassung}
4 Die Aufgabenstellung die Frequenz f\"ur das blickende Objekt
5 zu modifizieren, in unserem Fall auf eine Frequenz von 
6 $\frac{1}{0.12}s = 8.333 Hz$ einzustellen.
7
8 Dazu mussten wir uns vorerst mit dem gegebenen Sourcecode 
9 vertraut machen. Schlie\ss{}lich stellten wir fest, dass der
10 Code in der Datei \emph{vga\_control\_arc.vhd} daf\"ur ist,
11 genauer gesagt die Konstante \emph{HALFPERIOD}.
12
13 Dabei bestimmt \emph{HALFPERIOD} die halbe Periode. Um also auf
14 unsere gew\"unschte Periodendauer von $0.12s$ kommen muss diese
15 Konstante $0.06s$ ausdr\"ucken. Aber welche Einheit beschreibt
16 \emph{HALFPERIOD}? Auf folgenden Wert ist \emph{HALFPERIOD}
17 in der Angabe konfiguriert:
18 \begin{lstlisting}
19 constant HALFPERIOD   : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "1100000000010001111011000";
20 \end{lstlisting}
21
22 wobei ${1100000000010001111011000}_2 = (25175000)_{10} = (18023D8)_{16}$ entspricht.
23
24 Weiter unten im Code entdeckt man folgenden Block:
25 \begin{lstlisting}
26   BLINKER_syn: process(clk, reset)
27   begin
28     if (reset = RES_ACT) then
29       toggle_counter_sig  <= (others => '0');
30       toggle_sig  <= COLR_OFF;
31     elsif(clk'event and clk = '1') then
32       toggle_counter_sig <= toggle_counter_next;
33       toggle_sig  <= toggle_next;
34     end if;
35   end process;
36
37
38   BLINKER_next : process(toggle_counter_sig, toggle_sig)
39   begin
40     if toggle_counter_sig >= HALFPERIOD then
41       toggle_counter_next <= (others => '0');
42       toggle_next  <= not(toggle_sig);
43     else
44       toggle_counter_next <= toggle_counter_sig + '1';
45       toggle_next  <= toggle_sig;
46     end if;
47   end process;
48 \end{lstlisting}
49 Wir sehen: bei jedem CLK-Signal ein Counter erh\"oht
50 wird -- jener Counter der mit \emph{HALFPERIOD} verglichen wird.
51 Daraus k\"onnen wir schliessen, dass \emph{HALFPERIOD} also von
52 der eingestellten Taktung abh\"angt. Diese betr\"agt 25.175MHz.
53
54 F\"ur unseren gew\"unschten Wert von $0.12s$ muss also folgender
55 Wert verwendet werden:
56
57 $\frac{25175000Hz}{\frac{1}{0.12s/2}} = \frac{25175000Hz}{16.66667Hz} = 1510500$ Takte.
58
59 Bedauerlicherweise mussten wir beim Verfassen dieses Protokolls
60 feststellen, dass wir anscheinend von einer Frequenz von 25MHz
61 -- warum auch immer -- ausgegangen sind und daher genau
62 $1500000$ Takte als Ergebnis bekamen.
63
64 Solche Fehler sollten ja \emph{eigentlich} bei der Simulation auffallen.
65 Da es sich aber offensichtlich um einen kleinen Fehler handelt
66 (10500 Takte entsprechen $417.08\mu s$)
67 ist uns das bei der Simulation nicht aufgefallen (vgl. Screenshots).
68
69
70 Wie auch immer, fuhren wir mit dem falschen Wert fort. 
71 Dieser entspricht einen Bin\"arwert von: $(1500000)_{10} = (101101110001101100000)_2$. Diese Wert \"ubernahmen wir:
72 \begin{lstlisting}
73 constant HALFPERIOD   : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "0000101101110001101100000";
74 \end{lstlisting}
75
76
77
78 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79 \section{Design-Flow}
80
81 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82 \subsection{Behavioral Simulation}
83 Gl\"ucklicherweise ist unsere Periodendauer f\"ur die Simulation kurz 
84 genug und m\"uessen daher unseren Wert nicht skalieren. An 
85 \emph{d\_toggle} kann man sch\"on unsere eingestellte halbierte Periodendauer
86 von $60ms$ ablesen. Wir sind also bereit f\"ur die Synthese.
87
88 %1behsim.png
89 \begin{center}
90 \includegraphics[width=\textwidth]{pics/1behsim.png}
91 \end{center}
92
93
94 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
95 \subsection{Synthese}
96 Mit Synplify Pro wird der VHDL Code in Logik-Elemente umgesetzt.
97 Bei diesem Schritt ist zu beachten, dass nur VHDL Ausdr\"ucke
98 umgesetzt werden k\"onnen die auch in Hardware modellierbar sind!
99
100 Die Ausgegebenen Dateien dieses Schrittes werden f\"ur die
101 n\"achsten ben\"otigt.
102
103
104 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
105 \newpage
106 \subsection{Pre-Layout Simulation}
107 F\"ur die Pre-Layout Simulation wird nun die synthetisierte 
108 Datei \emph{vga.vhm} und die entsprechende Testbench verwendet.
109 Dieser Schritt war insofern heimt\"uckisch, da bei den
110 File-Pattern kein *.vhm enthalten war und wir deswegen (ohne darauf weiter zu achten)
111 \emph{vga.\textbf{vqm}} ausw\"ahlten, da diese automatisch angezeigt wurde,
112 da diese Dateiendung in den vorgegebenen File-Patterns enthalten
113 war\dots{} Nach einem Hinweis vom Tutor war diese Problem gel\"ost. 
114
115 Wie auch immer: auch hier sind die $60ms$ f\"ur \emph{d\_toggle} erkenntlich.
116
117 %3prelayoutsim.png
118 \begin{center}
119 \includegraphics[width=\textwidth]{pics/3prelayoutsim.png}
120 \end{center}
121
122
123 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124 \newpage
125 \subsection{PPR}
126 Partition, Place and Route erfolgt mit Hilfe des Tools
127 \emph{Quartus II}. Vorerst wird unser Projekt ohne PLL
128 kompiliert um damit die Post-Layout Simulation ausf\"uhren
129 zu k\"onnen.
130
131 Die folgende Abbildung zeigt die Auslastung des FPGAs:
132 %4ppr_auslastung.png
133 \begin{center}
134 \includegraphics[width=\textwidth]{pics/4ppr_auslastung.png}
135 \end{center}
136
137
138 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
139 \newpage
140 \subsection{Post-Layout Simulation}
141 In der Post-Layout stehen nun die von \emph{Quartus II}
142 generierten Daten zur Verf\"ugung die schon exakte 
143 Timinig-Informationen enthalten. Wieder sind die $60ms$
144 ersichtlich.
145
146 %5postlayout_sim.png
147 \begin{center}
148 \includegraphics[width=\textwidth]{pics/5postlayout_sim.png}
149 \end{center}
150
151 \newpage
152 Hier noch ein Screenshot der Simulationsumgebung: Bei der
153 Testbench f\"ur die Post-Layout Simulation waren weitere Parameter
154 anzugeben (\emph{vga\_unit}).
155 %5postlayout_vgaunit.png
156 \begin{center}
157 \includegraphics[width=\textwidth]{pics/5postlayout_vgaunit.png}
158 \end{center}
159
160
161 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
162 \newpage
163 \subsection{PPR mit PLL}
164 Die folgende Abbildung zeigt die Auslastung des FPGAs, diesmal
165 mit PLL. Anschliessend wurde die Ausgabe auf das FPGA downgeloaded.
166 %6pll_auslastung.png
167 \begin{center}
168 \includegraphics[width=\textwidth]{pics/6pll_auslastung.png}
169 \end{center}
170
171
172 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
173 \newpage
174 \section{Logikanalysator}
175 %7logikwave.jpg
176 \begin{center}
177 \includegraphics[width=\textwidth]{pics/7logikwave.jpg}
178 \end{center}
179
180 \newpage
181 %7trigger.jpg
182 \begin{center}
183 \includegraphics[width=\textwidth]{pics/7trigger.jpg}
184 \end{center}
185
186
187 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
188 \newpage
189 \section{Ergebnisse}
190 \begin{itemize}
191 \item Blinkfrequenz = $\frac{1}{0.12}s = 8.33333$ Hz
192 \end{itemize}
193
194 Unser Arbeitsplatz: Rechts ist das blinkende Objekt zu sehen
195 und am mittleren Schirm ist noch die Post-Layout Simulation
196 sichtbar.
197 \begin{center}
198 \includegraphics[width=\textwidth]{pics/fertig.jpg}
199 \end{center}
200