diff options
| -rw-r--r-- | src/base/abc/abc.h | 1 | ||||
| -rw-r--r-- | src/base/abc/abcNetlist.c | 9 | ||||
| -rw-r--r-- | src/base/abc/abcNtk.c | 1 | ||||
| -rw-r--r-- | src/base/abci/abcIf.c | 5 | ||||
| -rw-r--r-- | src/base/io/ioWriteBlif.c | 12 | 
5 files changed, 28 insertions, 0 deletions
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*************************************************************  | 
