# Uživatelský manuál

Aplikace decompose provádí dekompozici ze zadané pravdivostní tabulky PLA do sítě hradel zastoupené formátem VHDL. K tomuto účelu využívá algebraickou faktorizaci.

## Komponenty

Aplikace decompose obsahuje následující části systému EDuArd:

- hub,
- import,
- export,
- util.

## Spuštění dekompozice

Dekompozice se spouští souborem decompose.exe, jehož předvolby jsou uvedeny v tabulce 1.

Tabulka 1: Přepínače aplikace decompose

přepínač | popis
-i fileName | vstupní soubor ve formátu PLA
-b | určuje, jestli se provede převod na dvouvstupová hradla
-d | do statistického souboru jsou přidána data o jednotlivých iteracích dekompozice (musí být použito s přepínačem -s)
-g | použije se klasické ohodnocení kernelů = zisk literálů při aplikaci kernelu
-h | zobrazí nápovědu programu
-n | určuje, jestli se provede konverze na NAND hradla
-o %d | číslo definující stupeň optimalizace; maximální počet kernelů v seznamu; -1 pro vypnutí
-s | vygeneruje statistický soubor s údaji o provedené dekompozici

Windows:
Knihovna Z (v současné distribuci ZLIB1D.DLL) musí být dostupná.

## Generovaný statistický soubor (-s)

Výstup dekompozice je kromě souboru s příponou .vhdl (obsahujícího síť hradel ekvivalentní s vstupním souborem ve formátu PLA) i soubor s příponou .txt, ve kterém jsou zobrazeny nejrůznější statistické informace o dekompozici. Struktura tohoto souboru je popsána v následujících odstavcích.

Jako první je v souboru uvedena legenda, která popisuje označení použitých logických operátorů. Následuje přepis tabulky PLA do algebraické formy, přesněji do součtu krychlí. Každá výstupní proměnná má u sebe statistické údaje o počtu literálů, počtu hradel (včetně hradel potřebných k negaci vstupních proměnných) a úrovni logické sítě.

V případě použití přepínače –d následuje výpis jednotlivých iterací dekompozice. Každá iterace je označena počtem nalezených kernelů, počtem použitých kernelů, časem provádění iterace a výpisem jednotlivých rovnic, doplněných o jednotlivé kernely. V poslední iteraci je zobrazen výpis výstupních rovnic před redukcí redundancí opět se statistickými údaji o počtu literálů, hradel a úrovni logické sítě.

Následuje výpis výstupních rovnic po aplikaci algoritmu redukce, označené jako PRE-OUTPUTS. Poslední výpis výstupních rovnic, po převodu na dvouvstupová hradla, konverzi na NAND hradla a po poslední redukci redundancí, je označen jako FINAL OUTPUTS.

Posledním záznamem v souboru jsou obecné informace o provedené dekompozici. Patří sem celkový počet hradel, počet úrovní, čas potřebný pro dekompozici a údaj, jestli výsledná struktura prošla ověřením funkčnosti, tj. jestli odpovídá vstupnímu PLA souboru.

## Výpis ukázkového statistického souboru

Legend:

INV ... !

AND ... *

OR ... +

XOR ... ^

NAND ... &

NOR ... |

XNOR ... @

-----------------------------------------------------------

INPUTS:

-----------------------------------------------------------

o0 = ((a*b*c)+(a*b*!c)+(a*c*!b)+(a*!b*!c))

literals count [o0]: 12

gates count [o0]: 7

levels [o0]: 2

o1 = ((a*b*c)+(a*c*!b))

literals count [o1]: 6

gates count [o1]: 4

levels [o1]: 2

-----------------------------------------------------------

----->***DEBUG INFO***

-----------------------------------------------------------

***NEXT ITERATION

kernels found: 3

kernels used: 1

iteration time: 0 ms

o0 = ((a*c*d)+(a*d*!c))

o1 = ((a*c*d))

d = ((b)+(!b))

***NEXT ITERATION

kernels found: 1

kernels used: 1

iteration time: 0 ms

o0 = ((a*d*e))

o1 = ((a*c*d))

d = ((b)+(!b))

e = ((c)+(!c))

***NOT REDUCED

o0 = ((a*((b)+(!b))*((c)+(!c))))

literals count [o0]: 5

gates count [o0]: 12

levels [o0]: 4

o1 = ((a*c*((b)+(!b))))

literals count [o1]: 4

gates count [o1]: 7

levels [o1]: 4

-----------------------------------------------------------

<-----***DEBUG INFO***

-----------------------------------------------------------

-----------------------------------------------------------

PRE-OUTPUTS:

-----------------------------------------------------------

o0 = a

literals count [o0]: 1

gates count [o0]: 0

levels [o0]: 0

o1 = (a*c)

literals count [o1]: 2

gates count [o1]: 1

levels [o1]: 1

-----------------------------------------------------------

FINAL OUTPUTS:

-----------------------------------------------------------

o0 = a

literals count [o0]: 1

gates count [o0]: 0

levels [o0]: 0

o1 = !(a&c)

literals count [o1]: 2

gates count [o1]: 2

levels [o1]: 1

-----------------------------------------------------------

GENERAL INFO:

-----------------------------------------------------------

total gates count: 2 = 2 (gates) + 0 (inv ports)

levels: 1

decomposition time: 0 ms

verified: 1