\documentclass[../Diplomschrift.tex]{subfiles}
\begin{document}

\part{A short introduction to VHDL}

Designing a processor is a big task, and it's easiest to start very small. With software projects, this is usually in the form of a ``Hello World'' program - we will be designing a hardware equivalent of this.

\section{Prerequisites}

Other than a text editor, the following Free Software packages have to be installed:

\begin{savenotes}
\begin{description}
 \item[\icode{ghdl}\footnote{\url{https://github.com/ghdl/ghdl}}] to compile and simulate the design
 \item[\icode{gtkwave}\footnote{\url{http://gtkwave.sourceforge.net/}}] to view the generated waveform files
 \item[GNU \icode{make}] to coordinate simulating designs, compiling firmware and generating images
 \item[\icode{python}] for helper scripts
\end{description}
\end{savenotes}

\section{Creating a design}

A simple starting design is a D flip flop:

\def\svgwidth{2cm}
\input{d_flip_flop.pdf_tex}

The following VHDL code describes the device:

\lstinputlisting[title=\texttt{flipflop.vhd}]{vhdl/flipflop.vhd}

In order to test this design, a test bench has to be created:

\lstinputlisting[title=\texttt{flipflop\_tb.vhd}]{vhdl/flipflop_tb.vhd}

\section{Simulating a design}

\begin{lstlisting}[style=default,language=sh]
# analyze the design files
ghdl -a *.vhd
# elaborate the test bench entity
ghdl -e flipflop_tb
# run the test bench, saving the signal trace to a GHW file
ghdl -r flipflop_tb --wave=flipflop_tb.ghw
# open the trace with gtkwave
gtkwave flipflop_tb.ghw
\end{lstlisting}

\begin{center}
\includegraphics[width=\textwidth]{flipflop_gtkwave.png}
\end{center}
\end{document}
