49 if ( Abc_NodeIsTravIdCurrent( pObj ) )
51 Abc_NodeSetTravIdCurrent( pObj );
52 if ( Abc_ObjIsCo(pObj) )
54 Vec_IntPush( vCos, Abc_ObjId(pObj) );
57 assert( Abc_ObjIsNode(pObj) );
60 if ( Abc_ObjFaninNum(pObj) > 0 )
61 Vec_IntPush( vNodes, Abc_ObjId(pObj) );
68 assert( Vec_IntSize(vPath) > 0 );
69 vCos = Vec_IntAlloc( 100 );
70 vNodes = Vec_IntAlloc( 100 );
72 Abc_NtkIncrementTravId(
p );
75 if ( Abc_ObjIsNode(pFanin) )
78 Vec_IntReverseOrder( vNodes );
82 Vec_IntAppend( vNodes, vCos );
100 float fMaxArr = Abc_SclReadMaxDelay(
p ) * (100.0 - Window) / 100.0;
104 vPivots = Vec_IntAlloc( 100 );
106 if ( Abc_SclObjTimeMax(
p, pObj) >= fMaxArr )
107 Vec_IntPush( vPivots, Abc_ObjId(pObj) );
108 assert( Vec_IntSize(vPivots) > 0 );
126 float fArrMax, fSlackFan;
128 if ( Abc_ObjIsCi(pObj) )
130 if ( Abc_NodeIsTravIdCurrent( pObj ) )
132 Abc_NodeSetTravIdCurrent( pObj );
133 assert( Abc_ObjIsNode(pObj) );
137 fArrMax = Abc_SclObjGetSlack(
p, pObj,
p->MaxDelay);
139 fArrMax = Abc_SclGetMaxDelayNodeFanins(
p, pObj );
141 fArrMax = Abc_MaxFloat( fArrMax, 0 );
145 if ( Abc_ObjIsCi(pNext) || Abc_ObjFaninNum(pNext) == 0 )
147 assert( Abc_ObjIsNode(pNext) );
150 fSlackFan = fSlack - (Abc_SclObjGetSlack(
p, pNext,
p->MaxDelay) - fArrMax);
152 fSlackFan = fSlack - (fArrMax - Abc_SclObjTimeMax(
p, pNext));
153 if ( fSlackFan >= 0 )
156 if ( Abc_ObjFaninNum(pObj) > 0 )
157 Vec_IntPush( vPath, Abc_ObjId(pObj) );
161 float fMaxArr = Abc_SclReadMaxDelay(
p );
162 float fSlackMax = fMaxArr * Window / 100.0;
166 Abc_NtkIncrementTravId(
p->pNtk );
169 float fSlackThis = fSlackMax - (fMaxArr - Abc_SclObjTimeMax(
p, pObj));
170 if ( fSlackThis >= 0 )
193 RetValue = Vec_IntSize(vPathNodes);
196 Vec_IntFree( vPathPos );
197 Vec_IntFree( vPathNodes );
220 assert( Abc_ObjIsNode(pPivot) );
223 Vec_IntClear( vNodes );
226 if ( Abc_ObjIsCi(pNext) || Abc_ObjFaninNum(pNext) > 0 )
227 Vec_IntPush( vNodes, Abc_ObjId(pNext) );
228 Vec_IntPush( vNodes, Abc_ObjId(pPivot) );
230 Vec_IntPush( vNodes, Abc_ObjId(pExtra) );
232 if ( Abc_ObjIsNode(pNext) && pNext->
fMarkA )
234 Vec_IntPush( vNodes, Abc_ObjId(pNext) );
236 if ( Abc_ObjIsNode(pNext2) && pNext2->
fMarkA )
237 Vec_IntPush( vNodes, Abc_ObjId(pNext2) );
239 Vec_IntUniqify( vNodes );
247 Vec_IntClear( vEvals );
254 Vec_IntPush( vEvals, Abc_ObjId(pObj) );
257 assert( Vec_IntSize(vEvals) > 0 );
277 SC_Cell * pCellOld, * pCellNew;
278 float dGain, dGainBest;
279 int k, gateBest, NoChange = 0;
281 pCellOld = Abc_SclObjCell( pObj );
282 Abc_SclConeStore(
p, vRecalcs );
283 Abc_SclEvalStore(
p, vEvals );
284 Abc_SclLoadStore(
p, pObj );
287 dGainBest = -DelayGap;
290 if ( pCellNew == pCellOld )
295 Abc_SclObjSetCell( pObj, pCellNew );
300 Abc_SclObjSetCell( pObj, pCellOld );
301 Abc_SclLoadRestore(
p, pObj );
303 dGain = Abc_SclEvalPerform(
p, vEvals );
304 if ( dGainBest < dGain )
307 gateBest = pCellNew->
Id;
319 Abc_SclObjSetCell( pObj, pCellOld );
320 Abc_SclConeRestore(
p, vRecalcs );
321 *pGainBest = dGainBest;
338 SC_Cell * pCellOld, * pCellNew;
341 Abc_Obj_t * pBuf, * pFanin, * pFanout, * pExtra;
342 int i, j, iNode, gateBest, gateBest2, fanBest, Counter = 0;
343 float dGainBest, dGainBest2;
346 vFanouts = Vec_PtrAlloc( 100 );
347 vRecalcs = Vec_IntAlloc( 100 );
348 vEvals = Vec_IntAlloc( 100 );
349 Vec_QueClear(
p->vNodeByGain );
353 if ( Abc_ObjFaninNum(pBuf) != 1 )
355 pFanin = Abc_ObjFanin0(pBuf);
356 if ( !Abc_ObjIsNode(pFanin) )
359 if (
p->pNtk->vPhases == NULL )
365 pFanin = Abc_ObjFanin0(pFanin);
366 if ( !Abc_ObjIsNode(pFanin) )
375 assert( Vec_IntSize(vEvals) > 0 );
384 if ( Abc_ObjIsCo(pFanout) )
396 Abc_SclLoadStore3(
p, pBuf );
402 Abc_SclLoadRestore3(
p, pBuf );
404 if ( gateBest == -1 )
407 if ( dGainBest2 < dGainBest )
409 dGainBest2 = dGainBest;
410 gateBest2 = gateBest;
411 fanBest = Abc_ObjId(pFanout);
415 if ( gateBest2 >= 0 )
417 assert( dGainBest2 > 0.0 );
418 Vec_FltWriteEntry(
p->vNode2Gain, Abc_ObjId(pBuf), dGainBest2 );
419 Vec_IntWriteEntry(
p->vNode2Gate, Abc_ObjId(pBuf), gateBest2 );
420 Vec_QuePush(
p->vNodeByGain, Abc_ObjId(pBuf) );
421 Vec_IntWriteEntry(
p->vBestFans, Abc_ObjId(pBuf), fanBest );
426 Vec_PtrFree( vFanouts );
427 Vec_IntFree( vRecalcs );
428 Vec_IntFree( vEvals );
429 if ( Vec_QueSize(
p->vNodeByGain) == 0 )
437 vFanouts = Vec_PtrAlloc( 100 );
438 while ( Vec_QueSize(
p->vNodeByGain) )
440 iNode = Vec_QuePop(
p->vNodeByGain);
441 pFanout = Abc_NtkObj(
p->pNtk, Vec_IntEntry(
p->vBestFans, iNode) );
442 pBuf = Abc_NtkObj(
p->pNtk, iNode );
443 pFanin = Abc_ObjFanin0(pBuf);
446 if (
p->pNtk->vPhases == NULL )
456 pFanin = Abc_ObjFanin0(pFanin);
457 if ( !Abc_ObjIsNode(pFanin) )
469 Vec_PtrPush( vFanouts, pFanout );
470 Vec_PtrPush( vFanouts, pBuf );
471 Vec_PtrPush( vFanouts, pFanin );
473 if ( dGainBest2 == -1 )
474 dGainBest2 = Vec_FltEntry(
p->vNode2Gain, iNode);
486 Vec_IntPush(
p->vUpdates2, Abc_ObjId(pFanout) );
487 Vec_IntPush(
p->vUpdates2, Abc_ObjId(pFanin) );
488 Vec_IntPush(
p->vUpdates2, Abc_ObjId(pBuf) );
490 pCellOld = Abc_SclObjCell( pFanin );
491 pCellNew = SC_LibCell(
p->pLib, Vec_IntEntry(
p->vNode2Gate, iNode) );
492 p->SumArea += pCellNew->
area - pCellOld->
area;
493 Abc_SclObjSetCell( pFanin, pCellNew );
496 Vec_IntPush(
p->vUpdates, Abc_ObjId(pFanin) );
497 Vec_IntPush(
p->vUpdates, pCellNew->
Id );
502 Vec_IntWriteEntry(
p->vNodeIter, Abc_ObjId(pFanout), -1 );
503 Vec_IntWriteEntry(
p->vNodeIter, Abc_ObjId(pBuf), -1 );
504 Vec_IntWriteEntry(
p->vNodeIter, Abc_ObjId(pFanin), -1 );
511 printf(
"Node %6d Redir fanout %6d to fanin %6d. Gain = %7.1f ps. ",
512 Abc_ObjId(pBuf), Abc_ObjId(pFanout), Abc_ObjId(pFanin), Vec_FltEntry(
p->vNode2Gain, iNode) );
513 printf(
"Gate %12s (%2d/%2d) -> %12s (%2d/%2d) \n",
531 Vec_PtrFree( vFanouts );
566 Vec_PtrPush( vNodes, pObj );
598 SC_Cell * pCellOld, * pCellNew;
602 float dGainBest, dGainBest2;
603 int i, gateBest, Limit, Counter, iIterLast;
606 vRecalcs = Vec_IntAlloc( 100 );
607 vEvals = Vec_IntAlloc( 100 );
608 Vec_QueClear(
p->vNodeByGain );
612 iIterLast = Vec_IntEntry(
p->vNodeIter, Abc_ObjId(pObj));
613 if ( iIterLast >= 0 && iIterLast + 5 > iIter )
617 assert( Vec_IntSize(vEvals) > 0 );
623 assert( dGainBest > 0.0 );
624 Vec_FltWriteEntry(
p->vNode2Gain, Abc_ObjId(pObj), dGainBest );
625 Vec_IntWriteEntry(
p->vNode2Gate, Abc_ObjId(pObj), gateBest );
626 Vec_QuePush(
p->vNodeByGain, Abc_ObjId(pObj) );
629 Vec_IntFree( vRecalcs );
630 Vec_IntFree( vEvals );
631 if ( Vec_QueSize(
p->vNodeByGain) == 0 )
661 Limit = Abc_MinInt( Vec_QueSize(
p->vNodeByGain), Abc_MaxInt((
int)(0.01 * Ratio * Vec_IntSize(vPathNodes)), 1) );
664 vFanouts = Vec_PtrAlloc( 100 );
665 while ( Vec_QueSize(
p->vNodeByGain) )
667 int iNode = Vec_QuePop(
p->vNodeByGain);
668 Abc_Obj_t * pObj = Abc_NtkObj(
p->pNtk, iNode );
674 if ( dGainBest2 == -1 )
675 dGainBest2 = Vec_FltEntry(
p->vNode2Gain, iNode);
681 pCellOld = Abc_SclObjCell( pObj );
682 pCellNew = SC_LibCell(
p->pLib, Vec_IntEntry(
p->vNode2Gate, Abc_ObjId(pObj)) );
683 assert( pCellNew != NULL );
689 p->SumArea += pCellNew->
area - pCellOld->
area;
690 Abc_SclObjSetCell( pObj, pCellNew );
693 Vec_IntPush(
p->vUpdates, Abc_ObjId(pObj) );
694 Vec_IntPush(
p->vUpdates, pCellNew->
Id );
697 Vec_IntWriteEntry(
p->vNodeIter, Abc_ObjId(pObj), iIter );
699 if ( Counter == Limit )
706 Vec_PtrFree( vFanouts );
711 int i, ObjId, GateId, GateId2;
713 Vec_IntWriteEntry( vGatesBest, ObjId, GateId );
714 Vec_IntClear( vUpdate );
716 assert( GateId == GateId2 );
723 assert( Vec_IntSize(vTrans) % 3 == 0 );
724 for ( i = Vec_IntSize(vTrans)/3 - 1; i >= 0; i-- )
726 Abc_Obj_t * pFanout = Abc_NtkObj( pNtk, Vec_IntEntry(vTrans, 3*i+0) );
727 Abc_Obj_t * pFanin = Abc_NtkObj( pNtk, Vec_IntEntry(vTrans, 3*i+1) );
728 Abc_Obj_t * pObj = Abc_NtkObj( pNtk, Vec_IntEntry(vTrans, 3*i+2) );
753 float fDiff = (float)0.001;
769 if ( Abc_AbsFloat(
p->pLoads[k].rise - pLoads[k].
rise) > fDiff )
770 printf(
"%6d : load rise differs %12.6f %f %f\n", k,
p->pLoads[k].rise-pLoads[k].
rise,
p->pLoads[k].rise, pLoads[k].
rise );
771 if ( Abc_AbsFloat(
p->pLoads[k].fall - pLoads[k].
fall) > fDiff )
772 printf(
"%6d : load fall differs %12.6f %f %f\n", k,
p->pLoads[k].fall-pLoads[k].
fall,
p->pLoads[k].fall, pLoads[k].
fall );
774 if ( Abc_AbsFloat(
p->pSlews[k].rise - pSlews[k].
rise) > fDiff )
775 printf(
"%6d : slew rise differs %12.6f %f %f\n", k,
p->pSlews[k].rise-pSlews[k].
rise,
p->pSlews[k].rise, pSlews[k].
rise );
776 if ( Abc_AbsFloat(
p->pSlews[k].fall - pSlews[k].
fall) > fDiff )
777 printf(
"%6d : slew fall differs %12.6f %f %f\n", k,
p->pSlews[k].fall-pSlews[k].
fall,
p->pSlews[k].fall, pSlews[k].
fall );
779 if ( Abc_AbsFloat(
p->pTimes[k].rise - pTimes[k].
rise) > fDiff )
780 printf(
"%6d : time rise differs %12.6f %f %f\n", k,
p->pTimes[k].rise-pTimes[k].
rise,
p->pTimes[k].rise, pTimes[k].
rise );
781 if ( Abc_AbsFloat(
p->pTimes[k].fall - pTimes[k].
fall) > fDiff )
782 printf(
"%6d : time fall differs %12.6f %f %f\n", k,
p->pTimes[k].fall-pTimes[k].
fall,
p->pTimes[k].fall, pTimes[k].
fall );
812 printf(
"%4d ", Iter );
813 printf(
"Win:%3d. ", win );
814 printf(
"PO:%6d. ", nPathPos );
815 printf(
"Path:%7d. ", nPathNodes );
816 printf(
"Gate:%5d. ", nUpsizes );
817 printf(
"TFO:%7d. ", nTFOs );
819 printf(
"%.2f ",
p->SumArea );
820 printf(
"(%+5.1f %%) ", 100.0 * (
p->SumArea -
p->SumArea0)/
p->SumArea0 );
822 printf(
"%.2f ps ",
p->MaxDelay );
823 printf(
"(%+5.1f %%) ", 100.0 * (
p->MaxDelay -
p->MaxDelay0)/
p->MaxDelay0 );
825 printf(
"%.2f ps ",
p->BestDelay );
826 printf(
"(%+5.1f %%)", 100.0 * (
p->BestDelay -
p->MaxDelay0)/
p->MaxDelay0 );
827 printf(
"%8.2f sec ", 1.0*(Abc_Clock() -
p->timeTotal)/(CLOCKS_PER_SEC) );
828 printf(
"%c", fVerbose ?
'\n' :
'\r' );
848 if ( Abc_ObjFanoutNum(pObj) == 0 )
850 pCell = Abc_SclObjCell( pObj );
851 p->SumArea -= pCell->
area;
874 int i = 0, win, nUpsizes = -1, nFramesNoChange = 0, nConeSize = 0;
875 int nAllPos, nAllNodes, nAllTfos, nAllUpsizes;
878 printf(
"Parameters: " );
879 printf(
"Iters =%5d. ", pPars->
nIters );
880 printf(
"Time win =%3d %%. ", pPars->
Window );
881 printf(
"Update ratio =%3d %%. ", pPars->
Ratio );
882 printf(
"UseDept =%2d. ", pPars->
fUseDept );
884 printf(
"Target =%5d ps. ", pPars->
DelayUser );
885 printf(
"DelayGap =%3d ps. ", pPars->
DelayGap );
886 printf(
"Timeout =%4d sec", pPars->
TimeOut );
891 pPars->
Window += (Abc_NtkNodeNum(pNtk) > 40000);
895 p->timeTotal = Abc_Clock();
896 assert(
p->vGatesBest == NULL );
897 p->vGatesBest = Vec_IntDup(
p->pNtk->vGates );
898 p->BestDelay =
p->MaxDelay0;
900 nAllPos = nAllNodes = nAllTfos = nAllUpsizes = 0;
902 printf(
"Current delay (%.2f ps) does not exceed the target delay (%.2f ps). Upsizing is not performed.\n",
p->BestDelay, (
float)pPars->
DelayUser );
904 for ( i = 0; i < pPars->
nIters; i++ )
906 for ( win = pPars->
Window + ((i % 7) == 6); win <= 100; win *= 2 )
912 p->timeCone += Abc_Clock() - clk;
920 p->timeSize += Abc_Clock() - clk;
926 p->timeCone += Abc_Clock() - clk;
929 Vec_IntFree( vPathPos );
930 Vec_IntFree( vPathNodes );
948 nConeSize = Vec_IntSize( vTFO );
951 p->timeTime += Abc_Clock() - clk;
955 p->MaxDelay = Abc_SclReadMaxDelay(
p );
956 if (
p->BestDelay >
p->MaxDelay )
958 p->BestDelay =
p->MaxDelay;
960 Vec_IntClear(
p->vUpdates2 );
968 nAllPos += Vec_IntSize(vPathPos);
969 nAllNodes += Vec_IntSize(vPathNodes);
970 nAllTfos += nConeSize;
971 nAllUpsizes += nUpsizes;
972 Vec_IntFree( vPathPos );
973 Vec_IntFree( vPathNodes );
975 if ( nRuntimeLimit && Abc_Clock() > nRuntimeLimit )
996 p->timeTotal = Abc_Clock() -
p->timeTotal;
999 p->timeOther =
p->timeTotal -
p->timeCone -
p->timeSize -
p->timeTime;
1000 ABC_PRTP(
"Runtime: Critical path",
p->timeCone,
p->timeTotal );
1001 ABC_PRTP(
"Runtime: Sizing eval ",
p->timeSize,
p->timeTotal );
1002 ABC_PRTP(
"Runtime: Timing update",
p->timeTime,
p->timeTotal );
1003 ABC_PRTP(
"Runtime: Other ",
p->timeOther,
p->timeTotal );
1004 ABC_PRTP(
"Runtime: TOTAL ",
p->timeTotal,
p->timeTotal );
1007 Abc_SclDumpStats(
p,
"stats2.txt",
p->timeTotal );
1008 if ( nRuntimeLimit && Abc_Clock() > nRuntimeLimit )
1009 printf(
"Gate sizing timed out at %d seconds.\n", pPars->
TimeOut );
1013 Abc_SclManFree(
p );
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
#define Abc_NtkForEachNodeNotBarBuf(pNtk, pNode, i)
ABC_DLL Abc_Ntk_t * Abc_NtkDupDfsNoBarBufs(Abc_Ntk_t *pNtk)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
#define Abc_ObjForEachFanout(pObj, pFanout, i)
ABC_DLL void Abc_NtkDeleteObj_rec(Abc_Obj_t *pObj, int fOnlyNodes)
ABC_DLL void Abc_NodeCollectFanouts(Abc_Obj_t *pNode, Vec_Ptr_t *vNodes)
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_ObjPatchFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFaninOld, Abc_Obj_t *pFaninNew)
#define Abc_NtkForEachObjVec(vIds, pNtk, pObj, i)
ABC_DLL int Abc_NodeFindFanin(Abc_Obj_t *pNode, Abc_Obj_t *pFanin)
#define Abc_NtkForEachNode(pNtk, pNode, i)
#define ABC_SWAP(Type, a, b)
#define ABC_ALLOC(type, num)
#define ABC_PRTP(a, t, T)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Abc_NodeInvUpdateObjFanoutPolarity(Abc_Obj_t *pObj, Abc_Obj_t *pFanout)
int Abc_SclIsInv(Abc_Obj_t *pObj)
struct SC_SizePars_ SC_SizePars
#define SC_RingForEachCell(pRing, pCell, i)
void Abc_SclUpdateLoad(SC_Man *p, Abc_Obj_t *pObj, SC_Cell *pOld, SC_Cell *pNew)
void Abc_SclAddWireLoad(SC_Man *p, Abc_Obj_t *pObj, int fSubtr)
void Abc_SclUpdateLoadSplit(SC_Man *p, Abc_Obj_t *pBuffer, Abc_Obj_t *pFanout)
int Abc_SclTimeIncUpdate(SC_Man *p)
void Abc_SclTimeCone(SC_Man *p, Vec_Int_t *vCone)
void Abc_SclTimeIncInsert(SC_Man *p, Abc_Obj_t *pObj)
void Abc_SclTimeIncUpdateLevel(Abc_Obj_t *pObj)
SC_Man * Abc_SclManStart(SC_Lib *pLib, Abc_Ntk_t *pNtk, int fUseWireLoads, int fDept, float DUser, int nTreeCRatio)
void Abc_SclTimeNtkRecompute(SC_Man *p, float *pArea, float *pDelay, int fReverse, float DUser)
void Abc_SclSclGates2MioGates(SC_Lib *pLib, Abc_Ntk_t *p)
void Abc_SclTransferGates(Abc_Ntk_t *pOld, Abc_Ntk_t *pNew)
typedefABC_NAMESPACE_HEADER_START struct SC_Man_ SC_Man
INCLUDES ///.
void Abc_SclUpsizePerform(SC_Lib *pLib, Abc_Ntk_t *pNtk, SC_SizePars *pPars, void *pFuncFanin)
void Abc_SclFindNodesToUpdate(Abc_Obj_t *pPivot, Vec_Int_t **pvNodes, Vec_Int_t **pvEvals, Abc_Obj_t *pExtra)
void Abc_SclUpsizePerformInt(SC_Lib *pLib, Abc_Ntk_t *pNtk, SC_SizePars *pPars, void *pFuncFanin)
Vec_Int_t * Abc_SclFindCriticalCoWindow(SC_Man *p, int Window)
void Abc_SclApplyUpdateToBest(Vec_Int_t *vGatesBest, Vec_Int_t *vGates, Vec_Int_t *vUpdate)
Vec_Int_t * Abc_SclFindCriticalNodeWindow(SC_Man *p, Vec_Int_t *vPathCos, int Window, int fDept)
int Abc_SclFindUpsizes(SC_Man *p, Vec_Int_t *vPathNodes, int Ratio, int Notches, int iIter, int DelayGap, int fMoreConserf)
int Abc_SclObjCheckMarkedFanFans(Abc_Obj_t *pObj)
int Abc_SclFindBypasses(SC_Man *p, Vec_Int_t *vPathNodes, int Ratio, int Notches, int iIter, int DelayGap, int fVeryVerbose)
int Abc_SclFindBestCell(SC_Man *p, Abc_Obj_t *pObj, Vec_Int_t *vRecalcs, Vec_Int_t *vEvals, int Notches, int DelayGap, float *pGainBest)
void Abc_SclUpsizeRemoveDangling(SC_Man *p, Abc_Ntk_t *pNtk)
void Abc_SclUndoRecentChanges(Abc_Ntk_t *pNtk, Vec_Int_t *vTrans)
void Abc_SclUpsizePrintDiffs(SC_Man *p, SC_Lib *pLib, Abc_Ntk_t *pNtk)
int Abc_SclCountNearCriticalNodes(SC_Man *p)
void Abc_SclUnmarkCriticalNodeWindow(SC_Man *p, Vec_Int_t *vPath)
void Abc_SclUpsizePrint(SC_Man *p, int Iter, int win, int nPathPos, int nPathNodes, int nUpsizes, int nTFOs, int fVerbose)
void Abc_SclFindCriticalNodeWindow_rec(SC_Man *p, Abc_Obj_t *pObj, Vec_Int_t *vPath, float fSlack, int fDept)
void Abc_SclObjMarkFanFans(Abc_Obj_t *pObj, Vec_Ptr_t *vNodes)
ABC_NAMESPACE_IMPL_START void Abc_SclFindTFO_rec(Abc_Obj_t *pObj, Vec_Int_t *vNodes, Vec_Int_t *vCos)
DECLARATIONS ///.
Vec_Int_t * Abc_SclFindTFO(Abc_Ntk_t *p, Vec_Int_t *vPath)
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
#define Vec_IntForEachEntryTwo(vVec1, vVec2, Entry1, Entry2, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.