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.
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}.
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:
19 constant HALFPERIOD : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "1100000000010001111011000";
22 wobei ${1100000000010001111011000}_2 = (25175000)_{10} = (18023D8)_{16}$ entspricht.
24 Weiter unten im Code entdeckt man folgenden Block:
26 BLINKER_syn: process(clk, reset)
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;
38 BLINKER_next : process(toggle_counter_sig, toggle_sig)
40 if toggle_counter_sig >= HALFPERIOD then
41 toggle_counter_next <= (others => '0');
42 toggle_next <= not(toggle_sig);
44 toggle_counter_next <= toggle_counter_sig + '1';
45 toggle_next <= toggle_sig;
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.
54 F\"ur unseren gew\"unschten Wert von $0.12s$ muss also folgender
55 Wert verwendet werden:
57 $\frac{25175000Hz}{\frac{1}{0.12s/2}} = \frac{25175000Hz}{16.66667Hz} = 1510500$ Takte.
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.
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).
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:
73 constant HALFPERIOD : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "0000101101110001101100000";
78 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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.
90 \includegraphics[width=\textwidth]{pics/1behsim.png}
94 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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!
100 Die Ausgegebenen Dateien dieses Schrittes werden f\"ur die
101 n\"achsten ben\"otigt.
104 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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.
115 Wie auch immer: auch hier sind die $60ms$ f\"ur \emph{d\_toggle} erkenntlich.
119 \includegraphics[width=\textwidth]{pics/3prelayoutsim.png}
123 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
131 Die folgende Abbildung zeigt die Auslastung des FPGAs:
134 \includegraphics[width=\textwidth]{pics/4ppr_auslastung.png}
138 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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$
148 \includegraphics[width=\textwidth]{pics/5postlayout_sim.png}
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
157 \includegraphics[width=\textwidth]{pics/5postlayout_vgaunit.png}
161 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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.
168 \includegraphics[width=\textwidth]{pics/6pll_auslastung.png}
172 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
174 \section{Logikanalysator}
177 \includegraphics[width=\textwidth]{pics/7logikwave.jpg}
183 \includegraphics[width=\textwidth]{pics/7trigger.jpg}
187 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
191 \item Blinkfrequenz = $\frac{1}{0.12}s = 8.33333$ Hz
194 Unser Arbeitsplatz: Rechts ist das blinkende Objekt zu sehen
195 und am mittleren Schirm ist noch die Post-Layout Simulation
198 \includegraphics[width=\textwidth]{pics/fertig.jpg}