36#define BDD_FUNC_MAX 256
39extern DdNode * Abc_ConvertSopToBdd( DdManager * dd,
char * pSop, DdNode ** pbVars );
56DdNode * Abc_ResBuildBdd(
Abc_Ntk_t * pNtk, DdManager * dd )
60 DdNode * bFunc, * bPart, * bTemp, * bVar;
62 assert( Abc_NtkIsSopLogic(pNtk) );
63 assert( Abc_NtkCoNum(pNtk) <= 3 );
64 vBdds = Vec_PtrStart( Abc_NtkObjNumMax(pNtk) );
66 Vec_PtrWriteEntry( vBdds, Abc_ObjId(pObj), Cudd_bddIthVar(dd, i) );
69 vLocals = Vec_PtrAlloc( 6 );
72 if ( Abc_ObjFaninNum(pObj) == 0 )
74 bFunc = Cudd_NotCond( Cudd_ReadOne(dd),
Abc_SopIsConst0((
char *)pObj->
pData) ); Cudd_Ref( bFunc );
75 Vec_PtrWriteEntry( vBdds, Abc_ObjId(pObj), bFunc );
78 Vec_PtrClear( vLocals );
80 Vec_PtrPush( vLocals, Vec_PtrEntry(vBdds, Abc_ObjId(pFanin)) );
81 bFunc = Abc_ConvertSopToBdd( dd, (
char *)pObj->
pData, (DdNode **)Vec_PtrArray(vLocals) ); Cudd_Ref( bFunc );
82 Vec_PtrWriteEntry( vBdds, Abc_ObjId(pObj), bFunc );
84 Vec_PtrFree( vLocals );
86 bFunc = Cudd_ReadOne( dd ); Cudd_Ref( bFunc );
89 bVar = Cudd_bddIthVar( dd, i + Abc_NtkCiNum(pNtk) );
90 bTemp = (DdNode *)Vec_PtrEntry( vBdds, Abc_ObjFaninId0(pObj) );
91 bPart = Cudd_bddXnor( dd, bTemp, bVar ); Cudd_Ref( bPart );
92 bFunc = Cudd_bddAnd( dd, bTemp = bFunc, bPart ); Cudd_Ref( bFunc );
93 Cudd_RecursiveDeref( dd, bTemp );
94 Cudd_RecursiveDeref( dd, bPart );
98 Cudd_RecursiveDeref( dd, (DdNode *)Vec_PtrEntry(vBdds, Abc_ObjId(pObj)) );
100 Vec_PtrFree( vNodes );
102 Cudd_ReduceHeap( dd, CUDD_REORDER_SYMM_SIFT, 1 );
118void Abc_ResStartPart(
int nInputs,
unsigned uParts[],
int nParts )
120 int i, Group, Left, Shift = 0, Count = 0;
121 Group = nInputs / nParts;
122 Left = nInputs % nParts;
123 for ( i = 0; i < Left; i++ )
125 uParts[i] = (~((~0) << (Group+1))) << Shift;
128 for ( ; i < nParts; i++ )
130 uParts[i] = (~((~0) << Group)) << Shift;
133 for ( i = 0; i < nParts; i++ )
134 Count += Extra_WordCountOnes( uParts[i] );
135 assert( Count == nInputs );
149void Abc_ResStartPart2(
int nInputs,
unsigned uParts[],
int nParts )
152 for ( i = 0; i < nParts; i++ )
154 for ( i = 0; i < nInputs; i++ )
155 uParts[i % nParts] |= (1 << i);
156 for ( i = 0; i < nParts; i++ )
157 Count += Extra_WordCountOnes( uParts[i] );
158 assert( Count == nInputs );
172int Abc_ResCheckUnique(
char Pats[],
int nPats,
int pat )
175 for ( i = 0; i < nPats; i++ )
176 if ( Pats[i] == pat )
192int Abc_ResCheckNonStrict(
char Pattern[],
int nVars,
int nBits )
194 static char Pat0[256], Pat1[256];
195 int v, m, nPats0, nPats1, nNumber = (1 << (nBits - 1));
197 for ( v = 0; v < nVars; v++ )
200 for ( m = 0; m < (1<<nVars); m++ )
202 if ( (m & (1 << v)) == 0 )
204 if ( Abc_ResCheckUnique( Pat0, nPats0, Pattern[m] ) )
206 Pat0[ nPats0++ ] = Pattern[m];
207 if ( nPats0 > nNumber )
213 if ( Abc_ResCheckUnique( Pat1, nPats1, Pattern[m] ) )
215 Pat1[ nPats1++ ] = Pattern[m];
216 if ( nPats1 > nNumber )
221 if ( m == (1<<nVars) )
238int Abc_ResCofCount( DdManager * dd, DdNode * bFunc,
unsigned uMask,
int * pCheck )
240 static char Pattern[256];
243 DdNode * bCof, * bCube, * bTemp;
244 int i, k, Result, nVars = 0;
246 for ( i = 0; i < 32; i++ )
247 if ( uMask & (1 << i) )
248 pbVars[nVars++] = dd->vars[i];
251 vCofs = Vec_PtrAlloc( 100 );
252 for ( i = 0; i < (1 << nVars); i++ )
255 bCof = Cudd_Cofactor( dd, bFunc, bCube ); Cudd_Ref( bCof );
256 Cudd_RecursiveDeref( dd, bCube );
260 if ( k < Vec_PtrSize(vCofs) )
261 Cudd_RecursiveDeref( dd, bCof );
263 Vec_PtrPush( vCofs, bCof );
266 Result = Vec_PtrSize( vCofs );
268 Cudd_RecursiveDeref( dd, bCof );
269 Vec_PtrFree( vCofs );
272 *pCheck = Abc_ResCheckNonStrict( Pattern, nVars, Abc_Base2Log(Result) );
296int Abc_ResCost( DdManager * dd, DdNode * bFunc,
unsigned uMask,
int * pnCofs,
int * pCheck )
298 int nCofs = Abc_ResCofCount( dd, bFunc, uMask, pCheck );
299 int n2Log = Abc_Base2Log( nCofs );
300 if ( pnCofs ) *pnCofs = nCofs;
301 return 10000 * n2Log + (nCofs - (1 << (n2Log-1))) * (nCofs - (1 << (n2Log-1)));
315int Abc_ResMigrate( DdManager * dd, DdNode * bFunc,
int nInputs,
unsigned uParts[],
int iPart1,
int iPart2 )
317 unsigned uParts2[2] = { uParts[iPart1], uParts[iPart2] };
318 int i, k, CostCur, CostBest, fChange = 0;
319 assert( (uParts[iPart1] & uParts[iPart2]) == 0 );
320 CostBest = Abc_ResCost( dd, bFunc, uParts[iPart1], NULL, NULL )
321 + Abc_ResCost( dd, bFunc, uParts[iPart2], NULL, NULL );
322 for ( i = 0; i < nInputs; i++ )
323 if ( uParts[iPart1] & (1 << i) )
325 for ( k = 0; k < nInputs; k++ )
326 if ( uParts[iPart2] & (1 << k) )
330 uParts[iPart1] ^= (1 << i) | (1 << k);
331 uParts[iPart2] ^= (1 << i) | (1 << k);
332 CostCur = Abc_ResCost( dd, bFunc, uParts[iPart1], NULL, NULL ) + Abc_ResCost( dd, bFunc, uParts[iPart2], NULL, NULL );
333 if ( CostCur < CostBest )
336 uParts2[0] = uParts[iPart1];
337 uParts2[1] = uParts[iPart2];
340 uParts[iPart1] ^= (1 << i) | (1 << k);
341 uParts[iPart2] ^= (1 << i) | (1 << k);
344 uParts[iPart1] = uParts2[0];
345 uParts[iPart2] = uParts2[1];
360void Abc_ResPrint( DdManager * dd, DdNode * bFunc,
int nInputs,
unsigned uParts[],
int nParts )
362 int i, k, nCofs, Cost, CostAll = 0, fCheck;
363 for ( i = 0; i < nParts; i++ )
365 Cost = Abc_ResCost( dd, bFunc, uParts[i], &nCofs, &fCheck );
367 for ( k = 0; k < nInputs; k++ )
368 printf(
"%c", (uParts[i] & (1 << k))?
'a' + k :
'-' );
369 printf(
" %2d %d-%d %6d ", nCofs, Abc_Base2Log(nCofs), fCheck, Cost );
371 printf(
"%4d\n", CostAll );
385void Abc_ResPrintAllCofs( DdManager * dd, DdNode * bFunc,
int nInputs,
int nCofMax )
387 int i, k, nBits, nCofs, Cost, fCheck;
388 for ( i = 0; i < (1<<nInputs); i++ )
390 nBits = Extra_WordCountOnes( i );
391 if ( nBits < 3 || nBits > 6 )
393 Cost = Abc_ResCost( dd, bFunc, i, &nCofs, &fCheck );
394 if ( nCofs > nCofMax )
396 for ( k = 0; k < nInputs; k++ )
397 printf(
"%c", (i & (1 << k))?
'a' + k :
'-' );
398 printf(
" n=%2d c=%2d l=%d-%d %6d\n",
399 Extra_WordCountOnes(i), nCofs, Abc_Base2Log(nCofs), fCheck, Cost );
414void Abc_ResSwapRandom( DdManager * dd, DdNode * bFunc,
int nInputs,
unsigned uParts[],
int nParts,
int nTimes )
416 int i, k, n, iPart1, iPart2;
417 for ( n = 0; n < nTimes; )
423 i = rand() % nInputs;
424 k = rand() % nInputs;
427 for ( iPart1 = 0; iPart1 < nParts; iPart1++ )
428 if ( uParts[iPart1] & (1 << i) )
430 for ( iPart2 = 0; iPart2 < nParts; iPart2++ )
431 if ( uParts[iPart2] & (1 << k) )
433 if ( iPart1 == iPart2 )
436 uParts[iPart1] ^= (1 << i) | (1 << k);
437 uParts[iPart2] ^= (1 << i) | (1 << k);
455void Abc_ResPartition( DdManager * dd, DdNode * bFunc,
int nInputs )
460 int nSuppSize = Cudd_SupportSize( dd, bFunc );
461 printf(
"Ins =%3d. Outs =%2d. Nodes =%3d. Supp =%2d.\n",
462 nInputs, dd->size-nInputs, Cudd_DagSize(bFunc), nSuppSize );
465 if ( nSuppSize <= 6 )
467 printf(
"Support is less or equal than 6\n" );
472 Abc_ResStartPart( nInputs, uParts, 2 );
473 Abc_ResPrint( dd, bFunc, nInputs, uParts, 2 );
474 for ( i = 0; i < nIters; i++ )
478 printf(
"Randomizing... \n" );
479 Abc_ResSwapRandom( dd, bFunc, nInputs, uParts, 2, 20 );
480 Abc_ResPrint( dd, bFunc, nInputs, uParts, 2 );
485 fChange = Abc_ResMigrate( dd, bFunc, nInputs, uParts, 0, 1 );
486 Abc_ResPrint( dd, bFunc, nInputs, uParts, 2 );
490 else if ( nInputs > 12 && nInputs <= 18 )
492 Abc_ResStartPart( nInputs, uParts, 3 );
493 Abc_ResPrint( dd, bFunc, nInputs, uParts, 3 );
494 for ( i = 0; i < nIters; i++ )
498 printf(
"Randomizing... \n" );
499 Abc_ResSwapRandom( dd, bFunc, nInputs, uParts, 3, 20 );
500 Abc_ResPrint( dd, bFunc, nInputs, uParts, 3 );
505 fChange = Abc_ResMigrate( dd, bFunc, nInputs, uParts, 0, 1 );
506 Abc_ResPrint( dd, bFunc, nInputs, uParts, 3 );
507 fChange |= Abc_ResMigrate( dd, bFunc, nInputs, uParts, 0, 2 );
508 Abc_ResPrint( dd, bFunc, nInputs, uParts, 3 );
509 fChange |= Abc_ResMigrate( dd, bFunc, nInputs, uParts, 1, 2 );
510 Abc_ResPrint( dd, bFunc, nInputs, uParts, 3 );
514 else if ( nInputs > 18 && nInputs <= 24 )
516 Abc_ResStartPart( nInputs, uParts, 4 );
517 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
518 for ( i = 0; i < nIters; i++ )
522 printf(
"Randomizing... \n" );
523 Abc_ResSwapRandom( dd, bFunc, nInputs, uParts, 4, 20 );
524 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
529 fChange = Abc_ResMigrate( dd, bFunc, nInputs, uParts, 0, 1 );
530 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
531 fChange |= Abc_ResMigrate( dd, bFunc, nInputs, uParts, 0, 2 );
532 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
533 fChange |= Abc_ResMigrate( dd, bFunc, nInputs, uParts, 0, 3 );
534 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
535 fChange |= Abc_ResMigrate( dd, bFunc, nInputs, uParts, 1, 2 );
536 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
537 fChange |= Abc_ResMigrate( dd, bFunc, nInputs, uParts, 1, 3 );
538 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
539 fChange |= Abc_ResMigrate( dd, bFunc, nInputs, uParts, 2, 3 );
540 Abc_ResPrint( dd, bFunc, nInputs, uParts, 4 );
558void Abc_ResPartitionTest(
Abc_Ntk_t * pNtk )
562 dd = Cudd_Init( Abc_NtkCiNum(pNtk) + Abc_NtkCoNum(pNtk), 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
563 bFunc = Abc_ResBuildBdd( pNtk, dd ); Cudd_Ref( bFunc );
564 Abc_ResPartition( dd, bFunc, Abc_NtkCiNum(pNtk) );
565 Cudd_RecursiveDeref( dd, bFunc );
586int Abc_NtkBddCofCount( DdManager * dd, DdNode * bFunc, DdNode ** pbVars,
int nVars )
589 DdNode * bCof, * bCube;
591 vCofs = Vec_PtrAlloc( 100 );
592 for ( i = 0; i < (1 << nVars); i++ )
595 bCof = Cudd_Cofactor( dd, bFunc, bCube ); Cudd_Ref( bCof );
596 Cudd_RecursiveDeref( dd, bCube );
597 if ( Vec_PtrPushUnique( vCofs, bCof ) )
598 Cudd_RecursiveDeref( dd, bCof );
600 Result = Vec_PtrSize( vCofs );
602 Cudd_RecursiveDeref( dd, bCof );
603 Vec_PtrFree( vCofs );
618void Abc_NtkExploreCofs2( DdManager * dd, DdNode * bFunc, DdNode ** pbVars,
int nIns,
int nLutSize )
621 printf(
"Inputs = %2d. Nodes = %2d. LutSize = %2d.\n", nIns, Cudd_DagSize(bFunc), nLutSize );
622 for ( i = 0; i <= nIns - nLutSize; i++ )
623 printf(
"[%2d %2d] : %3d\n", i, i+nLutSize-1, Abc_NtkBddCofCount(dd, bFunc, dd->vars+i, nLutSize) );
637void Abc_NtkExploreCofs( DdManager * dd, DdNode * bFunc, DdNode ** pbVars,
int nIns,
int nLutSize )
641 DdNode * pbVarsNew[32];
642 int i, k, c, nCofs, nBits;
644 ddNew = Cudd_Init( dd->size, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
645 Cudd_ShuffleHeap( ddNew, dd->invperm );
646 bFuncNew = Cudd_bddTransfer( dd, ddNew, bFunc ); Cudd_Ref( bFuncNew );
648 for ( i = 0; i < (1 << nIns); i++ )
650 nBits = Extra_WordCountOnes(i);
651 if ( nBits != nLutSize && nBits != nLutSize -1 && nBits != nLutSize -2 )
653 for ( c = k = 0; k < nIns; k++ )
655 if ( (i & (1 << k)) == 0 )
658 pbVarsNew[c++] = ddNew->vars[k];
660 nCofs = Abc_NtkBddCofCount(ddNew, bFuncNew, pbVarsNew, c);
664 for ( c = k = 0; k < nIns; k++ )
666 if ( (i & (1 << k)) == 0 )
671 printf(
"%c", k +
'a' );
673 printf(
" : %2d\n", nCofs );
676 Cudd_RecursiveDeref( ddNew, bFuncNew );
691DdNode * Abc_NtkBddFindAddConst( DdManager * dd, DdNode * bFunc,
int nOuts )
694 DdNode * bFunc0, * bFunc1, * bConst0, * bConst1;
695 bConst0 = Cudd_ReadLogicZero( dd );
696 bConst1 = Cudd_ReadOne( dd );
697 for ( i = 0; i < nOuts; i++ )
699 if ( Cudd_IsComplement(bFunc) )
701 bFunc0 = Cudd_Not(Cudd_E(bFunc));
702 bFunc1 = Cudd_Not(Cudd_T(bFunc));
706 bFunc0 = Cudd_E(bFunc);
707 bFunc1 = Cudd_T(bFunc);
709 assert( bFunc0 == bConst0 || bFunc1 == bConst0 );
710 if ( bFunc0 == bConst0 )
712 TermMask ^= (1 << i);
718 assert( bFunc == bConst1 );
719 return Cudd_addConst( dd, TermMask );
733DdNode * Abc_NtkBddToAdd_rec( DdManager * dd, DdNode * bFunc,
int nOuts,
stmm_table * tTable,
int fCompl )
735 DdNode * aFunc0, * aFunc1, * aFunc;
737 assert( !Cudd_IsComplement(bFunc) );
740 if ( (
int)bFunc->index >= Cudd_ReadSize(dd) - nOuts )
742 assert( Cudd_ReadPerm(dd, bFunc->index) >= Cudd_ReadSize(dd) - nOuts );
743 aFunc = Abc_NtkBddFindAddConst( dd, Cudd_NotCond(bFunc, fCompl), nOuts ); Cudd_Ref( aFunc );
747 aFunc0 = Abc_NtkBddToAdd_rec( dd, Cudd_Regular(cuddE(bFunc)), nOuts, tTable, fCompl ^ Cudd_IsComplement(cuddE(bFunc)) );
748 aFunc1 = Abc_NtkBddToAdd_rec( dd, cuddT(bFunc), nOuts, tTable, fCompl );
749 aFunc = Cudd_addIte( dd, Cudd_addIthVar(dd, bFunc->index), aFunc1, aFunc0 ); Cudd_Ref( aFunc );
751 return (*ppSlot = aFunc);
765DdNode * Abc_NtkBddToAdd( DdManager * dd, DdNode * bFunc,
int nOuts )
767 DdNode * aFunc, * aTemp, * bTemp;
771 aFunc = Abc_NtkBddToAdd_rec( dd, Cudd_Regular(bFunc), nOuts, tTable, Cudd_IsComplement(bFunc) );
773 Cudd_RecursiveDeref( dd, aTemp );
790DdNode * Abc_NtkAddToBdd_rec( DdManager * dd, DdNode * aFunc,
int nIns,
int nOuts,
stmm_table * tTable )
792 DdNode * bFunc0, * bFunc1, * bFunc;
794 assert( !Cudd_IsComplement(aFunc) );
797 if ( Cudd_IsConstant(aFunc) )
799 assert( Cudd_ReadSize(dd) >= nIns + nOuts );
800 bFunc =
Extra_bddBitsToCube( dd, (
int)Cudd_V(aFunc), nOuts, dd->vars + nIns, 1 ); Cudd_Ref( bFunc );
804 assert( aFunc->index < nIns );
805 bFunc0 = Abc_NtkAddToBdd_rec( dd, cuddE(aFunc), nIns, nOuts, tTable );
806 bFunc1 = Abc_NtkAddToBdd_rec( dd, cuddT(aFunc), nIns, nOuts, tTable );
807 bFunc = Cudd_bddIte( dd, Cudd_bddIthVar(dd, aFunc->index), bFunc1, bFunc0 ); Cudd_Ref( bFunc );
809 return (*ppSlot = bFunc);
823DdNode * Abc_NtkAddToBdd( DdManager * dd, DdNode * aFunc,
int nIns,
int nOuts )
825 DdNode * bFunc, * bTemp, * aTemp;
829 bFunc = Abc_NtkAddToBdd_rec( dd, aFunc, nIns, nOuts, tTable );
831 Cudd_RecursiveDeref( dd, bTemp );
848DdNode * Abc_NtkBddDecCharFunc( DdManager * dd, DdNode ** pFuncs,
int nOuts,
int Mask,
int nBits )
850 DdNode * bFunc, * bTemp, * bExor, * bVar;
852 bFunc = Cudd_ReadOne( dd ); Cudd_Ref( bFunc );
853 for ( i = 0; i < nOuts; i++ )
855 if ( (Mask & (1 << i)) == 0 )
858 bVar = Cudd_bddIthVar( dd, dd->size - nOuts + i );
859 bExor = Cudd_bddXor( dd, pFuncs[i], bVar ); Cudd_Ref( bExor );
860 bFunc = Cudd_bddAnd( dd, bTemp = bFunc, Cudd_Not(bExor) ); Cudd_Ref( bFunc );
861 Cudd_RecursiveDeref( dd, bTemp );
862 Cudd_RecursiveDeref( dd, bExor );
880DdNode * Abc_NtkBddDecTry(
reo_man * pReo, DdManager * dd, DdNode ** pFuncs,
int nIns,
int nOuts,
int Mask,
int nBits )
885 bFunc = Abc_NtkBddDecCharFunc( dd, pFuncs, nOuts, Mask, nBits ); Cudd_Ref( bFunc );
924DdNode * Abc_NtkBddDecInt(
reo_man * pReo, DdManager * dd, DdNode ** pFuncs,
int nIns,
int nOuts )
939 return Abc_NtkBddDecTry( pReo, dd, pFuncs, nIns, nOuts, ~(1<<(32-nOuts)), nOuts );
954Abc_Ntk_t * Abc_NtkCreateFromCharFunc(
Abc_Ntk_t * pNtk, DdManager * dd, DdNode * bFunc )
957 Abc_Obj_t * pNode, * pNodeNew, * pNodePo;
963 pNodeNew = Abc_NtkCreateNode( pNtkNew );
966 pNode->
pCopy = Abc_NtkCreatePi( pNtkNew );
973 pNode->
pCopy = Abc_NtkCreatePi( pNtkNew );
980 pNodePo = Abc_NtkCreatePo( pNtkNew );
984 fprintf( stdout,
"Abc_NtkCreateFromCharFunc(): Network check has failed.\n" );
1001 int nBddSizeMax = 1000000;
1002 int fDropInternal = 0;
1007 DdNode * pFuncs[BDD_FUNC_MAX];
1011 assert( Abc_NtkIsStrash(pNtk) );
1012 assert( Abc_NtkCoNum(pNtk) <= BDD_FUNC_MAX );
1016 Abc_Print( -1,
"Construction of global BDDs has failed.\n" );
1021 pFuncs[i] = (DdNode *)Abc_ObjGlobalBdd(pNode);
1024 assert( dd->size == Abc_NtkCiNum(pNtk) );
1025 for ( i = 0; i < Abc_NtkCoNum(pNtk); i++ )
1026 Cudd_addNewVarAtLevel( dd, dd->size );
1035 bFunc = Abc_NtkBddDecInt( pReo, dd, pFuncs, Abc_NtkCiNum(pNtk), Abc_NtkCoNum(pNtk) ); Cudd_Ref( bFunc );
1038Abc_NtkExploreCofs( dd, bFunc, dd->vars, Abc_NtkCiNum(pNtk), 6 );
1045 Cudd_RecursiveDeref( dd, bFunc );
ABC_NAMESPACE_IMPL_START Abc_Ntk_t * Abc_NtkBddDec(Abc_Ntk_t *pNtk, int fVerbose)
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 int Abc_SopIsConst0(char *pSop)
ABC_DLL Vec_Ptr_t * Abc_NtkDfs(Abc_Ntk_t *pNtk, int fCollectAll)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
#define Abc_ObjForEachFanin(pObj, pFanin, i)
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 void * Abc_NtkFreeGlobalBdds(Abc_Ntk_t *pNtk, int fFreeMan)
ABC_DLL void * Abc_NtkBuildGlobalBdds(Abc_Ntk_t *pNtk, int fBddSizeMax, int fDropInternal, int fReorder, int fReverse, int fVerbose)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Extra_ReorderQuit(reo_man *p)
reo_man * Extra_ReorderInit(int nDdVarsMax, int nNodesMax)
FUNCTION DECLARATIONS ///.
void Extra_ReorderSetVerbosity(reo_man *p, int fVerbose)
void Extra_ReorderSetMinimizationType(reo_man *p, reo_min_type fMinType)
void Extra_ReorderSetVerification(reo_man *p, int fVerify)
int st__ptrhash(const char *, int)
int st__ptrcmp(const char *, const char *)
int stmm_find_or_add(stmm_table *table, char *key, char ***slot)
void stmm_free_table(stmm_table *table)
stmm_table * stmm_init_table(stmm_compare_func_type compare, stmm_hash_func_type hash)
#define stmm_foreach_item(table, gen, key, value)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.