summaryrefslogtreecommitdiffstats
path: root/src/base/io
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/io')
-rw-r--r--src/base/io/io.c88
-rw-r--r--src/base/io/io.h2
-rw-r--r--src/base/io/ioRead.c3
-rw-r--r--src/base/io/ioReadBench.c8
-rw-r--r--src/base/io/ioReadBlif.c4
-rw-r--r--src/base/io/ioReadEdif.c228
-rw-r--r--src/base/io/ioReadPla.c8
-rw-r--r--src/base/io/ioReadVerilog.c30
-rw-r--r--src/base/io/ioWriteBench.c2
-rw-r--r--src/base/io/ioWriteBlif.c3
-rw-r--r--src/base/io/ioWritePla.c4
11 files changed, 351 insertions, 29 deletions
diff --git a/src/base/io/io.c b/src/base/io/io.c
index b1f44abd..1fe73690 100644
--- a/src/base/io/io.c
+++ b/src/base/io/io.c
@@ -28,6 +28,7 @@
static int IoCommandRead ( Abc_Frame_t * pAbc, int argc, char **argv );
static int IoCommandReadBlif ( Abc_Frame_t * pAbc, int argc, char **argv );
static int IoCommandReadBench ( Abc_Frame_t * pAbc, int argc, char **argv );
+static int IoCommandReadEdif ( Abc_Frame_t * pAbc, int argc, char **argv );
static int IoCommandReadVerilog ( Abc_Frame_t * pAbc, int argc, char **argv );
static int IoCommandReadPla ( Abc_Frame_t * pAbc, int argc, char **argv );
@@ -56,6 +57,7 @@ void Io_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd( pAbc, "I/O", "read", IoCommandRead, 1 );
Cmd_CommandAdd( pAbc, "I/O", "read_blif", IoCommandReadBlif, 1 );
Cmd_CommandAdd( pAbc, "I/O", "read_bench", IoCommandReadBench, 1 );
+ Cmd_CommandAdd( pAbc, "I/O", "read_edif", IoCommandReadEdif, 1 );
Cmd_CommandAdd( pAbc, "I/O", "read_verilog", IoCommandReadVerilog, 1 );
Cmd_CommandAdd( pAbc, "I/O", "read_pla", IoCommandReadPla, 1 );
@@ -232,6 +234,7 @@ usage:
fprintf( pAbc->Err, "\tfile : the name of a file to read\n" );
return 1;
}
+
/**Function*************************************************************
Synopsis []
@@ -323,6 +326,86 @@ usage:
SeeAlso []
***********************************************************************/
+int IoCommandReadEdif( Abc_Frame_t * pAbc, int argc, char ** argv )
+{
+ Abc_Ntk_t * pNtk, * pTemp;
+ char * FileName;
+ FILE * pFile;
+ int fCheck;
+ int c;
+
+ fCheck = 1;
+ util_getopt_reset();
+ while ( ( c = util_getopt( argc, argv, "ch" ) ) != EOF )
+ {
+ switch ( c )
+ {
+ case 'c':
+ fCheck ^= 1;
+ break;
+ case 'h':
+ goto usage;
+ default:
+ goto usage;
+ }
+ }
+
+ if ( argc != util_optind + 1 )
+ {
+ goto usage;
+ }
+
+ // get the input file name
+ FileName = argv[util_optind];
+ if ( (pFile = fopen( FileName, "r" )) == NULL )
+ {
+ fprintf( pAbc->Err, "Cannot open input file \"%s\". ", FileName );
+ if ( FileName = Extra_FileGetSimilarName( FileName, ".mv", ".blif", ".pla", ".mvpla", NULL ) )
+ fprintf( pAbc->Err, "Did you mean \"%s\"?", FileName );
+ fprintf( pAbc->Err, "\n" );
+ return 1;
+ }
+ fclose( pFile );
+
+ // set the new network
+ pNtk = Io_ReadEdif( FileName, fCheck );
+ if ( pNtk == NULL )
+ {
+ fprintf( pAbc->Err, "Reading network from EDIF file has failed.\n" );
+ return 1;
+ }
+
+ pNtk = Abc_NtkNetlistToLogic( pTemp = pNtk );
+ Abc_NtkDelete( pTemp );
+ if ( pNtk == NULL )
+ {
+ fprintf( pAbc->Err, "Converting to logic network after reading has failed.\n" );
+ return 1;
+ }
+ // replace the current network
+ Abc_FrameReplaceCurrentNetwork( pAbc, pNtk );
+ return 0;
+
+usage:
+ fprintf( pAbc->Err, "usage: read_edif [-ch] <file>\n" );
+ fprintf( pAbc->Err, "\t read the network in EDIF (works only for ISCAS benchmarks)\n" );
+ fprintf( pAbc->Err, "\t-c : toggle network check after reading [default = %s]\n", fCheck? "yes":"no" );
+ fprintf( pAbc->Err, "\t-h : prints the command summary\n" );
+ fprintf( pAbc->Err, "\tfile : the name of a file to read\n" );
+ return 1;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
int IoCommandReadVerilog( Abc_Frame_t * pAbc, int argc, char ** argv )
{
Abc_Ntk_t * pNtk, * pTemp;
@@ -521,12 +604,13 @@ int IoCommandWriteBlif( Abc_Frame_t * pAbc, int argc, char **argv )
FileName = argv[util_optind];
// check the network type
- if ( !Abc_NtkIsLogic(pNtk) && !Abc_NtkIsAig(pNtk) )
+ if ( !Abc_NtkIsLogic(pNtk) && !Abc_NtkIsAig(pNtk) && !Abc_NtkIsSeq(pNtk) )
{
- fprintf( pAbc->Out, "Currently can only write logic networks and AIGs.\n" );
+ fprintf( pAbc->Out, "Currently can only write logic networks, AIGs, and seq AIGs.\n" );
return 0;
}
Io_WriteBlifLogic( pNtk, FileName, fWriteLatches );
+// Io_WriteBlif( pNtk, FileName, fWriteLatches );
return 0;
usage:
diff --git a/src/base/io/io.h b/src/base/io/io.h
index 2465fa9f..d45b7b1b 100644
--- a/src/base/io/io.h
+++ b/src/base/io/io.h
@@ -51,6 +51,8 @@ extern Abc_Ntk_t * Io_Read( char * pFileName, int fCheck );
extern Abc_Ntk_t * Io_ReadBlif( char * pFileName, int fCheck );
/*=== abcReadBench.c ==========================================================*/
extern Abc_Ntk_t * Io_ReadBench( char * pFileName, int fCheck );
+/*=== abcReadEdif.c ==========================================================*/
+extern Abc_Ntk_t * Io_ReadEdif( char * pFileName, int fCheck );
/*=== abcReadVerilog.c ==========================================================*/
extern Abc_Ntk_t * Io_ReadVerilog( char * pFileName, int fCheck );
/*=== abcReadPla.c ==========================================================*/
diff --git a/src/base/io/ioRead.c b/src/base/io/ioRead.c
index 8a0c11a5..75c87a80 100644
--- a/src/base/io/ioRead.c
+++ b/src/base/io/ioRead.c
@@ -49,6 +49,8 @@ Abc_Ntk_t * Io_Read( char * pFileName, int fCheck )
pNtk = Io_ReadVerilog( pFileName, fCheck );
else if ( Extra_FileNameCheckExtension( pFileName, "bench" ) )
pNtk = Io_ReadBench( pFileName, fCheck );
+ else if ( Extra_FileNameCheckExtension( pFileName, "edf" ) )
+ pNtk = Io_ReadEdif( pFileName, fCheck );
else if ( Extra_FileNameCheckExtension( pFileName, "pla" ) )
pNtk = Io_ReadPla( pFileName, fCheck );
else
@@ -58,6 +60,7 @@ Abc_Ntk_t * Io_Read( char * pFileName, int fCheck )
}
if ( pNtk == NULL )
return NULL;
+
pNtk = Abc_NtkNetlistToLogic( pTemp = pNtk );
Abc_NtkDelete( pTemp );
if ( pNtk == NULL )
diff --git a/src/base/io/ioReadBench.c b/src/base/io/ioReadBench.c
index 9667fcc7..dd571f91 100644
--- a/src/base/io/ioReadBench.c
+++ b/src/base/io/ioReadBench.c
@@ -32,9 +32,9 @@ static Abc_Ntk_t * Io_ReadBenchNetwork( Extra_FileReader_t * p );
/**Function*************************************************************
- Synopsis [Read the network from BENCH file.]
+ Synopsis [Reads the network from a BENCH file.]
- Description [Currently works only for the miter cone.]
+ Description []
SideEffects []
@@ -68,9 +68,9 @@ Abc_Ntk_t * Io_ReadBench( char * pFileName, int fCheck )
}
/**Function*************************************************************
- Synopsis [Read the network from BENCH file.]
+ Synopsis []
- Description [Currently works only for the miter cone.]
+ Description []
SideEffects []
diff --git a/src/base/io/ioReadBlif.c b/src/base/io/ioReadBlif.c
index 693f1104..f598c4e5 100644
--- a/src/base/io/ioReadBlif.c
+++ b/src/base/io/ioReadBlif.c
@@ -66,9 +66,9 @@ static int Io_ReadBlifNetworkDefaultInputArrival( Io_ReadBlif_t * p, Vec_Ptr_t *
/**Function*************************************************************
- Synopsis [Read the network from BLIF file.]
+ Synopsis [Reads the network from a BLIF file.]
- Description []
+ Description [Works only for flat (non-hierarchical) BLIF.]
SideEffects []
diff --git a/src/base/io/ioReadEdif.c b/src/base/io/ioReadEdif.c
new file mode 100644
index 00000000..172849bd
--- /dev/null
+++ b/src/base/io/ioReadEdif.c
@@ -0,0 +1,228 @@
+/**CFile****************************************************************
+
+ FileName [ioReadEdif.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Command processing package.]
+
+ Synopsis [Procedure to read ISCAS benchmarks in EDIF.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - June 20, 2005.]
+
+ Revision [$Id: ioReadEdif.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "io.h"
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+static Abc_Ntk_t * Io_ReadEdifNetwork( Extra_FileReader_t * p );
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Reads the network from an EDIF file.]
+
+ Description [Works only for the ISCAS benchmarks.]
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Abc_Ntk_t * Io_ReadEdif( char * pFileName, int fCheck )
+{
+ Extra_FileReader_t * p;
+ Abc_Ntk_t * pNtk;
+
+ // start the file
+ p = Extra_FileReaderAlloc( pFileName, "#", "\n", " \t\r()" );
+ if ( p == NULL )
+ return NULL;
+
+ // read the network
+ pNtk = Io_ReadEdifNetwork( p );
+ Extra_FileReaderFree( p );
+ if ( pNtk == NULL )
+ return NULL;
+
+ // make sure that everything is okay with the network structure
+ if ( fCheck && !Abc_NtkCheck( pNtk ) )
+ {
+ printf( "Io_ReadEdif: The network check has failed.\n" );
+ Abc_NtkDelete( pNtk );
+ return NULL;
+ }
+ return pNtk;
+}
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Abc_Ntk_t * Io_ReadEdifNetwork( Extra_FileReader_t * p )
+{
+ ProgressBar * pProgress;
+ Vec_Ptr_t * vTokens;
+ Abc_Ntk_t * pNtk;
+ Abc_Obj_t * pNet, * pObj, * pFanout;
+ char * pGateName, * pNetName;
+ int fTokensReady, iLine, i;
+
+ // read the first line
+ vTokens = Extra_FileReaderGetTokens(p);
+ if ( strcmp( vTokens->pArray[0], "edif" ) != 0 )
+ {
+ printf( "%s: Wrong input file format.\n", Extra_FileReaderGetFileName(p) );
+ return NULL;
+ }
+
+ // allocate the empty network
+ pNtk = Abc_NtkStartRead( Extra_FileReaderGetFileName(p) );
+
+ // go through the lines of the file
+ fTokensReady = 0;
+ pProgress = Extra_ProgressBarStart( stdout, Extra_FileReaderGetFileSize(p) );
+ for ( iLine = 1; fTokensReady || (vTokens = Extra_FileReaderGetTokens(p)); iLine++ )
+ {
+ Extra_ProgressBarUpdate( pProgress, Extra_FileReaderGetCurPosition(p), NULL );
+
+ // get the type of the line
+ fTokensReady = 0;
+ if ( strcmp( vTokens->pArray[0], "instance" ) == 0 )
+ {
+ pNetName = vTokens->pArray[1];
+ pNet = Abc_NtkFindOrCreateNet( pNtk, pNetName );
+ vTokens = Extra_FileReaderGetTokens(p);
+ vTokens = Extra_FileReaderGetTokens(p);
+ pGateName = vTokens->pArray[1];
+ if ( strncmp( pGateName, "Flip", 4 ) == 0 )
+ pObj = Abc_NtkCreateLatch( pNtk );
+ else
+ {
+ pObj = Abc_NtkCreateNode( pNtk );
+ pObj->pData = Abc_NtkRegisterName( pNtk, pGateName );
+ }
+ Abc_ObjAddFanin( pNet, pObj );
+ }
+ else if ( strcmp( vTokens->pArray[0], "net" ) == 0 )
+ {
+ pNetName = vTokens->pArray[1];
+ if ( strcmp( pNetName, "CK" ) == 0 || strcmp( pNetName, "RESET" ) == 0 )
+ continue;
+ if ( strcmp( pNetName + strlen(pNetName) - 4, "_out" ) == 0 )
+ pNetName[strlen(pNetName) - 4] = 0;
+ pNet = Abc_NtkFindNet( pNtk, pNetName );
+ assert( pNet );
+ vTokens = Extra_FileReaderGetTokens(p);
+ vTokens = Extra_FileReaderGetTokens(p);
+ vTokens = Extra_FileReaderGetTokens(p);
+ while ( strcmp( vTokens->pArray[0], "portRef" ) == 0 )
+ {
+ if ( strcmp( pNetName, vTokens->pArray[3] ) != 0 )
+ {
+ pFanout = Abc_NtkFindNet( pNtk, vTokens->pArray[3] );
+ Abc_ObjAddFanin( Abc_ObjFanin0(pFanout), pNet );
+ }
+ vTokens = Extra_FileReaderGetTokens(p);
+ }
+ fTokensReady = 1;
+ }
+ else if ( strcmp( vTokens->pArray[0], "library" ) == 0 )
+ {
+ vTokens = Extra_FileReaderGetTokens(p);
+ vTokens = Extra_FileReaderGetTokens(p);
+ vTokens = Extra_FileReaderGetTokens(p);
+ vTokens = Extra_FileReaderGetTokens(p);
+ vTokens = Extra_FileReaderGetTokens(p);
+ while ( strcmp( vTokens->pArray[0], "port" ) == 0 )
+ {
+ pNetName = vTokens->pArray[1];
+ if ( strcmp( pNetName, "CK" ) == 0 || strcmp( pNetName, "RESET" ) == 0 )
+ {
+ vTokens = Extra_FileReaderGetTokens(p);
+ continue;
+ }
+ if ( strcmp( pNetName + strlen(pNetName) - 3, "_PO" ) == 0 )
+ pNetName[strlen(pNetName) - 3] = 0;
+ if ( strcmp( vTokens->pArray[3], "INPUT" ) == 0 )
+ Io_ReadCreatePi( pNtk, vTokens->pArray[1] );
+ else if ( strcmp( vTokens->pArray[3], "OUTPUT" ) == 0 )
+ Io_ReadCreatePo( pNtk, vTokens->pArray[1] );
+ else
+ {
+ printf( "%s (line %d): Wrong interface specification.\n", Extra_FileReaderGetFileName(p), iLine );
+ Abc_NtkDelete( pNtk );
+ return NULL;
+ }
+ vTokens = Extra_FileReaderGetTokens(p);
+ }
+ }
+ else if ( strcmp( vTokens->pArray[0], "design" ) == 0 )
+ {
+ free( pNtk->pName );
+ pNtk->pName = util_strsav( vTokens->pArray[3] );
+ break;
+ }
+ }
+ Extra_ProgressBarStop( pProgress );
+
+ // assign logic functions
+ Abc_NtkForEachNode( pNtk, pObj, i )
+ {
+ if ( strncmp( pObj->pData, "And", 3 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateAnd(pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
+ else if ( strncmp( pObj->pData, "Or", 2 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateOr(pNtk->pManFunc, Abc_ObjFaninNum(pObj), NULL) );
+ else if ( strncmp( pObj->pData, "Nand", 4 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateNand(pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
+ else if ( strncmp( pObj->pData, "Nor", 3 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateNor(pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
+ else if ( strncmp( pObj->pData, "Exor", 4 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateXor(pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
+ else if ( strncmp( pObj->pData, "Exnor", 5 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateNxor(pNtk->pManFunc, Abc_ObjFaninNum(pObj)) );
+ else if ( strncmp( pObj->pData, "Inv", 3 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateInv(pNtk->pManFunc) );
+ else if ( strncmp( pObj->pData, "Buf", 3 ) == 0 )
+ Abc_ObjSetData( pObj, Abc_SopCreateBuf(pNtk->pManFunc) );
+ else
+ {
+ printf( "%s: Unknown gate type \"%s\".\n", Extra_FileReaderGetFileName(p), pObj->pData );
+ Abc_NtkDelete( pNtk );
+ return NULL;
+ }
+ }
+ // check if constants have been added
+// if ( pNet = Abc_NtkFindNet( pNtk, "VDD" ) )
+// Io_ReadCreateConst( pNtk, "VDD", 1 );
+// if ( pNet = Abc_NtkFindNet( pNtk, "GND" ) )
+// Io_ReadCreateConst( pNtk, "GND", 0 );
+
+ Abc_NtkFinalizeRead( pNtk );
+ return pNtk;
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+
diff --git a/src/base/io/ioReadPla.c b/src/base/io/ioReadPla.c
index 951fb229..a334ded0 100644
--- a/src/base/io/ioReadPla.c
+++ b/src/base/io/ioReadPla.c
@@ -32,9 +32,9 @@ static Abc_Ntk_t * Io_ReadPlaNetwork( Extra_FileReader_t * p );
/**Function*************************************************************
- Synopsis [Read the network from BENCH file.]
+ Synopsis [Reads the network from a PLA file.]
- Description [Currently works only for the miter cone.]
+ Description []
SideEffects []
@@ -68,9 +68,9 @@ Abc_Ntk_t * Io_ReadPla( char * pFileName, int fCheck )
}
/**Function*************************************************************
- Synopsis [Read the network from BENCH file.]
+ Synopsis []
- Description [Currently works only for the miter cone.]
+ Description []
SideEffects []
diff --git a/src/base/io/ioReadVerilog.c b/src/base/io/ioReadVerilog.c
index 755fb1db..936a1c0c 100644
--- a/src/base/io/ioReadVerilog.c
+++ b/src/base/io/ioReadVerilog.c
@@ -124,9 +124,9 @@ static void Io_ReadVerFree( Io_ReadVer_t * p );
/**Function*************************************************************
- Synopsis [Read the network from BENCH file.]
+ Synopsis [Reads the network from a Verilog file.]
- Description [Currently works only for the miter cone.]
+ Description [Works only for IWLS 2005 benchmarks.]
SideEffects []
@@ -633,9 +633,13 @@ bool Io_ReadVerNetworkGateComplex( Io_ReadVer_t * p, Abc_Ntk_t * pNtk, Vec_Ptr_t
bool Io_ReadVerNetworkLatch( Io_ReadVer_t * p, Abc_Ntk_t * pNtk, Vec_Ptr_t * vTokens )
{
Abc_Obj_t * pLatch, * pNet;
+ char * pLatchName;
char * pToken, * pToken2, * pTokenRN, * pTokenSN, * pTokenSI, * pTokenSE, * pTokenD, * pTokenQ, * pTokenQN;
int k, fRN1, fSN1;
+ // get the latch name
+ pLatchName = vTokens->pArray[1];
+
// collect the FF signals
pTokenRN = pTokenSN = pTokenSI = pTokenSE = pTokenD = pTokenQ = pTokenQN = NULL;
for ( k = 2; k < vTokens->nSize-1; k++ )
@@ -666,21 +670,21 @@ bool Io_ReadVerNetworkLatch( Io_ReadVer_t * p, Abc_Ntk_t * pNtk, Vec_Ptr_t * vTo
if ( pTokenD == NULL )
{
p->LineCur = Extra_FileReaderGetLineNumber( p->pReader, 1 );
- sprintf( p->sError, "Cannot read pin D of the latch \"%s\".", vTokens->pArray[1] );
+ sprintf( p->sError, "Cannot read pin D of the latch \"%s\".", pLatchName );
Io_ReadVerPrintErrorMessage( p );
return 0;
}
if ( pTokenQ == NULL && pTokenQN == NULL )
{
p->LineCur = Extra_FileReaderGetLineNumber( p->pReader, 1 );
- sprintf( p->sError, "Cannot read pins Q/QN of the latch \"%s\".", vTokens->pArray[1] );
+ sprintf( p->sError, "Cannot read pins Q/QN of the latch \"%s\".", pLatchName );
Io_ReadVerPrintErrorMessage( p );
return 0;
}
if ( (pTokenRN == NULL) ^ (pTokenSN == NULL) )
{
p->LineCur = Extra_FileReaderGetLineNumber( p->pReader, 1 );
- sprintf( p->sError, "Cannot read pins RN/SN of the latch \"%s\".", vTokens->pArray[1] );
+ sprintf( p->sError, "Cannot read pins RN/SN of the latch \"%s\".", pLatchName );
Io_ReadVerPrintErrorMessage( p );
return 0;
}
@@ -693,7 +697,7 @@ bool Io_ReadVerNetworkLatch( Io_ReadVer_t * p, Abc_Ntk_t * pNtk, Vec_Ptr_t * vTo
}
// create the latch
- pLatch = Io_ReadCreateLatch( pNtk, pTokenD, vTokens->pArray[1] );
+ pLatch = Io_ReadCreateLatch( pNtk, pTokenD, pLatchName );
// create the buffer if Q signal is available
if ( pTokenQ )
@@ -706,7 +710,7 @@ bool Io_ReadVerNetworkLatch( Io_ReadVer_t * p, Abc_Ntk_t * pNtk, Vec_Ptr_t * vTo
Io_ReadVerPrintErrorMessage( p );
return 0;
}
- Io_ReadCreateBuf( pNtk, vTokens->pArray[1], pTokenQ );
+ Io_ReadCreateBuf( pNtk, pLatchName, pTokenQ );
}
if ( pTokenQN )
{
@@ -718,26 +722,26 @@ bool Io_ReadVerNetworkLatch( Io_ReadVer_t * p, Abc_Ntk_t * pNtk, Vec_Ptr_t * vTo
Io_ReadVerPrintErrorMessage( p );
return 0;
}
- Io_ReadCreateInv( pNtk, vTokens->pArray[1], pTokenQN );
+ Io_ReadCreateInv( pNtk, pLatchName, pTokenQN );
}
// set the initial value
if ( pTokenRN == NULL && pTokenSN == NULL )
- Abc_ObjSetData( pLatch, (char *)2 );
+ Abc_LatchSetInitDc( pLatch );
else
{
fRN1 = (strcmp( pTokenRN, "1'b1" ) == 0);
fSN1 = (strcmp( pTokenSN, "1'b1" ) == 0);
if ( fRN1 && fSN1 )
- Abc_ObjSetData( pLatch, (char *)2 );
+ Abc_LatchSetInitDc( pLatch );
else if ( fRN1 )
- Abc_ObjSetData( pLatch, (char *)1 );
+ Abc_LatchSetInit1( pLatch );
else if ( fSN1 )
- Abc_ObjSetData( pLatch, (char *)0 );
+ Abc_LatchSetInit0( pLatch );
else
{
p->LineCur = Extra_FileReaderGetLineNumber( p->pReader, 0 );
- sprintf( p->sError, "Cannot read the initial value of latch \"%s\".", vTokens->pArray[1] );
+ sprintf( p->sError, "Cannot read the initial value of latch \"%s\".", pLatchName );
Io_ReadVerPrintErrorMessage( p );
return 0;
}
diff --git a/src/base/io/ioWriteBench.c b/src/base/io/ioWriteBench.c
index 980015b2..7c4a4ab1 100644
--- a/src/base/io/ioWriteBench.c
+++ b/src/base/io/ioWriteBench.c
@@ -92,7 +92,7 @@ int Io_WriteBenchOne( FILE * pFile, Abc_Ntk_t * pNtk )
Abc_ObjName(pNode), Abc_ObjName(Abc_ObjFanin0(pNode)) );
// write internal nodes
- pProgress = Extra_ProgressBarStart( stdout, Abc_NtkNodeNum(pNtk) );
+ pProgress = Extra_ProgressBarStart( stdout, Abc_NtkObjNumMax(pNtk) );
Abc_NtkForEachNode( pNtk, pNode, i )
{
Extra_ProgressBarUpdate( pProgress, i, NULL );
diff --git a/src/base/io/ioWriteBlif.c b/src/base/io/ioWriteBlif.c
index 79de62b8..5c83aad2 100644
--- a/src/base/io/ioWriteBlif.c
+++ b/src/base/io/ioWriteBlif.c
@@ -86,6 +86,7 @@ void Io_WriteBlif( Abc_Ntk_t * pNtk, char * FileName, int fWriteLatches )
return;
}
// write the model name
+ fprintf( pFile, "# Benchmark \"%s\" written by ABC on %s\n", pNtk->pName, Extra_TimeStamp() );
fprintf( pFile, ".model %s\n", Abc_NtkName(pNtk) );
// write the network
Io_NtkWriteOne( pFile, pNtk, fWriteLatches );
@@ -145,7 +146,7 @@ void Io_NtkWriteOne( FILE * pFile, Abc_Ntk_t * pNtk, int fWriteLatches )
}
// write each internal node
- pProgress = Extra_ProgressBarStart( stdout, Abc_NtkNodeNum(pNtk) );
+ pProgress = Extra_ProgressBarStart( stdout, Abc_NtkObjNumMax(pNtk) );
Abc_NtkForEachNode( pNtk, pNode, i )
{
Extra_ProgressBarUpdate( pProgress, i, NULL );
diff --git a/src/base/io/ioWritePla.c b/src/base/io/ioWritePla.c
index 48e358e3..9c78b149 100644
--- a/src/base/io/ioWritePla.c
+++ b/src/base/io/ioWritePla.c
@@ -32,7 +32,7 @@ static int Io_WritePlaOne( FILE * pFile, Abc_Ntk_t * pNtk );
/**Function*************************************************************
- Synopsis [Writes the network in BENCH format.]
+ Synopsis [Writes the network in PLA format.]
Description []
@@ -69,7 +69,7 @@ int Io_WritePla( Abc_Ntk_t * pNtk, char * pFileName )
/**Function*************************************************************
- Synopsis [Writes the network in BENCH format.]
+ Synopsis [Writes the network in PLA format.]
Description []