\chapter{Design-Flow} \section{Frequenzanpassung} Die Aufgabenstellung die Frequenz f\"ur das blickende Objekt zu modifizieren, in unserem Fall auf eine Frequenz von $\frac{1}{0.12}s = 8.333 Hz$ einzustellen. Dazu mussten wir uns vorerst mit dem gegebenen Sourcecode vertraut machen. Schlie\ss{}lich stellten wir fest, dass der Code in der Datei \emph{vga\_control\_arc.vhd} daf\"ur ist, genauer gesagt die Konstante \emph{HALFPERIOD}. Dabei bestimmt \emph{HALFPERIOD} die halbe Periode. Um also auf unsere gew\"unschte Periodendauer von $0.12s$ kommen muss diese Konstante $0.06s$ ausdr\"ucken. Aber welche Einheit beschreibt \emph{HALFPERIOD}? Auf folgenden Wert ist \emph{HALFPERIOD} in der Angabe konfiguriert: \begin{lstlisting} constant HALFPERIOD : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "1100000000010001111011000"; \end{lstlisting} wobei ${1100000000010001111011000}_2 = (25175000)_{10} = (18023D8)_{16}$ entspricht. Weiter unten im Code entdeckt man folgenden Block: \begin{lstlisting} BLINKER_syn: process(clk, reset) begin if (reset = RES_ACT) then toggle_counter_sig <= (others => '0'); toggle_sig <= COLR_OFF; elsif(clk'event and clk = '1') then toggle_counter_sig <= toggle_counter_next; toggle_sig <= toggle_next; end if; end process; BLINKER_next : process(toggle_counter_sig, toggle_sig) begin if toggle_counter_sig >= HALFPERIOD then toggle_counter_next <= (others => '0'); toggle_next <= not(toggle_sig); else toggle_counter_next <= toggle_counter_sig + '1'; toggle_next <= toggle_sig; end if; end process; \end{lstlisting} Wir sehen: bei jedem CLK-Signal ein Counter erh\"oht wird -- jener Counter der mit \emph{HALFPERIOD} verglichen wird. Daraus k\"onnen wir schliessen, dass \emph{HALFPERIOD} also von der eingestellten Taktung abh\"angt. Diese betr\"agt 25.175MHz. F\"ur unseren gew\"unschten Wert von $0.12s$ muss also folgender Wert verwendet werden: $\frac{25175000Hz}{\frac{1}{0.12s/2}} = \frac{25175000Hz}{16.66667Hz} = 1510500$ Takte. Bedauerlicherweise mussten wir beim Verfassen dieses Protokolls feststellen, dass wir anscheinend von einer Frequenz von 25MHz -- warum auch immer -- ausgegangen sind und daher genau $1500000$ Takte als Ergebnis bekamen. Solche Fehler sollten ja \emph{eigentlich} bei der Simulation auffallen. Da es sich aber offensichtlich um einen kleinen Fehler handelt (10500 Takte entsprechen $417.08\mu s$) ist uns das bei der Simulation nicht aufgefallen (vgl. Screenshots). Wie auch immer, fuhren wir mit dem falschen Wert fort. Dieser entspricht einen Bin\"arwert von: $(1500000)_{10} = (101101110001101100000)_2$. Diese Wert \"ubernahmen wir: \begin{lstlisting} constant HALFPERIOD : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "0000101101110001101100000"; \end{lstlisting} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Design-Flow} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Behavioral Simulation} Gl\"ucklicherweise ist unsere Periodendauer f\"ur die Simulation kurz genug und m\"uessen daher unseren Wert nicht skalieren. An \emph{d\_toggle} kann man sch\"on unsere eingestellte halbierte Periodendauer von $60ms$ ablesen. Wir sind also bereit f\"ur die Synthese. %1behsim.png \begin{center} \includegraphics[width=\textwidth]{pics/1behsim.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Synthese} Mit Synplify Pro wird der VHDL Code in Logik-Elemente umgesetzt. Bei diesem Schritt ist zu beachten, dass nur VHDL Ausdr\"ucke umgesetzt werden k\"onnen die auch in Hardware modellierbar sind! Die Ausgegebenen Dateien dieses Schrittes werden f\"ur die n\"achsten ben\"otigt. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \subsection{Pre-Layout Simulation} F\"ur die Pre-Layout Simulation wird nun die synthetisierte Datei \emph{vga.vhm} und die entsprechende Testbench verwendet. Dieser Schritt war insofern heimt\"uckisch, da bei den File-Pattern kein *.vhm enthalten war und wir deswegen (ohne darauf weiter zu achten) \emph{vga.\textbf{vqm}} ausw\"ahlten, da diese automatisch angezeigt wurde, da diese Dateiendung in den vorgegebenen File-Patterns enthalten war\dots{} Nach einem Hinweis vom Tutor war diese Problem gel\"ost. Wie auch immer: auch hier sind die $60ms$ f\"ur \emph{d\_toggle} erkenntlich. %3prelayoutsim.png \begin{center} \includegraphics[width=\textwidth]{pics/3prelayoutsim.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \subsection{PPR} Partition, Place and Route erfolgt mit Hilfe des Tools \emph{Quartus II}. Vorerst wird unser Projekt ohne PLL kompiliert um damit die Post-Layout Simulation ausf\"uhren zu k\"onnen. Die folgende Abbildung zeigt die Auslastung des FPGAs: %4ppr_auslastung.png \begin{center} \includegraphics[width=\textwidth]{pics/4ppr_auslastung.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \subsection{Post-Layout Simulation} In der Post-Layout stehen nun die von \emph{Quartus II} generierten Daten zur Verf\"ugung die schon exakte Timinig-Informationen enthalten. Wieder sind die $60ms$ ersichtlich. %5postlayout_sim.png \begin{center} \includegraphics[width=\textwidth]{pics/5postlayout_sim.png} \end{center} \newpage Hier noch ein Screenshot der Simulationsumgebung: Bei der Testbench f\"ur die Post-Layout Simulation waren weitere Parameter anzugeben (\emph{vga\_unit}). %5postlayout_vgaunit.png \begin{center} \includegraphics[width=\textwidth]{pics/5postlayout_vgaunit.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \subsection{PPR mit PLL} Die folgende Abbildung zeigt die Auslastung des FPGAs, diesmal mit PLL. Anschliessend wurde die Ausgabe auf das FPGA downgeloaded. %6pll_auslastung.png \begin{center} \includegraphics[width=\textwidth]{pics/6pll_auslastung.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \section{Logikanalysator} %7logikwave.jpg \begin{center} \includegraphics[width=\textwidth]{pics/7logikwave.jpg} \end{center} \newpage %7trigger.jpg \begin{center} \includegraphics[width=\textwidth]{pics/7trigger.jpg} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newpage \section{Ergebnisse} \begin{itemize} \item Blinkfrequenz = $\frac{1}{0.12}s = 8.33333$ Hz \end{itemize} Unser Arbeitsplatz: Rechts ist das blinkende Objekt zu sehen und am mittleren Schirm ist noch die Post-Layout Simulation sichtbar. \begin{center} \includegraphics[width=\textwidth]{pics/fertig.jpg} \end{center}