46 if ( Gia_ObjUpdateTravIdCurrent(
p, pObj) )
48 assert( Gia_ObjIsAnd(pObj) );
51 pObj->
Value = Gia_ManAppendAnd2( pNew, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
60 assert( Vec_IntEntry(vCopy, iFan) >= 0 );
61 Gia_ManObj(
p, iFan)->Value = Vec_IntEntry(vCopy, iFan);
62 Gia_ObjUpdateTravIdCurrentId(
p, iFan);
65 Vec_IntWriteEntry( vCopy, iObj, pObj->
Value );
69 Vec_Int_t * vRes = Vec_IntAlloc( Vec_IntSize(vRegs) );
72 Vec_Int_t * vCopy = Vec_IntStartFull( Gia_ManObjNum(
p) );
73 Vec_IntWriteEntry( vCopy, 0, 0 );
75 Vec_IntWriteEntry( vCopy, Gia_ObjId(
p, pObj), Gia_ManAppendCi(pNew) );
76 pNew->
pName = Abc_UtilStrsav(
p->pName );
77 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
82 int iLit = Vec_IntEntry( vCopy, iObj );
84 Gia_ManAppendCo( pNew, iLit );
90 Vec_IntPush( vRes, pObj->
fPhase );
93 assert( Vec_IntSize(vRes) == Vec_IntSize(vRegs) );
99 int i, iObj, iLitAnd = 1, * pResult = NULL;
102 Vec_Int_t * vCopy = Vec_IntStartFull( Gia_ManObjNum(
p) );
103 Vec_IntWriteEntry( vCopy, 0, 0 );
105 Vec_IntWriteEntry( vCopy, iObj, Gia_ManAppendCi(pNew) );
106 pNew->
pName = Abc_UtilStrsav(
p->pName );
107 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
112 int iFan = Gia_ObjFaninId0p(
p, pObj);
113 int iLit = Vec_IntEntry(vCopy, iFan);
116 iLit = Abc_LitNotCond( iLit, Gia_ObjFaninC0(pObj) );
117 iLitAnd = Gia_ManAppendAnd2( pNew, iLitAnd, Abc_LitNot(iLit) );
119 Gia_ManAppendCo( pNew, iLitAnd );
125 vRes = Vec_IntAllocArray( pResult, Vec_IntSize(vRegs) );
127 assert( Gia_ManPo(pNew, 0)->fPhase == 1 );
131 vRes = Vec_IntStart( Vec_IntSize(vRegs) );
132 printf(
"***!!!*** The SAT problem has no solution. Using all-0 initial state. ***!!!***\n" );
135 Vec_IntFree( vCopy );
136 assert( Vec_IntSize(vRes) == Vec_IntSize(vRegs) );
142 Vec_Int_t * vCopy = Vec_IntStartFull( Gia_ManObjNum(
p) );
143 Vec_Int_t * vCopy2 = Vec_IntStartFull( Gia_ManObjNum(
p) );
144 Vec_Int_t * vLuts[3], * vRos[3], * vRegs[2], * vInits[2], * vTemp;
146 for ( i = 0; i < 3; i++ )
148 vLuts[i] = Vec_IntAlloc(100);
149 vRos[i] = Vec_IntAlloc(100);
151 vRegs[i] = Vec_IntAlloc(100);
154 if ( Vec_IntEntry(vCounts, i) == 1 )
155 Vec_IntPush( vLuts[0], i );
156 else if ( Vec_IntEntry(vCounts, i) == -1 )
157 Vec_IntPush( vLuts[1], i );
158 else if ( Vec_IntEntry(vCounts, i) == 0 )
159 Vec_IntPush( vLuts[2], i );
161 assert( Vec_IntSize(vLuts[0]) || Vec_IntSize(vLuts[1]) );
162 if ( Vec_IntSize(vLuts[0]) )
166 Gia_ObjSetTravIdCurrentId(
p, Id);
168 if ( Gia_ObjIsTravIdCurrent(
p, Gia_ObjFanin0(Gia_ObjRoToRi(
p, pObj))) )
169 Vec_IntPush( vRos[0], Gia_ObjId(
p, pObj) );
170 assert( !Vec_IntSize(vLuts[0]) == !Vec_IntSize(vRos[0]) );
172 if ( Vec_IntSize(vLuts[1]) )
177 Gia_ObjSetTravIdCurrentId(
p, iFan);
179 if ( Gia_ObjIsTravIdCurrent(
p, pObj) )
180 Vec_IntPush( vRos[1], Gia_ObjId(
p, pObj) );
181 assert( !Vec_IntSize(vLuts[1]) == !Vec_IntSize(vRos[1]) );
184 for ( k = 0; k < 2; k++ )
186 Gia_ObjSetTravIdCurrentId(
p, Id);
188 if ( !Gia_ObjIsTravIdCurrent(
p, pObj) )
189 Vec_IntPush( vRos[2], Gia_ObjId(
p, pObj) );
193 Gia_ObjSetTravIdCurrentId(
p, Id);
196 if ( !Gia_ObjUpdateTravIdCurrentId(
p, iFan) )
197 Vec_IntPush( vRegs[0], iFan );
198 Vec_IntSort( vRegs[0], 0 );
199 assert( Vec_IntCountDuplicates(vRegs[1]) == 0 );
200 assert( !Vec_IntSize(vLuts[0]) == !Vec_IntSize(vRegs[0]) );
205 Gia_ObjSetTravIdCurrentId(
p, iFan);
208 Gia_ObjSetTravIdCurrentId(
p, iFan);
210 Gia_ObjSetTravIdCurrentId(
p, Gia_ObjFaninId0p(
p, pObj));
212 if ( Gia_ObjIsTravIdCurrentId(
p, Id) )
213 Vec_IntPush( vRegs[1], Id );
215 if ( Gia_ObjIsTravIdCurrentId(
p, Id) )
216 Vec_IntPush( vRegs[1], Id );
217 Vec_IntSort( vRegs[1], 0 );
218 assert( Vec_IntCountDuplicates(vRegs[1]) == 0 );
219 assert( !Vec_IntSize(vLuts[1]) == !Vec_IntSize(vRegs[1]) );
221 vInits[0] = Vec_IntSize(vLuts[0]) ?
Gia_ManSifInitPos(
p, vLuts[0], vRegs[0] ) : Vec_IntAlloc(0);
222 vInits[1] = Vec_IntSize(vLuts[1]) ?
Gia_ManSifInitNeg(
p, vLuts[1], vRegs[1] ) : Vec_IntAlloc(0);
226 printf(
"Flops : %5d %5d %5d\n", Vec_IntSize(vRos[0]), Vec_IntSize(vRos[1]), Vec_IntSize(vRos[2]) );
227 printf(
"LUTs : %5d %5d %5d\n", Vec_IntSize(vLuts[0]), Vec_IntSize(vLuts[1]), Vec_IntSize(vLuts[2]) );
228 printf(
"Spots : %5d %5d %5d\n", Vec_IntSize(vRegs[0]), Vec_IntSize(vRegs[1]), 0 );
231 pNew =
Gia_ManStart( Gia_ManObjNum(
p) + Vec_IntSize(vRegs[0]) + Vec_IntSize(vRegs[1]) );
232 pNew->
pName = Abc_UtilStrsav(
p->pName );
233 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
235 Vec_IntWriteEntry( vCopy, 0, 0 );
237 Vec_IntWriteEntry( vCopy, Gia_ObjId(
p, pObj), Gia_ManAppendCi(pNew) );
239 Vec_IntWriteEntry( vCopy, Id, Gia_ManAppendCi(pNew) );
241 Vec_IntWriteEntry( vCopy, Id, Abc_LitNotCond(Gia_ManAppendCi(pNew), Vec_IntEntry(vInits[1], i)) );
243 vTemp = Vec_IntAlloc(100);
245 Vec_IntPush( vTemp, Vec_IntEntry(vCopy, Id) );
247 Vec_IntWriteEntry( vCopy, Id, Abc_LitNotCond(Gia_ManAppendCi(pNew), Vec_IntEntry(vInits[0], i)) );
251 Vec_IntWriteEntry( vCopy, Id, Vec_IntEntry(vTemp, i) );
252 Vec_IntFree( vTemp );
255 Vec_IntWriteEntry( vCopy, Vec_IntEntry(vRos[0], i), Abc_LitNotCond(Vec_IntEntry(vCopy, Gia_ObjFaninId0p(
p, pObj)), Gia_ObjFaninC0(pObj)) );
260 Vec_IntWriteEntry( vCopy2, Vec_IntEntry(vRos[1], i), Abc_LitNotCond(Vec_IntEntry(vCopy, Gia_ObjFaninId0p(
p, pObj)), Gia_ObjFaninC0(pObj)) );
265 Gia_ManAppendCo( pNew, Abc_LitNotCond(Vec_IntEntry(vCopy, Gia_ObjFaninId0p(
p, pObj)), Gia_ObjFaninC0(pObj)) );
267 Gia_ManAppendCo( pNew, Abc_LitNotCond(Vec_IntEntry(vCopy, Gia_ObjFaninId0p(
p, pObj)), Gia_ObjFaninC0(pObj)) );
269 Gia_ManAppendCo( pNew, Abc_LitNotCond(Vec_IntEntry(vCopy2, Id), Vec_IntEntry(vInits[1], i)) );
271 Gia_ManAppendCo( pNew, Abc_LitNotCond(Vec_IntEntry(vCopy, Id), Vec_IntEntry(vInits[0], i)) );
273 Gia_ManSetRegNum( pNew, Vec_IntSize(vRos[2]) + Vec_IntSize(vRegs[0]) + Vec_IntSize(vRegs[1]) );
275 for ( i = 0; i < 3; i++ )
277 Vec_IntFreeP( &vLuts[i] );
278 Vec_IntFreeP( &vRos[i] );
280 Vec_IntFreeP( &vRegs[i] );
281 Vec_IntFreeP( &vInits[i] );
283 Vec_IntFree( vCopy );
284 Vec_IntFree( vCopy2 );
303 int i, * pCut, Area = 1;
304 if ( Gia_ObjUpdateTravIdCurrent(
p, pObj) )
306 if ( !Gia_ObjIsAnd(pObj) )
308 pCut = Vec_IntEntryP( vCuts, Gia_ObjId(
p, pObj)*nSize );
309 for ( i = 1; i <= pCut[0]; i++ )
323 int i, * pCut, Delay, nFails = 0;
324 if ( Gia_ObjUpdateTravIdCurrent(
p, pObj) )
326 if ( !Gia_ObjIsAnd(pObj) )
328 pCut = Vec_IntEntryP( vCuts, Gia_ObjId(
p, pObj)*nSize );
330 for ( i = 1; i <= pCut[0]; i++ )
333 Delay = Abc_MaxInt( Delay, Vec_IntEntry(vTimes, pCut[i] >> 8) );
336 return nFails + (int)(Delay > Vec_IntEntry(vTimes, Gia_ObjId(
p, pObj)));
346static inline int Gia_ManSifTimeToCount(
int Value,
int Period )
348 return (Period*0xFFFF + Value)/Period + ((Period*0xFFFF + Value)%Period != 0) - 0x10000;
353 Vec_Int_t * vCounts = Vec_IntStart( Gia_ManObjNum(
p) );
354 Vec_IntFillExtra( vTimes, Gia_ManObjNum(
p), 0 );
356 if ( Gia_ObjIsLut(
p, i) )
357 Vec_IntWriteEntry( vCounts, i, Gia_ManSifTimeToCount(Times, Period) );
364 printf(
"Current area = %d. Period = %d. ",
Gia_ManSifArea(
p, vCuts, nLutSize+1), Period );
366 printf(
"Delay checking failed for %d cuts.\n",
Gia_ManSifDelay(
p, vCuts, vTimes, nLutSize+1 ) );
369 Vec_IntFreeP( &vCounts );
385static inline void Gia_ManSifCutMerge(
int * pCut,
int * pCut1,
int * pCut2,
int nSize )
388 int * pBeg1 = pCut1+1;
389 int * pBeg2 = pCut2+1;
390 int * pEnd1 = pBeg1 + pCut1[0];
391 int * pEnd2 = pBeg2 + pCut2[0];
392 while ( pBeg1 < pEnd1 && pBeg2 < pEnd2 )
394 if ( pBeg == pCut+nSize )
399 if ( *pBeg1 == *pBeg2 )
400 *pBeg++ = *pBeg1++, pBeg2++;
401 else if ( *pBeg1 < *pBeg2 )
406 while ( pBeg1 < pEnd1 )
408 if ( pBeg == pCut+nSize )
415 while ( pBeg2 < pEnd2 )
417 if ( pBeg == pCut+nSize )
424 pCut[0] = pBeg-(pCut+1);
425 assert( pCut[0] < nSize );
429 int * pCut = Vec_IntEntryP( vCuts, iObj*nSize );
430 int * pCut2 = Vec_IntEntryP( vCuts, iSibl*nSize );
431 int Level2 = Vec_IntEntry( vTimes, iSibl );
int i;
433 if ( Level < Level2 || (Level == Level2 && pCut[0] <= pCut2[0]) )
435 for ( i = 0; i <= pCut2[0]; i++ )
442 int iFan0 = Gia_ObjFaninId0(pObj, iObj);
443 int iFan1 = Gia_ObjFaninId1(pObj, iObj);
444 int Cut0[2] = { 1, iFan0 << 8 };
445 int Cut1[2] = { 1, iFan1 << 8 };
446 int * pCut = Vec_IntEntryP( vCuts, iObj*nSize );
447 int * pCut0 = Vec_IntEntryP( vCuts, iFan0*nSize );
448 int * pCut1 = Vec_IntEntryP( vCuts, iFan1*nSize );
449 int Level_ = Vec_IntEntry( vTimes, iObj );
450 int Level0 = Vec_IntEntry( vTimes, iFan0 );
451 int Level1 = Vec_IntEntry( vTimes, iFan1 );
453 assert( pCut0[0] > 0 && pCut1[0] > 0 );
454 if ( Level0 == Level1 )
455 Gia_ManSifCutMerge( pCut, pCut0, pCut1, nSize );
456 else if ( Level0 > Level1 )
457 Gia_ManSifCutMerge( pCut, pCut0, Cut1, nSize );
459 Gia_ManSifCutMerge( pCut, pCut1, Cut0, nSize );
463 pCut[1] = iFan0 << 8;
464 pCut[2] = iFan1 << 8;
466 for ( i = 1; i <= pCut[0]; i++ )
467 Level = Abc_MaxInt( Level, Vec_IntEntry(vTimes, pCut[i] >> 8) );
469 if ( Gia_ObjSibl(
p, iObj) )
470 Level = Gia_ManSifCutChoice(
p, Level, iObj, Gia_ObjSibl(
p, iObj), vCuts, vTimes, nSize );
471 assert( pCut[0] > 0 && pCut[0] < nSize );
472 Vec_IntUpdateEntry( vTimes, iObj, Level );
473 return Level > Level_;
477 int i, fChange = 0, nSize = nLutSize+1;
480 fChange |= Gia_ManSifCutOne(
p, i, vCuts, vTimes, nSize );
482 Vec_IntWriteEntry( vTimes, Gia_ObjId(
p, pObj), Vec_IntEntry(vTimes, Gia_ObjFaninId0p(
p, pObj)) );
485 int TimeNew = Vec_IntEntry(vTimes, Gia_ObjId(
p, pObjRi)) - Period;
486 TimeNew = Abc_MaxInt( TimeNew, Vec_IntEntry(vTimes, Gia_ObjId(
p, pObjRo)) );
487 Vec_IntWriteEntry( vTimes, Gia_ObjId(
p, pObjRo), TimeNew );
493 Gia_Obj_t * pObj;
int i, Id, Stop, nSize = nLutSize+1;
494 assert( Gia_ManRegNum(
p) > 0 );
496 Vec_IntWriteEntry( vCuts, Id*nSize, 1 );
498 Vec_IntWriteEntry( vCuts, Id*nSize+1, Id << 8 );
499 Vec_IntFill( vTimes, Gia_ManObjNum(
p), -Period );
502 if ( Stop ) Vec_IntWriteEntry( vTimes, i, 0 );
503 Vec_IntWriteEntry( vTimes, 0, 0 );
505 Vec_IntWriteEntry( vTimes, Gia_ObjId(
p, pObj), 0 );
506 for ( *pIters = 0; *pIters < 100; (*pIters)++ )
511 if ( Vec_IntEntry(vTimes, Gia_ObjId(
p, pObj)) > Period )
514 if ( Vec_IntEntry(vTimes, Gia_ObjId(
p, pObj)) > 2*Period )
518 if ( Stop && Vec_IntEntry(vTimes, i) > Period )
525 Gia_Obj_t * pObj;
int i, Id, Res = 0, nSize = nLutSize+1;
526 Vec_IntFill( vTimes, Gia_ManObjNum(
p), 0 );
528 Vec_IntWriteEntry( vCuts, Id*nSize, 1 );
530 Vec_IntWriteEntry( vCuts, Id*nSize+1, Id << 8 );
532 Gia_ManSifCutOne(
p, i, vCuts, vTimes, nSize );
534 Res = Abc_MaxInt( Res, Vec_IntEntry(vTimes, Gia_ObjFaninId0p(
p, pObj)) );
539 int i, Value,
Pos[256] = {0}, Neg[256] = {0};
542 Value = Gia_ManSifTimeToCount( Vec_IntEntry(vTimes, i), Period );
543 Value = Abc_MinInt( Value, 255 );
544 Value = Abc_MaxInt( Value, -255 );
550 printf(
"Statistics: " );
551 for ( i = 255; i > 0; i-- )
553 printf(
" -%d=%d", i, Neg[i] );
554 for ( i = 0; i < 256; i++ )
556 printf(
" %d=%d", i,
Pos[i] );
561 int i, * pCut, Area = 1;
562 if ( !Gia_ObjIsAnd(pObj) )
564 if ( Gia_ObjUpdateTravIdCurrent(
p, pObj) )
566 pCut = Vec_IntEntryP( vCuts, Gia_ObjId(
p, pObj)*nSize );
567 for ( i = 1; i <= pCut[0]; i++ )
569 Vec_IntWriteEntry(
p->vMapping, Gia_ObjId(
p, pObj), Vec_IntSize(
p->vMapping) );
570 Vec_IntPush(
p->vMapping, pCut[0] );
571 for ( i = 1; i <= pCut[0]; i++ )
573 Gia_Obj_t * pObj = Gia_ManObj(
p, pCut[i] >> 8);
574 assert( !Gia_ObjIsAnd(pObj) || Gia_ObjIsLut(
p, pCut[i] >> 8) );
575 Vec_IntPush(
p->vMapping, pCut[i] >> 8 );
577 Vec_IntPush(
p->vMapping, -1 );
583 if (
p->vMapping != NULL )
585 printf(
"Removing available combinational mapping.\n" );
586 Vec_IntFreeP( &
p->vMapping );
589 p->vMapping = Vec_IntStart( Gia_ManObjNum(
p) );
598 int nIters, Status, nSize = nLutSize+1;
600 Vec_Int_t * vCuts = Vec_IntStart( Gia_ManObjNum(
p) * nSize );
601 Vec_Int_t * vTimes = Vec_IntAlloc( Gia_ManObjNum(
p) );
605 if ( fVerbose && Gia_ManRegNum(
p) )
606 printf(
"Clock period %2d is %s\n", Lower, 0 ?
"Yes" :
"No " );
607 if ( fVerbose && Gia_ManRegNum(
p) )
608 printf(
"Clock period %2d is %s\n", Upper, 1 ?
"Yes" :
"No " );
609 while ( Gia_ManRegNum(
p) > 0 && Upper - Lower > 1 )
611 int Middle = (Upper + Lower) / 2;
618 printf(
"Clock period %2d is %s after %d iterations\n", Middle, Status ?
"Yes" :
"No ", nIters );
621 printf(
"Best period = <<%d>> (%.2f %%) ", Upper, (
float)(100.0*(CombD-Upper)/CombD) );
623 printf(
"LUT size = %d ", nLutSize );
625 printf(
"Memory usage = %.2f MB ", 4.0*(2+1+nSize)*Gia_ManObjNum(
p)/(1 << 20) );
627 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
628 if ( Upper == CombD )
630 Vec_IntFree( vCuts );
631 Vec_IntFree( vTimes );
632 printf(
"Combinational delay (%d) cannot be improved.\n", CombD );
640 printf(
"Optimized level %2d (%6.2f %% less than comb level %2d). LUT size = %d. Area estimate = %d.\n",
641 Upper, (
float)(100.0*(CombD-Upper)/CombD), CombD, nLutSize,
Gia_ManSifArea(
p, vCuts, nLutSize+1) );
642 printf(
"The command is invoked in the evaluation mode. Retiming is not performed.\n" );
646 Vec_IntFree( vCuts );
647 Vec_IntFree( vTimes );
651 pNew->
vNamesIn =
p->vNamesIn;
p->vNamesIn = NULL;
654 Vec_PtrShrink( pNew->
vNamesIn, Gia_ManPiNum(pNew) );
655 for ( i = 0; i < Gia_ManRegNum(pNew); i++ )
656 Vec_PtrPush( pNew->
vNamesIn, Abc_UtilStrsavNum(
"_fo", i) );
658 if (
p->vNamesOut ) {
660 pNew->
vNamesOut =
p->vNamesOut;
p->vNamesOut = NULL;
663 Vec_PtrShrink( pNew->
vNamesOut, Gia_ManPoNum(pNew) );
664 for ( i = 0; i < Gia_ManRegNum(pNew); i++ )
665 Vec_PtrPush( pNew->
vNamesOut, Abc_UtilStrsavNum(
"_fi", i) );
int * Abc_NtkSolveGiaMiter(Gia_Man_t *p)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Gia_ManSifPrintTimes(Gia_Man_t *p, Vec_Int_t *vTimes, int Period)
int Gia_ManSifCheckPeriod(Gia_Man_t *p, Vec_Int_t *vCuts, Vec_Int_t *vTimes, int nLutSize, int Period, int *pIters)
int Gia_ManSifMapComb(Gia_Man_t *p, Vec_Int_t *vCuts, Vec_Int_t *vTimes, int nLutSize)
int Gia_ManSifDelay(Gia_Man_t *p, Vec_Int_t *vCuts, Vec_Int_t *vTimes, int nSize)
int Gia_ManSifDeriveMapping(Gia_Man_t *p, Vec_Int_t *vCuts, Vec_Int_t *vTimes, int nLutSize, int Period, int fVerbose)
int Gia_ManSifArea(Gia_Man_t *p, Vec_Int_t *vCuts, int nSize)
ABC_NAMESPACE_IMPL_START void Gia_ManSifDupNode_rec(Gia_Man_t *pNew, Gia_Man_t *p, Gia_Obj_t *pObj)
DECLARATIONS ///.
int Gia_ManSifDelay_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vCuts, Vec_Int_t *vTimes, int nSize)
void Gia_ManSifDupNode(Gia_Man_t *pNew, Gia_Man_t *p, int iObj, Vec_Int_t *vCopy)
Vec_Int_t * Gia_ManSifTimesToCounts(Gia_Man_t *p, Vec_Int_t *vTimes, int Period)
Vec_Int_t * Gia_ManSifInitPos(Gia_Man_t *p, Vec_Int_t *vMoves, Vec_Int_t *vRegs)
Gia_Man_t * Gia_ManSifDerive(Gia_Man_t *p, Vec_Int_t *vCounts, int fVerbose)
Vec_Int_t * Gia_ManSifInitNeg(Gia_Man_t *p, Vec_Int_t *vMoves, Vec_Int_t *vRegs)
Gia_Man_t * Gia_ManSifTransform(Gia_Man_t *p, Vec_Int_t *vCuts, Vec_Int_t *vTimes, int nLutSize, int Period, int fVerbose)
int Gia_ManSifCheckIter(Gia_Man_t *p, Vec_Int_t *vCuts, Vec_Int_t *vTimes, int nLutSize, int Period)
Gia_Man_t * Gia_ManSifPerform(Gia_Man_t *p, int nLutSize, int fEvalOnly, int fVerbose)
int Gia_ManSifArea_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vCuts, int nSize)
int Gia_ManSifDeriveMapping_rec(Gia_Man_t *p, Gia_Obj_t *pObj, Vec_Int_t *vCuts, int nSize)
void Gia_ManStop(Gia_Man_t *p)
Gia_Man_t * Gia_ManDup(Gia_Man_t *p)
#define Gia_ManForEachRo(p, pObj, i)
#define Gia_ManForEachPo(p, pObj, i)
void Gia_ManSetPhasePattern(Gia_Man_t *p, Vec_Int_t *vCiValues)
#define Gia_ManForEachAnd(p, pObj, i)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
#define Gia_ManForEachPi(p, pObj, i)
#define Gia_ManForEachLut(p, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
#define Gia_LutForEachFanin(p, i, iFan, k)
struct Gia_Man_t_ Gia_Man_t
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
void Gia_ManIncrementTravId(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachRoToRiVec(vRoIds, p, pObj, i)
#define Gia_ManForEachRiRo(p, pObjRi, pObjRo, i)
void Gia_ManSetPhase(Gia_Man_t *p)
#define Gia_ManForEachRi(p, pObj, i)
#define Gia_ManForEachCiId(p, Id, i)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
#define Vec_StrForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.