diff options
Diffstat (limited to 'src/base/wlc')
-rw-r--r-- | src/base/wlc/wlcBlast.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/base/wlc/wlcBlast.c b/src/base/wlc/wlcBlast.c index 01b6e64c..1c757bd1 100644 --- a/src/base/wlc/wlcBlast.c +++ b/src/base/wlc/wlcBlast.c @@ -1150,6 +1150,7 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn ) int i, k, b, iFanin, iLit, nAndPrev, * pFans0, * pFans1, * pFans2, * pFans3; int nFFins = 0, nFFouts = 0, curPi = 0, curPo = 0, nFf2Regs = 0; int nBitCis = 0, nBitCos = 0, fAdded = 0; + int iFirstAddPi = -1; // remembers the first additional PI that stands for DC-flop output Wlc_BstPar_t Par, * pPar = &Par; Wlc_BstParDefault( pPar ); pPar = pParIn ? pParIn : pPar; @@ -2122,9 +2123,14 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn ) { char Buffer[100]; sprintf( Buffer, "%s%d", "init", i ); - Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) ); + //Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) ); + // save NULL at this time - to be overwritten later + //printf( "Adding NULL in position %d\n", Vec_PtrSize(pNew->vNamesIn) ); + Vec_PtrPush( pNew->vNamesIn, NULL ); fAdded = 1; } + // remember the place in the array where the first real flop is + iFirstAddPi = Vec_PtrSize(pNew->vNamesIn); } Wlc_NtkForEachCi( p, pObj, i ) if ( !Wlc_ObjIsPi(pObj) ) @@ -2141,6 +2147,7 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn ) Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) ); } } +/* Wlc_NtkForEachFf2( p, pObj, i ) { char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj)); @@ -2159,6 +2166,7 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn ) Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) ); } } +*/ Wlc_NtkForEachFf2( p, pObj, i ) { char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj)); @@ -2191,6 +2199,21 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn ) } } assert( Vec_PtrSize(pNew->vNamesIn) == Gia_ManCiNum(pNew) ); + // finish creating names of additional primary inputs + if ( p->pInits ) + { + int Length = strlen(p->pInits); + assert( iFirstAddPi >= 0 ); + for ( i = 0; i < Length; i++ ) + if ( p->pInits[i] == 'x' || p->pInits[i] == 'X' ) + { + char Buffer[1000]; + sprintf( Buffer, "%s_init", (char *)Vec_PtrEntry(pNew->vNamesIn, iFirstAddPi+i) ); + assert( Vec_PtrEntry(pNew->vNamesIn, iFirstAddPi-Length+i) == NULL ); + Vec_PtrWriteEntry( pNew->vNamesIn, iFirstAddPi-Length+i, Abc_UtilStrsav(Buffer) ); + //printf( "Replacing NULL in position %d\n", iFirstAddPi-Length+i ); + } + } // create output names pNew->vNamesOut = Vec_PtrAlloc( Gia_ManCoNum(pNew) ); Wlc_NtkForEachFf2( p, pObj, i ) |