Commit 55c5c1b5 by Alan Mishchenko

Added SMT parser for Wlc_Ntk_t.

parent d7099e7a
...@@ -763,6 +763,10 @@ SOURCE=.\src\base\wlc\wlcNtk.c ...@@ -763,6 +763,10 @@ SOURCE=.\src\base\wlc\wlcNtk.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\src\base\wlc\wlcReadSmt.c
# End Source File
# Begin Source File
SOURCE=.\src\base\wlc\wlcReadVer.c SOURCE=.\src\base\wlc\wlcReadVer.c
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -209,7 +209,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -209,7 +209,7 @@ int Cba_CommandRead( Abc_Frame_t * pAbc, int argc, char ** argv )
} }
else if ( !strcmp( Extra_FileNameExtension(pFileName), "smt" ) ) else if ( !strcmp( Extra_FileNameExtension(pFileName), "smt" ) )
{ {
vDes = Prs_ManReadSmt( pFileName ); vDes = NULL;//Prs_ManReadSmt( pFileName );
if ( vDes && Vec_PtrSize(vDes) ) if ( vDes && Vec_PtrSize(vDes) )
p = Prs_ManBuildCba( pFileName, vDes ); p = Prs_ManBuildCba( pFileName, vDes );
Prs_ManVecFree( vDes ); Prs_ManVecFree( vDes );
...@@ -647,6 +647,7 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -647,6 +647,7 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
{ {
extern void Prs_ManReadBlifTest(); extern void Prs_ManReadBlifTest();
extern void Prs_ManReadVerilogTest(); extern void Prs_ManReadVerilogTest();
extern void Prs_SmtReadSmtTest();
//Cba_Man_t * p = Cba_AbcGetMan(pAbc); //Cba_Man_t * p = Cba_AbcGetMan(pAbc);
int c, fVerbose = 0; int c, fVerbose = 0;
Extra_UtilGetoptReset(); Extra_UtilGetoptReset();
...@@ -671,7 +672,8 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -671,7 +672,8 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
} }
*/ */
//Cba_PtrTransformTestTest(); //Cba_PtrTransformTestTest();
Prs_ManReadVerilogTest(); //Prs_ManReadVerilogTest();
//Prs_SmtReadSmtTest();
return 0; return 0;
usage: usage:
Abc_Print( -2, "usage: @test [-vh]\n" ); Abc_Print( -2, "usage: @test [-vh]\n" );
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
***********************************************************************/ ***********************************************************************/
#include "cba.h" #include "cba.h"
#include "cbaPrs.h"
ABC_NAMESPACE_IMPL_START ABC_NAMESPACE_IMPL_START
...@@ -32,29 +31,6 @@ ABC_NAMESPACE_IMPL_START ...@@ -32,29 +31,6 @@ ABC_NAMESPACE_IMPL_START
/// FUNCTION DEFINITIONS /// /// FUNCTION DEFINITIONS ///
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Vec_Ptr_t * Prs_ManReadSmt( char * pFileName )
{
Vec_Ptr_t * vPrs = NULL;
Prs_Man_t * p = Prs_ManAlloc( pFileName );
if ( p == NULL )
return NULL;
// Prs_ManReadLines( p );
if ( Prs_ManErrorPrint(p) )
ABC_SWAP( Vec_Ptr_t *, vPrs, p->vNtks );
Prs_ManFree( p );
return vPrs;
}
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
......
...@@ -2,5 +2,6 @@ SRC += src/base/wlc/wlcAbs.c \ ...@@ -2,5 +2,6 @@ SRC += src/base/wlc/wlcAbs.c \
src/base/wlc/wlcBlast.c \ src/base/wlc/wlcBlast.c \
src/base/wlc/wlcCom.c \ src/base/wlc/wlcCom.c \
src/base/wlc/wlcNtk.c \ src/base/wlc/wlcNtk.c \
src/base/wlc/wlcReadSmt.c \
src/base/wlc/wlcReadVer.c \ src/base/wlc/wlcReadVer.c \
src/base/wlc/wlcWriteVer.c src/base/wlc/wlcWriteVer.c
...@@ -252,9 +252,11 @@ extern void Wlc_NtkPrintNodes( Wlc_Ntk_t * p, int Type ); ...@@ -252,9 +252,11 @@ extern void Wlc_NtkPrintNodes( Wlc_Ntk_t * p, int Type );
extern void Wlc_NtkPrintStats( Wlc_Ntk_t * p, int fDistrib, int fVerbose ); extern void Wlc_NtkPrintStats( Wlc_Ntk_t * p, int fDistrib, int fVerbose );
extern Wlc_Ntk_t * Wlc_NtkDupDfs( Wlc_Ntk_t * p ); extern Wlc_Ntk_t * Wlc_NtkDupDfs( Wlc_Ntk_t * p );
extern void Wlc_NtkTransferNames( Wlc_Ntk_t * pNew, Wlc_Ntk_t * p ); extern void Wlc_NtkTransferNames( Wlc_Ntk_t * pNew, Wlc_Ntk_t * p );
/*=== wlcReadWord.c ========================================================*/ /*=== wlcReadSmt.c ========================================================*/
extern Wlc_Ntk_t * Wlc_ReadSmt( char * pFileName );
/*=== wlcReadVer.c ========================================================*/
extern Wlc_Ntk_t * Wlc_ReadVer( char * pFileName ); extern Wlc_Ntk_t * Wlc_ReadVer( char * pFileName );
/*=== wlcWriteWord.c ========================================================*/ /*=== wlcWriteVer.c ========================================================*/
extern void Wlc_WriteVer( Wlc_Ntk_t * p, char * pFileName ); extern void Wlc_WriteVer( Wlc_Ntk_t * p, char * pFileName );
......
...@@ -28,8 +28,8 @@ ABC_NAMESPACE_IMPL_START ...@@ -28,8 +28,8 @@ ABC_NAMESPACE_IMPL_START
/// DECLARATIONS /// /// DECLARATIONS ///
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
static int Abc_CommandReadVer ( Abc_Frame_t * pAbc, int argc, char ** argv ); static int Abc_CommandReadWlc ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandWriteVer ( Abc_Frame_t * pAbc, int argc, char ** argv ); static int Abc_CommandWriteWlc ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandPs ( Abc_Frame_t * pAbc, int argc, char ** argv ); static int Abc_CommandPs ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandBlast ( Abc_Frame_t * pAbc, int argc, char ** argv ); static int Abc_CommandBlast ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandTest ( Abc_Frame_t * pAbc, int argc, char ** argv ); static int Abc_CommandTest ( Abc_Frame_t * pAbc, int argc, char ** argv );
...@@ -55,8 +55,8 @@ static inline void Wlc_AbcUpdateNtk( Abc_Frame_t * pAbc, Wlc_Ntk_t * pNtk ...@@ -55,8 +55,8 @@ static inline void Wlc_AbcUpdateNtk( Abc_Frame_t * pAbc, Wlc_Ntk_t * pNtk
******************************************************************************/ ******************************************************************************/
void Wlc_Init( Abc_Frame_t * pAbc ) void Wlc_Init( Abc_Frame_t * pAbc )
{ {
Cmd_CommandAdd( pAbc, "Word level", "%read_ver", Abc_CommandReadVer, 0 ); Cmd_CommandAdd( pAbc, "Word level", "%read", Abc_CommandReadWlc, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%write_ver", Abc_CommandWriteVer, 0 ); Cmd_CommandAdd( pAbc, "Word level", "%write", Abc_CommandWriteWlc, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%ps", Abc_CommandPs, 0 ); Cmd_CommandAdd( pAbc, "Word level", "%ps", Abc_CommandPs, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%blast", Abc_CommandBlast, 0 ); Cmd_CommandAdd( pAbc, "Word level", "%blast", Abc_CommandBlast, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%test", Abc_CommandTest, 0 ); Cmd_CommandAdd( pAbc, "Word level", "%test", Abc_CommandTest, 0 );
...@@ -90,7 +90,7 @@ void Wlc_End( Abc_Frame_t * pAbc ) ...@@ -90,7 +90,7 @@ void Wlc_End( Abc_Frame_t * pAbc )
SeeAlso [] SeeAlso []
******************************************************************************/ ******************************************************************************/
int Abc_CommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv ) int Abc_CommandReadWlc( Abc_Frame_t * pAbc, int argc, char ** argv )
{ {
FILE * pFile; FILE * pFile;
Wlc_Ntk_t * pNtk = NULL; Wlc_Ntk_t * pNtk = NULL;
...@@ -112,7 +112,7 @@ int Abc_CommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -112,7 +112,7 @@ int Abc_CommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv )
} }
if ( argc != globalUtilOptind + 1 ) if ( argc != globalUtilOptind + 1 )
{ {
printf( "Abc_CommandReadVer(): Input file name should be given on the command line.\n" ); printf( "Abc_CommandReadWlc(): Input file name should be given on the command line.\n" );
return 0; return 0;
} }
// get the file name // get the file name
...@@ -120,7 +120,7 @@ int Abc_CommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -120,7 +120,7 @@ int Abc_CommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( (pFile = fopen( pFileName, "r" )) == NULL ) if ( (pFile = fopen( pFileName, "r" )) == NULL )
{ {
Abc_Print( 1, "Cannot open input file \"%s\". ", pFileName ); Abc_Print( 1, "Cannot open input file \"%s\". ", pFileName );
if ( (pFileName = Extra_FileGetSimilarName( pFileName, ".v", ".smt", NULL, NULL, NULL )) ) if ( (pFileName = Extra_FileGetSimilarName( pFileName, ".v", ".smt", ".smt2", NULL, NULL )) )
Abc_Print( 1, "Did you mean \"%s\"?", pFileName ); Abc_Print( 1, "Did you mean \"%s\"?", pFileName );
Abc_Print( 1, "\n" ); Abc_Print( 1, "\n" );
return 0; return 0;
...@@ -128,11 +128,19 @@ int Abc_CommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -128,11 +128,19 @@ int Abc_CommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv )
fclose( pFile ); fclose( pFile );
// perform reading // perform reading
pNtk = Wlc_ReadVer( pFileName ); if ( !strcmp( Extra_FileNameExtension(pFileName), "v" ) )
pNtk = Wlc_ReadVer( pFileName );
else if ( !strcmp( Extra_FileNameExtension(pFileName), "smt" ) || !strcmp( Extra_FileNameExtension(pFileName), "smt2" ) )
pNtk = Wlc_ReadSmt( pFileName );
else
{
printf( "Abc_CommandReadWlc(): Unknown file extension.\n" );
return 0;
}
Wlc_AbcUpdateNtk( pAbc, pNtk ); Wlc_AbcUpdateNtk( pAbc, pNtk );
return 0; return 0;
usage: usage:
Abc_Print( -2, "usage: %%read_ver [-vh] <file_name>\n" ); Abc_Print( -2, "usage: %%read [-vh] <file_name>\n" );
Abc_Print( -2, "\t reads word-level design from Verilog file\n" ); Abc_Print( -2, "\t reads word-level design from Verilog file\n" );
Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", fVerbose? "yes": "no" ); Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n"); Abc_Print( -2, "\t-h : print the command usage\n");
...@@ -150,7 +158,7 @@ usage: ...@@ -150,7 +158,7 @@ usage:
SeeAlso [] SeeAlso []
******************************************************************************/ ******************************************************************************/
int Abc_CommandWriteVer( Abc_Frame_t * pAbc, int argc, char ** argv ) int Abc_CommandWriteWlc( Abc_Frame_t * pAbc, int argc, char ** argv )
{ {
Wlc_Ntk_t * pNtk = Wlc_AbcGetNtk(pAbc); Wlc_Ntk_t * pNtk = Wlc_AbcGetNtk(pAbc);
char * pFileName = NULL; char * pFileName = NULL;
...@@ -171,7 +179,7 @@ int Abc_CommandWriteVer( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -171,7 +179,7 @@ int Abc_CommandWriteVer( Abc_Frame_t * pAbc, int argc, char ** argv )
} }
if ( pNtk == NULL ) if ( pNtk == NULL )
{ {
Abc_Print( 1, "Abc_CommandWriteVer(): There is no current design.\n" ); Abc_Print( 1, "Abc_CommandWriteWlc(): There is no current design.\n" );
return 0; return 0;
} }
if ( argc == globalUtilOptind ) if ( argc == globalUtilOptind )
...@@ -186,7 +194,7 @@ int Abc_CommandWriteVer( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -186,7 +194,7 @@ int Abc_CommandWriteVer( Abc_Frame_t * pAbc, int argc, char ** argv )
Wlc_WriteVer( pNtk, pFileName ); Wlc_WriteVer( pNtk, pFileName );
return 0; return 0;
usage: usage:
Abc_Print( -2, "usage: %%write_ver [-vh]\n" ); Abc_Print( -2, "usage: %%write [-vh]\n" );
Abc_Print( -2, "\t writes the design into a file\n" ); Abc_Print( -2, "\t writes the design into a file\n" );
Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", fVerbose? "yes": "no" ); Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n"); Abc_Print( -2, "\t-h : print the command usage\n");
......
...@@ -471,7 +471,9 @@ Wlc_Ntk_t * Wlc_NtkDupDfs( Wlc_Ntk_t * p ) ...@@ -471,7 +471,9 @@ Wlc_Ntk_t * Wlc_NtkDupDfs( Wlc_Ntk_t * p )
Wlc_NtkDupDfs_rec( pNew, p, Wlc_ObjId(p, pObj), vFanins ); Wlc_NtkDupDfs_rec( pNew, p, Wlc_ObjId(p, pObj), vFanins );
Wlc_NtkForEachCo( p, pObj, i ) Wlc_NtkForEachCo( p, pObj, i )
Wlc_ObjSetCo( pNew, Wlc_ObjCopyObj(pNew, p, pObj), pObj->fIsFi ); Wlc_ObjSetCo( pNew, Wlc_ObjCopyObj(pNew, p, pObj), pObj->fIsFi );
if ( p->vInits )
pNew->vInits = Vec_IntDup( p->vInits ); pNew->vInits = Vec_IntDup( p->vInits );
if ( p->pInits )
pNew->pInits = Abc_UtilStrsav( p->pInits ); pNew->pInits = Abc_UtilStrsav( p->pInits );
Vec_IntFree( vFanins ); Vec_IntFree( vFanins );
return pNew; return pNew;
......
...@@ -547,7 +547,7 @@ static inline char * Wlc_PrsReadConstant( Wlc_Prs_t * p, char * pStr, Vec_Int_t ...@@ -547,7 +547,7 @@ static inline char * Wlc_PrsReadConstant( Wlc_Prs_t * p, char * pStr, Vec_Int_t
Vec_IntFill( vFanins, Abc_BitWordNum(nBits), 0 ); Vec_IntFill( vFanins, Abc_BitWordNum(nBits), 0 );
for ( i = 0; i < nBits; i++ ) for ( i = 0; i < nBits; i++ )
if ( pStr[2+i] == '1' ) if ( pStr[2+i] == '1' )
Abc_InfoSetBit( (unsigned *)Vec_IntArray(vFanins), i ); Abc_InfoSetBit( (unsigned *)Vec_IntArray(vFanins), nBits-1-i );
else if ( pStr[2+i] != '0' ) else if ( pStr[2+i] != '0' )
return (char *)(ABC_PTRINT_T)Wlc_PrsWriteErrorMessage( p, pStr, "Wrong digit in binary constant \"%c\".", pStr[2+i] ); return (char *)(ABC_PTRINT_T)Wlc_PrsWriteErrorMessage( p, pStr, "Wrong digit in binary constant \"%c\".", pStr[2+i] );
*pRange = nBits; *pRange = nBits;
...@@ -922,19 +922,22 @@ startword: ...@@ -922,19 +922,22 @@ startword:
Vec_Int_t * vTemp = Vec_IntStartNatural( Wlc_NtkObjNumMax(p->pNtk) ); Vec_Int_t * vTemp = Vec_IntStartNatural( Wlc_NtkObjNumMax(p->pNtk) );
Vec_IntAppend( &p->pNtk->vNameIds, vTemp ); Vec_IntAppend( &p->pNtk->vNameIds, vTemp );
Vec_IntFree( vTemp ); Vec_IntFree( vTemp );
// move FO/FI to be part of CI/CO if ( p->pNtk->vInits )
assert( (Vec_IntSize(&p->pNtk->vFfs) & 1) == 0 ); {
assert( Vec_IntSize(&p->pNtk->vFfs) == 2 * Vec_IntSize(p->pNtk->vInits) ); // move FO/FI to be part of CI/CO
Wlc_NtkForEachFf( p->pNtk, pObj, i ) assert( (Vec_IntSize(&p->pNtk->vFfs) & 1) == 0 );
if ( i & 1 ) assert( Vec_IntSize(&p->pNtk->vFfs) == 2 * Vec_IntSize(p->pNtk->vInits) );
Wlc_ObjSetCo( p->pNtk, pObj, 1 ); Wlc_NtkForEachFf( p->pNtk, pObj, i )
else if ( i & 1 )
Wlc_ObjSetCi( p->pNtk, pObj ); Wlc_ObjSetCo( p->pNtk, pObj, 1 );
Vec_IntClear( &p->pNtk->vFfs ); else
// convert init values into binary string Wlc_ObjSetCi( p->pNtk, pObj );
//Vec_IntPrint( &p->pNtk->vInits ); Vec_IntClear( &p->pNtk->vFfs );
p->pNtk->pInits = Wlc_PrsConvertInitValues( p->pNtk ); // convert init values into binary string
//printf( "%s", p->pNtk->pInits ); //Vec_IntPrint( &p->pNtk->vInits );
p->pNtk->pInits = Wlc_PrsConvertInitValues( p->pNtk );
//printf( "%s", p->pNtk->pInits );
}
break; break;
} }
// these are read as part of the interface // these are read as part of the interface
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment