66static inline int Abc_BufNodeArr(
Buf_Man_t *
p,
Abc_Obj_t * pObj ) {
return Vec_IntEntry(
p->vArr, Abc_ObjId(pObj) ); }
67static inline int Abc_BufNodeDep(
Buf_Man_t *
p,
Abc_Obj_t * pObj ) {
return Vec_IntEntry(
p->vDep, Abc_ObjId(pObj) ); }
68static inline void Abc_BufSetNodeArr(
Buf_Man_t *
p,
Abc_Obj_t * pObj,
int f ) { Vec_IntWriteEntry(
p->vArr, Abc_ObjId(pObj), f ); }
69static inline void Abc_BufSetNodeDep(
Buf_Man_t *
p,
Abc_Obj_t * pObj,
int f ) { Vec_IntWriteEntry(
p->vDep, Abc_ObjId(pObj), f ); }
70static inline int Abc_BufEdgeDelay(
Buf_Man_t *
p,
Abc_Obj_t * pObj,
int i ) {
return Vec_IntEntry(
p->vEdges, Vec_IntEntry(
p->vOffsets, Abc_ObjId(pObj)) + i ); }
71static inline void Abc_BufSetEdgeDelay(
Buf_Man_t *
p,
Abc_Obj_t * pObj,
int i,
int f ) { Vec_IntWriteEntry(
p->vEdges, Vec_IntEntry(
p->vOffsets, Abc_ObjId(pObj)) + i, f ); }
72static inline int Abc_BufNodeSlack(
Buf_Man_t *
p,
Abc_Obj_t * pObj ) {
return p->DelayMax - Abc_BufNodeArr(
p, pObj) - Abc_BufNodeDep(
p, pObj); }
97 if ( k != k2 && pFanin == pFanin2 )
98 printf(
"Node %d has dup fanin %d.\n", i, Abc_ObjId(pFanin) );
112static inline int Abc_SclObjIsBufInv(
Abc_Obj_t * pObj )
114 return Abc_ObjIsNode(pObj) && Abc_ObjFaninNum(pObj) == 1;
118 assert( Abc_ObjIsNode(pObj) );
124 if ( !Abc_SclObjIsBufInv(pObj) )
125 return Abc_Var2Lit( Abc_ObjId(pObj), 0 );
133 int i, k, iLit, nNodesOld = Abc_NtkObjNumMax(pNtk);
135 vLits = Vec_IntStartFull( Abc_NtkObjNumMax(pNtk) );
137 if (
Abc_SclIsInv(pObj) && !Abc_SclObjIsBufInv(Abc_ObjFanin0(pObj)) )
138 Vec_IntWriteEntry( vLits, Abc_ObjFaninId0(pObj), Abc_ObjId(pObj) );
142 if ( i >= nNodesOld )
146 if ( !Abc_SclObjIsBufInv(pFanin) )
149 pFaninNew = Abc_NtkObj( pNtk, Abc_Lit2Var(iLit) );
150 if ( Abc_LitIsCompl(iLit) )
152 if ( Vec_IntEntry( vLits, Abc_Lit2Var(iLit) ) == -1 )
155 Vec_IntWriteEntry( vLits, Abc_Lit2Var(iLit), Abc_ObjId(pFaninNew) );
158 pFaninNew = Abc_NtkObj( pNtk, Vec_IntEntry( vLits, Abc_Lit2Var(iLit) ) );
159 assert( Abc_ObjFaninNum(pFaninNew) == 1 );
161 if ( pFanin != pFaninNew )
165 Vec_IntFree( vLits );
185 int i, k, Max = 0, MaxAll = 0;
186 vPhLevel = Vec_IntStart( Abc_NtkObjNumMax(pNtk) );
191 Max = Abc_MaxInt( Max, Vec_IntEntry(vPhLevel, Abc_ObjId(pFanin)) + Abc_ObjFaninPhase(pObj, k) );
192 Vec_IntWriteEntry( vPhLevel, i, Max );
193 MaxAll = Abc_MaxInt( MaxAll, Max );
195 Vec_IntFree( vPhLevel );
203 int nNodesOld = Abc_NtkObjNumMax(pNtk);
204 int i, k, Counter = 0, Counter2 = 0, Total = 0;
206 vInvs = Vec_IntStart( Abc_NtkObjNumMax(pNtk) );
209 if ( i >= nNodesOld )
214 if ( !Abc_ObjFaninPhase(pObj, k) )
216 if ( Vec_IntEntry(vInvs, Abc_ObjId(pFanin)) == 0 || Abc_ObjIsCi(pFanin) )
219 Vec_IntWriteEntry( vInvs, Abc_ObjId(pFanin), Abc_ObjId(pFaninNew) );
222 pFaninNew = Abc_NtkObj( pNtk, Vec_IntEntry(vInvs, Abc_ObjId(pFanin)) );
228 printf(
"Added %d inverters (%.2f %% fanins) (%.2f %% compl fanins).\n",
229 Counter, 100.0 * Counter / Total, 100.0 * Counter2 / Total );
230 Vec_IntFree( vInvs );
231 Vec_IntFillExtra( pNtk->
vPhases, Abc_NtkObjNumMax(pNtk), 0 );
243 int i, k, iLit, Counter = 0, Total = 0;
245 pNtk->
vPhases = Vec_IntStart( Abc_NtkObjNumMax(pNtk) );
248 if ( Abc_SclObjIsBufInv(pObj) )
254 pFaninNew = Abc_NtkObj( pNtk, Abc_Lit2Var(iLit) );
255 if ( pFaninNew == pFanin )
261 if ( Abc_LitIsCompl(iLit) )
262 Abc_ObjFaninFlipPhase( pObj, k ), Counter++;
266 printf(
"Saved %d (%.2f %%) fanin phase bits. ", Counter, 100.0 * Counter / Total );
290 Abc_NtkIncrementTravId(
p );
292 Abc_NodeSetTravIdCurrent( pObj );
296 if ( !Abc_NodeIsTravIdCurrent( pFanin ) )
297 printf(
"obj %d and its fanin %d are not in the topo order\n", Abc_ObjId(pObj), Abc_ObjId(pFanin) ), fFlag = 0;
298 Abc_NodeSetTravIdCurrent( pObj );
299 if ( Abc_ObjIsBarBuf(pObj) )
301 if ( Abc_ObjFanoutNum(pObj) == 0 )
302 printf(
"node %d has no fanout\n", Abc_ObjId(pObj) ), fFlag = 0;
306 if ( fFlag && fVerbose )
307 printf(
"The network is in topo order and no dangling nodes.\n" );
326 assert( Abc_ObjFaninNum(pObj) == 0 || Abc_SclObjIsBufInv(pObj) );
329 assert( Abc_ObjFaninNum(pFanout) > 0 );
330 if ( Abc_SclObjIsBufInv(pFanout) )
338 if ( Abc_SclObjIsBufInv(pFanout) )
345 int Diff = Abc_ObjLevel(*pp1) - Abc_ObjLevel(*pp2);
350 Diff = (*pp1)->Id - (*pp2)->Id;
362 Level = Abc_MaxInt( Level, pFanout->
Level );
369 int i, Degree0 = Degree;
370 assert( Abc_ObjFanoutNum(pObj) > Degree );
372 vFanouts = Vec_PtrAlloc( Abc_ObjFanoutNum(pObj) );
381 if ( Vec_PtrSize(vFanouts) < 2 * Degree )
383 Abc_Obj_t * pFanPrev = (
Abc_Obj_t *)Vec_PtrEntry(vFanouts, Vec_PtrSize(vFanouts)-1-Degree);
386 if ( Abc_ObjLevel(pFanThis) == Abc_ObjLevel(pFanLast) &&
387 Abc_ObjLevel(pFanPrev) < Abc_ObjLevel(pFanThis) )
391 if ( Abc_ObjLevel(pFanout) == Abc_ObjLevel(pFanLast) )
393 assert( i < Vec_PtrSize(vFanouts) );
398 if ( Degree == Degree0 && Degree > Vec_PtrSize(vFanouts) - Degree )
399 Degree = Vec_PtrSize(vFanouts)/2 + (Vec_PtrSize(vFanouts) & 1);
400 assert( Degree <= Degree0 );
407 printf(
"%5d : ", Abc_ObjId(pObj) );
409 printf(
"%d%s ", Abc_ObjLevel(pFanout), i == Degree-1 ?
" " :
"" );
412 Vec_PtrFree( vFanouts );
425 if ( Abc_NodeIsTravIdCurrent( pObj ) )
427 Abc_NodeSetTravIdCurrent( pObj );
429 if ( Abc_ObjIsCo(pObj) )
431 assert( Abc_ObjIsCi(pObj) || Abc_ObjIsNode(pObj) );
436 nOldFanNum = Abc_ObjFanoutNum(pObj);
437 while ( Abc_ObjFanoutNum(pObj) > Degree )
440 if ( DegreeR && nOldFanNum > DegreeR )
446 vFanouts = Vec_PtrAlloc( Abc_ObjFanoutNum(pObj) );
450 Vec_PtrFree( vFanouts );
465 assert( Abc_NtkHasMapping(
p) );
468 printf(
"Warning!!! Using inverters instead of buffers.\n" );
469 if (
p->vPhases == NULL )
470 printf(
"The phases are not given. The result will not verify.\n" );
473 vCiLevs = Vec_IntAlloc( Abc_NtkCiNum(
p) );
475 Vec_IntPush( vCiLevs, Abc_ObjLevel(pObj) );
477 Abc_NtkIncrementTravId(
p );
482 pObj->
Level = Vec_IntEntry( vCiLevs, i );
485 Vec_IntFree( vCiLevs );
488 Vec_IntFillExtra(
p->vPhases, Abc_NtkObjNumMax(
p), 0 );
516 if ( Vec_IntEntry(
p->vOffsets, Abc_ObjId(pObj)) == -
ABC_INFINITY )
518 DelayF = Abc_BufNodeArr(
p, pFanin) + Abc_BufEdgeDelay(
p, pObj, i);
519 if ( Delay < DelayF )
522 Abc_BufSetNodeArr(
p, pObj, Delay );
532 if ( Vec_IntEntry(
p->vOffsets, Abc_ObjId(pFanout)) == -
ABC_INFINITY )
534 DelayF = Abc_BufNodeDep(
p, pFanout) + Abc_BufEdgeDelay(
p, pFanout,
Abc_NodeFindFanin(pFanout, pObj));
535 if ( Delay < DelayF )
538 Abc_BufSetNodeDep(
p, pObj, Delay );
547 p->DelayMax = Abc_MaxInt(
p->DelayMax, Abc_BufNodeArr(
p, Abc_ObjFanin0(pObj)) );
553 Vec_IntWriteEntry(
p->vOffsets, Abc_ObjId(pObj), Vec_IntSize(
p->vEdges) );
554 for ( k = 0; k < Abc_ObjFaninNum(pObj); k++ )
559 if ( Abc_ObjFanoutNum(pObj) <
p->nFanMin || (!
p->fBufPis && Abc_ObjIsCi(pObj)) )
561 Vec_FltWriteEntry(
p->vCounts, Abc_ObjId(pObj), Abc_ObjFanoutNum(pObj) );
562 if ( Vec_QueIsMember(
p->vQue, Abc_ObjId(pObj)) )
563 Vec_QueUpdate(
p->vQue, Abc_ObjId(pObj) );
565 Vec_QuePush(
p->vQue, Abc_ObjId(pObj) );
584 if ( Abc_NodeIsTravIdCurrent( pNode ) )
586 Abc_NodeSetTravIdCurrent( pNode );
587 if ( Abc_ObjIsCo(pNode) )
589 assert( Abc_ObjIsCi(pNode) || Abc_ObjIsNode(pNode) );
592 if ( Abc_ObjIsNode(pNode) )
593 Vec_IntPush( vNodes, Abc_ObjId(pNode) );
597 Vec_IntClear(
p->vTfCone );
598 Abc_NtkIncrementTravId(
p->pNtk );
607 Vec_IntReverseOrder(
p->vTfCone );
611 p->DelayMax = Abc_MaxInt(
p->DelayMax, Delay );
630 if ( Abc_NodeIsTravIdCurrent( pNode ) )
632 Abc_NodeSetTravIdCurrent( pNode );
633 if ( Abc_ObjIsCi(pNode) )
635 assert( Abc_ObjIsNode(pNode) );
638 Vec_IntPush( vNodes, Abc_ObjId(pNode) );
642 Vec_IntClear(
p->vTfCone );
643 Abc_NtkIncrementTravId(
p->pNtk );
652 Vec_IntReverseOrder(
p->vTfCone );
656 p->DelayMax = Abc_MaxInt(
p->DelayMax, Delay );
681 p->fBufPis = fBufPis;
683 p->nObjStart = Abc_NtkObjNumMax(
p->pNtk);
684 p->nObjAlloc = (6 * Abc_NtkObjNumMax(
p->pNtk) / 3) + 100;
685 p->vOffsets = Vec_IntAlloc(
p->nObjAlloc );
686 p->vArr = Vec_IntAlloc(
p->nObjAlloc );
687 p->vDep = Vec_IntAlloc(
p->nObjAlloc );
688 p->vCounts = Vec_FltAlloc(
p->nObjAlloc );
689 p->vQue = Vec_QueAlloc(
p->nObjAlloc );
691 Vec_IntFill(
p->vArr,
p->nObjAlloc, 0 );
692 Vec_IntFill(
p->vDep,
p->nObjAlloc, 0 );
694 Vec_QueSetPriority(
p->vQue, Vec_FltArrayP(
p->vCounts) );
697 p->vEdges = Vec_IntAlloc( 1000 );
717 Vec_PtrFree( vNodes );
718 p->vDelays = Vec_IntAlloc( 100 );
719 p->vOrder = Vec_IntAlloc( 100 );
720 p->vNonCrit = Vec_IntAlloc( 100 );
721 p->vTfCone = Vec_IntAlloc( 100 );
722 p->vFanouts = Vec_PtrAlloc( 100 );
727 printf(
"Sep = %d. Dup = %d. Br0 = %d. Br1 = %d. BrC = %d. ",
728 p->nSeparate,
p->nDuplicate,
p->nBranch0,
p->nBranch1,
p->nBranchCrit );
729 printf(
"Orig = %d. Add = %d. Rem = %d.\n",
730 p->nObjStart, Abc_NtkObjNumMax(
p->pNtk) -
p->nObjStart,
731 p->nObjAlloc - Abc_NtkObjNumMax(
p->pNtk) );
732 Vec_PtrFree(
p->vFanouts );
733 Vec_IntFree(
p->vTfCone );
734 Vec_IntFree(
p->vNonCrit );
735 Vec_IntFree(
p->vDelays );
736 Vec_IntFree(
p->vOrder );
737 Vec_IntFree(
p->vOffsets );
738 Vec_IntFree(
p->vEdges );
739 Vec_IntFree(
p->vArr );
740 Vec_IntFree(
p->vDep );
742 Vec_QueFree(
p->vQue );
743 Vec_FltFree(
p->vCounts );
761 int i, Slack, * pOrder;
762 Vec_IntClear(
p->vDelays );
763 pObj = Abc_NtkObj(
p->pNtk, iPivot );
766 Slack = Abc_BufEdgeSlack(
p, pObj, pFanout);
768 Vec_IntPush(
p->vDelays, Abc_MaxInt(0, Slack) );
771 Vec_IntClear(
p->vOrder );
772 for ( i = 0; i < Vec_IntSize(
p->vDelays); i++ )
773 Vec_IntPush(
p->vOrder, Abc_ObjId(Abc_ObjFanout(pObj, pOrder[i])) );
784 pObj = Abc_NtkObj(
p->pNtk, iPivot );
786 printf(
"Node %5d Fi = %d Fo = %3d Lev = %3d : {", iPivot, Abc_ObjFaninNum(pObj), Abc_ObjFanoutNum(pObj), Abc_ObjLevel(pObj) );
789 Slack = Abc_BufEdgeSlack(
p, pObj, pFanout );
790 printf(
" %d(%d)", Abc_ObjId(pFanout), Slack );
820 printf(
"Replaced %d buffers by invertor pairs.\n", Counter );
838 pObj = Abc_NtkObj(
p->pNtk, iPivot );
840 Average += Abc_BufEdgeSlack(
p, pObj, pFanout );
841 return Average / Vec_IntSize(vOrder);
863 Vec_IntClear(
p->vNonCrit );
865 if ( Abc_BufEdgeSlack(
p, pObj, pFanout ) > 7*
BUF_SCALE/2 )
866 Vec_IntPush(
p->vNonCrit, Abc_ObjId(pFanout) );
867 return Vec_IntSize(
p->vNonCrit);
872 int i, j, nCrit, nNonCrit;
874 assert( Abc_NtkObjNumMax(
p->pNtk) + 30 <
p->nObjAlloc );
875 pObj = Abc_NtkObj(
p->pNtk, iPivot );
878 nCrit = Abc_ObjFanoutNum(pObj) - nNonCrit;
882printf(
"ObjId = %6d : %-10s FI = %d. FO =%4d. Crit =%4d. ",
886 if ( nCrit > 0 && nNonCrit > 1 )
901printf(
"Adding buffer\n" );
903 else if ( !fSkipDup && nCrit > 0 && Abc_ObjIsNode(pObj) && Abc_ObjFanoutNum(pObj) >
p->nFanMin )
914 Abc_BufSetNodeArr(
p, pClone, Abc_BufNodeArr(
p, pObj) );
925printf(
"Duplicating node\n" );
927 else if ( (nCrit > 0 && Abc_ObjFanoutNum(pObj) > 8) || Abc_ObjFanoutNum(pObj) >
p->nFanMax )
930 int nDegree, n1Degree, n1Number, nFirst;
931 int iFirstBuf = Abc_NtkObjNumMax(
p->pNtk );
933 nDegree = Abc_MinInt( 10, (
int)pow(Abc_ObjFanoutNum(pObj), 0.5) );
934 n1Degree = Abc_ObjFanoutNum(pObj) / nDegree + 1;
935 n1Number = Abc_ObjFanoutNum(pObj) % nDegree;
936 nFirst = n1Degree * n1Number;
937 p->nBranchCrit += (nCrit > 0);
946 for ( i = 0; i < nDegree; i++ )
949printf(
"Adding %d inverters\n", nDegree );
954 for ( i = 0; i < nDegree; i++ )
957printf(
"Adding %d buffers\n", nDegree );
962 j = (i < nFirst) ? i/n1Degree : n1Number + ((i - nFirst)/(n1Degree - 1));
963 assert( j >= 0 && j < nDegree );
967 for ( i = 0; i < nDegree; i++ )
970 for ( i = 0; i < nDegree; i++ )
973 for ( i = 0; i < nDegree; i++ )
975 for ( i = 0; i < nDegree; i++ )
981printf(
"Doing nothing\n" );
994 for ( i = 0; i < Limit && Vec_QueSize(
p->vQue); i++ )
ABC_DLL Abc_Ntk_t * Abc_NtkDupDfs(Abc_Ntk_t *pNtk)
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
#define Abc_NtkForEachNodeCo(pNtk, pNode, i)
ABC_DLL int Abc_NodeIsBuf(Abc_Obj_t *pNode)
ABC_DLL Abc_Obj_t * Abc_NtkDupObj(Abc_Ntk_t *pNtkNew, Abc_Obj_t *pObj, int fCopyName)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeBuf(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
ABC_DLL Vec_Ptr_t * Abc_NtkDfs(Abc_Ntk_t *pNtk, int fCollectAll)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
#define Abc_ObjForEachFanout(pObj, pFanout, i)
ABC_DLL int Abc_NodeIsInv(Abc_Obj_t *pNode)
ABC_DLL void Abc_NodeCollectFanouts(Abc_Obj_t *pNode, Vec_Ptr_t *vNodes)
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL int Abc_NtkLevel(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeInv(Abc_Ntk_t *pNtk, Abc_Obj_t *pFanin)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL void Abc_ObjPatchFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFaninOld, Abc_Obj_t *pFaninNew)
ABC_DLL int Abc_ObjLevelNew(Abc_Obj_t *pObj)
#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)
int * Abc_QuickSortCost(int *pCosts, int nSize, int fDecrease)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_CALLOC(type, num)
#define ABC_CONST(number)
PARAMETERS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Mio_LibraryStruct_t_ Mio_Library_t
word Mio_GateReadTruth(Mio_Gate_t *pGate)
float Mio_GateReadPinDelay(Mio_Gate_t *pGate, int iPin)
char * Mio_GateReadName(Mio_Gate_t *pGate)
Mio_Gate_t * Mio_LibraryReadInv(Mio_Library_t *pLib)
struct Mio_GateStruct_t_ Mio_Gate_t
Mio_Gate_t * Mio_LibraryReadBuf(Mio_Library_t *pLib)
int Abc_SclComputeReverseLevel(Abc_Obj_t *pObj)
void Abc_BufCollectTfoCone(Buf_Man_t *p, Abc_Obj_t *pObj)
Abc_Ntk_t * Abc_SclUnBufferPerform(Abc_Ntk_t *pNtk, int fVerbose)
Abc_Ntk_t * Abc_SclBufPerform(Abc_Ntk_t *pNtk, int FanMin, int FanMax, int fBufPis, int fSkipDup, int fVerbose)
void Abc_BufReplaceBufsByInvs(Abc_Ntk_t *pNtk)
void Abc_SclPerformBuffering_rec(Abc_Obj_t *pObj, int DegreeR, int Degree, int fUseInvs, int fVerbose)
void Abc_BufCollectTfiCone(Buf_Man_t *p, Abc_Obj_t *pObj)
int Abc_BufComputeAverage(Buf_Man_t *p, int iPivot, Vec_Int_t *vOrder)
Abc_Obj_t * Abc_SclPerformBufferingOne(Abc_Obj_t *pObj, int Degree, int fUseInvs, int fVerbose)
void Abc_BufCollectTfiCone_rec(Abc_Obj_t *pNode, Vec_Int_t *vNodes)
void Abc_BufUpdateDep(Buf_Man_t *p, Abc_Obj_t *pObj)
Abc_Ntk_t * Abc_SclUnBufferPhase(Abc_Ntk_t *pNtk, int fVerbose)
float Abc_BufComputeArr(Buf_Man_t *p, Abc_Obj_t *pObj)
void Abc_BufUpdateArr(Buf_Man_t *p, Abc_Obj_t *pObj)
void Abc_BufAddToQue(Buf_Man_t *p, Abc_Obj_t *pObj)
int Abc_BufCountNonCritical(Buf_Man_t *p, Abc_Obj_t *pObj)
void Abc_NodeInvUpdateObjFanoutPolarity(Abc_Obj_t *pObj, Abc_Obj_t *pFanout)
float Abc_BufComputeDep(Buf_Man_t *p, Abc_Obj_t *pObj)
void Abc_NodeInvUpdateFanPolarity(Abc_Obj_t *pObj)
int Abc_SclIsInv(Abc_Obj_t *pObj)
void Abc_BufPrintOne(Buf_Man_t *p, int iPivot)
int Abc_SclCheckNtk(Abc_Ntk_t *p, int fVerbose)
int Abc_NodeCompareLevels(Abc_Obj_t **pp1, Abc_Obj_t **pp2)
void Abc_BufCollectTfoCone_rec(Abc_Obj_t *pNode, Vec_Int_t *vNodes)
void Abc_BufPerformOne(Buf_Man_t *p, int iPivot, int fSkipDup, int fVerbose)
Vec_Int_t * Abc_BufSortByDelay(Buf_Man_t *p, int iPivot)
void Abc_SclReportDupFanins(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
Abc_Ntk_t * Abc_SclBufferPhase(Abc_Ntk_t *pNtk, int fVerbose)
void Buf_ManStop(Buf_Man_t *p)
Abc_Ntk_t * Abc_SclPerformBuffering(Abc_Ntk_t *p, int DegreeR, int Degree, int fUseInvs, int fVerbose)
Abc_Obj_t * Abc_BufFindNonBuffDriver(Buf_Man_t *p, Abc_Obj_t *pObj)
Buf_Man_t * Buf_ManStart(Abc_Ntk_t *pNtk, int FanMin, int FanMax, int fBufPis)
void Abc_BufCreateEdges(Buf_Man_t *p, Abc_Obj_t *pObj)
int Abc_SclGetRealFaninLit(Abc_Obj_t *pObj)
void Abc_BufUpdateGlobal(Buf_Man_t *p)
struct Buf_Man_t_ Buf_Man_t
#define BUF_SCALE
DECLARATIONS ///.
int Abc_SclCountMaxPhases(Abc_Ntk_t *pNtk)
void Abc_SclTimeIncUpdateLevel(Abc_Obj_t *pObj)
typedefABC_NAMESPACE_HEADER_START struct Vec_Flt_t_ Vec_Flt_t
INCLUDES ///.
#define Vec_PtrForEachEntryReverse(Type, vVec, pEntry, i)
#define Vec_PtrForEachEntryStop(Type, vVec, pEntry, i, Stop)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Que_t_ Vec_Que_t
INCLUDES ///.