88 assert( Abc_NtkIsStrash(pNtk) );
89 assert( iVar < Abc_NtkCiNum(pNtk) );
92 pObj = Abc_NtkCi( pNtk, iVar );
102 for ( pNext = pObj? pObj->
pCopy : pObj; pObj; pObj = pNext, pNext = pObj? pObj->
pCopy : pObj )
104 pFanin = Abc_ObjFanin0(pObj);
105 if ( !Abc_NodeIsTravIdCurrent(pFanin) )
107 pFanin->
pCopy = pFanin;
108 pFanin->
pData = pFanin;
110 pFanin = Abc_ObjFanin1(pObj);
111 if ( !Abc_NodeIsTravIdCurrent(pFanin) )
113 pFanin->
pCopy = pFanin;
114 pFanin->
pData = pFanin;
120 Vec_PtrFree( vNodes );
125 if ( !Abc_NodeIsTravIdCurrent(pObj) )
127 pFanin = Abc_ObjFanin0(pObj);
133 pNext = Abc_ObjNotCond( pNext, Abc_ObjFaninC0(pObj) );
134 if ( Abc_ObjRegular(pNext) == pFanin )
168 assert( Abc_NtkIsStrash(pNtk) );
169 assert( Abc_NtkLatchNum(pNtk) );
170 nLatches = Abc_NtkLatchNum(pNtk);
181 pObj->
pCopy = Abc_NtkCreatePi(pNtkNew);
191 Abc_NtkCreatePo( pNtkNew );
197 assert( Abc_NtkBoxNum(pNtk) == Abc_NtkLatchNum(pNtk) );
198 vPairs = Vec_PtrAlloc( 2*nLatches );
201 Vec_PtrPush( vPairs, Abc_ObjChild0Copy(pObj) );
202 Vec_PtrPush( vPairs, Abc_NtkPi(pNtkNew, i+nLatches) );
205 Vec_PtrFree( vPairs );
213 assert( Abc_NtkPiNum(pNtkNew) == Abc_NtkPiNum(pNtk) + 2*nLatches );
214 for ( i = Abc_NtkPiNum(pNtkNew) - 1; i >= 2*nLatches; i-- )
231 for ( i = Abc_NtkPiNum(pNtkNew) - 1; i >= 2*nLatches; i-- )
233 pObj = Abc_NtkPi( pNtkNew, i );
234 assert( Abc_ObjFanoutNum(pObj) == 0 );
242 printf(
"Abc_NtkTransRel: The network check has failed.\n" );
265 int i, nVars = Abc_NtkPiNum(pNtk)/2;
266 assert( Abc_NtkIsStrash(pNtk) );
271 for ( i = 0; i < nVars; i++ )
292 Abc_Obj_t * pMiter, * pObj, * pObj0, * pObj1;
293 int i, nVars = Abc_NtkPiNum(pNtk)/2;
294 assert( Abc_NtkIsStrash(pNtk) );
298 for ( i = 0; i < nVars; i++ )
300 pObj0 = Abc_NtkPi( pNtk, i );
301 pObj1 = Abc_NtkPi( pNtk, i+nVars );
302 pMiter = pObj0->
pCopy;
304 pObj1->
pCopy = pMiter;
310 pMiter = Abc_ObjChild0Copy( Abc_NtkPo(pNtk,0) );
329 Abc_Ntk_t * pNtkFront, * pNtkReached, * pNtkNext, * pNtkTemp;
330 int i, v, nVars, nNodesOld, nNodesNew, nNodesPrev;
336 assert( Abc_NtkIsStrash(pNtkRel) );
337 assert( Abc_NtkLatchNum(pNtkRel) == 0 );
338 assert( Abc_NtkPiNum(pNtkRel) % 2 == 0 );
349 nNodesPrev = Abc_NtkNodeNum(pNtkFront);
350 nVars = Abc_NtkPiNum(pNtkRel)/2;
351 for ( i = 0; i < nIters; i++ )
358 for ( v = 0; v < nVars; v++ )
361 if ( fSynthesis && (v % 3 == 2) )
376 if ( Abc_ObjFanin0(Abc_NtkPo(pNtkNext,0)) ==
Abc_AigConst1(pNtkNext) )
379 printf(
"Fixed point is reached!\n" );
387 pNtkReached =
Abc_NtkMiterAnd( pNtkTemp = pNtkReached, pNtkFront, 1, 0 );
390 nNodesOld = Abc_NtkNodeNum(pNtkFront);
396 nNodesNew = Abc_NtkNodeNum(pNtkFront);
400 printf(
"I = %3d : Reach = %6d Fr = %6d FrM = %6d %7.2f %% ",
401 i + 1, Abc_NtkNodeNum(pNtkReached), nNodesOld, nNodesNew, 100.0*(nNodesNew-nNodesPrev)/nNodesPrev );
402 ABC_PRT(
"T", Abc_Clock() - clk );
404 nNodesPrev = Abc_NtkNodeNum(pNtkFront);
407 fprintf( stdout,
"Reachability analysis stopped after %d iterations.\n", nIters );
410 Abc_ObjXorFaninC( Abc_NtkPo(pNtkReached,0), 0 );
413 for ( i = 2*nVars - 1; i >= nVars; i-- )
415 pObj = Abc_NtkPi( pNtkReached, i );
416 assert( Abc_ObjFanoutNum(pObj) == 0 );
423 printf(
"Abc_NtkReachability: The network check has failed.\n" );
Abc_Ntk_t * Abc_NtkIvyFraig(Abc_Ntk_t *pNtk, int nConfLimit, int fDoSparse, int fProve, int fTransfer, int fVerbose)
Abc_Ntk_t * Abc_NtkSwapVariables(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkReachability(Abc_Ntk_t *pNtkRel, int nIters, int fVerbose)
Abc_Ntk_t * Abc_NtkInitialState(Abc_Ntk_t *pNtk)
Abc_Ntk_t * Abc_NtkTransRel(Abc_Ntk_t *pNtk, int fInputs, int fVerbose)
int Abc_NtkQuantify(Abc_Ntk_t *pNtk, int fUniv, int iVar, int fVerbose)
ABC_NAMESPACE_IMPL_START void Abc_NtkSynthesize(Abc_Ntk_t **ppNtk, int fMoreEffort)
DECLARATIONS ///.
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
ABC_DLL Abc_Ntk_t * Abc_NtkAlloc(Abc_NtkType_t Type, Abc_NtkFunc_t Func, int fUseMemMan)
DECLARATIONS ///.
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL void Abc_NtkDeleteObj(Abc_Obj_t *pObj)
ABC_DLL Vec_Ptr_t * Abc_NtkDfsReverseNodes(Abc_Ntk_t *pNtk, Abc_Obj_t **ppNodes, int nNodes)
ABC_DLL void Abc_NtkCleanData(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_NtkDupObj(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCopyName)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
struct Abc_Aig_t_ Abc_Aig_t
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL char * Abc_ObjAssignName(Abc_Obj_t *pObj, char *pName, char *pSuffix)
ABC_DLL Abc_Ntk_t * Abc_NtkMiterAnd(Abc_Ntk_t *pNtk1, Abc_Ntk_t *pNtk2, int fOr, int fCompl2)
ABC_DLL int Abc_NtkRewrite(Abc_Ntk_t *pNtk, int fUpdateLevel, int fUseZeros, int fVerbose, int fVeryVerbose, int fPlaceEnable)
FUNCTION DEFINITIONS ///.
#define Abc_NtkForEachLatchOutput(pNtk, pObj, i)
ABC_DLL int Abc_AigCleanup(Abc_Aig_t *pMan)
ABC_DLL Abc_Obj_t * Abc_AigAnd(Abc_Aig_t *pMan, Abc_Obj_t *p0, Abc_Obj_t *p1)
ABC_DLL Abc_Obj_t * Abc_AigOr(Abc_Aig_t *pMan, Abc_Obj_t *p0, Abc_Obj_t *p1)
#define Abc_NtkForEachLatchInput(pNtk, pObj, i)
#define Abc_NtkForEachPi(pNtk, pPi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigMiter(Abc_Aig_t *pMan, Vec_Ptr_t *vPairs, int fImplic)
ABC_DLL void Abc_NtkCleanCopy(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Ntk_t * Abc_NtkBalance(Abc_Ntk_t *pNtk, int fDuplicate, int fSelective, int fUpdateLevel)
FUNCTION DEFINITIONS ///.
ABC_DLL void Abc_ObjPatchFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFaninOld, Abc_Obj_t *pFaninNew)
ABC_DLL int Abc_NtkRefactor(Abc_Ntk_t *pNtk, int nNodeSizeMax, int nMinSaved, int nConeSizeMax, int fUpdateLevel, int fUseZeros, int fUseDcs, int fVerbose)
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.