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

\section{Formát SLIF}

{\odstavec

SLIF je formát s poměrně volnými pravidly, příkazy mohou začínat kdekoliv na řádku a 
mohou obsahovat libovolný počet mezer, tabelátorů a mohou být rozděleny do 
několika řádků. Příkaz formátu SLIF je ukončen středníkem.

Identifikátory mohou obsahovat písmena, číslice a znaky :\^{}\%[]\_./-

Proměnné, názvy modelů i instancí jsou identifikátory. "0" i "1" jsou proměnné se 
speciálním významem a reprezentují logické hodnoty True a False.

Logické výrazy používají operátory + (OR), * (AND, může být vynechán), 
' (negace) a části výrazů mouhou být uzavřeny do kulatých závorek. 
Příklad deklarace obsahující logický výraz:

\textit{out = (aa + (bb cc)')';}

Formát SLIF obsahuje dvě předdefinované funkce. \textbf{D}(a, c) a \textbf{T}(a, b). 
Funkce D je klopný obvod typu D se vstupním signálem a a hodinovým signálem c. 
\textbf{T} je třístavový budič, jehož výstupem je a jestliže b je má hodnotu True, jinak je
výstup ve stavu vysoké impedance.
}

\subsection{Příkazy}

\begin{itemize}

\item
.attribute \textit{název\_typu název\_proměnné parametry;} Specifikuje parametry jedné proměnné.

\item
.call \textit{název\_instance název\_modelu (vstupy; vstup\_výstupy; výstupy;)} 
Vytvoří instanci název\_instancemodelu název\_modelu popsaného 
ve stejném souboru nebo v souboru specifikovaném elementem .search.

\item
.date \textit{časové\_razítko}; - specifikuje čas poslední modifikace (nepovinné).

\item
.endmodel \textit{name;} - ukončení definice modelu.

\item
.global\_attribute \textit{název\_typu parametry; } - parametry atributu platného pro celý model.

\item
.include \textit{název\_souboru}; - vložení obsahu jiného souboru.

\item
.inouts \textit{proměnná1 proměnná2 ... proměnnán}; - deklaruje vstupně-výstupní proměnné.

\item
.inputs \textit{proměnná1 proměnná2 ... proměnnán}; - deklaruje vstupní proměnné.

\item
.library; - identifikuje model jako knihovní modul.

\item
.model \textit{název}; - indikuje začátek dalšího modelu a přiřadí mu jméno.

\item
.net \textit{proměnná1 proměnná2 ... proměnnán}; - seznam vzájemně propojených proměnných.

\item
.outputs \textit{proměnná1 proměnná2 ... proměnnán}; - seznam výstupních proměnných.

\item
.search \textit{název\_souboru}; - indikuje, že modely je možné hledat v zadaném externím souboru, 
je-li třeba.

\item
.type \textit{název\_typu spec1 spec2 ... specn}; - deklaruje typ jako sekvenci specifikací.

\end{itemize}

\subsection{Příklad}

Následující příklad je převzatý z benchmarku s27.slif:

\begin{verbatim}
.model s27 ;
# 4 inputs
# 1 outputs
# 3 D-type flipflops
# 2 inverters
# 8 gates (1 ANDs + 1 NANDs + 2 ORs + 4 NORs)
.inputs G0 G1 G2 G3  CK ;
.outputs G17  ;
G5 = @D ( G10, CK ) ;
G6 = @D ( G11, CK ) ;
G7 = @D ( G13, CK ) ;
G14 = G0' ;
G17 = G11' ;
G8 = G14 G6 ;
G15 = G12 +G8 ;
G16 = G3 +G8 ;
G9 = ( G16 G15 )' ;
G10 = ( G14 +G11 )' ;
G11 = ( G5 +G9 )' ;
G12 = ( G1 +G7 )' ;
G13 = ( G2 +G12 )' ;
.endmodel s27 ;
\end{verbatim}


Další informace lze vyčíst z \cite{slif} nebo z \cite{yang91logic}.


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