From b9dea5d674f406b78cfb9d1b417b5e81b4550cde Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Sat, 6 Aug 2011 01:31:07 +0800 Subject: Other changes to enable new features in the mapper (bug fix). --- src/base/abc/abc.h | 1 + src/base/abc/abcNetlist.c | 9 +++++++++ src/base/abc/abcNtk.c | 1 + src/base/abci/abcIf.c | 5 +++++ src/base/io/ioWriteBlif.c | 12 ++++++++++++ 5 files changed, 28 insertions(+) diff --git a/src/base/abc/abc.h b/src/base/abc/abc.h index 0d59d7e0..776fe452 100644 --- a/src/base/abc/abc.h +++ b/src/base/abc/abc.h @@ -213,6 +213,7 @@ struct Abc_Ntk_t_ Vec_Ptr_t * vOnehots; // names of one-hot-encoded registers Vec_Int_t * vObjPerm; // permutation saved Vec_Vec_t * vRealPos; // additional PO info + Vec_Int_t * vRealNodes; // additional PO info // node attributes Vec_Ptr_t * vAttrs; // managers of various node attributes (node functionality, global BDDs, etc) }; diff --git a/src/base/abc/abcNetlist.c b/src/base/abc/abcNetlist.c index f4245957..051b29f0 100644 --- a/src/base/abc/abcNetlist.c +++ b/src/base/abc/abcNetlist.c @@ -219,6 +219,15 @@ Abc_Ntk_t * Abc_NtkLogicToNetlist( Abc_Ntk_t * pNtk ) Abc_NtkForEachNode( pNtk, pObj, i ) Abc_ObjForEachFanin( pObj, pFanin, k ) Abc_ObjAddFanin( pObj->pCopy, pFanin->pCopy->pCopy ); + // remap the real nodess + if ( pNtk->vRealNodes ) + { + assert( pNtkNew->vRealNodes == NULL ); + pNtkNew->vRealNodes = Vec_IntAlloc( Vec_IntSize(pNtk->vRealNodes) ); + Abc_NtkForEachObjVec( pNtk->vRealNodes, pNtk, pObj, i ) + Vec_IntPush( pNtkNew->vRealNodes, Abc_ObjId(pObj->pCopy) ); + } + // duplicate EXDC if ( pNtk->pExdc ) pNtkNew->pExdc = Abc_NtkToNetlist( pNtk->pExdc ); diff --git a/src/base/abc/abcNtk.c b/src/base/abc/abcNtk.c index 4295835d..adb20761 100644 --- a/src/base/abc/abcNtk.c +++ b/src/base/abc/abcNtk.c @@ -1048,6 +1048,7 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk ) Vec_PtrFreeP( &pNtk->vLtlProperties ); Vec_IntFreeP( &pNtk->vObjPerm ); Vec_VecFreeP( &pNtk->vRealPos ); + Vec_IntFreeP( &pNtk->vRealNodes ); ABC_FREE( pNtk ); } diff --git a/src/base/abci/abcIf.c b/src/base/abci/abcIf.c index e1218343..bc38c496 100644 --- a/src/base/abci/abcIf.c +++ b/src/base/abci/abcIf.c @@ -1084,9 +1084,11 @@ void Abc_NtkRecreatePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtkNew ) return; } + assert( pNtkNew->vRealNodes == NULL ); // create drivers vDrivers = Vec_PtrStart( pNtkNew->nRealPos ); vDriverInvs = Vec_IntStart( pNtkNew->nRealPos ); + pNtkNew->vRealNodes = Vec_IntAlloc( pNtkNew->nRealPos ); for ( i = pNtkNew->nRealPos; i < Abc_NtkPoNum(pNtkNew); i++ ) { pObj = Abc_NtkPo( pNtkNew, i ); @@ -1098,6 +1100,7 @@ void Abc_NtkRecreatePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtkNew ) // printf( "%d", Abc_ObjFaninC0(pObj) ); Vec_PtrPush( vDrivers, pNode ); Vec_IntPush( vDriverInvs, Abc_ObjFaninC0(pObj) ); + Vec_IntPush( pNtkNew->vRealNodes, Abc_ObjId(pNode) ); } assert( Vec_PtrSize( vDrivers ) == Abc_NtkPoNum( pNtkNew ) ); @@ -1161,6 +1164,8 @@ void Abc_NtkRecreatePoDrivers( If_Man_t * p, Abc_Ntk_t * pNtkNew ) fCompl = Vec_IntEntry( vDriverInvs, numPo ); if ( fCompl ) pFaninNew = Abc_NtkCreateNodeInv( pNtkNew, pFaninNew ); +// else +// pFaninNew = Abc_NtkCreateNodeBuf( pNtkNew, pFaninNew ); if ( !Abc_NtkIfCheckTfi( pNtkNew, pObj, pFaninNew ) ) Abc_ObjPatchFanin( pObj, pFanin, pFaninNew ); diff --git a/src/base/io/ioWriteBlif.c b/src/base/io/ioWriteBlif.c index ca54a766..175f2641 100644 --- a/src/base/io/ioWriteBlif.c +++ b/src/base/io/ioWriteBlif.c @@ -384,6 +384,18 @@ void Io_NtkWritePos( FILE * pFile, Abc_Ntk_t * pNtk, int fWriteLatches ) NameCounter++; } } + if ( pNtk->vRealNodes ) + { + Abc_Obj_t * pObj; + fprintf( pFile, "\n\n" ); + assert( pNtk->nRealPos >= 0 ); + Abc_NtkForEachObjVec( pNtk->vRealNodes, pNtk, pObj, i ) + fprintf( pFile, "#INFO %s %s\n", + Abc_ObjName(Abc_ObjFanin0(Abc_NtkPo(pNtk, pNtk->nRealPos+i))), + Abc_ObjName(Abc_ObjFanout0(pObj)) ); + fprintf( pFile, "\n" ); + } + } /**Function************************************************************* -- cgit v1.2.3