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

\section{Formát EDIF}

Formát EDIF používá závorkovou syntaxi známou z jazyků typu LISP, resp. PostScript,
tato syntaxe je velmi vhodná pro strojové zpracování z důvodu jednoduchosti a přímočarosti.
V této práci jsem se však automatickou analýzou formátu EDIF nezabýval. Z mně dostupných sad obsahuje
benchmarky ve formátu EDIF pouze LGSynth93 a tato sada obsahuje přímo program edf2fmt, který
dokáže převést soubory ve formátu EDIF do formátu BLIF nebo SLIF, které lze snadněji číst a
zpracovávat dostupnými parsery.

\subsection{Jednoduchý příklad}

Následující příklad je převzatý z benchmarku modulo12.edif:

\begin{verbatim}
(edif netlist
  (edifVersion 2 0 0)
  (edifLevel 0)
  (keywordMap (keywordLevel 0))
  (status
    (written
      (timeStamp 1993 2 0 16 45 4)
      (author "David Rickel")
      (program "autologic")
    ))
  (external PRIMLIB
    (edifLevel 0)
    (technology
      (numberDefinition
      )
      (simulationInfo
        (logicValue H (booleanMap (true)))
        (logicValue L (booleanMap (false)))
      ))
    (cell FALSE
      (cellType GENERIC)
      (view INTERFACE
        (viewType NETLIST)
        (interface
          (port out (direction output))
        )))
    (cell DC
      (cellType GENERIC)
      (view INTERFACE
        (viewType NETLIST)
        (interface
          (port out (direction output))
        )))
    (cell MUX2
      (cellType GENERIC)
      (view INTERFACE
        (viewType NETLIST)
        (interface
          (port out (direction output))
          (port in0 (direction input))
          (port in1 (direction input))
          (port sel (direction input))
        ))))
  (library USER_LIB
    (edifLevel 0)
    (technology
      (numberDefinition
      )
      (simulationInfo
        (logicValue H (booleanMap (true)))
        (logicValue L (booleanMap (false)))
      ))
    (cell TOP
      (cellType GENERIC)
      (view NETLIST
        (viewType NETLIST)
        (interface
          (port modulo12_out (direction output))
          (port modulo12_in (direction input))
          (port clock (direction input)))
        (contents
          (instance G_G0
            (viewRef INTERFACE (cellRef MUX2 (libraryRef PRIMLIB))))
          (instance G_G1
            (viewRef INTERFACE (cellRef DC (libraryRef PRIMLIB))))
          (instance G_Gd17
            (viewRef INTERFACE (cellRef FALSE (libraryRef PRIMLIB))))
          (instance G_G117
            (viewRef INTERFACE (cellRef FALSE (libraryRef PRIMLIB))))
          (net N_N0
            (joined
              (portRef in1 (instanceRef G_G0))
              (portRef out (instanceRef G_G1))
            ))
          (net N__clk
            (joined
              (portRef clock)
            ))
          (net N_N2
            (joined
              (portRef out (instanceRef G_G0))
              (portRef modulo12_out)
            ))
          (net N_N3
            (joined
              (portRef sel (instanceRef G_G0))
              (portRef out (instanceRef G_Gd17))
            ))
          (net N_N4
            (joined
              (portRef in0 (instanceRef G_G0))
              (portRef out (instanceRef G_G117))
            ))
          (net N_N5
            (joined
              (portRef modulo12_in)
            )))))))
\end{verbatim}

Jak vidíme, číst tento benchmark je pro člověka poměrně nesnadné, přestože se jedná snad o nejjednodušší
benchmark ve formátu EDIF ze sady LGSynth93. Po převedení do formátu BLIF je to daleko snadnější:

\begin{verbatim}
#
# Written by e2fmt Fri Dec 29 16:33:23 2006
############################################
.model top
.inputs modulo12_in clock
.outputs modulo12_out
# connect ports to nets with different names
.names n_n2 modulo12_out
1  1
.names modulo12_in n_n5
1  1
.names clock n__clk
1  1
# instance g_g117
.names  n_n4
  0
# instance g_g1
.names  n_n0
  -
# instance g_g0
.names n_n4 n_n0 n_n3  n_n2
1-0  1
-11  1
# instance g_gd17
.names  n_n3
  0
.end
\end{verbatim}

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