\chapter{Simulace}

\section{Pomůcky pro simulaci}
\indent \indent Xilinx ISE Simulátor je součástí  Xilinx ISE 10.1. Veškeré informace o programu ISE, lze získat ze stránek \cite{od7}. 

\section{Postup simulace, vytvoření simulace}
\indent \indent Nejprve jsem vytvořil projekt v ISE 10.1. Přidal jsem do projektu VHDL soubory s koncovkou .vhd. Pro VHDL soubory jsem vytvořil Test Bench Waveform, ve kterém jsem nastavil vstupní signály na hodnoty jedna nebo nula, podle potřeby specifikace grafu nebo tabulky. Test Bench Waveform je šablona pro testování v programu ISE. Výsledkem simulace bude průběh signálů v čase a reakce na vstupní signály.


\section{Nastavení Xilinx ISE Simulátoru}
\indent \indent Simulace probíhala při následujících parametrech viz. \ref{fig:conf}.

\begin{figure}[hp]
\begin{center}
\includegraphics{conf}
\caption{Nastavení Xilinx Ise Simulátoru}
\label{fig:conf}
\end{center}
\end{figure}

\clearpage

\section{Simulace C-elementu}
\indent \indent Vstupem je popis C-elementu ve VHDL kódu, kód byl popsán v kapitole 3.  Pro daný VHDL kód je vytvořen Test Bench Waveform, ve kterém jsem nastavil průběhy pro vstupy \textit {R} a\textit {S}, představující vstupy C-elementu Reset a Set. 


\section{Nastavení pro C-element}
\indent \indent Nastavení Test Benche jsem zvolil tak, abych prošel všechny možné vstupy, které pro C-element mohou nastat. Možnosti vstupů a jejich odpovídající výsledky jsou uvedeny v tabulce \ref{tab:tab2}. 
\begin{table}[hp]
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
\bf{Set} & \bf{Reset} & \bf{C} \\
\hline
$0$ & $1$ & $0$\\
\hline
$0$ & $0$ & $C_{n-1}$\\
\hline
$1$ & $1$ & $C_{n-1}$\\
\hline
$1$ & $0$ & $1$\\
\hline
\end{tabular}
\end{center}
\caption{Ukázka tabulky}
\label{tab:tab2}
\end{table}
\newline Nastavení Setu a Resetu jsem zvolil tak, abych  nejprve vyzkoušel výstup na nulu a kopírování předchozího stavu a následně přechod na jedničku a kopírování předchozího stavu. Tento postup je uplatněn při nastavení \ref{fig:vst1}.

\begin{figure}[hp]
\begin{center}
\includegraphics{vst1}
\caption{Vstupy pro C-element}
\label{fig:vst1}
\end{center}
\end{figure}

\section{Výstup simulace pro C-element}
\indent \indent Na obrázku \ref{fig:vys1} je vidět průběh simulace \hbox{C-elementu}, reakce na vstupy, nastavení  odpovídajících výstupních stavů korespondující s tabulkou.
 
 \begin{figure}[hp]
\begin{center}
\includegraphics{vys1}
\caption{Výstup pro C-element}
\label{fig:vys1}
\end{center}
\end{figure}
\clearpage

\section{C-element v FPGA}
\indent \indent Po odsimulováni C-elementu na behavioralní úrovni, jsem nechal program ISE, aby obvod vysyntetizoval a umístil do FPGA. Program ISE vytvořil propojení mezi jednotlivými buňkami FPGA (slice). Vnitřek buňky především tvoří LUT, ve kterém je nahraná pravdivostní tabulka. Schematicky jsem se pokusil nakreslit propojení použitých prvků, tak jak je rozmístil program ISE.  

\begin{figure}[hp]
\begin{center}
\includegraphics{schema}
\caption{Schéma C-elemntu}
\label{fig:schema}
\end{center}
\end{figure}


Obrázek \ref{fig:schema} zachycuje schematický nákres vnitřku FPGA. Kombinační logika, kterou je C-element popsán, je umístěna v LUTu v podobě pravdivostní tabulky.  V tabulce \ref{tab:tab3} jsem pro názornost vypsal pravdivostní tabulku LUTu . Pravdivostní tabulku pro LUT lze popsat rovnicí $ F = ( \neg A2 * ( A1 * \neg A4 ) + ( A2 * ( A1 + \neg A4 ) ) )  $. Na vstup A2 přichází signál ze zpětné vazby jak u C-elementu. A1 je vstup odpovídající vstupu S a A4 odpovídá vstupu R u C-elementu.
Pro srovnání je vypsaná i pravdivostní tabulku popisující vnitřek C-elementu \ref{tab:tab4}. Vnitřek C-elementu je popsán rovnicí: $ f = Z * S + S * \neg R + Z * \neg R $, kde Z představuje zpětnovazební signál pro vstupy ANDů, R je negovaná vstup a S je vstup C-elmentu. 


\begin{table}[h]
\begin{center}
\begin{tabular}{|c|c|c|c|}
\hline
\bf{A2} & \bf{A1} & \bf{A4} & \bf{$\neg$A2*(A1*$\neg$A4)+(A2*(A1+$\neg$A4))}  \\
\hline
$0$ & $0$ & $0$ & $0$  \\
\hline
$0$ & $0$ & $1$ & $0$  \\
\hline
$0$ & $1$ & $0$ & $1$  \\
\hline
$0$ & $1$ & $1$ & $0$  \\
\hline
$1$ & $0$ & $0$ & $1$  \\
\hline
$1$ & $0$ & $1$ & $0$  \\
\hline
$1$ & $1$ & $0$ & $1$  \\
\hline
$1$ & $1$ & $1$ & $1$  \\
\hline
\end{tabular}
\end{center}
\caption{Pravdivostní tabulka pro LUT}
\label{tab:tab3}
\end{table}


\clearpage

\begin{table}[h]
\begin{center}
\begin{tabular}{|c|c|c|c|}
\hline

\bf{Z} & \bf{R} & \bf{S} & \bf{Z*S+S*$\neg$R+Z*$\neg$R} \\
\hline
$0$ & $0$ & $0$ & $0$  \\
\hline 
$0$ & $0$ & $1$ & $0$  \\
\hline
$0$ & $1$ & $0$ & $1$  \\
\hline
$0$ & $1$ & $1$ & $0$  \\
\hline
$1$ & $0$ & $0$ & $1$  \\
\hline 
$1$ & $0$ & $1$ & $0$  \\
\hline
$1$ & $1$ & $0$ & $1$  \\
\hline
$1$ & $1$ & $1$ & $1$  \\
\hline
\end{tabular}
\end{center}
\caption{Pravdivostní tabulka pro vnitřní rovnici popisující C-element}
\label{tab:tab4}
\end{table}

Při porovnání hodnot v tabulkách jsem dospěl k závěru, že obvod vytvořený v programu ISE je správně sestaven.

\section{Simulace asynchronního obvodu}
\indent \indent Pro syntézu jsem zvolil VHDL kód, který prošel při testu. Jedná se konkrétně o vstupní soubor  vmeP.g. Pro tento soubor byl vygenerován soubor vme.vhd. Navíc je nutné do projektu přidat cm.vhd soubor, ve kterém se vyskytuje implementace C-elementu. Pro tento soubor jsem vytvořil odpovídající Test Bench Waveform. Dále jsem si připravil, ze signálově přechodového grafu, odpovídající časový diagram viz. \ref{fig:timm}. Test Bench Waveform jsem nastavil podle odpovídajícího časového diagramu. Časový diagram  taktéž ukazuje předpokládané výstupy pro jednotlivé signály. Celý projekt je uložen ve složce vmeP. 

\begin{figure}[hp]
\begin{center}
\includegraphics{timm}
\caption{Časový diagram}
\label{fig:timm}
\end{center}
\end{figure}
\clearpage

Jména signálů v časovém diagramu odpovídají původním názvům ze souboru vmeP.g. Jména signálů v Test Bench Waveformu jsou rozšířeny o \textit{in} resp. \textit{out} pokud se jedná o vstupní signál resp. výstupní signál. Toto rozšíření odpovídá pojmenování vstupních a výstupních signálů ve vygenerovaném VHDL kódu.

\begin{figure}[hp]
\begin{center}
\includegraphics{vst2}
\caption{Vstup pro obvod var. 1}
\label{fig:vst2}
\end{center}
\end{figure}
\begin{figure}[hp]
\begin{center}
\includegraphics{vys2}
\caption{Výstup pro obvod var. 1}
\label{fig:vys2}
\end{center}
\end{figure}
\clearpage

Na výsledku simulace lze pozorovat, že reakce na vstupní signály přichází okamžitě. Za povšimnutí stojí, že se zde nevyskytuje žádný hodinový signál. Na začátku průběhu se čeká na přechod signálu \textit {indsr} z nula na jedna. Po příchodu signálu dojde ke změně signálu \textit {outlds} a následnému čekání na vstupní signál \textit {inldtack}. Při srovnání s časovým diagramem lze pozorovat změnu \textit {dsr} signálu, následně změnu signálu \textit {csc0} a\textit { lds}. Jelikož signál \textit {csc0 }je interní není na simulaci vidět. Proto si signál \textit {csc0} vyvedu a ukáži na dalším snímku výsledku simulace. Prozatím můžu konstatovat, že průběh odpovídá časovému diagramu. Po změně \textit {outlds} obvod čeká na vstupní signál\textit { ldtack}. V časovém diagramu vidím, že při změně \textit {ldtack} dojde následně ke změně signálu \textit {d}. Toto tvrzení je potvrzeno po změně signálu \textit {inldtack} výsledkem simulace. Opět dojde k čekání na \textit {dsr}. Změnu vyvolá snížení interního signálu a poté dojde zároveň ke změně výstupních signálu \textit {d} a\textit { lds} resp. v simulaci \textit {outd} a\textit { outlds}.
\newline
Původní Test Bench Waveform nezahrnuje interní signál, proto jsem jej vyvedl přidáním signálu \textit {outcsc0}, abych mohl porovnat všechny signály s časovým diagramem. 
\begin{figure}[hp]
\begin{center}
\includegraphics{vst3}
\caption{Vstup pro obvod var. 2}
\label{fig:vst3}
\end{center}
\end{figure}
\begin{figure}[hp]
\begin{center}
\includegraphics{vys3}
\caption{Výstup pro obvod var. 2}
\label{fig:vys3}
\end{center}
\end{figure}
\clearpage

Ve výsledné simulaci vidím, že interní signál \textit {outcsc0} roste ve stejném časovém okamžiku jako signál \textit {inlds}.  Ve skutečnosti  je změna signálu \textit { inlds} vyvolaná signálem \textit { outcsc0} a stejně tak i změna signálů \textit {outd } a \textit { outlds} vyvolaná signálem \textit { outcsc0}, jak lze pozorovat  na časovém diagramu.

\section{Závěr simulace}
\indent \indent Reakce na vstupní signály byly simulovány v Xilinx  ISE Simulátoru. Porovnání změn jsem provedl vůči tabulce a časovému diagramu. Tabulka byla referenci pro C-element, časový diagram zase pro vybraný vygenerovaný VHDL soubor. Časový diagram byl připraven ze signálově přechodového grafu, který popisuje obvod, pro který byl vygenerován VHDL kód.  Při porovnání výsledků, jak pro C-element s tabulkou, tak pro vybraný VHDL kód s časovým diagramem, jsem dospěl ke shodě.

