\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}

