\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 -- asyn reset toggle_counter_sig <= (others => '0'); toggle_sig <= COLR_OFF; elsif(clk'event and clk = '1') then -- synchronous capture 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 -- after half period ... toggle_counter_next <= (others => '0'); -- ... clear counter toggle_next <= not(toggle_sig); -- ... and toggle colour. else -- before half period ... toggle_counter_next <= toggle_counter_sig + '1'; -- ... increment counter toggle_next <= toggle_sig; -- ... and hold colour 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: $(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. %1behsim.png \begin{center} \includegraphics[width=\textwidth]{pics/1behsim.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Synthese} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Pre-Layout Simulation} %3prelayoutsim.png \begin{center} \includegraphics[width=\textwidth]{pics/3prelayoutsim.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{PPR} %4ppr_auslastung.png \begin{center} \includegraphics[width=\textwidth]{pics/4ppr_auslastung.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Post-Layout Simulation} %5postlayout_sim.png \begin{center} \includegraphics[width=\textwidth]{pics/5postlayout_sim.png} \end{center} %5postlayout_vgaunit.png \begin{center} \includegraphics[width=\textwidth]{pics/5postlayout_vgaunit.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{PPR mit PLL} %6pll_auslastung.png \begin{center} \includegraphics[width=\textwidth]{pics/6pll_auslastung.png} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Logikanalysator} %7logikwave.jpg \begin{center} \includegraphics[width=\textwidth]{pics/7logikwave.jpg} \end{center} %7trigger.jpg \begin{center} \includegraphics[width=\textwidth]{pics/7trigger.jpg} \end{center} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Ergebnisse} \begin{itemize} \item Blinkfrequenz = $\frac{1}{0.12}s = 8.33333$ Hz \end{itemize} \begin{center} \includegraphics[width=\textwidth]{pics/fertig.jpg} \end{center}