39extern int Abc_NodeSupport( DdNode * bFunc,
Vec_Str_t * vSupport,
int nVars );
56int Abc_NodeMinimumBase2(
Abc_Obj_t * pNode )
64 assert( Abc_ObjIsNode(pNode) );
67 vSupport = Vec_StrAlloc( 10 );
68 nVars = Abc_NodeSupport( Cudd_Regular(pNode->
pData), vSupport, Abc_ObjFaninNum(pNode) );
69 if ( nVars == Abc_ObjFaninNum(pNode) )
71 Vec_StrFree( vSupport );
76 vFanins = Vec_PtrAlloc( Abc_ObjFaninNum(pNode) );
78 Vec_IntClear( &pNode->
vFanins );
79 for ( i = 0; i < vFanins->nSize; i++ )
80 if ( vSupport->
pArray[i] != 0 )
82 assert( nVars == Abc_ObjFaninNum(pNode) );
86 Cudd_RecursiveDeref( (DdManager *)pNode->
pNtk->
pManFunc, bTemp );
87 Vec_PtrFree( vFanins );
88 Vec_StrFree( vSupport );
91int Abc_NtkMinimumBase2(
Abc_Ntk_t * pNtk )
95 assert( Abc_NtkIsBddLogic(pNtk) );
102 Counter += Abc_NodeMinimumBase2( pNode );
106 Vec_IntPush( &pFanin->
vFanouts, Abc_ObjId(pNode) );
121Abc_Obj_t * Abc_NodeFromGlobalBdds(
Abc_Ntk_t * pNtkNew, DdManager * dd, DdNode * bFunc,
int fReverse )
126 pNodeNew = Abc_NtkCreateNode( pNtkNew );
129 Abc_ObjAddFanin( pNodeNew, Abc_NtkCi(pNtkNew, fReverse ? Abc_NtkCiNum(pNtkNew)-1-dd->invperm[i] : dd->invperm[i]) );
138 Abc_Obj_t * pNode, * pDriver, * pNodeNew;
139 DdManager * dd = (DdManager *)Abc_NtkGlobalBddMan( pNtk );
145 DdManager * ddExdc = NULL;
146 DdNode * bBddMin, * bBddDc, * bBddL, * bBddU;
153 ddExdc = (DdManager *)Abc_NtkGlobalBddMan( pNtk->
pExdc );
154 bBddDc = (DdNode *)Abc_ObjGlobalBdd(Abc_NtkCo(pNtk->
pExdc, 0));
155 bBddDc = Cudd_bddTransfer( ddExdc, dd, bBddDc ); Cudd_Ref( bBddDc );
160 bBddMin = (DdNode *)Abc_ObjGlobalBdd(pNode);
162 bBddL = Cudd_bddAnd( dd, bBddMin, Cudd_Not(bBddDc) ); Cudd_Ref( bBddL );
163 bBddU = Cudd_bddAnd( dd, Cudd_Not(bBddMin), Cudd_Not(bBddDc) ); Cudd_Ref( bBddU );
164 Cudd_RecursiveDeref( dd, bBddMin );
166 bBddMin = Cudd_bddIsop( dd, bBddL, Cudd_Not(bBddU) ); Cudd_Ref( bBddMin );
167 Cudd_RecursiveDeref( dd, bBddL );
168 Cudd_RecursiveDeref( dd, bBddU );
170 Abc_ObjSetGlobalBdd( pNode, bBddMin );
173 Cudd_RecursiveDeref( dd, bBddDc );
179 Cudd_bddIthVar( (DdManager *)pNtkNew->
pManFunc, dd->size-1 );
184 Extra_ProgressBarUpdate( pProgress, i, NULL );
185 pDriver = Abc_ObjFanin0(pNode);
191 pNodeNew = Abc_NodeFromGlobalBdds( pNtkNew, dd, (DdNode *)Abc_ObjGlobalBdd(pNode), fReverse );
198void Abc_NtkDumpVariableOrder(
Abc_Ntk_t * pNtk )
200 DdManager * dd = (DdManager *)Abc_NtkGlobalBddMan( pNtk );
201 FILE * pFile = fopen(
"order.txt",
"wb" );
int i;
202 for ( i = 0; i < dd->size; i++ )
203 fprintf( pFile,
"%d ", dd->invperm[i] );
204 fprintf( pFile,
"\n" );
212 assert( Abc_NtkIsStrash(pNtk) );
218 DdManager * dd = (DdManager *)Abc_NtkGlobalBddMan( pNtk );
219 printf(
"Shared BDD size = %6d nodes. ", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
220 ABC_PRT(
"BDD construction time", Abc_Clock() - clk );
223 Abc_NtkDumpVariableOrder( pNtk );
226 pNtkNew = Abc_NtkFromGlobalBdds( pNtk, fReverse );
228 if ( pNtkNew == NULL )
232 Abc_NtkMinimumBase2( pNtkNew );
240 printf(
"Abc_NtkCollapse: The network check has failed.\n" );
274 if ( Abc_NodeIsTravIdCurrent(pNode) || Abc_ObjFaninNum(pNode) == 0 || Abc_ObjIsCi(pNode) )
276 assert( Abc_ObjIsNode( pNode ) );
277 Abc_NodeSetTravIdCurrent( pNode );
280 iLit0 = Abc_LitNotCond( iLit0, Abc_ObjFaninC0(pNode) );
281 iLit1 = Abc_LitNotCond( iLit1, Abc_ObjFaninC1(pNode) );
296 Abc_NtkCi(pNtk, iCi)->iTemp = Gia_ManAppendCi(pNew);
298 Abc_NtkIncrementTravId( pNtk );
299 pNode = Abc_NtkCo( pNtk, iCo );
301 iLit = Abc_LitNotCond( iLit, Abc_ObjFaninC0(pNode) );
302 Gia_ManAppendCo( pNew, iLit );
308Vec_Str_t * Abc_NtkClpOne(
Abc_Ntk_t * pNtk,
int iCo,
int nCubeLim,
int nBTLimit,
int fVerbose,
int fCanon,
int fReverse,
Vec_Int_t * vSupp )
313 Gia_Man_t * pGia = Abc_NtkClpOneGia( pNtk, iCo, vSupp );
315 printf(
"Output %4d: Supp = %4d. Cone =%6d.\n", iCo, Vec_IntSize(vSupp), Gia_ManAndNum(pGia) );
316 vSop =
Bmc_CollapseOne( pGia, nCubeLim, nBTLimit, fCanon, fReverse, fVerbose );
320 if ( Vec_StrSize(vSop) == 4 )
323 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
342 Vec_Wec_t * vSupps = Vec_WecStart( Abc_NtkObjNumMax(pNtk) );
344 Vec_IntPush( Vec_WecEntry(vSupps, pNode->
Id), i );
346 Vec_IntTwoMerge2( Vec_WecEntry(vSupps, Abc_ObjFanin0(pNode)->Id),
347 Vec_WecEntry(vSupps, Abc_ObjFanin1(pNode)->Id),
348 Vec_WecEntry(vSupps, pNode->
Id) );
350 Abc_PrintTime( 1,
"Support computation", Abc_Clock() - clk );
367 int Diff = (*pp2)->iTemp - (*pp1)->iTemp;
382 Vec_Ptr_t * vNodes = Vec_PtrAlloc( Abc_NtkCoNum(pNtk) );
385 pNode->
iTemp = Vec_IntSize( Vec_WecEntry(vSupps, Abc_ObjFaninId0(pNode)) );
386 Vec_PtrPush( vNodes, pNode );
389 qsort( (
void *)Vec_PtrArray(vNodes), (
size_t)Vec_PtrSize(vNodes),
sizeof(
Abc_Obj_t *),
390 (
int (*)(
const void *,
const void *)) Abc_NodeCompareByTemp );
415 vSop = Abc_NtkClpOne( pNtk, iCo, nCubeLim, nBTLimit, fVerbose, fCanon, fReverse, vSupp );
419 pNodeNew = Abc_NtkCreateNode( pNtkNew );
421 if ( Vec_StrSize(vSop) > 4 )
429Abc_Ntk_t * Abc_NtkFromSops(
Abc_Ntk_t * pNtk,
int nCubeLim,
int nBTLimit,
int nCostMax,
int fCanon,
int fReverse,
int fVerbose )
433 Abc_Obj_t * pNode, * pDriver, * pNodeNew;
434 Vec_Ptr_t * vDriverCopy, * vCoNodes, * vDfsNodes;
444 vSupps = Abc_NtkCreateCoSupps( pNtk, fVerbose );
446 vCoNodes = Abc_NtkCreateCoOrder( pNtk, vSupps );
451 pNode = (
Abc_Obj_t *)Vec_PtrEntry( vCoNodes, 0 );
453 vLevel = Vec_WecEntry( vSupps, Abc_ObjFaninId0(pNode) );
454 Cost = (
word)Vec_PtrSize(vDfsNodes) * (
word)Vec_IntSize(vLevel) * (
word)nCubeLim;
455 if ( Cost > (
word)nCostMax )
457 printf(
"Cost of the largest output cone exceeded the limit (%d * %d * %d > %d).\n",
458 Vec_PtrSize(vDfsNodes), Vec_IntSize(vLevel), nCubeLim, nCostMax );
459 Vec_PtrFree( vDfsNodes );
460 Vec_PtrFree( vCoNodes );
461 Vec_WecFree( vSupps );
464 Vec_PtrFree( vDfsNodes );
467 vNodeCoIds = Vec_IntAlloc( Abc_NtkCoNum(pNtk) );
471 Vec_IntPush( vNodeCoIds, pNode->
iTemp );
476 vDriverCopy = Vec_PtrAlloc( Abc_NtkCoNum(pNtk) );
479 Vec_PtrPush( vDriverCopy, Abc_ObjFanin0(pNode)->pCopy );
485 Extra_ProgressBarUpdate( pProgress, i, NULL );
486 pDriver = Abc_ObjFanin0(pNode);
492 if ( Abc_ObjIsCi(pDriver) )
494 pNodeNew = Abc_NtkCreateNode( pNtkNew );
502 pNodeNew = Abc_NtkCreateNode( pNtkNew );
507 pNodeNew = Abc_NtkFromSopsOne( pNtkNew, pNtk, Vec_IntEntry(vNodeCoIds, i), Vec_WecEntry(vSupps, Abc_ObjFanin0(pNode)->Id), nCubeLim, nBTLimit, fCanon, fReverse, i ? 0 : fVerbose );
508 if ( pNodeNew == NULL )
516 Vec_PtrFree( vDriverCopy );
517 Vec_PtrFree( vCoNodes );
518 Vec_IntFree( vNodeCoIds );
519 Vec_WecFree( vSupps );
526 assert( Abc_NtkIsStrash(pNtk) );
528 pNtkNew = Abc_NtkFromSops( pNtk, nCubeLim, nBTLimit, nCostMax, fCanon, fReverse, fVerbose );
529 if ( pNtkNew == NULL )
536 printf(
"Abc_NtkCollapseSat: The network check has failed.\n" );
565 if ( pNode->
iTemp >= 0 )
567 assert( Abc_ObjIsNode( pNode ) );
570 iLit0 = Abc_LitNotCond( iLit0, Abc_ObjFaninC0(pNode) );
571 iLit1 = Abc_LitNotCond( iLit1, Abc_ObjFaninC1(pNode) );
572 return (pNode->
iTemp = Gia_ManAppendAnd(pNew, iLit0, iLit1));
579 assert( Abc_NtkIsStrash(pNtk) );
587 pNode->
iTemp = Gia_ManAppendCi(pNew);
591 iLit = Abc_LitNotCond( iLit, Abc_ObjFaninC0(pNode) );
592 Gia_ManAppendCo( pNew, iLit );
608#define Abc_NtkSopForEachCube( pSop, nVars, pCube ) for ( pCube = (pSop); *pCube; pCube += (nVars) + 3 )
612 int j = 0, i, k, iCo, iVar, nVars = Vec_IntSize(vSupp);
613 char * pCube, * pSop = Vec_StrArray(vSop);
615 if ( Vec_StrSize(vSop) == 4 )
618 Vec_IntClear( Vec_WecEntry(vSupps, iCo) );
621 vPres = Vec_IntStart( nVars );
623 for ( k = 0; k < nVars; k++ )
624 if ( pCube[k] !=
'-' )
625 Vec_IntWriteEntry( vPres, k, 1 );
626 if ( Vec_IntCountZero(vPres) == 0 )
628 Vec_IntFree( vPres );
633 for ( k = 0; k < nVars + 3; k++ )
634 if ( k >= nVars || Vec_IntEntry(vPres, k) )
635 Vec_StrWriteEntry( vSop, j++, pCube[k] );
636 Vec_StrWriteEntry( vSop, j++,
'\0' );
637 Vec_StrShrink( vSop, j );
642 vSupp = Vec_WecEntry( vSupps, iCo );
644 if ( Vec_IntEntry(vPres, k) )
645 Vec_IntWriteEntry( vSupp, j++, iVar );
646 Vec_IntShrink( vSupp, j );
648 Vec_IntFree( vPres );
668 int i, k, iObj, status, nVars = 2;
676 Vec_IntWriteEntry( vMap, iCoObjId, nVars++ );
678 Vec_IntWriteEntry( vMap, iObj, nVars++ );
681 Vec_IntWriteEntry( vMap, iObj, nVars++ );
689 Vec_IntPush( vAnds, iCoObjId );
692 int iClaBeg, iClaEnd, * pLit;
697 assert( iClaBeg < iClaEnd );
698 for ( i = iClaBeg; i < iClaEnd; i++ )
700 Vec_IntClear( vLits );
701 for ( pLit = pCnf->
pClauses[i]; pLit < pCnf->pClauses[i+1]; pLit++ )
702 Vec_IntPush( vLits, Abc_Lit2LitV(Vec_IntArray(vMap), *pLit) );
703 status =
sat_solver_addclause( pSat, Vec_IntArray(vLits), Vec_IntArray(vLits)+Vec_IntSize(vLits) );
706 if ( ppSat1 )
sat_solver_addclause( *ppSat1, Vec_IntArray(vLits), Vec_IntArray(vLits)+Vec_IntSize(vLits) );
707 if ( ppSat2 )
sat_solver_addclause( *ppSat2, Vec_IntArray(vLits), Vec_IntArray(vLits)+Vec_IntSize(vLits) );
708 if ( ppSat3 )
sat_solver_addclause( *ppSat3, Vec_IntArray(vLits), Vec_IntArray(vLits)+Vec_IntSize(vLits) );
712 Vec_IntFree( vLits );
735 printf(
"Output %4d: Supp = %4d. Cone =%6d.\n", iCo, Vec_IntSize(vSupp), Gia_ManAndNum(pGia) );
742 printf(
"Supp new = %4d. Sop = %4d. ", Vec_IntSize(vSupp), Vec_StrSize(vSop)/(Vec_IntSize(vSupp) +3) );
744 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
747Vec_Str_t *
Abc_NtkClpGiaOne2(
Cnf_Dat_t * pCnf,
Gia_Man_t *
p,
int iCo,
int nCubeLim,
int nBTLimit,
int fCanon,
int fReverse,
Vec_Int_t * vSupp,
Vec_Int_t * vMap,
int fVerbose,
Vec_Int_t * vClass,
Vec_Wec_t * vSupps )
750 sat_solver * pSat, * pSat1 = NULL, * pSat2 = NULL, * pSat3 = NULL;
756 int i, iCoObjId = Gia_ObjId(
p, Gia_ManCo(
p, iCo) );
758 Vec_Int_t * vSuppObjs = Vec_IntAlloc( 100 );
760 Vec_IntPush( vSuppObjs, Gia_ObjId(
p, pObj) );
763 assert( Vec_IntSize(vAnds) > 0 );
766 Vec_IntFree( vSuppObjs );
768 printf(
"Output %4d: Supp = %4d. Cone =%6d.\n", iCo, Vec_IntSize(vSupp), Vec_IntSize(vAnds) );
771 vSop =
Bmc_CollapseOne_int( pSat, Vec_IntSize(vSupp), nCubeLim, nBTLimit, fCanon, fReverse, fVerbose );
776 Vec_IntFree( vAnds );
781 printf(
"Supp new = %4d. Sop = %4d. ", Vec_IntSize(vSupp), Vec_StrSize(vSop)/(Vec_IntSize(vSupp) +3) );
783 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
791 Vec_Int_t * vReprs, * vClass, * vReprSuppSizes;
792 int i, k, Entry, iCo, * pOrder;
800 printf(
"Considering %d (out of %d) outputs. ", Vec_WecSize(vClasses), Gia_ManCoNum(
p) );
801 Abc_PrintTime( 1,
"Reduction time", Abc_Clock() - clk );
804 vReprs = Vec_WecCollectFirsts( vClasses );
805 vReprSuppSizes = Vec_IntAlloc( Vec_IntSize(vReprs) );
807 Vec_IntPush( vReprSuppSizes, Vec_IntSize(Vec_WecEntry(vSupps, Entry)) );
808 pOrder =
Abc_MergeSortCost( Vec_IntArray(vReprSuppSizes), Vec_IntSize(vReprSuppSizes) );
809 Vec_IntFree( vReprSuppSizes );
813 vMap = Vec_IntStartFull( Gia_ManObjNum(
p) );
816 vSopsRepr = Vec_PtrStart( Vec_IntSize(vReprs) );
818 Extra_ProgressBarUpdate( pProgress, 0, NULL );
819 for ( i = 0; i < Vec_IntSize(vReprs); i++ )
821 int iEntry = pOrder[Vec_IntSize(vReprs) - 1 - i];
822 int iCoThis = Vec_IntEntry( vReprs, iEntry );
823 Vec_Int_t * vSupp = Vec_WecEntry( vSupps, iCoThis );
825 if ( Vec_IntSize(vSupp) < 2 )
827 Vec_PtrWriteEntry( vSopsRepr, iEntry, (
void *)(ABC_PTRINT_T)1 );
830 if ( fCnfShared && !fCanon )
831 vSop =
Abc_NtkClpGiaOne2( pCnf,
p, iCoThis, nCubeLim, nBTLimit, fCanon, fReverse, vSupp, vMap, i ? 0 : fVerbose, Vec_WecEntry(vClasses, iEntry), vSupps );
833 vSop =
Abc_NtkClpGiaOne(
p, iCoThis, nCubeLim, nBTLimit, fCanon, fReverse, vSupp, i ? 0 : fVerbose, Vec_WecEntry(vClasses, iEntry), vSupps );
837 Extra_ProgressBarUpdate( pProgress, i, NULL );
848 vSops = Vec_PtrStart( Gia_ManCoNum(
p) );
851 Vec_PtrWriteEntry( vSops, iCo, Vec_PtrEntry(vSopsRepr, i) );
852 assert( Vec_PtrCountZero(vSops) == 0 );
865 Vec_IntFree( vReprs );
866 Vec_WecFree( vClasses );
867 Vec_PtrFree( vSopsRepr );
877 Abc_Obj_t * pNode, * pNodeNew, * pDriver;
882 if ( nCubeLim > 0 && nCostMax > 0 )
885 int iObjMax = Gia_ObjId( pGia, Gia_ManCo(pGia, iCoMax) );
886 int nSuppMax = Vec_IntSize( Vec_WecEntry(vSupps, iCoMax) );
889 if ( Cost > (
word)nCostMax )
891 printf(
"Cost of the largest output cone exceeded the limit (%d * %d * %d > %d).\n",
892 nNodeMax,
nSuppMax, nCubeLim, nCostMax );
894 Vec_WecFree( vSupps );
899 vSops =
Abc_GiaDeriveSops( pNtkNew, pGia, vSupps, nCubeLim, nBTLimit, nCostMax, fCanon, fReverse, fCnfShared, fVerbose );
903 Vec_WecFree( vSupps );
909 pDriver = Abc_ObjFanin0(pNode);
915 if ( Abc_ObjIsCi(pDriver) )
917 pNodeNew = Abc_NtkCreateNode( pNtkNew );
925 pNodeNew = Abc_NtkCreateNode( pNtkNew );
930 pNodeNew = Abc_NtkCreateNode( pNtkNew );
931 vSupp = Vec_WecEntry( vSupps, i );
935 assert( pNodeNew->
pData != (
void *)(ABC_PTRINT_T)1 );
938 Vec_WecFree( vSupps );
939 Vec_PtrFree( vSops );
946 assert( Abc_NtkIsStrash(pNtk) );
947 pNtkNew =
Abc_NtkFromSopsInt( pNtk, nCubeLim, nBTLimit, nCostMax, fCanon, fReverse, fCnfShared, fVerbose );
948 if ( pNtkNew == NULL )
954 printf(
"Abc_NtkCollapseSat: The network check has failed.\n" );
Vec_Ptr_t * Abc_GiaDeriveSops(Abc_Ntk_t *pNtkNew, Gia_Man_t *p, Vec_Wec_t *vSupps, int nCubeLim, int nBTLimit, int nCostMax, int fCanon, int fReverse, int fCnfShared, int fVerbose)
int Abc_NtkClpGia_rec(Gia_Man_t *pNew, Abc_Obj_t *pNode)
Abc_Ntk_t * Abc_NtkFromSopsInt(Abc_Ntk_t *pNtk, int nCubeLim, int nBTLimit, int nCostMax, int fCanon, int fReverse, int fCnfShared, int fVerbose)
ABC_NAMESPACE_IMPL_START Abc_Ntk_t * Abc_NtkCollapse(Abc_Ntk_t *pNtk, int fBddSizeMax, int fDualRail, int fReorder, int fReverse, int fDumpOrder, int fVerbose)
DECLARATIONS ///.
Vec_Str_t * Abc_NtkClpGiaOne(Gia_Man_t *p, int iCo, int nCubeLim, int nBTLimit, int fCanon, int fReverse, Vec_Int_t *vSupp, int fVerbose, Vec_Int_t *vClass, Vec_Wec_t *vSupps)
int Gia_ManCoLargestSupp(Gia_Man_t *p, Vec_Wec_t *vSupps)
Vec_Wec_t * Gia_ManCreateCoSupps(Gia_Man_t *p, int fVerbose)
Gia_Man_t * Abc_NtkClpGia(Abc_Ntk_t *pNtk)
sat_solver * Abc_NtkClpDeriveSatSolver(Cnf_Dat_t *pCnf, int iCoObjId, Vec_Int_t *vSupp, Vec_Int_t *vAnds, Vec_Int_t *vMap, sat_solver **ppSat1, sat_solver **ppSat2, sat_solver **ppSat3)
int Abc_NtkCollapseReduce(Vec_Str_t *vSop, Vec_Int_t *vSupp, Vec_Int_t *vClass, Vec_Wec_t *vSupps)
Vec_Wec_t * Gia_ManIsoStrashReduceInt(Gia_Man_t *p, Vec_Wec_t *vSupps, int fVerbose)
Vec_Str_t * Abc_NtkClpGiaOne2(Cnf_Dat_t *pCnf, Gia_Man_t *p, int iCo, int nCubeLim, int nBTLimit, int fCanon, int fReverse, Vec_Int_t *vSupp, Vec_Int_t *vMap, int fVerbose, Vec_Int_t *vClass, Vec_Wec_t *vSupps)
Abc_Ntk_t * Abc_NtkCollapseSat(Abc_Ntk_t *pNtk, int nCubeLim, int nBTLimit, int nCostMax, int fCanon, int fReverse, int fCnfShared, int fVerbose)
#define Abc_NtkSopForEachCube(pSop, nVars, pCube)
int Abc_NtkClpOneGia_rec(Gia_Man_t *pNew, Abc_Obj_t *pNode)
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)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
#define Abc_NtkForEachObj(pNtk, pObj, i)
ITERATORS ///.
#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 void * Abc_NtkFreeGlobalBdds(Abc_Ntk_t *pNtk, int fFreeMan)
ABC_DLL void Abc_NtkSortSops(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NodeCollectFanins(Abc_Obj_t *pNode, Vec_Ptr_t *vNodes)
ABC_DLL void * Abc_NtkBuildGlobalBdds(Abc_Ntk_t *pNtk, int fBddSizeMax, int fDropInternal, int fReorder, int fReverse, int fVerbose)
ABC_DLL int Abc_SopGetVarNum(char *pSop)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL Vec_Ptr_t * Abc_NtkDfsNodes(Abc_Ntk_t *pNtk, Abc_Obj_t **ppNodes, int nNodes)
ABC_DLL char * Abc_SopRegister(Mem_Flex_t *pMan, const char *pName)
DECLARATIONS ///.
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
#define Abc_NtkForEachNode(pNtk, pNode, i)
int * Abc_MergeSortCost(int *pCosts, int nSize)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
Vec_Str_t * Bmc_CollapseOneOld(Gia_Man_t *p, int nCubeLim, int nBTLimit, int fCanon, int fReverse, int fVerbose)
Vec_Str_t * Bmc_CollapseOne_int(sat_solver *pSat, int nVars, int nCubeLim, int nBTLimit, int fCanon, int fReverse, int fVerbose)
Vec_Str_t * Bmc_CollapseOne_int2(sat_solver *pSat1, sat_solver *pSat2, int nVars, int nCubeLim, int nBTLimit, int fCanon, int fReverse, int fVerbose)
Vec_Str_t * Bmc_CollapseOne(Gia_Man_t *p, int nCubeLim, int nBTLimit, int fCanon, int fReverse, int fVerbose)
Vec_Str_t * Bmc_CollapseOne_int3(sat_solver *pSat0, sat_solver *pSat1, sat_solver *pSat2, sat_solver *pSat3, int nVars, int nCubeLim, int nBTLimit, int fCanon, int fReverse, int fVerbose)
#define sat_solver_addclause
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
void Gia_ManStop(Gia_Man_t *p)
void Gia_ManHashStart(Gia_Man_t *p)
#define Gia_ManForEachCiVec(vVec, p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
Gia_Man_t * Gia_ManDupCones(Gia_Man_t *p, int *pPos, int nPos, int fTrimPis)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManIncrementTravId(Gia_Man_t *p)
int Gia_ManConeSize(Gia_Man_t *p, int *pNodes, int nNodes)
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
void Gia_ManCollectAnds(Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vNodes, Vec_Int_t *vLeaves)
unsigned __int64 word
DECLARATIONS ///.
struct Mem_Flex_t_ Mem_Flex_t
sat_solver * sat_solver_new(void)
void sat_solver_setnvars(sat_solver *s, int n)
int sat_solver_nvars(sat_solver *s)
void sat_solver_delete(sat_solver *s)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.