summaryrefslogtreecommitdiffstats
path: root/src/map/mio
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2009-01-18 08:01:00 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2009-01-18 08:01:00 -0800
commitf936cc0680c98ffe51b3a1716c996072d5dbf76c (patch)
tree784a2a809fb6b972ec6a8e2758ab758ca590d01a /src/map/mio
parentc9ad5880cc61787dec6d018111b63023407ce0e6 (diff)
downloadabc-f936cc0680c98ffe51b3a1716c996072d5dbf76c.tar.gz
abc-f936cc0680c98ffe51b3a1716c996072d5dbf76c.tar.bz2
abc-f936cc0680c98ffe51b3a1716c996072d5dbf76c.zip
Version abc90118
Diffstat (limited to 'src/map/mio')
-rw-r--r--src/map/mio/mio.c193
-rw-r--r--src/map/mio/mio.h3
-rw-r--r--src/map/mio/mio81214.zipbin0 -> 16939 bytes
-rw-r--r--src/map/mio/mioApi.c25
-rw-r--r--src/map/mio/mioGENERIC.c46
-rw-r--r--src/map/mio/mioInt.h5
-rw-r--r--src/map/mio/mioRead.c81
-rw-r--r--src/map/mio/mioUtils.c13
8 files changed, 297 insertions, 69 deletions
diff --git a/src/map/mio/mio.c b/src/map/mio/mio.c
index 37ba82c2..1326dbbf 100644
--- a/src/map/mio/mio.c
+++ b/src/map/mio/mio.c
@@ -28,6 +28,10 @@
#include "mioInt.h"
#include "mapper.h"
+extern void Amap_LibFree( void * p );
+extern void Amap_LibPrintSelectedGates( void * p, int fAllGates );
+extern void * Amap_LibReadAndPrepare( char * pFileName, int fVerbose, int fVeryVerbose );
+
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
@@ -35,6 +39,9 @@
static int Mio_CommandReadLibrary( Abc_Frame_t * pAbc, int argc, char **argv );
static int Mio_CommandPrintLibrary( Abc_Frame_t * pAbc, int argc, char **argv );
+static int Mio_CommandReadLibrary2( Abc_Frame_t * pAbc, int argc, char **argv );
+static int Mio_CommandPrintLibrary2( Abc_Frame_t * pAbc, int argc, char **argv );
+
// internal version of GENLIB library
static char * pMcncGenlib[25] = {
"GATE inv1 1 O=!a; PIN * INV 1 999 0.9 0.0 0.9 0.0\n",
@@ -78,7 +85,7 @@ static char * pMcncGenlib[25] = {
void Mio_Init( Abc_Frame_t * pAbc )
{
char * pFileTemp = "mcnc_temp.genlib";
- Mio_Library_t * pLibGen;
+ void * pLibGen;
FILE * pFile;
int i;
@@ -90,6 +97,9 @@ void Mio_Init( Abc_Frame_t * pAbc )
// read genlib from file
pLibGen = Mio_LibraryRead( pAbc, pFileTemp, NULL, 0 );
Abc_FrameSetLibGen( pLibGen );
+ pLibGen = Amap_LibReadAndPrepare( pFileTemp, 0, 0 );
+ Abc_FrameSetLibGen2( pLibGen );
+
#ifdef WIN32
_unlink( pFileTemp );
#else
@@ -98,6 +108,9 @@ void Mio_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd( pAbc, "SC mapping", "read_library", Mio_CommandReadLibrary, 0 );
Cmd_CommandAdd( pAbc, "SC mapping", "print_library", Mio_CommandPrintLibrary, 0 );
+
+ Cmd_CommandAdd( pAbc, "SC mapping", "read_library2", Mio_CommandReadLibrary2, 0 );
+ Cmd_CommandAdd( pAbc, "SC mapping", "print_library2", Mio_CommandPrintLibrary2, 0 );
}
/**Function*************************************************************
@@ -115,6 +128,7 @@ void Mio_End()
{
// Mio_LibraryDelete( s_pLib );
Mio_LibraryDelete( Abc_FrameReadLibGen() );
+ Amap_LibFree( Abc_FrameReadLibGen2() );
}
@@ -190,25 +204,124 @@ int Mio_CommandReadLibrary( Abc_Frame_t * pAbc, int argc, char **argv )
if ( Abc_FrameReadLibSuper() )
{
extern void Map_SuperLibFree( Map_SuperLib_t * p );
-// Map_SuperLibFree( s_pSuperLib );
-// s_pSuperLib = NULL;
Map_SuperLibFree( Abc_FrameReadLibSuper() );
Abc_FrameSetLibSuper( NULL );
}
// replace the current library
-// Mio_LibraryDelete( s_pLib );
-// s_pLib = pLib;
Mio_LibraryDelete( Abc_FrameReadLibGen() );
Abc_FrameSetLibGen( pLib );
+
+ // set the new network
+ pLib = Amap_LibReadAndPrepare( FileName, 1, 0 );
+ if ( pLib == NULL )
+ {
+ fprintf( pErr, "Reading GENLIB library has failed.\n" );
+ return 1;
+ }
+ // replace the current library
+ Amap_LibFree( Abc_FrameReadLibGen2() );
+ Abc_FrameSetLibGen2( pLib );
return 0;
usage:
fprintf( pErr, "usage: read_library [-vh]\n");
fprintf( pErr, "\t read the library from a genlib file\n" );
fprintf( pErr, "\t (if the library contains more than one gate\n" );
- fprintf( pErr, "\t with the same Boolean function, only the first gate\n" );
- fprintf( pErr, "\t in the order of their appearance in the file is used)\n" );
+ fprintf( pErr, "\t with the same Boolean function, only the gate\n" );
+ fprintf( pErr, "\t with the smallest area will be used)\n" );
+ fprintf( pErr, "\t-v : toggle verbose printout [default = %s]\n", fVerbose? "yes": "no" );
+ fprintf( pErr, "\t-h : enable verbose output\n");
+ return 1; /* error exit */
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Mio_CommandReadLibrary2( Abc_Frame_t * pAbc, int argc, char **argv )
+{
+ FILE * pFile;
+ FILE * pOut, * pErr;
+ Mio_Library_t * pLib;
+ Abc_Ntk_t * pNet;
+ char * FileName;
+ int fVerbose;
+ int fVeryVerbose;
+ int c;
+
+ pNet = Abc_FrameReadNtk(pAbc);
+ pOut = Abc_FrameReadOut(pAbc);
+ pErr = Abc_FrameReadErr(pAbc);
+
+ // set the defaults
+ fVerbose = 1;
+ fVeryVerbose = 0;
+ Extra_UtilGetoptReset();
+ while ( (c = Extra_UtilGetopt(argc, argv, "vwh")) != EOF )
+ {
+ switch (c)
+ {
+ case 'v':
+ fVerbose ^= 1;
+ break;
+ case 'w':
+ fVeryVerbose ^= 1;
+ break;
+ case 'h':
+ goto usage;
+ break;
+ default:
+ goto usage;
+ }
+ }
+
+
+ if ( argc != globalUtilOptind + 1 )
+ {
+ goto usage;
+ }
+
+ // get the input file name
+ FileName = argv[globalUtilOptind];
+ if ( (pFile = Io_FileOpen( FileName, "open_path", "r", 0 )) == NULL )
+ {
+ fprintf( pErr, "Cannot open input file \"%s\". ", FileName );
+ if ( (FileName = Extra_FileGetSimilarName( FileName, ".genlib", ".lib", ".gen", ".g", NULL )) )
+ fprintf( pErr, "Did you mean \"%s\"?", FileName );
+ fprintf( pErr, "\n" );
+ return 1;
+ }
+ fclose( pFile );
+
+ // set the new network
+ pLib = Amap_LibReadAndPrepare( FileName, fVerbose, fVeryVerbose );
+ if ( pLib == NULL )
+ {
+ fprintf( pErr, "Reading GENLIB library has failed.\n" );
+ return 1;
+ }
+
+ // replace the current library
+ Amap_LibFree( Abc_FrameReadLibGen2() );
+ Abc_FrameSetLibGen2( pLib );
+ return 0;
+
+usage:
+ fprintf( pErr, "usage: read_library2 [-vh]\n");
+ fprintf( pErr, "\t read the library from a genlib file\n" );
+ fprintf( pErr, "\t (if the library contains more than one gate\n" );
+ fprintf( pErr, "\t with the same Boolean function, only the gate\n" );
+ fprintf( pErr, "\t with the smallest area will be used)\n" );
+ fprintf( pErr, "\t-v : toggle verbose printout [default = %s]\n", fVerbose? "yes": "no" );
+ fprintf( pErr, "\t-w : toggle detailed printout [default = %s]\n", fVeryVerbose? "yes": "no" );
fprintf( pErr, "\t-h : enable verbose output\n");
return 1; /* error exit */
}
@@ -271,6 +384,72 @@ usage:
fprintf( pErr, "\t-h : print the command usage\n");
return 1; /* error exit */
}
+
+
+/**Function*************************************************************
+
+ Synopsis [Command procedure to read LUT libraries.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Mio_CommandPrintLibrary2( Abc_Frame_t * pAbc, int argc, char **argv )
+{
+ FILE * pOut, * pErr;
+ Abc_Ntk_t * pNet;
+ int fPrintAll;
+ int fVerbose;
+ int c;
+
+ pNet = Abc_FrameReadNtk(pAbc);
+ pOut = Abc_FrameReadOut(pAbc);
+ pErr = Abc_FrameReadErr(pAbc);
+
+ // set the defaults
+ fPrintAll = 0;
+ fVerbose = 1;
+ Extra_UtilGetoptReset();
+ while ( (c = Extra_UtilGetopt(argc, argv, "avh")) != EOF )
+ {
+ switch (c)
+ {
+ case 'a':
+ fPrintAll ^= 1;
+ break;
+ case 'v':
+ fVerbose ^= 1;
+ break;
+ case 'h':
+ goto usage;
+ break;
+ default:
+ goto usage;
+ }
+ }
+
+
+ if ( argc != globalUtilOptind )
+ {
+ goto usage;
+ }
+
+ // set the new network
+ Amap_LibPrintSelectedGates( Abc_FrameReadLibGen2(), fPrintAll );
+ return 0;
+
+usage:
+ fprintf( pErr, "\nusage: print_library2 [-avh]\n");
+ fprintf( pErr, "\t print gates used for area-oriented tech-mapping\n" );
+ fprintf( pErr, "\t-a : toggles printing all gates [default = %s]\n", (fPrintAll? "yes" : "no") );
+ fprintf( pErr, "\t-v : toggles enabling of verbose output [default = %s]\n", (fVerbose? "yes" : "no") );
+ fprintf( pErr, "\t-h : print the command usage\n");
+ return 1; /* error exit */
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
diff --git a/src/map/mio/mio.h b/src/map/mio/mio.h
index dbe2420b..0e5a39d3 100644
--- a/src/map/mio/mio.h
+++ b/src/map/mio/mio.h
@@ -79,6 +79,7 @@ typedef struct Mio_PinStruct_t_ Mio_Pin_t;
extern char * Mio_LibraryReadName ( Mio_Library_t * pLib );
extern int Mio_LibraryReadGateNum ( Mio_Library_t * pLib );
extern Mio_Gate_t * Mio_LibraryReadGates ( Mio_Library_t * pLib );
+extern Mio_Gate_t ** Mio_LibraryReadGatesByName( Mio_Library_t * pLib );
extern DdManager * Mio_LibraryReadDd ( Mio_Library_t * pLib );
extern Mio_Gate_t * Mio_LibraryReadGateByName ( Mio_Library_t * pLib, char * pName );
extern char * Mio_LibraryReadSopByName ( Mio_Library_t * pLib, char * pName );
@@ -110,6 +111,8 @@ extern int Mio_GateReadInputs ( Mio_Gate_t * pGate );
extern double Mio_GateReadDelayMax ( Mio_Gate_t * pGate );
extern char * Mio_GateReadSop ( Mio_Gate_t * pGate );
extern DdNode * Mio_GateReadFunc ( Mio_Gate_t * pGate );
+extern int Mio_GateReadValue ( Mio_Gate_t * pGate );
+extern void Mio_GateSetValue ( Mio_Gate_t * pGate, int Value );
extern char * Mio_PinReadName ( Mio_Pin_t * pPin );
extern Mio_PinPhase_t Mio_PinReadPhase ( Mio_Pin_t * pPin );
extern double Mio_PinReadInputLoad ( Mio_Pin_t * pPin );
diff --git a/src/map/mio/mio81214.zip b/src/map/mio/mio81214.zip
new file mode 100644
index 00000000..12f766a9
--- /dev/null
+++ b/src/map/mio/mio81214.zip
Binary files differ
diff --git a/src/map/mio/mioApi.c b/src/map/mio/mioApi.c
index 73473f8b..61cc2509 100644
--- a/src/map/mio/mioApi.c
+++ b/src/map/mio/mioApi.c
@@ -40,6 +40,7 @@
char * Mio_LibraryReadName ( Mio_Library_t * pLib ) { return pLib->pName; }
int Mio_LibraryReadGateNum ( Mio_Library_t * pLib ) { return pLib->nGates; }
Mio_Gate_t * Mio_LibraryReadGates ( Mio_Library_t * pLib ) { return pLib->pGates; }
+Mio_Gate_t ** Mio_LibraryReadGatesByName ( Mio_Library_t * pLib ) { return pLib->ppGatesName;}
DdManager * Mio_LibraryReadDd ( Mio_Library_t * pLib ) { return pLib->dd; }
Mio_Gate_t * Mio_LibraryReadBuf ( Mio_Library_t * pLib ) { return pLib->pGateBuf; }
Mio_Gate_t * Mio_LibraryReadInv ( Mio_Library_t * pLib ) { return pLib->pGateInv; }
@@ -131,17 +132,19 @@ char * Mio_LibraryReadSopByName( Mio_Library_t * pLib, char * pName )
SeeAlso []
***********************************************************************/
-char * Mio_GateReadName ( Mio_Gate_t * pGate ) { return pGate->pName; }
-char * Mio_GateReadOutName ( Mio_Gate_t * pGate ) { return pGate->pOutName; }
-double Mio_GateReadArea ( Mio_Gate_t * pGate ) { return pGate->dArea; }
-char * Mio_GateReadForm ( Mio_Gate_t * pGate ) { return pGate->pForm; }
-Mio_Pin_t * Mio_GateReadPins ( Mio_Gate_t * pGate ) { return pGate->pPins; }
-Mio_Library_t * Mio_GateReadLib ( Mio_Gate_t * pGate ) { return pGate->pLib; }
-Mio_Gate_t * Mio_GateReadNext ( Mio_Gate_t * pGate ) { return pGate->pNext; }
-int Mio_GateReadInputs ( Mio_Gate_t * pGate ) { return pGate->nInputs; }
-double Mio_GateReadDelayMax( Mio_Gate_t * pGate ) { return pGate->dDelayMax; }
-char * Mio_GateReadSop ( Mio_Gate_t * pGate ) { return pGate->pSop; }
-DdNode * Mio_GateReadFunc ( Mio_Gate_t * pGate ) { return pGate->bFunc; }
+char * Mio_GateReadName ( Mio_Gate_t * pGate ) { return pGate->pName; }
+char * Mio_GateReadOutName ( Mio_Gate_t * pGate ) { return pGate->pOutName; }
+double Mio_GateReadArea ( Mio_Gate_t * pGate ) { return pGate->dArea; }
+char * Mio_GateReadForm ( Mio_Gate_t * pGate ) { return pGate->pForm; }
+Mio_Pin_t * Mio_GateReadPins ( Mio_Gate_t * pGate ) { return pGate->pPins; }
+Mio_Library_t * Mio_GateReadLib ( Mio_Gate_t * pGate ) { return pGate->pLib; }
+Mio_Gate_t * Mio_GateReadNext ( Mio_Gate_t * pGate ) { return pGate->pNext; }
+int Mio_GateReadInputs ( Mio_Gate_t * pGate ) { return pGate->nInputs; }
+double Mio_GateReadDelayMax( Mio_Gate_t * pGate ) { return pGate->dDelayMax; }
+char * Mio_GateReadSop ( Mio_Gate_t * pGate ) { return pGate->pSop; }
+DdNode * Mio_GateReadFunc ( Mio_Gate_t * pGate ) { return pGate->bFunc; }
+int Mio_GateReadValue ( Mio_Gate_t * pGate ) { return pGate->Value; }
+void Mio_GateSetValue ( Mio_Gate_t * pGate, int Value ) { pGate->Value = Value; }
/**Function*************************************************************
diff --git a/src/map/mio/mioGENERIC.c b/src/map/mio/mioGENERIC.c
deleted file mode 100644
index 972c4ffc..00000000
--- a/src/map/mio/mioGENERIC.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/**CFile****************************************************************
-
- FileName [mio___.c]
-
- PackageName [MVSIS 1.3: Multi-valued logic synthesis system.]
-
- Synopsis [File reading/writing for technology mapping.]
-
- Author [MVSIS Group]
-
- Affiliation [UC Berkeley]
-
- Date [Ver. 1.0. Started - September 8, 2003.]
-
- Revision [$Id: mio___.h,v 1.0 2003/09/08 00:00:00 alanmi Exp $]
-
-***********************************************************************/
-
-#include "mioInt.h"
-
-////////////////////////////////////////////////////////////////////////
-/// DECLARATIONS ///
-////////////////////////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////////////////////////
-/// FUNCTION DEFINITIONS ///
-////////////////////////////////////////////////////////////////////////
-
-/**Function*************************************************************
-
- Synopsis []
-
- Description []
-
- SideEffects []
-
- SeeAlso []
-
-***********************************************************************/
-
-
-////////////////////////////////////////////////////////////////////////
-/// END OF FILE ///
-////////////////////////////////////////////////////////////////////////
-
-
diff --git a/src/map/mio/mioInt.h b/src/map/mio/mioInt.h
index 3f90b625..654b7e19 100644
--- a/src/map/mio/mioInt.h
+++ b/src/map/mio/mioInt.h
@@ -54,6 +54,8 @@ struct Mio_LibraryStruct_t_
{
char * pName; // the name of the library
int nGates; // the number of the gates
+ Mio_Gate_t ** ppGates0; // the array of gates in the original order
+ Mio_Gate_t ** ppGatesName; // the array of gates sorted by name
Mio_Gate_t * pGates; // the linked list of all gates in no particular order
Mio_Gate_t * pGate0; // the constant zero gate
Mio_Gate_t * pGate1; // the constant one gate
@@ -84,7 +86,8 @@ struct Mio_GateStruct_t_
int nInputs; // the number of inputs
double dDelayMax; // the maximum delay
DdNode * bFunc; // the functionality
- char * pSop;
+ char * pSop; // sum-of-products
+ int Value; // user's information
};
struct Mio_PinStruct_t_
diff --git a/src/map/mio/mioRead.c b/src/map/mio/mioRead.c
index 5b92d3e1..ae33c942 100644
--- a/src/map/mio/mioRead.c
+++ b/src/map/mio/mioRead.c
@@ -418,11 +418,92 @@ char * chomp( char *s )
SeeAlso []
***********************************************************************/
+int Mio_LibraryCompareGatesByArea( Mio_Gate_t ** pp1, Mio_Gate_t ** pp2 )
+{
+ double Diff = (*pp1)->dArea - (*pp2)->dArea;
+ if ( Diff < 0.0 )
+ return -1;
+ if ( Diff > 0.0 )
+ return 1;
+ return 0;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Mio_LibraryCompareGatesByName( Mio_Gate_t ** pp1, Mio_Gate_t ** pp2 )
+{
+ int Diff = strcmp( (*pp1)->pName, (*pp2)->pName );
+ if ( Diff < 0.0 )
+ return -1;
+ if ( Diff > 0.0 )
+ return 1;
+ return 0;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Mio_LibrarySortGates( Mio_Library_t * pLib )
+{
+ Mio_Gate_t ** ppGates, * pGate;
+ int i = 0;
+ ppGates = ALLOC( Mio_Gate_t *, pLib->nGates );
+ Mio_LibraryForEachGate( pLib, pGate )
+ ppGates[i++] = pGate;
+ assert( i == pLib->nGates );
+ // sort gates by area
+ pLib->ppGates0 = ALLOC( Mio_Gate_t *, pLib->nGates );
+ for ( i = 0; i < pLib->nGates; i++ )
+ pLib->ppGates0[i] = ppGates[i];
+ qsort( (void *)ppGates, pLib->nGates, sizeof(void *),
+ (int (*)(const void *, const void *)) Mio_LibraryCompareGatesByArea );
+ for ( i = 0; i < pLib->nGates; i++ )
+ ppGates[i]->pNext = (i < pLib->nGates-1)? ppGates[i+1] : NULL;
+ pLib->pGates = ppGates[0];
+ free( ppGates );
+ // sort gates by name
+ pLib->ppGatesName = ALLOC( Mio_Gate_t *, pLib->nGates );
+ for ( i = 0; i < pLib->nGates; i++ )
+ pLib->ppGatesName[i] = pLib->ppGates0[i];
+ qsort( (void *)pLib->ppGatesName, pLib->nGates, sizeof(void *),
+ (int (*)(const void *, const void *)) Mio_LibraryCompareGatesByName );
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
void Mio_LibraryDetectSpecialGates( Mio_Library_t * pLib )
{
Mio_Gate_t * pGate;
DdNode * bFuncBuf, * bFuncInv, * bFuncNand2, * bFuncAnd2;
+ Mio_LibrarySortGates( pLib );
+
bFuncBuf = pLib->dd->vars[0]; Cudd_Ref( bFuncBuf );
bFuncInv = Cudd_Not( pLib->dd->vars[0] ); Cudd_Ref( bFuncInv );
bFuncNand2 = Cudd_bddNand( pLib->dd, pLib->dd->vars[0], pLib->dd->vars[1] ); Cudd_Ref( bFuncNand2 );
diff --git a/src/map/mio/mioUtils.c b/src/map/mio/mioUtils.c
index bd3d01f7..2a1d1f30 100644
--- a/src/map/mio/mioUtils.c
+++ b/src/map/mio/mioUtils.c
@@ -59,6 +59,8 @@ void Mio_LibraryDelete( Mio_Library_t * pLib )
st_free_table( pLib->tName2Gate );
if ( pLib->dd )
Cudd_Quit( pLib->dd );
+ FREE( pLib->ppGates0 );
+ FREE( pLib->ppGatesName );
free( pLib );
}
@@ -82,7 +84,7 @@ void Mio_GateDelete( Mio_Gate_t * pGate )
if ( pGate->bFunc )
Cudd_RecursiveDeref( pGate->pLib->dd, pGate->bFunc );
Mio_GateForEachPinSafe( pGate, pPin, pPin2 )
- Mio_PinDelete( pPin );
+ Mio_PinDelete( pPin );
free( pGate );
}
@@ -142,11 +144,14 @@ Mio_Pin_t * Mio_PinDup( Mio_Pin_t * pPin )
***********************************************************************/
void Mio_WriteLibrary( FILE * pFile, Mio_Library_t * pLib, int fPrintSops )
{
- Mio_Gate_t * pGate;
+// Mio_Gate_t * pGate;
+ int i;
fprintf( pFile, "# The genlib library \"%s\".\n", pLib->pName );
- Mio_LibraryForEachGate( pLib, pGate )
- Mio_WriteGate( pFile, pGate, fPrintSops );
+// Mio_LibraryForEachGate( pLib, pGate )
+// Mio_WriteGate( pFile, pGate, fPrintSops );
+ for ( i = 0; i < pLib->nGates; i++ )
+ Mio_WriteGate( pFile, pLib->ppGates0[i], fPrintSops );
}
/**Function*************************************************************