mirror of https://github.com/YosysHQ/abc.git
Bug fix in 'dump_equiv'.
This commit is contained in:
parent
3c2c19ce51
commit
4c6444e34a
|
|
@ -59,6 +59,48 @@ void Abc_NtkComputeGiaEquivs( Gia_Man_t * pGia, int nConfs, int fVerbose )
|
||||||
Gia_ManStop( pTemp );
|
Gia_ManStop( pTemp );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**Function*************************************************************
|
||||||
|
|
||||||
|
Synopsis [Converts AIG from HOP to GIA.]
|
||||||
|
|
||||||
|
Description []
|
||||||
|
|
||||||
|
SideEffects []
|
||||||
|
|
||||||
|
SeeAlso []
|
||||||
|
|
||||||
|
***********************************************************************/
|
||||||
|
void Abc_ConvertHopToGia_rec1( Gia_Man_t * p, Hop_Obj_t * pObj )
|
||||||
|
{
|
||||||
|
assert( !Hop_IsComplement(pObj) );
|
||||||
|
if ( !Hop_ObjIsNode(pObj) || Hop_ObjIsMarkA(pObj) )
|
||||||
|
return;
|
||||||
|
Abc_ConvertHopToGia_rec1( p, Hop_ObjFanin0(pObj) );
|
||||||
|
Abc_ConvertHopToGia_rec1( p, Hop_ObjFanin1(pObj) );
|
||||||
|
pObj->iData = Gia_ManHashAnd( p, Hop_ObjChild0CopyI(pObj), Hop_ObjChild1CopyI(pObj) );
|
||||||
|
assert( !Hop_ObjIsMarkA(pObj) ); // loop detection
|
||||||
|
Hop_ObjSetMarkA( pObj );
|
||||||
|
}
|
||||||
|
void Abc_ConvertHopToGia_rec2( Hop_Obj_t * pObj )
|
||||||
|
{
|
||||||
|
assert( !Hop_IsComplement(pObj) );
|
||||||
|
if ( !Hop_ObjIsNode(pObj) || !Hop_ObjIsMarkA(pObj) )
|
||||||
|
return;
|
||||||
|
Abc_ConvertHopToGia_rec2( Hop_ObjFanin0(pObj) );
|
||||||
|
Abc_ConvertHopToGia_rec2( Hop_ObjFanin1(pObj) );
|
||||||
|
assert( Hop_ObjIsMarkA(pObj) ); // loop detection
|
||||||
|
Hop_ObjClearMarkA( pObj );
|
||||||
|
}
|
||||||
|
int Abc_ConvertHopToGia( Gia_Man_t * p, Hop_Obj_t * pRoot )
|
||||||
|
{
|
||||||
|
assert( !Hop_IsComplement(pRoot) );
|
||||||
|
if ( Hop_ObjIsConst1( pRoot ) )
|
||||||
|
return 1;
|
||||||
|
Abc_ConvertHopToGia_rec1( p, pRoot );
|
||||||
|
Abc_ConvertHopToGia_rec2( pRoot );
|
||||||
|
return pRoot->iData;
|
||||||
|
}
|
||||||
|
|
||||||
/**Function*************************************************************
|
/**Function*************************************************************
|
||||||
|
|
||||||
Synopsis [Add logic from pNtk to the AIG manager p.]
|
Synopsis [Add logic from pNtk to the AIG manager p.]
|
||||||
|
|
@ -72,7 +114,6 @@ void Abc_NtkComputeGiaEquivs( Gia_Man_t * pGia, int nConfs, int fVerbose )
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
void Abc_NtkAigToGiaOne( Gia_Man_t * p, Abc_Ntk_t * pNtk )
|
void Abc_NtkAigToGiaOne( Gia_Man_t * p, Abc_Ntk_t * pNtk )
|
||||||
{
|
{
|
||||||
extern int Abc_ConvertAigToGia( Gia_Man_t * p, Hop_Obj_t * pRoot );
|
|
||||||
Hop_Man_t * pHopMan;
|
Hop_Man_t * pHopMan;
|
||||||
Hop_Obj_t * pHopObj;
|
Hop_Obj_t * pHopObj;
|
||||||
Vec_Ptr_t * vNodes;
|
Vec_Ptr_t * vNodes;
|
||||||
|
|
@ -86,7 +127,7 @@ void Abc_NtkAigToGiaOne( Gia_Man_t * p, Abc_Ntk_t * pNtk )
|
||||||
Abc_NtkForEachCi( pNtk, pNode, i )
|
Abc_NtkForEachCi( pNtk, pNode, i )
|
||||||
pNode->iTemp = Gia_ManCiLit(p, i);
|
pNode->iTemp = Gia_ManCiLit(p, i);
|
||||||
// iterate through nodes used in the mapping
|
// iterate through nodes used in the mapping
|
||||||
vNodes = Abc_NtkDfs( pNtk, 0 );
|
vNodes = Abc_NtkDfs( pNtk, 1 );
|
||||||
Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pNode, i )
|
Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pNode, i )
|
||||||
{
|
{
|
||||||
Abc_ObjForEachFanin( pNode, pFanin, k )
|
Abc_ObjForEachFanin( pNode, pFanin, k )
|
||||||
|
|
@ -94,7 +135,7 @@ void Abc_NtkAigToGiaOne( Gia_Man_t * p, Abc_Ntk_t * pNtk )
|
||||||
pHopObj = Hop_Regular( (Hop_Obj_t *)pNode->pData );
|
pHopObj = Hop_Regular( (Hop_Obj_t *)pNode->pData );
|
||||||
assert( Abc_ObjFaninNum(pNode) <= Hop_ManPiNum(pHopMan) );
|
assert( Abc_ObjFaninNum(pNode) <= Hop_ManPiNum(pHopMan) );
|
||||||
if ( Hop_DagSize(pHopObj) > 0 )
|
if ( Hop_DagSize(pHopObj) > 0 )
|
||||||
Abc_ConvertAigToGia( p, pHopObj );
|
Abc_ConvertHopToGia( p, pHopObj );
|
||||||
pNode->iTemp = Abc_LitNotCond( pHopObj->iData, Hop_IsComplement( (Hop_Obj_t *)pNode->pData ) );
|
pNode->iTemp = Abc_LitNotCond( pHopObj->iData, Hop_IsComplement( (Hop_Obj_t *)pNode->pData ) );
|
||||||
}
|
}
|
||||||
Vec_PtrFree( vNodes );
|
Vec_PtrFree( vNodes );
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue