\chapter{Popis HUBu}
\section{Úvod}
Hub představuje základní součást výukového {\bf EDA}\footnote{EDA = Electronic Design Automation} 
systému , jedná se o datovou strukturu sloužící k popisu číslicových obvodů 
chováním a strukturou na úrovni hradel. 

Tato struktura byla inspirována jazykem {\bf VHDL}. 
Centrálním pojmem popisu je tedy Entita, ta představuje abstrakci 
více stejných obvodů.  Entita představuje blok jehož "vnitřek" je zvenčí 
skrytý a poskytuje pouze rozhraní vstupních, výstupních popř. vstupně 
výstupních portů tedy svoje rozhraní pomocí kterého komunikuje s ostatními obvody.  
Entita může být popsána bud chováním (behaviorální) nebo strukturou. 
Entita která nemá žádný popis se nazývá Externí a má popsáno tedy pouze 
svoje rozhraní. 
Každá entita může mít několik Architektur ty představují alternativní 
popisy "vnitřku" konkrétní entity.

Strukturní popis entit je realizován pomocí instancí entit a spojů. 
Tento popis je blízký klasickému propojování jednotlivých hradel a 
integrovaných obvodů na tištěném spoji. Rozhraní entity si lze představit 
jako konektory na desce, vodivé cesty jsou spoje a jednotlivé součástky 
představují instance. Instance je vytvořena z entity a představuje 
konkrétní obvod ve struktuře. 
Z jedné entity může být v jedné architektuře vytvořen libovolný počet instancí. 
Entity z kterých byli vytvořeny instance v architektuře můžou být 
samozřejmě také popsány strukturou, návrh je tedy hierarchický. 
Spoj představuje množinu elektricky spojených vývodů 
(portů instancí nebo portů rozhraní).

Hub je napsán v jazyce C++  a je tvořen třemi základními částmi. 
Jádrem které představuje organizované úložiště dat, 
importním systém obsahujícím komponenty pro import různých formátů 
a exportním systémem sloužícím k exportu do různých formátů popisu.

Jádro se dělí na tři části. Části které obsahují třídy pro strukturní 
a behaviorální popis Entit a část která se stará a organizaci 
entit tzv. vrchní vrstva.

Každou jednotku jako je ( knihovna,entita,prototyp portu, architektura , \ldots)
tvoří jedna třída. Tyto jednotky mají různé společné vlastnosti např. jsou 
pojmenované a můžou vlastnit nějaké další jednotky nebo definovat nějaké vlastnosti.

Pro tyto potřeby obsahuje HUB třídy které definují tyto a další vlastnosti, 
které jednotky HUBu  využívají:

\section{Popis obecných tříd}

\subsection{Pojmenované jednotky}

Každá třída která představuje pojmenovanou jednotku je potomkem třídy \verb|NameHaving|.

Tato třída v sobě obsahuje objekt třídy \verb|Name| ve kterém je uloženo jméno. 
Je potomkem abstraktní třídy \verb|Named| která definuje rozhraní pro vše co má jméno,
tedy metodu:
\begin{verbatim}
virtual const Name& name (void) const=0;
\end{verbatim}
Tato metoda vrací jméno každé pojmenované jednotky.


Jméno je realizováno třídou Name , která je potomkem knihovní třídy string. 
Poskytuje metody cons pro jmenné konvence a skládání jmen. 
Také poskytuje metodu \verb|Augment| sloužící k přidání číselného indexu 
na konec jména a metodu nextAugment zvětšující tento index o jedna.

\subsection{Jmenný prostor}
Slouží jako úložiště objektů, umožnuje je vytvářet a vyhledávat. Např. knihovna
vlastní jmenný prostor entit. Objekty jsou
identifikovány svým jménem (objekt třídy \verb|Name|), jmenný prostor není 
citlivý na velikost písma. 
 
Je realizován šablonou \verb|Namespace| jejímž parametrem je typ objektů 
jež bude jmenný prostor obsahovat. Je potomkem standardní 
knihovní třídy \verb|map< Name, Thing*, CaseComp>|. 
Jméno \verb|Name| představuje
 index v mapě a \verb|CaseComp| je funktor sloužící k porovnávání při vyhledávání
  v mapě, \verb|Thing| je parametr šablony. 
  Namespace poskytuje metodu \verb|Find| pro vyhledávání objektů podle jejich jména. 
  Také poskytuje metody \verb|FindOrCreate| a \verb|Create| pro vytváření objektů. 
  Metoda \verb|Create| před vytvořením objektu kontroluje zda již stejně 
  pojmenovaný objekt ve jmenném prostoru neexistuje, pokud existuje vrátí \verb|NULL|.
Pro vkládání a vyhledávání objektů jež jsou potomky objektů třídy ve 
jmenném prostoru obsažených , poskytuje šablony metod pro vytváření a 
vyhledávání, které vracejí přímo ukazatel na typ potomka a není tedy
 potřeba používat \verb|dynamic_cast|.
Poskytuje také metodu \verb|CreateUnique|, která slouží k vytvoření objektu 
s unikátním jménem tzn. pokud objekt se zadaným jménem ve jmenném 
prostoru již existuje přidá ke jménu číselný index.

\subsection{Atributy}

\paragraph{Množina atributů}

Tato množina se využívá pro nastavení vlastností ( flagů )
u některých jednotek struktury HUBu. Např. u prototypů portů se pomocí množiny atributů
nastavuje mód portu.

Množina obsahuje binární atributy, každý z nich může být 
buď známý nebo neznámý. Pokud je známý má hodnotu true nebo false.

Je realizována šablonou \verb|AttrSet|.
\begin{verbatim}
template <typename Key, int N> class AttrSet
\end{verbatim}

Parametr šablony \verb|Key| odlišuje proměnné různých typů, 
které pak nelze vzájemně přiřadit.
 Je možno použít libovolný typ, ale zpravidla se používá třída, 
 jejímž členem je indexovaná množina. Parametr N udává počet bitů množiny.
Vektor může být indexován objekty třídy \verb|AttrIndex<Key>|. 
Množiny atributů je možno spojovat pomocí přetížených operítorů +,  += .
Poskytuje také metodu \verb|isSubset| která zjištuje zda se jedná o podmnožinu.

\paragraph{Index množiny atributů}
Typ proměnné je realizován šablonou \verb|AttrIndex<Key>|. 
Objekty této třídy nesou celočíselnou hodnotu 
a jsou vybaveny základními metodami:

srovnání: \verb|operator == ()| a \verb|operator < ()| , přiřazení: \verb|operator = ()| 
a kopírovací konstruktor.

Parametr šablony {\bf Key} odlišuje proměnné různých typů, 
které pak nelze vzájemně přiřadit. Je možno použít libovolný typ, 
ale zpravidla se používá třída, jejímž členem je indexovaný vektor.

Třída \verb|AttrUnique| dědí \verb|AttrIndex| a realizuje proměnnou, 
která při inicializaci nabyde hodnoty, unikátní mezi všemi objekty této třídy. P
o zániku objektu je hodnota volná a může být (nikoli nutně musí) být 
přidělena jinému objektu. Jestliže přiřazení takto inicializované 
proměnné je nežádoucí (má to být konstanta), stačí ji deklarovat jako const.

Třída \verb|StatAttrUnique| je shodná s \verb|AttrUnique| až na to, 
že je určena k inicializaci v čase inicializace modulu, 
to jest jako statická proměnná modulu. Objekty této třídy nemohou být 
automatickými nebo dynamickými proměnnými. 


\subsection{Výjimky}

Využívají se pro ohlášení neočekávané události při práci s HUBem, např.
syntaktická chyba v importovaném souboru nebo nenalezená architektura entity.

Každá výjimka má důvod (I/O, nekonzistence struktur, syntax,\ldots), 
místo (v souboru, v bloku, \ldots ), kontext, systémovou kategorii .
Třídy reprezentující tyto čtyři komponenty jsou parametry šablony 
\verb|CException|. Místo a kategorie mají implicitní prázdné třídy.
Každá třída výjimky z této šablony odvozená je potomkem tříd systémové 
kategorie a důvodu. 
Podobjekt výjimky odpovídající systémové kategorii  je inicializovány tak, 
aby metoda \verb|what()| dala kompletní popis výjimky.

Jednotlivé komponenty výjimky se musí inicializovat pomocnými objekty, tedy např.
\begin{verbatim}
throw IOException ( TokenReason (currentToken, expected), FilePosition (filename, lineno)) 
\end{verbatim}
Každá nově definovaná třída důvodu, pozice nebo kontextu musí mít:
\begin{itemize}
\item konstruktor, který bere potřebné hodnoty; jestliže tento konstruktor bere (void), musí brát i nevýznamný parametr např. typu int (jinak překladač nerozpozná, že se konstruuje objekt)
\item kopírovací konstruktor
\item funkci std::string tell (void), která dodá čitelný popis obsahu objektu.
\end{itemize}


\section{Vrchní vrtva}
Kořen celé datové struktury představuje objekt třídy \verb|Hub| , 
je pravděpodobné, že objekt této třídy bude v každé aplikaci vždy jeden, 
ale není to nutné. \verb|Hub| vlastní ve svých jmenných prostorech knihovny a návrhy. 
Poskytuje funkce pro vytváření a vyhledávání knihoven a návrhů. 
Poskytuje iterátory pro procházení prostotu knihoven  a návrhů.
Třída \verb|Hub| je potomkem třídy \verb|NameHaving|. 
Objekt třídy \verb|Hub| má tedy jméno které může být měněno metodou rodičovské třídy. 
Struktura vrchnní vrsty HUBu je znázorněna na obrázku \ref{fig:hub}





\subsection{Knihovna}
Je pojmenována , je reprezentována třídou \verb|Library|. 
Obsahuje jmenný prostor \verb|Entit|. 
Umožňuje vytvářet entity a vyhledávat je podle jména nebo podle funkce. 
Poskytuje také iterátory pro procházení jmenného prostoru entit. 
Umožňuje také vytvoření unikátní entity.

\subsection{Návrh}
Je to pojmenovaný odkaz na entitu. Je reprezentován třídou \verb|Design|.

\subsection{Entita}
Je cenrálním pojmem popisu, pojmenovaná, reprezentována třídou \verb|Entity|. 
Reprezentuje typ bloku. 
Entita obsahuje informace o rozhraní portů InterfaceProto a jmenný prostor architektur. 
Architektury jsou alternativní popisy "vnitřku" entity které mohou být popsány 
strukturou nebo chováním. Umožňuje vytvářet a vyhledávat objekty 
třídy Architecture i s příslušnými objekty implementace 
architektury (potomci třídy \verb|ArchImpl|).
Obsahuje také metody pro manipulaci s rozhraním, vyhledávání 
a vytváření prototypů portů. 
Poskytuje iterátory pro procházení architektur a portů rozhraní.

Obsahuje také metodu pro instanciaci entity, 
která slouží k vytvoření instance této entity v nějaké strukturně 
popsané architektuře. 
Jejími parametry jsou jméno instance, ukazatel na strukturní 
architekturu ve které je instance vytvářena a architekturu 
se kterou bude instance vytvořena tzn. některá z 
architektur jež má entita ve svém jmenném prostoru.

\clearpage

\begin{figure}[h]
\begin{center}
\includegraphics[width=15cm]{images/hub}
\caption{HUB - Vrchní vrstva}
Autorem tohoto diagramu je Ing. Jan Schmidt, Ph.D.
\label{fig:hub}
\end{center}
\end{figure}

\clearpage

\subsection{Prototyp rozhraní portů}
Je reprezentován třídou \verb|InterfaceProto| která obsahuje jmenný a číselný 
prostor prototypů portů. Poskytuje metody pro vyhledávání 
prototypů portů dle různých kritérií.

\subsection{Prototyp portu}
Prototyp portu je reprezentován třídou \verb|PortProto|. 
Má jméno i číslo Jeho další hlavní hlavní funkcí je nést otevřenou množinu 
binárních atributů  prototypu portu. Třída PortProto parametrizuje 
šablony \verb|AttrIndex| a \verb|AttrSet| a exportuje jejich typy pod jednoduššími 
identifikátory. 
Třída sama definuje dvě vlastnosti - vstup (input) a výstup (output). 
Pro snazší nastavení a srovnání definuje množiny, které odpovídají 
všem kombinacím těchto binárních atributů:
\begin{verbatim}
AttrUnique <PortProto> PortProto :: input;
AttrUnique <PortProto> PortProto :: output;
  //predefined attribute sets
AttrSet <PortProto, 32> PortProto :: inDir (input, 1, output, 0);
AttrSet <PortProto, 32> PortProto :: outDir (input, 0, output, 1);
AttrSet <PortProto, 32> PortProto :: inOutDir (input, 1, output, 1);
AttrSet <PortProto, 32> PortProto :: noDir;		// direction unknown
\end{verbatim}

\subsection{Architektura}
Architektura má jméno a je reprezentována třídou \verb|Architecture|.  
Informace, která závisí na typu popisu, je obsažena v implementačních objektech. 
Rozhraní těchto objektů tvoří abstraktní třída \verb|ArchImpl|. Obsahuje ukazatel na 
objekt třídy \verb|ArchImpl| a poskytuje šablonu metody \verb|Create| která slouží k vytvoření 
implementačního objektu architektury. Parametrem šablony je typ objektu 
(potomek třídy \verb|ArchImpl|) který bude vytvořen. 
Potomky třídy \verb|ArchImpl| jsou 
třídy \verb|StructArch| která představuje strukturní popis a třída \verb|BehavArch| 
která představuje popis chováním.

\subsection{Určení místa v hubu}
Importovaný popis obvodu popisuje různé objekty,
 od strukturní architektury entity (např. Bench) 
 po kompletní strukturu knihoven a návrhů (EDIF). 
 Pro operace importu, exportu a rušení je zapotřebí ukázat 
 na knihovnu, entitu, architekturu podle okolností. 
 Takovým sjednoceným odkazem je objekt třídy Location, 
 který se dá zkonstruovat z posloupnosti jmen knihovny, entity, architektury. 
 Tato jména jsou shrnuta v objektu třídy \verb|LocationNames|.
 
\section{Strukturní popis}
Strukturně popsanou architekturu reprezentuje třída \verb|StructArch| 
která je potomkem třídy \verb|ArchImpl|, představuje implementační objekt architektury.



Strukturní popis architektury se skládá z instancí a spojů, 
které propojují porty instancí mezi sebou a s prototypy portů 
rozhraní popisované entity. Implementace hubu realizuje poslední 
vlastnost tak, že architektura má vlastní rozhraní s porty (nikoli prototypy portů), 
které slouží jako zástupná místa rozhraní entity. 
Třídu \verb|StructArch| si lze představit jako desku na které jsou připojeny 
vstupní a výstupní porty a pomocí integrovaných obvodů, hradel a vodičů 
na ní propojíme obvod který bude realizovat funkci kterou po entitě požadujeme.

Třída \verb|StructArch| vlastní jmenný prostot instancí a spojů v této 
architektuře obsažených, také obsahuje Interface portů, 
které představuje rozhraní portů popisované entity. 
Rozhraní je realizováno šablonou Interface která je číselným prostorem portů. 
Parametrem této šablony typ vlastnického objektu v tomto případě je to třída
 StructArch porty v ní obsažené jsou tedy typu \verb|Port<StructArch>|.
 
Poskytuje iterátory pro průchod instancemi, spoji a porty rozhraní. 
Poskytuje metody pro vytváření a vyhledávání portů, instancí a spojů.
Strukturní popis architektury  je znázorněn na obrázku \ref{fig:structural}

\subsection{Spoj}
Reprezentuje skupinu vzájemně propojených portů.
Spoj je pojmenovaná množina odkazů na porty, reprezentovaná třídou \verb|Net|. 
Množina je implementována seznamem a třída exportuje jeho iterátor. 
Umožňuje k sobě připojovat porty (objekty typu \verb|Joinable|) metodou \verb|Join|.

\subsection{Instance a rozhraní instance}
Instance má jméno, je reprezentována třidou \verb|Instance|. 
Nese následující hlavní informace: 
\begin{itemize}
\item číselný prostor portů instance (třída \verb|Interface|) 
\item 	odkaz na aktuálně nakonfigurovanou architekturu 
\item jmenný prostor dvojic jméno-hodnota, které zobrazují vlastnosti z EDIFu (třída Property) - provizorium 
\end{itemize}

Obsahuje metody pro hledání portu podle čísla a jména.  
Obsahuje odkaz na entitu z které byla tato instance vytvořena. 
Pokud je instance vytvořena přímo z nějaké entity její metodou 
Instantiate má již vytvořené rozhraní portů instance ke 
kterému lze připojovat spoje. 
Může mít přiřazenu vždy pouze jednu architekturu.

\subsection{Port instance a port strukturní architektury}
Oba tyto druhy portů jsou v podstatě jen odkazy na svůj prototyp a 
veškeré metody na něj delegují, včetně operací nad množinou binárních atributů. 
Liší se pouze v typu odkazu na vlastnický objekt a proto jsou implementovány 
šablonou \verb|Port|. Protože spoj odkazuje na objekty různých tříd, dědí 
všechny instance šablony třídu \verb|Joinable|. 
Navíc poskytuje metodu \verb|connect(Net* net)| která slouží k připojení spoje k portu.
 Také poskytuje metodu \verb|connected()| která vrací odkaz na 
 spoj ke kterému je port připojený.
 
\clearpage

\begin{figure}[h]
\begin{center}
\includegraphics[width=15cm]{images/structural}
\caption{HUB - Strukturní popis}
Autorem tohoto diagramu je Ing. Jan Schmidt, Ph.D.
\label{fig:structural}
\end{center}
\end{figure}

\clearpage

\section{Popis chováním (Behaviorální)}
Třída \verb|BehavArch| je potomkem třídy \verb|ArchImpl|, říká o 
architektuře že je 
popsána nějakým behaviorálním popisem. Na rozdíl od implementace 
neobsahuje tato třída již přímo informace o realizaci architektury. 
Protože popisů chování může být více druhů ( např. sym funkce, PLA, FSM,\ldots) 
je použit idiom pimpl (pointer to implementation) a třída \verb|BehavArch| 
obsahuje pouze odkaz na konkrétní popis jehož rozhraní tvoří abstraktní 
třída \verb|BehavDescr|. \verb|BehavArch| poskytuje šablonu metody pro vytváření  
popisů jež jsou potomky \verb|BehavDescr|.

Třida \verb|BehavDescr| je abstraktní a definuje pouze metodu která vrací 
jméno konkrétního popisu. Pro vytváření a porovnávání behaviorálních 
popisů se používá agent realizovaný třídou \verb|BehavAgent|. 
Rovněž se jedná o abstraktní definující metodu \verb|Eq| která slouží
 k porovnávání ekvivalence popisů a metodu CreateDescr která 
 vytvoří konkrétní popis. Pomocí agenta lze např. v knihovnách 
 vyhledávat architektury podle funkce. Pomocí toho lze zabránit tomu aby se v
  knihovně vyskytovala entita se shodným popisem vícekrát.
  
Každý nově přidaný popis chování musí tvořit tedy potomek třídy \verb|BehavDescr| 
který bude obsahovat konkrétní popis a svého agenta 
pro porovnávání  a vytváření popisů.

Zde je popis v současné době implementovaných popisů chování v HUBu:

\subsection{Plně Symetrická funkce}
{\bf SymFunc}

Reprezentuje kombinační plně symetrické funkce s jedním výstupem. 
Obsahuje informaci o typu fukce a počtu vstupů.

Typ funkce je definovaný výčtovým typem obsahujícím:
\begin{itemize}
\item Funkce bez vstupů: 0, 1
\item Funkce s jednim vstupem: Negace, Buffer
\item Funkce se dvěma a více vstupy: And, Xor, Or, Nor , Xnor, Nand
\end{itemize}

{\bf SymFuncAgent}

Agent pro vytváření logických popisů funkcá  a 
porovnávání ekvivalence symetrických funkcí. 
Obsahuje v sobě objekt třídy SymFunc reprezentující 
symetrickou funkci s kterým porovnává a umožňuje vytvořit jeho kopii. 
Konstruktor má 2 parametry, prvním je typ funkce, druhým počet vstupů.

\subsection{Klopný obvod RTL}
RTL\footnote{RTL = Register Transfer Level} popis klopného obvodu, neobsahuje hodiny a reset. 
Realizováno třídou RTLReg s příslušným agentem RTLRegAgent.

\subsection{PLA popis}
Není implementováno (implementováno jen zčásti)

\subsection{Konečný automat FSM}
Není implementováno.

\section{Importní subsystém}
Slouží k importu různých vstupních formátu pro specifikaci popisu
 číslicových obvodů, v současné verzi 
 je implementován import z formátů:  EDIF, BENCH , VHDL (součást této práce).
 
Rozhraní importního systému tvoří třída Import která je potomkem třídy \verb|Location|, 
obsahuje obecné parametry pro import.

Obsahuje jméno souboru z kterého bude probíhat import a objekt třídy \verb|LocationNames|, 
který nese jména aktuálně nastaveného prostředí v \verb|Location|. 
Parametrem konstruktoru je jméno importovaného souboru a specifikace místa 
v hubu tzn. Určení zda bude specifikována instance, entita, nebo architektura.
Obsahuje také přetížený operátor volání funkce, kterým se import spouští. 

Pro každý importovaný formát je třeba vytvořit třídu která se stará o 
import daného formátu a dědí třídu \verb|Import|. Tato třída zpravidla 
obsahuje objekt realizující parser ( syntaktický analyzátor) a 
definice sémantických metod  které jsou volány parserem. 
Zároveň je také potomkem třídy která představuje klienta parseru 
a jsou v ní deklarované sémantické metody.

\section{Exportní subsystém}
Slouží k exportu struktury nebo jejich částí do specifikovaného výstupního formátu. 
Umožňuje export specifikované architektury, entity, knihovny nebo obsahu všech knihoven.
Rozhraní exportního systému tvoří třída \verb|Export|. 
Obsahuje v sobě výstupní stream souboru do které ho se bude výstup generovat. 
Má přetížen operátor volání funkce kterým se import spouští. 
Jako parametr může být specifikováno zda se exportuje obsah celého hubu, 
obsah knihovny, pouze entita se všemi svými architekturami
 nebo pouze entita se specifikovanou architekturou. 
Každá třída která realizuje export do nějakého výstupního formátu 
musí být potomkem této třídy. Export se realizuje pomocí traverzeru 
který je zavolán exportní třídou a spustí se v místě které je dané nastavením v \verb|Location|. 
Traverzer při průchodu strukturou volá sémantické metody které obsahuje exportní 
třída daného formátu. Tyto metody generují do souboru jednotlivé konstrukce daného jazyka.

Pro export strukturně popsaných architektur se využívá traveu strukturní architektury,
který prochází jednotlivé instance,spoje a porty.

Pro export behaviorálně popsaných architektur se využívá exportní mapy kterou definuje
třída \verb|Export|.  Tuto mapu tvoří dispatcher, do kterého se při inicializaci 
přidávají ukazatele 
na reprezentační funkce generující kód konkrétních popisů.
Příklad: přidání funkce reprezentující popis symetrické funkce pro kontrolní dbg výstup:
\begin{verbatim}
int DbgSymFunc::wantInit =
  Export::exportMap.Enlist<DbgExport&,SymFunc&,&DbgSymFunc::Represent>();
\end{verbatim}
Při exportu je poté volána metoda exportní mapy \verb|perform| 
se dvěma parametry představujícími exportní objekt a popis chování (potomek BehavDescr).
Na základě  typů těchto parametrů se dispatcher pokusí vyhledat v mapě, kterou obsahuje,
reprezentační funkci odpovídající těmto typům. Pokud je funkce nalezena je spuštěna s danými
parametry.

V současné verzi je implementován export do formátu VHDL (součást této práce) 
a kontrolní výstup dbg.

\subsection{DBG výstup}
Tento výstup slouží ke kontrole struktur uložených v HUBu. Pro procházení vrchní vrstvy
HUBu využívá traverseru který prochází jednotlivé knihovny, v každé knihovně projde všechny
entity a pro entitu projde všechny její architektury. Pokud je architektura popsána strukturou
prochází tuto strukturu traverzerem strukturní architektury, který postupně projde všechny instance
a spoje. Pokud je architektura popsána chováním využije se k popisu exportní mapy.
Výstupní soubor má následující formát:
\begin{verbatim}
+unit
    +library primitives
	+entity and2
	    =port I1 attr in 
	    =port I2 attr in 
	    =port O attr out 
	    +arch vhdl attr behav 
		symmetric func AND, 2 inputs
	    -arch vhdl
	-entity and2
    -library primitives
    +library work
	+entity example
	    =port A attr in 
	    =port B 
	    =port C attr out 
	    +arch example_arch attr struct 
		=instance and2_1 and2.primitives
		+net a A, I1.and2_1
		-net a
		+net b B, I2.and2_1
		-net b
		+net c C, O.and2_1
		-net c
	    -arch example_arch
	-entity example
    -library work
-unit
\end{verbatim}





















 








