summaryrefslogtreecommitdiffstats
path: root/src/base/wlc
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/wlc')
-rw-r--r--src/base/wlc/wlc.h1
-rw-r--r--src/base/wlc/wlcBlast.c26
-rw-r--r--src/base/wlc/wlcCom.c8
-rw-r--r--src/base/wlc/wlcReadVer.c4
4 files changed, 34 insertions, 5 deletions
diff --git a/src/base/wlc/wlc.h b/src/base/wlc/wlc.h
index 6547da13..a04e19e8 100644
--- a/src/base/wlc/wlc.h
+++ b/src/base/wlc/wlc.h
@@ -214,6 +214,7 @@ struct Wlc_BstPar_t_
int fNoCleanup;
int fCreateMiter;
int fDecMuxes;
+ int fSaveFfNames;
int fVerbose;
Vec_Int_t * vBoxIds;
};
diff --git a/src/base/wlc/wlcBlast.c b/src/base/wlc/wlcBlast.c
index 01b6e64c..9b55c008 100644
--- a/src/base/wlc/wlcBlast.c
+++ b/src/base/wlc/wlcBlast.c
@@ -2055,7 +2055,7 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
}
else
{
- pNew = Gia_ManDupZeroUndc( pTemp = pNew, p->pInits, pPar->fGiaSimple, 0 );
+ pNew = Gia_ManDupZeroUndc( pTemp = pNew, p->pInits, pPar->fSaveFfNames ? 1+Gia_ManRegNum(pNew) : 0, pPar->fGiaSimple, 0 );
Gia_ManDupRemapLiterals( vBits, pTemp );
Gia_ManStop( pTemp );
}
@@ -2121,10 +2121,13 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
if ( p->pInits[i] == 'x' || p->pInits[i] == 'X' )
{
char Buffer[100];
- sprintf( Buffer, "%s%d", "init", i );
+ sprintf( Buffer, "_%s_abc_%d_", "init", i );
Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) );
fAdded = 1;
}
+ if ( pPar->fSaveFfNames )
+ for ( i = 0; i < 1+Length; i++ )
+ Vec_PtrPush( pNew->vNamesIn, NULL );
}
Wlc_NtkForEachCi( p, pObj, i )
if ( !Wlc_ObjIsPi(pObj) )
@@ -2173,6 +2176,25 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) );
}
}
+ if ( p->pInits && pPar->fSaveFfNames )
+ {
+ char * pName;
+ int Length = (int)strlen(p->pInits);
+ int NameStart = Vec_PtrSize(pNew->vNamesIn)-Length;
+ int NullStart = Vec_PtrSize(pNew->vNamesIn)-2*Length;
+ int SepStart = Vec_PtrSize(pNew->vNamesIn)-2*Length-1;
+ assert( Vec_PtrEntry(pNew->vNamesIn, SepStart) == NULL );
+ Vec_PtrWriteEntry( pNew->vNamesIn, SepStart, Abc_UtilStrsav("_abc_190121_abc_") );
+ for ( i = 0; i < Length; i++ )
+ {
+ char Buffer[100];
+ sprintf( Buffer, "%c%s", p->pInits[i], Vec_PtrEntry(pNew->vNamesIn, NameStart+i) );
+ assert( Vec_PtrEntry(pNew->vNamesIn, NullStart+i) == NULL );
+ Vec_PtrWriteEntry( pNew->vNamesIn, NullStart+i, Abc_UtilStrsav(Buffer) );
+ }
+ Vec_PtrForEachEntry( char *, pNew->vNamesIn, pName, i )
+ assert( pName != NULL );
+ }
if ( p->pInits && fAdded )
Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav("abc_reset_flop") );
if ( pPar->vBoxIds )
diff --git a/src/base/wlc/wlcCom.c b/src/base/wlc/wlcCom.c
index 5e69000f..3031f331 100644
--- a/src/base/wlc/wlcCom.c
+++ b/src/base/wlc/wlcCom.c
@@ -978,7 +978,7 @@ int Abc_CommandBlast( Abc_Frame_t * pAbc, int argc, char ** argv )
Wlc_BstParDefault( pPar );
pPar->nOutputRange = 2;
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "ORAMcombadstnivh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "ORAMcombadstnizvh" ) ) != EOF )
{
switch ( c )
{
@@ -1057,6 +1057,9 @@ int Abc_CommandBlast( Abc_Frame_t * pAbc, int argc, char ** argv )
case 'i':
fPrintInputInfo ^= 1;
break;
+ case 'z':
+ pPar->fSaveFfNames ^= 1;
+ break;
case 'v':
pPar->fVerbose ^= 1;
break;
@@ -1125,7 +1128,7 @@ int Abc_CommandBlast( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_FrameUpdateGia( pAbc, pNew );
return 0;
usage:
- Abc_Print( -2, "usage: %%blast [-ORAM num] [-combadstnivh]\n" );
+ Abc_Print( -2, "usage: %%blast [-ORAM num] [-combadstnizvh]\n" );
Abc_Print( -2, "\t performs bit-blasting of the word-level design\n" );
Abc_Print( -2, "\t-O num : zero-based index of the first word-level PO to bit-blast [default = %d]\n", pPar->iOutput );
Abc_Print( -2, "\t-R num : the total number of word-level POs to bit-blast [default = %d]\n", pPar->nOutputRange );
@@ -1141,6 +1144,7 @@ usage:
Abc_Print( -2, "\t-t : toggle creating regular multi-output miter [default = %s]\n", fMiter? "yes": "no" );
Abc_Print( -2, "\t-n : toggle dumping signal names into a text file [default = %s]\n", fDumpNames? "yes": "no" );
Abc_Print( -2, "\t-i : toggle to print input names after blasting [default = %s]\n", fPrintInputInfo ? "yes": "no" );
+ Abc_Print( -2, "\t-z : toggle saving flop names after blasting [default = %s]\n", pPar->fSaveFfNames ? "yes": "no" );
Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", pPar->fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
return 1;
diff --git a/src/base/wlc/wlcReadVer.c b/src/base/wlc/wlcReadVer.c
index db2cf3b2..9c40e71e 100644
--- a/src/base/wlc/wlcReadVer.c
+++ b/src/base/wlc/wlcReadVer.c
@@ -457,7 +457,7 @@ char * Wlc_PrsConvertInitValues( Wlc_Ntk_t * p )
pObj = Wlc_NtkObj( p, Wlc_ObjFaninId0(pObj) );
pInits = (pObj->Type == WLC_OBJ_CONST && !pObj->fXConst) ? Wlc_ObjConstValue(pObj) : NULL;
for ( k = 0; k < Abc_MinInt(Value, Wlc_ObjRange(pObj)); k++ )
- Vec_StrPush( vStr, (char)(pInits ? '0' + Abc_InfoHasBit((unsigned *)pInits, k) : 'X') );
+ Vec_StrPush( vStr, (char)(pInits ? '0' + Abc_InfoHasBit((unsigned *)pInits, k) : 'x') );
// extend values with zero, in case the init value signal has different range compared to constant used
for ( ; k < Value; k++ )
Vec_StrPush( vStr, '0' );
@@ -588,6 +588,8 @@ static inline char * Wlc_PrsReadConstant( Wlc_Prs_t * p, char * pStr, Vec_Int_t
if ( pStr[1] != 'h' )
return (char *)(ABC_PTRINT_T)Wlc_PrsWriteErrorMessage( p, pStr, "Expecting hexadecimal constant and not \"%c\".", pStr[1] );
*pXValue = (pStr[2] == 'x' || pStr[2] == 'X');
+ if ( *pXValue == 'X' )
+ *pXValue = 'x';
Vec_IntFill( vFanins, Abc_BitWordNum(nBits), 0 );
nDigits = Abc_TtReadHexNumber( (word *)Vec_IntArray(vFanins), pStr+2 );
if ( nDigits != (nBits + 3)/4 )