% $Id: pla.tex,v 1.1 2007/01/18 22:20:30 jarda Exp $

\section{Formát PLA / Espresso}

Tento formát je dvouúrovňový popis logické funkce. Nelze použít k popisu
sekvenčních obvodů.

\subsection{Používaná syntaxe a popis deklaračních řádků}

Formát je řádkově orientovaný, každý významný řádek představuje řádek PLA
matice nebo deklaraci uvozenou klíčovým slovem. Soubor může obsahovat komentáře
uvozené znakem \# na začátku řádku (objevil se ale i soubor s komentářem za
samotným obsahem řádku) - vše za tímto znakem je při zpracování ignorováno.
Přebytečné mezery a jiné bílé znaky mezi elementy jsou ignorovány, stejně jako
řádky obsahující pouze bílé znaky nebo komentář.

{\odstavec
Identifikátory (vstupů a výstupů) mohou obsahovat znaky alfanumerické znaky
(a-z, A-Z, 0-9), dále znaky \_\~{}-[]\textless\textgreater+.

Následuje popis nejdůležitějších deklaračních řádků skládajících se klíčových
slov a jejich parametrů:
}

\begin{itemize}

\item
.i \textit{číslo} - počet vstupů

\item
.o \textit{číslo} - počet výstupů

\item
.ilb \textit{identifikátor identifikátor...} - jména vstupů

\item
.ob - jména výstupů

\netisknout{.type?}

\item
.p \textit{číslo} - počet součinových termů

\item
.e - konec dat

\end{itemize}

V sadě benchmarků LGSynth89 se u obvodu alu4.pla vyskytují následující klíčová slova:

\begin{itemize}

\item
.I - pojmenování jednotlivého vstupu

\item
.O - pojmenování jednotlivého výstupu

\item
.N - název popisovaného obvodu

\end{itemize}

Domnívám se však, že autor souboru nesprávně pochopil specifikaci formátu a že
se tedy jedná o anomálii.

{\odstavec
Další možné deklarace obsahuje manuálová stránka popisující formát Espresso.
Tyto deklarace slouží zejména pro použití v programech pro logickou syntézu.
}

\subsection{Popis logické funkce v PLA matici}

Logická funkce je vyjádřená pomocí řádků, které určují, jaký výsledkem kombinace
hodnot na vstupech bude hodnota na jednotlivých výstupech. Logická funkce pro každý
výstup je vyjádřena třemi sadami termů:

\begin{itemize}

\item
ON-set je sada termů, pro které má výstup hodnotu 1.

\item
OFF-set je sada termů, pro které má výstup hodnotu 0.

\item
DC-set je sada termů, u kterých na výstupní hodnotě nezáleží (don't care).

\end{itemize}

PLA matice je posloupností řádků, které přiřazují jednotlivé termy do některé sady
(ON, OFF, DC) pro každý výstup. Sloupce matice jsou rozděleny do dvou částí -
v levé části se nacházejí vstupní proměnné logické funkce a v pravé části se
nacházejí výstupní hodnoty. Obě části jsou obyčejně odděleny mezerou, narazil jsem
ale i na jejich oddělení svislou čarou (\textbar).

{\odstavec
PLA matice nemusí obsahovat definici všech sad. Používají se následující druhy PLA matic:
}

\begin{itemize}

\item
Typ f definuje pouze ON sadu. OFF sada je doplňkem ON sady a DC sada je prázdná.

\item
Typ fd definuje ON sadu a DC sadu. OFF sada je doplňkem sjednocení obou definovaných sad.

\item
Typ fr definuje ON a OFF sadu. DC sada je doplňkem sjednocení obou definovaných sad.

\item
Typ fdr definuje ON, OFF i DC sadu.

\end{itemize}

Hodnoty vstupní části matice:

\begin{itemize}

\item
'1' - hodnota vstupní proměnné v termu je přímá

\item
'0' - hodnota vstupní proměnné v termu je invertovaná

\item
'-' - vstupní proměnná se v termu nevyskytuje

\end{itemize}

Ve výstupní části matice se vyskytují symboly '1', '0', '-', '\~{}'. Zatímco
u prvních tří se (jak ukážu níže) význam liší pro jednotlivé typy PLA matic,
význam symbolu '\~{}' je vždycky stejný - daný term nemá pro hodnotu konkrétní
výstupní funkce, na rozdíl od jiných výstupních funkcí, žádný význam. Chceme-li
zkoumat chování výstupu obvodu, jehož hodnota koresponduje s danou výstupní
funkcí, je třeba se obrátit k jiným termům. 

{\odstavec
Pro ilustraci je dobré si představit Karnaughovy mapy pro všechny výstupní 
funkce a uvědomit si, že pokud nejsou všechny výstupní funkce stejné, budou
výsledkem pokaždé jiné sady termů - ne každý term má význam pro každou
výstupní funkci.

Představme si PLA matici typu f pro 2 vstupní proměnné a 2 výstupní funkce AND
a OR. Víme a pomocí pravdivostní tabulky a Karnaughovy mapy si ověříme, že tyto
funkce lze zapsat jako:
}

\begin{verbatim}
y = ab
z = a + b
\end{verbatim}

V těchto dvou funkcích jsou 3 termy: a, b, ab (v ON sadě). Odpovídající PLA matice tedy
bude:

\begin{verbatim}
-1 ~1
1- ~1
11 11
\end{verbatim}

Z matice vyplývá, že pokud víme, že na vstupu a nebo b je logická 1, je na prvním
výstupu rovněž logická 1, ale bez znalosti hodnoty druhého vstupu nemůžeme určit
hodnotu druhého výstupu.

{\odstavec
Hodnoty výstupní části matice pro typ f:
}

\begin{itemize}

\item
'1' - term patří do ON sady

\item
'0' - term nemá pro hodnotu dané funkce význam

\item
'-' - term nemá pro hodnotu dané funkce význam

\end{itemize}


Hodnoty výstupní části matice pro typ fd:


\begin{itemize}

\item
'1' - term patří do ON sady

\item
'0' - term nemá pro hodnotu dané funkce význam

\item
'-' - term patří do DC sady

\end{itemize}


Hodnoty výstupní části matice pro typ fr:

\begin{itemize}

\item
'1' - term patří do ON sady

\item
'0' - term patří do OFF sady

\item
'-' - term nemá pro hodnotu dané funkce význam

\end{itemize}


Hodnoty výstupní části matice pro typ fdr:

\begin{itemize}

\item
'1' - term patří do ON sady

\item
'0' - term patří do OFF sady

\item
'-' - term patří do DC sady

\end{itemize}


Pro výstupní hodnoty existují následující povolená synonyma:

\begin{itemize}

\item
'2' místo '-'

\item
'3' místo '\~{}'

\item
'4' místo '1'
\end{itemize}


\subsection{Jednoduché příklady}

Následující příklad ukazuje popis funkce se sedmi vstupními proměnnými pojmenovanými (f, b, c, d, a, h, g)
a dvěma výstupními proměnnými (f0 a f1). Funkce je vyjádřená 9 řádky PLA matice typu fr.

\begin{verbatim}
.i 7
.o 2
.ilb f b c d a h g
.ob f0 f1
.p 9
-1--1-- 10
1-11--- 10
-001--- 10
01---1- 10
-0--0-- 01
1---0-- 01
0-----0 01
01--1-- 01
10-0--- 01
.e
\end{verbatim}

Další příklad ukazuje jiné vyjádření téže funkce PLA maticí s 18 řádky před
provedením minimalizace.

\begin{verbatim}
.i 7
.o 2
.p 18
.ilb f b c d a h g
.ob f0 f1
.type fr
-001--- 1~
1-11--- 1~
01---1- 1~
10-0--- ~1
01--1-- ~1
-1--1-- 1~
0-----0 ~1
-0--0-- ~1
1---0-- ~1
001---- 0~
-0-0--- 0~
01--00- 0~
110-0-- 0~
1--00-- 0~
00--1-1 ~0
01--0-1 ~0
11--1-- ~0
1--11-- ~0
.e
\end{verbatim}

Další informace lze nalézt v \cite{espresso} nebo v \cite{yang91logic}.

% vim:enc=iso8859-2:fenc=iso8859-2:syntax=tex:
