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

\section{Formát BLIF}

Formát BLIF se používá k víceúrovňovému popisu logického obvodu v textové podobě.
Popisovaný obvod může obsahovat odkazy na externí definice hradel a KO (.mlatch, .gate)

Může obsahovat popis konečného automatu vložením .kiss bloku

Podpora hierarchické struktury pomocí konstrukce .subckt - vložení jednoho modulu do druhého


\subsection{Základní používané elementy}



\begin{itemize}

\item        
.model \textit{identifikátor} - název modelu

\item        
.inputs \textit{identifikátor identifikátor...} - seznam vstupů

\item        
.outputs \textit{identifikátor identifikátor...} - seznam výstupů

\item        
.clock \textit{identifikátor identifikátor...} - seznam hodinových signálů

\item        
.latch - použitý KO

\item        
.names -  tabulka (formát PLA), za .names následují názvy vstupů a výstupu, pak řádky tabulky

\item        
.end - konec modelu

\end{itemize}


\subsection{Dvouúrovňový popis hradla pomocí PLA tabulky}

Hradla se ve formátu BLIF definují pomocí PLA tabulky s jedním výstupem - před
tabulkou je předřazen řádek se jmény vstupů a výstupu. Příklad:

\begin{verbatim}
.names a b n
11 1
00 1
\end{verbatim}

\subsection{Externí definice hradel a klopných obvodů}

Formát BLIF umožňuje využít externě definovaná hradla z různých knihoven apod. Syntaxe je následující:

\begin{itemize}

\item        
.gate \textit{název} \textit{formální\_název=skutečný\_název...}

\item
.mlatch \textit{název} \textit{formální\_název=skutečný\_název...} \textit{řízení} [\textit{počáteční\_stav}]

Název hradla nebo klopného obvodu odpovídá názvu v knihovně, formální název je
název parametru v knihovně, skutečný název odpovídá proměnné v našem souboru. Řízení může
být buďto některý hodinový signál (definovaný pomocí .clock), některý výstup nebo NIL.

\end{itemize}

\subsection{Popis sekvenčního obvodu konečným automatem}

Formát BLIF může obsahovat popis sekvenčního obvodu pomocí konečného automatu ve formátu KISS.
Definice je uzavřena mezi direktivami \textit{.start\_kiss} a \textit{.end\_kiss}:

\begin{verbatim}
.model 101  # outputs 1 whenever last 3 inputs were 1, 0, 1
.start_kiss
.i 1
.o 1
0 st0 st0 0
1 st0 st1 0
0 st1 st2 0
1 st1 st1 0
0 st2 st0 0
1 st2 st3 1
0 st3 st2 0
1 st3 st1 0
.end_kiss
.end
\end{verbatim}


\subsection{Další možnosti}


\subsection{Příklad typického souboru ze sady benchmarků}

Následující příklad pochází z benchmarku s27.blif:

\begin{verbatim}
.model s27.bench
.inputs G0 G1 G2 G3
.outputs G17
.wire_load_slope 0.00
.latch     G10 G5  0
.latch     G11 G6  0
.latch     G13 G7  0
.names G11 G17
0 1
.names G14 G11 G10
00 1
.names G5 G9 G11
00 1
.names G2 G12 G13
00 1
.names G0 G14
0 1
.names G14 G6 G8
11 1
.names G1 G7 G12
00 1
.names G12 G8 G15
1- 1
-1 1
.names G3 G8 G16
1- 1
-1 1
.names G16 G15 G9
0- 1
-0 1
.end
\end{verbatim}

Další informace lze najít v \cite{blif} nebo \cite{yang91logic}.

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