\chapter{Popis problému, specifikace cíle}

\section{Úvod do návrhových vzorů}
\indent \indent Pro návrh asynchronních obvodů se používají v současné době různé návrhové styly. Styly se od sebe liší modely zpoždění, o které se opírají. Základní dva modely zpoždění jsou model vázaného a nevázaného zpoždění. Modely zpoždění jsou podkladem pro módy. Módy jsou metodiky, jak si obvody signalizují povolení dalších vstupů a stabilitu obvodu. 

Návrhový styl založený na modelu vázaného zpoždění je propagován Huffmanovým módem\cite{od4}. Na opačném pólu stojí vstupně-výstupní mód\cite{od4} s modelem nevázaného zpoždění podporující obvody nazývané Speed Independent \cite{od8}.
Co se týče návrhového stylu zahrnujícího Speed Independent obvody, pak mohu konstatovat, že je velice populární a budu se mu věnovat v následující práci.


\section{Popis problému}
\indent \indent Každá syntéza obvodu je závislá na vstupní specifikaci. Vstupní specifikace pro syntézu asynchronních obvodů, dodržující podmínky stanovené Speed Independent obvody \cite{od8}, mohu vyjádřit v grafové formě. Konkrétní graf, který pojme celou problematiku specifikace se nazývá signálově přechodový graf \cite{od5}. Signálově přechodový graf vychází z Petriho sítí \cite{od9} a dodržuje některé podmínky stanovené Petriho sítěmi.  Navíc bude po signálově přechodovém grafu požadováno, aby byl omezený pouze na jednoduché cykly. Po nastínění specifikace vstupu, mohu přejít k dalšímu kroku a tím je transformace signálově přechodového grafu do stavového grafu \cite{od5} \cite{od6}. Účelem získání stavového grafu je jeho poměrně jednoduché převedení na logiku. Při transformaci signálově přechodového grafu 	na stavový graf může dojít k porušení pravidel pro realizaci stavového grafu, proto je třeba provádět kontrolu během transformace. Každý stav stavového grafu má vlastní binární kód, který je třeba přiřadit pro jednotlivé signály do jejich regionů \cite{od8}. Pokud jsou pro signály vytvořené regiony, tak na jejich základě následuje vytvoření funkcí charakterizující chování vstupů \hbox{ C-elementu} \cite{od8}. Každý \hbox{C-element} v obvodu slouží jak k odstranění hazardů,tak i k uchování informační hodnoty po určitou dobu. Výstupem C-elementu je buď výstupní nebo interní signál. Na základě vytvořených funkcí lze již získat logiku popisující obvod. Mou snahou nyní bude výše zmíněný problém  převést do programu, který bude schopen automatizovat syntézu. Vytvořené funkce, ze kterých se získává logický obvod, lze ještě minimalizovat, proto se program pokusí postupnou expanzí počet proměnných ve funkci minimalizovat a na závěr program převede funkce i s naportováním na C-element do VHDL kódu.


\section{Vytýčení cílů}
\indent \indent Jelikož syntéza asynchronních obvodů není příliš rozšířená, zaměřím se zprvu na podrobnější rozpracování potřebných pojmů. Proto bude vhodné rozdělit cíle na pojmové, implementační a simulační.


\subsection{Pojmové cíle}
\indent \indent Účelem této sekce bude zavést si pojmy jako je signálově přechodový graf, Speed Independent obvody a podmínky, které musí splňovat, abychom mohli přistoupit k transformaci. Popsat si regiony, stavový graf a \hbox{ C-elementem }.  Objasnit si matematické vyjádření transformačního algoritmu ze signálově přechodového grafu do stavového grafu. Jelikož Speed Independent obvod je položen na \hbox{Vstupně-výstupním } módu, měl bych se obeznámit s jeho základy i se základy jiných módu a naznačit jejich rozdíly.


\subsection{Implementační cíle}
\indent \indent Nejprve získat signálově přechodový graf v textové formě. Textová forma by měla být vstupem programu. Program by měl být členěn do jednotlivých modulů, které by měly mít daný vstup a výstup. Cílem členění do modulu je zajistit možnost kterýkoliv modul přepracovat s tím, že zůstanou dodrženy vstupy a výstupy. Moduly by se měly starat o následující: převádění textového vyjádření signálově přechodového grafu do datové podoby, datový obraz signálově přechodového grafu přetransformovat do stavového grafu. Následně se postarat o regiony ze stavového grafu a vytvořit funkce a  minimalizovat počet proměnných. Funkce a jejich vztah k C-elementu, vstupů, výstupů a interních signálů převést na VHDL kód.


\subsection{Simulační cíl}
\indent \indent Odsimulovat si vybraný asynchronní obvod, který bude splňovat podmínky z pojmové části a projde naprogramovaným programem. Simulace by měla být založena na VHDL kódu, získaného  jako výstup programu. Taktéž samostatně si odsimulovat C-element.


\section{Čím se zabývat nebudu}
\indent \indent Nebudu se zabývat dekompozicí logiky, vkládání signálu, pokud dojde k redundantnímu zakódování a ani opravou špatně specifikovaného signálově přechodového grafu.


\section{Existující nástroje pro syntézu asynchronních obvodů}


\subsection{ATACS online}
\indent \indent ATACS je online program pro syntézu asynchronních obvodů, který lze nalézt na stránkách
\cite{od1}. Tento program je velice schopný, může
syntetizovat z různých vstupních popisů asynchronních obvodů. Výsledek syntézy jsou buď  atomické hradla nebo kombinace s \hbox{ C-elementem }. Výstup programu je textový popis v němž je naznačený vztah mezi signály a  použitými hradly.  Já se konkretně zaměřím na vstupní soubory s příponou  \hbox{\textit{.g}}, jelikož tyto soubory popisují signálově přechodový graf. Z tohoto textového popisu následně budu vycházet pro vstup programu.


Musím konstatovat, že tento nástroj pro syntézu bude na vyšší úrovní než můj program. Avšak naším cílem je si vyzkoušet postup syntézy asynchronních obvodů a seznámit se s ním. Jedinou výhodou od ATACSu je ,že můj nástroj pro syntézu vygeneruje přímo VHDL kód, který pak budu moci použít k simulaci.

Jelikož vstupem programu bude textová forma signálově přechodového grafu, tak budu vycházet ze stejného základu jako jsou soubory u ATACS. Navíc budu  předpokládat kompatibilitu vstupních souboru mezi programem a ATACS. Účelem kompatibility je porovnat vygenerovaný VHDL kód s výstupem z ATACS. 

\subsection{Petrify}
\indent \indent Dalším nástrojem určeným pro syntézu asynchronních obvodů je Petrify. Jedná se o jeden z nejznámějších nástrojů pro syntézu asynchronních obvodů. Dokáže transformovat různé vstupní popisy a převádí si je do své vlastní vnitřní formy. Velkou výhodou je optimalizace logiky na dostupné typy hradel.  Pracuje jak se Speed Independent obvody, tak i obvody založenými na Huffmanovém módu. Seznámit se s tímto programem můžeme na stránkách \cite{od2}.

Petrify je volně stažitelný program typu konzolové aplikace. Program je určen především pro operační systém UNIX, a proto se veškeré preference nastavují pomocí přepínačů. Vstup a výstup programu je opět v textové formě. Textová specifikace pro signálově přechodový graf se dá získat z  grafického obrazu grafu. Program, který umí vygenerovat z grafického obrazu grafu textovou specifikaci pro Petrify se jmenuje VSTGL (Visual STG Lab) \cite{od10}.

Petrify je opět velice důmyslný nástroj pro syntézu asynchronních obvodů, výhodou mého programu by opět měla být schopnost generování VHDL kódu.
