mirror of https://github.com/YosysHQ/abc.git
Other changes to enable new features in the mapper (bug fix).
This commit is contained in:
parent
fbb12a06f2
commit
b9dea5d674
|
|
@ -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)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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*************************************************************
|
||||
|
|
|
|||
Loading…
Reference in New Issue