\chapter{Cíle bakalářské práce}
Mým úkolem v této bakalářské práci, je převod programu ATPG (Program na generování testovacích vektorů) do 
programového jazyka C++ a zároveň z daného programu udělat dynamicky linkovanou knihovnu. Programový kód musí 
být kompilovatelný alespoň pod operačními systémy Linux a Windows. Tento úkol se dělí na několik dílčích úkolů,
které jsem řešil každý zvlášť. Zkrácený popis těchto úkolů následuje a více je popsán v kapitole \ref{chp:PopisImplementace} \\

\begin{itemize}
\item Převod do jazyka C++ a objektový model: Původní program Atalanta-M je naprogramován v jazyce C. Já jsem dostal program vytvořený v C++ studentem Zlatuškou,
který jej vypracoval jako semestrální projekt. Problém tohoto kódu v C++ bylo, že nefungoval správně, respektive výsledky,
které generoval, byly zcela odlišné od původního programu Atalanta-M a navíc v několika případech došlo i k jeho zacyklení nebo spadnutí. Z tohoto upraveného programu jsem převzal objektový model, který jsem celý zachoval a nijak zásadně neupravil.
Funkce původního programu byly skoro všechny implementovány, tj. já jsem doprogramoval ty chybějící.

\item Rozšíření pro rozsáhlejší obvody: Dalším dílčím úkolem bylo najití ``úzkých'' míst programu, které omezovala
užití tohoto programu pro rozsáhlejší obvody. Bylo nutné nalézt tyto místa a pokusit se je eliminovat. V programu od
studenta Zlatušky již byla tato místa identifikována a upravena na užití standartních tříd knihovny STL užívané
v jazyce C++.

\item Vytvoření rozhraní pro volání jednotlivých funkcí: Vzhledem k tomu, že program byl převeden na dynamicky linkovanou knihovnu, tak bylo nutné pozměnit rozhraní volání jednotlivých funkcí.

\item Vytvoření dynamicky linkované knihovny: Původní programový kód bylo nutné upravit tak, aby byl kompilovatelný i
jako dynamicky linkovaná knihovna a bylo jej možné využívat i v jiných programech bez nutnosti volání tohoto programu pomocí
příkazové řádky s parametry. Toto přináší mnohem lepší funkčnost, protože sdílená data je možné předat přímo bez nutnosti ukládání na disk. 

\item Ověření funkčnosti: Funčknost výsledného programu bylo nutné ověřit. Ověření funkčnosti jsem prováděl pomocí porovnání výsledků obou programů. Pro testování byla použita schémata reálných obvodů.

\item Srovnání rychlosti: Nakonec jsem provedl srovnání rychlosti obou programů. Pro výsledky jsem použil data generovaná přímo v průběhu zpracování testovacích vzorků. Tato data jsem následně vynesl do tabulky.

\end{itemize}


Cíle bakalářské práce jsou následující:
\begin{itemize}
	\item Převod do C++
	\begin{itemize} 
	  \item Stanovení objektové struktury výsledné programové knihovny
	  \item Přiřazení funkcí ke třídám C++
	  \item Úprava C funkcí pro C++
	\end{itemize}
	\item Najít a eliminovat úzká místa programu
	\item Vytvoření dynamické knihovny 
	  \begin{itemize}
	    \item Vytvoření rozhraní pro volání jednotlivých funkcí
	    \item Úprava kódu na dynamickou knihovnu
	  \end{itemize}
	\item Úprava zdrojových kódů tak, aby byly kompilovatelné pod OS Windows a Linux
	\item Srovnání z hlediska rychlosti obou programů
\end{itemize}


\section{Motivace bakalářské práce}
Motivací této bakalářské práce je převod programu původně naprogramovaného v jazyce C do jazyka C++. Pro nový program stanovit objektový model, který kompletně pojme původní funkčnost programu. Nový program však půjde ještě dále a bude z něj vytvořena dynamicky linkovaná knihovna, kterou lze použít i v jiných programech, které předcházejí nebo navazují v procesu vývoje logických obvodů. V praxi se tato knihovna použije v aplikacích CAD nebo CAM (viz. \ref{sec:Uvod}). Existuje zde reálná šance implementovat tuto knihovnu jako přídavný prvek do aplikace typu CAD, kde by výstupem z této aplikace pak nebyl pouze soubor, který by obsahoval strukturu, ale také rovnou soubory, které se využijí pro testování daného výrobku. Pak je možné zajít ještě dále a to, kdy se přes tuto knihovnu propojí systémy CAM a CAD, kdy po vygenerování testovacích vektorů dojde k jejich předání aplikaci CAM, která ze struktury obvodu a popis jeho testování může začít vyrábět otestované obvody. To je asi ještě budoucností, ale taková je idea výroby logických obvodů.

Další motivací této bakálářské práce je možnost volby operačního systému. Zpravidla nemusí aplikace typu CAD a CAM běžet na stejném operačním systému, proto tato volba. Z této vlastnosti vyplývá další podmínka a to, že program musí být kompilovatelný pod více operačními systémy. Tímto krokem se výrazně rozšířilo množství využitelného softwaru.

Programem Atalanta-M je možné zkoušet obvody s určitým omezením. V současné době jsou produkovány větší obvody, která mohou překročit velikost omezení Atalanty-M, a program se tak stává nepoužitelným, alespoň z hlediska generování testovacích vektorů. Tyto limity je třeba najít a odstranit.

\section{Stávající stav programového kódu}
Převod z jazyka C do jazyka C++ a stanovení objektového modelu bylo již provedeno studentem Zlatuškou. Implementace kódu v C++ však obsahuje množství chyb a program není schopen vygenerovat ani jeden výstup stejný, jako původní Atalanta-M, napsaná v jazyce C. Nejsou implementovány všechny funkce, ale chybí pouze nějaké pomocné funkce, které však jsou potřebné pro správnou funkci programu. Objektový model bude převzat beze změny struktury.

Převod na dynamicky linkovanou knihovnu včetně rozhraní této knihovny je nutné kompletně implementovat. Je nutné vymyslet jakým způsobem se změní rozhraní, a toto nové rozhraní popsat, aby tato knihovna byla použitelná. 

Aby byl program kompilovatelný pod více OS je nutné udělat nějaké změny programového kódu, které tuto možnost zajistí. Tyto úpravy chybí a je potřeba je dodělat.

Eliminace úzkých míst již byla z velké části dokončena studentem Zlatuškou, který implementoval dynamická pole místo statických. Tato změna programového kódu také není bezproblémová a je nutné ji řádně odladit, protože způsobuje zacyklení nebo spadnutí programu.

Program převzatý od studenta Zlatušky je tedy z velké části převeden do objektového modelu. Chybí implementace některých funkcí, které je třeba doplnit. Program sám o sobě pravděpodobně obsahuje spoustu chyb, protože provedené testy programu od studenta Zlatušky vygenerovaly úplně jiný výsledek než program Atalanta-M. Při implementaci programového kódu v C++ došlo zároveň k obměně statických polí za dynamická pole. Na několika místech je tato implementace provedena chybně, a proto i tyto úseky je třeba opravit, aby fungovaly správně.

\section{Nové funkce}
K programu bude přidána i jedna nová funkce a tou je možnost simulace obvodu na základě náhodně vygenerovaného LFSR vektoru.

