48 int i, k, iBox, iTerm1, nTerms;
52 if ( Nwk_ObjIsNode(pObj) || Nwk_ObjIsCo(pObj) )
56 if ( !Nwk_ObjIsTravIdCurrent(pNext) )
58 printf(
"Node %d has fanin %d that is not in a topological order.\n", pObj->Id, pNext->Id );
63 else if ( Nwk_ObjIsCi(pObj) )
72 for ( k = 0; k < nTerms; k++ )
74 pNext = Nwk_ManCo( pNtk, iTerm1 + k );
75 if ( !Nwk_ObjIsTravIdCurrent(pNext) )
77 printf(
"Box %d has input %d that is not in a topological order.\n", iBox, pNext->Id );
86 Nwk_ObjSetTravIdCurrent( pObj );
106 int i, k, LevelMax, Level;
110 Nwk_ObjSetLevel( pObj, 0 );
118 if ( Nwk_ObjIsCi(pObj) )
121 Nwk_ObjSetLevel( pObj, Level );
123 else if ( Nwk_ObjIsCo(pObj) )
125 Level = Nwk_ObjLevel( Nwk_ObjFanin0(pObj) );
128 Nwk_ObjSetLevel( pObj, Level );
129 if ( LevelMax < Nwk_ObjLevel(pObj) )
130 LevelMax = Nwk_ObjLevel(pObj);
132 else if ( Nwk_ObjIsNode(pObj) )
136 if ( Level < Nwk_ObjLevel(pFanin) )
137 Level = Nwk_ObjLevel(pFanin);
138 Nwk_ObjSetLevel( pObj, Level + 1 );
162 Tim_Man_t * pManTime = pObj->pMan->pManTime;
164 int i, iBox, iTerm1, nTerms, LevelMax = 0;
165 if ( Nwk_ObjIsTravIdCurrent( pObj ) )
167 Nwk_ObjSetTravIdCurrent( pObj );
168 if ( Nwk_ObjIsCi(pObj) )
177 for ( i = 0; i < nTerms; i++ )
179 pNext = Nwk_ManCo(pObj->pMan, iTerm1 + i);
181 if ( LevelMax < Nwk_ObjLevel(pNext) )
182 LevelMax = Nwk_ObjLevel(pNext);
188 else if ( Nwk_ObjIsNode(pObj) || Nwk_ObjIsCo(pObj) )
193 if ( LevelMax < Nwk_ObjLevel(pNext) )
194 LevelMax = Nwk_ObjLevel(pNext);
196 if ( Nwk_ObjIsNode(pObj) && Nwk_ObjFaninNum(pObj) > 0 )
201 Nwk_ObjSetLevel( pObj, LevelMax );
220 Nwk_ObjSetLevel( pObj, 0 );
225 if ( LevelMax < Nwk_ObjLevel(pObj) )
226 LevelMax = Nwk_ObjLevel(pObj);
231 if ( LevelMax < Nwk_ObjLevel(pObj) )
232 LevelMax = Nwk_ObjLevel(pObj);
253 if ( LevelMax < Nwk_ObjLevel(pObj) )
254 LevelMax = Nwk_ObjLevel(pObj);
276 vLevels = Vec_VecStart( nLevels + 1 );
279 assert( Nwk_ObjLevel(pObj) <= nLevels );
280 Vec_VecPush( vLevels, Nwk_ObjLevel(pObj), pObj );
302 if ( Nwk_ObjIsTravIdCurrent( pObj ) )
304 Nwk_ObjSetTravIdCurrent( pObj );
307 Vec_PtrPush( vNodes, pObj );
327 vNodes = Vec_PtrAlloc( 100 );
330 if ( Nwk_ObjIsCi(pObj) )
332 Nwk_ObjSetTravIdCurrent( pObj );
333 Vec_PtrPush( vNodes, pObj );
335 else if ( Nwk_ObjIsCo(pObj) )
356 if ( Nwk_ObjIsTravIdCurrent( pObj ) )
358 Nwk_ObjSetTravIdCurrent( pObj );
359 if ( Nwk_ObjIsCi(pObj) )
361 assert( Nwk_ObjIsNode(pObj) );
364 Vec_PtrPush( vNodes, pObj );
385 vNodes = Vec_PtrAlloc( 100 );
387 for ( i = 0; i < nNodes; i++ )
388 if ( Nwk_ObjIsCo(ppNodes[i]) )
409 int i, iBox, iTerm1, nTerms;
410 if ( Nwk_ObjIsTravIdCurrent( pObj ) )
412 Nwk_ObjSetTravIdCurrent( pObj );
413 if ( Nwk_ObjIsCo(pObj) )
415 if ( pObj->pMan->pManTime )
422 for ( i = 0; i < nTerms; i++ )
424 pNext = Nwk_ManCi(pObj->pMan, iTerm1 + i);
430 else if ( Nwk_ObjIsNode(pObj) || Nwk_ObjIsCi(pObj) )
437 Vec_PtrPush( vNodes, pObj );
457 vNodes = Vec_PtrAlloc( 100 );
462 if ( Nwk_ObjFaninNum(pObj) == 0 && !Nwk_ObjIsTravIdCurrent(pObj) )
463 Vec_PtrPush( vNodes, pObj );
483 if ( Nwk_ObjIsTravIdCurrent( pNode ) )
486 Nwk_ObjSetTravIdCurrent( pNode );
488 if ( Nwk_ObjIsCi(pNode) )
490 Vec_PtrPush( vNodes, pNode );
493 assert( Nwk_ObjIsNode( pNode ) );
517 vNodes = Vec_PtrAlloc( 100 );
519 for ( i = 0; i < nNodes; i++ )
520 if ( Nwk_ObjIsCo(ppNodes[i]) )
542 int i, nTotalSupps = 0;
546 nTotalSupps += Vec_PtrSize( vSupp );
547 Vec_PtrFree( vSupp );
549 printf(
"Total supports = %d.\n", nTotalSupps );
568 if ( Nwk_ObjIsCi(pNode) )
572 assert( pFanin->nFanouts > 0 );
573 if ( --pFanin->nFanouts == 0 )
594 if ( Nwk_ObjIsCi(pNode) )
598 if ( pFanin->nFanouts++ == 0 )
620 if ( !fTopmost && (Nwk_ObjIsCi(pNode) || pNode->nFanouts > 0) )
623 if ( Nwk_ObjIsTravIdCurrent(pNode) )
625 Nwk_ObjSetTravIdCurrent(pNode);
654 assert( Count1 == Count2 );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
struct Nwk_Man_t_ Nwk_Man_t
int Nwk_ObjRef_rec(Nwk_Obj_t *pNode)
ABC_NAMESPACE_IMPL_START int Nwk_ManVerifyTopoOrder(Nwk_Man_t *pNtk)
DECLARATIONS ///.
Vec_Ptr_t * Nwk_ManDfsReverse(Nwk_Man_t *pNtk)
int Nwk_ObjMffcLabel(Nwk_Obj_t *pNode)
void Nwk_ManSupportNodes_rec(Nwk_Obj_t *pNode, Vec_Ptr_t *vNodes)
Vec_Vec_t * Nwk_ManLevelize(Nwk_Man_t *pNtk)
int Nwk_ManLevel(Nwk_Man_t *pNtk)
void Nwk_ManLevel_rec(Nwk_Obj_t *pObj)
void Nwk_ManSupportSum(Nwk_Man_t *pNtk)
Vec_Ptr_t * Nwk_ManSupportNodes(Nwk_Man_t *pNtk, Nwk_Obj_t **ppNodes, int nNodes)
void Nwk_ManDfs_rec(Nwk_Obj_t *pObj, Vec_Ptr_t *vNodes)
void Nwk_ObjMffcLabel_rec(Nwk_Obj_t *pNode, int fTopmost)
Vec_Ptr_t * Nwk_ManDfs(Nwk_Man_t *pNtk)
int Nwk_ObjDeref_rec(Nwk_Obj_t *pNode)
void Nwk_ManDfsNodes_rec(Nwk_Obj_t *pObj, Vec_Ptr_t *vNodes)
int Nwk_ManLevelBackup(Nwk_Man_t *pNtk)
void Nwk_ManDfsReverse_rec(Nwk_Obj_t *pObj, Vec_Ptr_t *vNodes)
Vec_Ptr_t * Nwk_ManDfsNodes(Nwk_Man_t *pNtk, Nwk_Obj_t **ppNodes, int nNodes)
int Nwk_ManLevelMax(Nwk_Man_t *pNtk)
#define Nwk_ManForEachPo(p, pObj, i)
ABC_DLL void Nwk_ManIncrementTravId(Nwk_Man_t *pNtk)
DECLARATIONS ///.
#define Nwk_ManForEachNode(p, pObj, i)
ABC_DLL int Nwk_ManVerifyLevel(Nwk_Man_t *pNtk)
#define Nwk_ManForEachCi(p, pObj, i)
ITERATORS ///.
typedefABC_NAMESPACE_HEADER_START struct Nwk_Obj_t_ Nwk_Obj_t
INCLUDES ///.
#define Nwk_ManForEachObj(p, pObj, i)
#define Nwk_ObjForEachFanout(pObj, pFanout, i)
#define Nwk_ManForEachPi(p, pObj, i)
#define Nwk_ManForEachCo(p, pObj, i)
#define Nwk_ObjForEachFanin(pObj, pFanin, i)
int Tim_ManBoxOutputNum(Tim_Man_t *p, int iBox)
void Tim_ManSetCoArrival(Tim_Man_t *p, int iCo, float Delay)
typedefABC_NAMESPACE_HEADER_START struct Tim_Man_t_ Tim_Man_t
INCLUDES ///.
void Tim_ManIncrementTravId(Tim_Man_t *p)
DECLARATIONS ///.
int Tim_ManBoxForCi(Tim_Man_t *p, int iCo)
int Tim_ManBoxForCo(Tim_Man_t *p, int iCi)
void Tim_ManStop(Tim_Man_t *p)
int Tim_ManBoxInputFirst(Tim_Man_t *p, int iBox)
int Tim_ManBoxInputNum(Tim_Man_t *p, int iBox)
Tim_Man_t * Tim_ManDup(Tim_Man_t *p, int fUnitDelay)
float Tim_ManGetCiArrival(Tim_Man_t *p, int iCi)
int Tim_ManBoxOutputFirst(Tim_Man_t *p, int iBox)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.