80 DdNode * bBdd, * bBdd0, * bBdd1, * bTemp, * bResult, * bCube;
85 Aig_ManConst1(pAig)->pData = Cudd_ReadOne(dd);
87 pObj->
pData = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, pObj) );
92 if ( !Aig_ObjIsNode(pObj) )
94 bBdd0 = Cudd_NotCond( (DdNode *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj) );
95 bBdd1 = Cudd_NotCond( (DdNode *)Aig_ObjFanin1(pObj)->pData, Aig_ObjFaninC1(pObj) );
96 bBdd = Cudd_bddAnd( dd, bBdd0, bBdd1 );
100 if ( Aig_ObjIsNode(pObj) && pObj->
pData != NULL )
101 Cudd_RecursiveDeref( dd, (DdNode *)pObj->
pData );
102 Vec_PtrFree( vNodes );
109 bResult = Cudd_ReadLogicZero( dd ); Cudd_Ref( bResult );
112 bBdd0 = Cudd_NotCond( (DdNode *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj) );
113 bResult = Cudd_bddOr( dd, bTemp = bResult, bBdd0 );
114 if ( bResult == NULL )
116 Cudd_RecursiveDeref( dd, bTemp );
120 Cudd_RecursiveDeref( dd, bTemp );
124 if ( Aig_ObjIsNode(pObj) && pObj->
pData != NULL )
125 Cudd_RecursiveDeref( dd, (DdNode *)pObj->
pData );
126 Vec_PtrFree( vNodes );
129 bCube = Cudd_ReadOne(dd); Cudd_Ref( bCube );
132 bCube = Cudd_bddAnd( dd, bTemp = bCube, (DdNode *)pObj->
pData );
135 Cudd_RecursiveDeref( dd, bTemp );
136 Cudd_RecursiveDeref( dd, bResult );
141 Cudd_RecursiveDeref( dd, bTemp );
143 if ( bResult != NULL )
145 bResult = Cudd_bddExistAbstract( dd, bTemp = bResult, bCube ); Cudd_Ref( bResult );
146 Cudd_RecursiveDeref( dd, bTemp );
147 Cudd_RecursiveDeref( dd, bCube );
148 Cudd_Deref( bResult );
171 DdNode * bBdd, * bBdd0, * bBdd1, * bPart;
175 Aig_ManConst1(pAig)->pData = Cudd_ReadOne(dd);
177 pObj->
pData = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, pObj) );
179 if ( Llb_ObjBddVar(vOrder, pObj) >= 0 )
181 pObj->
pData = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, pObj) );
182 Cudd_Ref( (DdNode *)pObj->
pData );
185 pObj->
pData = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, pObj) );
187 vRoots = Vec_PtrAlloc( 100 );
190 bBdd0 = Cudd_NotCond( (DdNode *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj) );
191 bBdd1 = Cudd_NotCond( (DdNode *)Aig_ObjFanin1(pObj)->pData, Aig_ObjFaninC1(pObj) );
192 bBdd = Cudd_bddAnd( dd, bBdd0, bBdd1 );
196 if ( pObj->
pData == NULL )
202 bPart = Cudd_bddXnor( dd, (DdNode *)pObj->
pData, bBdd );
206 Cudd_RecursiveDeref( dd, bBdd );
207 Vec_PtrPush( vRoots, bPart );
213 bBdd0 = Cudd_NotCond( (DdNode *)Aig_ObjFanin0(pObj)->pData, Aig_ObjFaninC0(pObj) );
214 bPart = Cudd_bddXnor( dd, (DdNode *)pObj->
pData, bBdd0 );
218 Vec_PtrPush( vRoots, bPart );
223 Cudd_RecursiveDeref( dd, (DdNode *)pObj->
pData );
229 Cudd_RecursiveDeref( dd, (DdNode *)pObj->
pData );
231 Cudd_RecursiveDeref( dd, bPart );
232 Vec_PtrFree( vRoots );
252 vOrder = Vec_IntStartFull( Aig_ManObjNumMax(pAig) );
254 Vec_IntWriteEntry( vOrder, Aig_ObjId(pObj), Counter++ );
256 Vec_IntWriteEntry( vOrder, Aig_ObjId(pObj), Counter++ );
274 if ( Aig_ObjIsTravIdCurrent(pAig, pObj) )
276 Aig_ObjSetTravIdCurrent( pAig, pObj );
277 assert( Llb_ObjBddVar(vOrder, pObj) < 0 );
278 if ( Aig_ObjIsCi(pObj) )
282 Vec_IntWriteEntry( vOrder, Aig_ObjId(pObj), (*pCounter)++ );
286 pFanin0 = Aig_ObjFanin0(pObj);
287 pFanin1 = Aig_ObjFanin1(pObj);
300 Vec_IntWriteEntry( vOrder, Aig_ObjId(pObj), (*pCounter)++ );
321 if ( Aig_ObjRefs(pObj) >= nFans )
325 Aig_ObjFanin0(pObj)->fMarkA = 0;
327 vNodes = Vec_IntAlloc( 100 );
330 Vec_IntPush( vNodes, Aig_ObjId(pObj) );
361 vOrder = Vec_IntStartFull( Aig_ManObjNumMax(pAig) );
363 Aig_ObjSetTravIdCurrent( pAig, Aig_ManConst1(pAig) );
366 Vec_IntWriteEntry( vOrder, Aig_ObjId(pObj), Counter++ );
370 if ( Llb_ObjBddVar(vOrder, pObj) < 0 )
374 Vec_IntWriteEntry( vOrder, Aig_ObjId(pObj), Counter++ );
376 assert( Counter <= Aig_ManCiNum(pAig) + Aig_ManRegNum(pAig) + (vNodes?Vec_IntSize(vNodes):0) );
378 Vec_IntFreeP( &vNodes );
399 vVars2Q = Vec_IntAlloc( 0 );
400 Vec_IntFill( vVars2Q, Cudd_ReadSize(dd), 1 );
402 Vec_IntWriteEntry( vVars2Q, Llb_ObjBddVar(vOrder, fBackward ? pObjLo : pObjLi), 0 );
419 DdNode ** pVarsX, ** pVarsY;
422 pVarsX =
ABC_ALLOC( DdNode *, Cudd_ReadSize(dd) );
423 pVarsY =
ABC_ALLOC( DdNode *, Cudd_ReadSize(dd) );
426 assert( Llb_ObjBddVar(vOrder, pObjLo) >= 0 );
427 assert( Llb_ObjBddVar(vOrder, pObjLi) >= 0 );
428 pVarsX[i] = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, pObjLo) );
429 pVarsY[i] = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, pObjLi) );
431 Cudd_SetVarMap( dd, pVarsX, pVarsY, Aig_ManRegNum(pAig) );
450 DdNode * bRes, * bVar, * bTemp;
453 TimeStop = dd->TimeStop; dd->TimeStop = 0;
454 bRes = Cudd_ReadOne( dd ); Cudd_Ref( bRes );
457 bVar = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, fBackward? pObjLi : pObjLo) );
458 bRes = Cudd_bddAnd( dd, bTemp = bRes, Cudd_Not(bVar) ); Cudd_Ref( bRes );
459 Cudd_RecursiveDeref( dd, bTemp );
462 dd->TimeStop = TimeStop;
479 Aig_Obj_t * pObjLo, * pObjLi, * pObjTemp;
480 DdNode * bRes, * bVar, * bTemp;
483 TimeStop = dd->TimeStop; dd->TimeStop = 0;
484 bRes = Cudd_ReadOne( dd ); Cudd_Ref( bRes );
488 pObjTemp = pObjLo, pObjLo = pObjLi, pObjLi = pObjTemp;
490 bVar = Cudd_bddIthVar( dd, Llb_ObjBddVar(vOrder, pObjLi) );
491 if ( pValues[Llb_ObjBddVar(vOrder, pObjLo)] != 1 )
492 bVar = Cudd_Not(bVar);
494 bRes = Cudd_bddAnd( dd, bTemp = bRes, bVar ); Cudd_Ref( bRes );
495 Cudd_RecursiveDeref( dd, bTemp );
498 dd->TimeStop = TimeStop;
518 if ( pValues[Llb_ObjBddVar(vOrder, fBackward? pObjLi : pObjLo)] == 1 )
519 Abc_InfoSetBit( pState, i );
536 DdNode * bTemp, * bFunc;
538 vNew = Vec_PtrAlloc( Vec_PtrSize(vParts) );
541 bTemp = Cudd_bddAnd( dd, bFunc, bCube ); Cudd_Ref( bTemp );
542 Vec_PtrPush( vNew, bTemp );
563 Cudd_RecursiveDeref( dd, bFunc );
564 Vec_PtrFree( vParts );
583 DdNode * bState = NULL, * bImage, * bOneCube, * bRing;
586 assert( Vec_PtrSize(
p->vRings) > 0 );
591 vStates = Vec_PtrAllocSimInfo( Vec_PtrSize(
p->vRings), Abc_BitWordNum(Aig_ManRegNum(
p->pAig)) );
592 Vec_PtrCleanSimInfo( vStates, 0, Abc_BitWordNum(Aig_ManRegNum(
p->pAig)) );
594 Vec_PtrReverseOrder( vStates );
597 pValues =
ABC_ALLOC(
char, Cudd_ReadSize(
p->dd) );
598 bOneCube = Cudd_bddIntersect(
p->dd, (DdNode *)Vec_PtrEntryLast(
p->vRings),
p->bBad ); Cudd_Ref( bOneCube );
599 RetValue = Cudd_bddPickOneCube(
p->dd, bOneCube, pValues );
600 Cudd_RecursiveDeref(
p->dd, bOneCube );
607 if ( Vec_PtrSize(
p->vRings) > 1 )
615 if ( v == Vec_PtrSize(
p->vRings) - 1 )
620 Cudd_RecursiveDeref(
p->dd, bState );
623 bImage =
Llb_Nonlin4Image(
p->dd, vRootsNew, NULL, vVars2Q ); Cudd_Ref( bImage );
627 bOneCube = Cudd_bddIntersect(
p->dd, bImage, bRing ); Cudd_Ref( bOneCube );
628 Cudd_RecursiveDeref(
p->dd, bImage );
631 RetValue = Cudd_bddPickOneCube(
p->dd, bOneCube, pValues );
632 Cudd_RecursiveDeref(
p->dd, bOneCube );
642 assert( fBackward || pValues[Llb_ObjBddVar(
p->vOrder, pObj)] == 0 );
649 Vec_IntFree( vVars2Q );
652 Vec_PtrReverseOrder( vStates );
673 int nIters, nBddSizeFr = 0, nBddSizeTo = 0, nBddSizeTo2 = 0;
674 abctime clkTemp, clkIter, clk = Abc_Clock();
675 assert( Aig_ManRegNum(
p->pAig) > 0 );
677 if (
p->pPars->fBackward )
680 if ( !
p->pPars->fSkipOutCheck )
685 if (
p->pPars->fCluster )
686 p->bCurrent =
p->dd->bFunc,
p->dd->bFunc = NULL;
690 if (
p->bCurrent == NULL )
692 if ( !
p->pPars->fSilent )
693 printf(
"Reached timeout (%d seconds) during constructing the bad states.\n",
p->pPars->TimeLimit );
694 p->pPars->iFrame = -1;
697 Cudd_Ref(
p->bCurrent );
700 p->bCurrent = Cudd_bddVarMap(
p->dd, bAux =
p->bCurrent );
701 if (
p->bCurrent == NULL )
703 if ( !
p->pPars->fSilent )
704 printf(
"Reached timeout (%d seconds) during remapping bad states.\n",
p->pPars->TimeLimit );
705 Cudd_RecursiveDeref(
p->dd, bAux );
706 p->pPars->iFrame = -1;
709 Cudd_Ref(
p->bCurrent );
710 Cudd_RecursiveDeref(
p->dd, bAux );
715 if ( !
p->pPars->fSkipOutCheck )
717 if (
p->pPars->fCluster )
718 p->bBad =
p->dd->bFunc,
p->dd->bFunc = NULL;
722 if (
p->bBad == NULL )
724 if ( !
p->pPars->fSilent )
725 printf(
"Reached timeout (%d seconds) during constructing the bad states.\n",
p->pPars->TimeLimit );
726 p->pPars->iFrame = -1;
732 else if (
p->dd->bFunc )
733 Cudd_RecursiveDeref(
p->dd,
p->dd->bFunc ),
p->dd->bFunc = NULL;
738 p->bReached =
p->bCurrent; Cudd_Ref(
p->bReached );
739 for ( nIters = 0; nIters <
p->pPars->nIterMax; nIters++ )
741 clkIter = Abc_Clock();
743 if (
p->pPars->TimeLimit && Abc_Clock() >
p->pPars->TimeTarget )
745 if ( !
p->pPars->fSilent )
746 printf(
"Reached timeout (%d seconds) during image computation.\n",
p->pPars->TimeLimit );
747 p->pPars->iFrame = nIters - 1;
752 Vec_PtrPush(
p->vRings,
p->bCurrent ); Cudd_Ref(
p->bCurrent );
755 if ( !
p->pPars->fSkipOutCheck && !Cudd_bddLeq(
p->dd,
p->bCurrent, Cudd_Not(
p->bBad) ) )
758 assert(
p->pAig->pSeqModel == NULL );
761 Vec_PtrFreeP( &vStates );
762 if ( !
p->pPars->fSilent )
764 Abc_Print( 1,
"Output %d of miter \"%s\" was asserted in frame %d. ",
p->pAig->pSeqModel->iPo,
p->pAig->pName, nIters );
765 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
767 p->pPars->iFrame = nIters - 1;
772 clkTemp = Abc_Clock();
774 if (
p->bNext == NULL )
776 if ( !
p->pPars->fSilent )
777 printf(
"Reached timeout (%d seconds) during image computation in quantification.\n",
p->pPars->TimeLimit );
778 p->pPars->iFrame = nIters - 1;
781 Cudd_Ref(
p->bNext );
782 p->timeImage += Abc_Clock() - clkTemp;
785 clkTemp = Abc_Clock();
786 p->bNext = Cudd_bddVarMap(
p->dd, bAux =
p->bNext );
787 if (
p->bNext == NULL )
789 if ( !
p->pPars->fSilent )
790 printf(
"Reached timeout (%d seconds) during remapping next states.\n",
p->pPars->TimeLimit );
791 Cudd_RecursiveDeref(
p->dd, bAux );
792 p->pPars->iFrame = nIters - 1;
795 Cudd_Ref(
p->bNext );
796 Cudd_RecursiveDeref(
p->dd, bAux );
797 p->timeRemap += Abc_Clock() - clkTemp;
800 if (
p->pPars->fVerbose )
802 nBddSizeFr = Cudd_DagSize(
p->bCurrent );
803 nBddSizeTo = Cudd_DagSize( bAux );
804 nBddSizeTo2 = Cudd_DagSize(
p->bNext );
806 Cudd_RecursiveDeref(
p->dd,
p->bCurrent );
p->bCurrent = NULL;
809 p->bCurrent = Cudd_bddAnd(
p->dd,
p->bNext, Cudd_Not(
p->bReached) );
810 if (
p->bCurrent == NULL )
812 if ( !
p->pPars->fSilent )
813 printf(
"Reached timeout (%d seconds) during image computation in transfer 1.\n",
p->pPars->TimeLimit );
814 p->pPars->iFrame = nIters - 1;
817 Cudd_Ref(
p->bCurrent );
818 Cudd_RecursiveDeref(
p->dd,
p->bNext );
p->bNext = NULL;
819 if ( Cudd_IsConstant(
p->bCurrent) )
830 p->bReached = Cudd_bddOr(
p->dd, bAux =
p->bReached,
p->bCurrent );
831 if (
p->bReached == NULL )
833 if ( !
p->pPars->fSilent )
834 printf(
"Reached timeout (%d seconds) during image computation in transfer 1.\n",
p->pPars->TimeLimit );
835 p->pPars->iFrame = nIters - 1;
836 Cudd_RecursiveDeref(
p->dd, bAux );
839 Cudd_Ref(
p->bReached );
840 Cudd_RecursiveDeref(
p->dd, bAux );
844 if (
p->pPars->fVerbose )
846 printf(
"I =%5d : ", nIters );
847 printf(
"Fr =%7d ", nBddSizeFr );
848 printf(
"ImNs =%7d ", nBddSizeTo );
849 printf(
"ImCs =%7d ", nBddSizeTo2 );
850 printf(
"Rea =%7d ", Cudd_DagSize(
p->bReached) );
851 printf(
"(%4d %4d) ", Cudd_ReadReorderings(
p->dd), Cudd_ReadGarbageCollections(
p->dd) );
852 Abc_PrintTime( 1,
"T", Abc_Clock() - clkIter );
863 if ( nIters ==
p->pPars->nIterMax - 1 )
865 if ( !
p->pPars->fSilent )
866 printf(
"Reached limit on the number of timeframes (%d).\n",
p->pPars->nIterMax );
867 p->pPars->iFrame = nIters;
873 if (
p->pPars->fVerbose )
875 double nMints = Cudd_CountMinterm(
p->dd,
p->bReached, Saig_ManRegNum(
p->pAig) );
876 if (
p->bCurrent && Cudd_IsConstant(
p->bCurrent) )
877 printf(
"Reachability analysis completed after %d frames.\n", nIters );
879 printf(
"Reachability analysis is stopped after %d frames.\n", nIters );
880 printf(
"Reachable states = %.0f. (Ratio = %.4f %%)\n", nMints, 100.0*nMints/pow(2.0, Saig_ManRegNum(
p->pAig)) );
883 if (
p->bCurrent == NULL || !Cudd_IsConstant(
p->bCurrent) )
885 if ( !
p->pPars->fSilent )
886 printf(
"Verified only for states reachable in %d frames. ", nIters );
887 p->pPars->iFrame =
p->pPars->nIterMax;
891 if ( !
p->pPars->fSilent )
892 printf(
"The miter is proved unreachable after %d iterations. ", nIters );
893 if ( !
p->pPars->fSilent )
894 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
895 p->pPars->iFrame = nIters - 1;
914 Abc_Print( 1,
"Reordering... Before =%5d. ", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
915 Cudd_ReduceHeap( dd, CUDD_REORDER_SYMM_SIFT, 100 );
917 Abc_Print( 1,
"After =%5d. ", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
920 Cudd_ReduceHeap( dd, CUDD_REORDER_SYMM_SIFT, 100 );
922 Abc_Print( 1,
"After =%5d. ", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
925 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
948 p->pPars->TimeTarget =
p->pPars->TimeLimit ?
p->pPars->TimeLimit * CLOCKS_PER_SEC + Abc_Clock(): 0;
950 if ( pPars->fCluster )
954 Llb4_Nonlin4Sweep(
p->pAig, pPars->nBddMax, pPars->nClusterMax, &
p->dd, &
p->vOrder, &
p->vRoots, pPars->fVerbose );
956 p->dd->TimeStop =
p->pPars->TimeTarget;
962 p->dd = Cudd_Init( Vec_IntCountPositive(
p->vOrder) + 1, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
963 Cudd_AutodynEnable(
p->dd, CUDD_REORDER_SYMM_SIFT );
964 Cudd_SetMaxGrowth(
p->dd, 1.05 );
966 p->dd->TimeStop =
p->pPars->TimeTarget;
972 p->vRings = Vec_PtrAlloc( 100 );
974 if ( pPars->fReorder )
994 if (
p->pPars->fVerbose )
996 p->timeReo = Cudd_ReadReorderingTime(
p->dd);
997 p->timeOther =
p->timeTotal -
p->timeImage -
p->timeRemap;
998 ABC_PRTP(
"Image ",
p->timeImage,
p->timeTotal );
999 ABC_PRTP(
"Remap ",
p->timeRemap,
p->timeTotal );
1000 ABC_PRTP(
"Other ",
p->timeOther,
p->timeTotal );
1001 ABC_PRTP(
"TOTAL ",
p->timeTotal,
p->timeTotal );
1002 ABC_PRTP(
" reo ",
p->timeReo,
p->timeTotal );
1006 Cudd_RecursiveDeref(
p->dd,
p->bBad );
1008 Cudd_RecursiveDeref(
p->dd,
p->bReached );
1010 Cudd_RecursiveDeref(
p->dd,
p->bCurrent );
1012 Cudd_RecursiveDeref(
p->dd,
p->bNext );
1015 Cudd_RecursiveDeref(
p->dd, bTemp );
1018 Cudd_RecursiveDeref(
p->dd, bTemp );
1020 Vec_PtrFreeP( &
p->vRings );
1021 Vec_PtrFreeP( &
p->vRoots );
1024 Vec_IntFreeP( &
p->vOrder );
1025 Vec_IntFreeP( &
p->vVars2Q );
1044 int i, Counter0 = 0, Counter1 = 0;
1046 if ( Saig_ObjIsLo(
p->pAig, Aig_ObjFanin0(pObj)) )
1048 if ( Aig_ObjFaninC0(pObj) )
1053 printf(
"Total = %d. Direct LO = %d. Compl LO = %d.\n", Aig_ManRegNum(
p->pAig), Counter1, Counter0 );
1071 if ( pPars->fVerbose )
1073 if ( pPars->fCluster && Aig_ManObjNum(pAig) >= (1 << 15) )
1075 printf(
"The number of objects is more than 2^15. Clustering cannot be used.\n" );
1082 if ( !pPars->fSkipReach )
1084 pMnn->timeTotal = Abc_Clock() - clk;
1118 pPars->fSkipOutCheck = 1;
1119 pPars->fCluster = 0;
1120 pPars->fReorder = 0;
1122 pPars->nBddMax = 100;
1123 pPars->nClusterMax = 500;
1136 vPermute = Vec_IntStartFull( Cudd_ReadSize(pMnn->dd) );
1138 Vec_IntWriteEntry( vPermute, Llb_ObjBddVar(pMnn->vOrder, pObj), i );
1141 dd = Cudd_Init( Saig_ManRegNum(pAig), 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0 );
1142 Cudd_AutodynEnable( dd, CUDD_REORDER_SYMM_SIFT );
1143 bReached =
Extra_TransferPermute( pMnn->dd, dd, pMnn->bReached, Vec_IntArray(vPermute) ); Cudd_Ref( bReached );
1144 Vec_IntFree( vPermute );
1145 assert( Cudd_ReadSize(dd) == Saig_ManRegNum(pAig) );
1148 pMnn->timeTotal = Abc_Clock() - clk;
1155 Cudd_RecursiveDeref( dd, bReached );
ABC_DLL Abc_Ntk_t * Abc_NtkBddToMuxes(Abc_Ntk_t *pNtk, int fGlobal, int Limit, int fUseAdd)
ABC_DLL void Abc_NodeFreeNames(Vec_Ptr_t *vNames)
ABC_DLL Abc_Ntk_t * Abc_NtkDeriveFromBdd(void *dd, void *bFunc, char *pNamePo, Vec_Ptr_t *vNamesPi)
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL Abc_Ntk_t * Abc_NtkStrash(Abc_Ntk_t *pNtk, int fAllNodes, int fCleanup, int fRecord)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL Vec_Ptr_t * Abc_NodeGetFakeNames(int nNames)
#define ABC_ALLOC(type, num)
#define ABC_PRTP(a, t, T)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManCleanMarkA(Aig_Man_t *p)
void Aig_ManStop(Aig_Man_t *p)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
struct Aig_Obj_t_ Aig_Obj_t
void Aig_ManPrintStats(Aig_Man_t *p)
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Vec_Ptr_t * Aig_ManDfsNodes(Aig_Man_t *p, Aig_Obj_t **ppNodes, int nNodes)
void Aig_ManCleanData(Aig_Man_t *p)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Aig_Man_t * Gia_ManToAigSimple(Gia_Man_t *p)
Gia_Man_t * Gia_ManFromAigSimple(Aig_Man_t *p)
Aig_Man_t * Abc_NtkToDar(Abc_Ntk_t *pNtk, int fExors, int fRegisters)
struct Gia_Man_t_ Gia_Man_t
ABC_NAMESPACE_IMPL_START Abc_Cex_t * Llb4_Nonlin4TransformCex(Aig_Man_t *pAig, Vec_Ptr_t *vStates, int iCexPo, int fVerbose)
DECLARATIONS ///.
DdNode * Llb_Nonlin4Image(DdManager *dd, Vec_Ptr_t *vParts, DdNode *bCurrent, Vec_Int_t *vVars2Q)
Gia_Man_t * Llb_ReachableStatesGia(Gia_Man_t *p)
void Llb_Nonlin4Deref(DdManager *dd, Vec_Ptr_t *vParts)
void Llb_Nonlin4Reorder(DdManager *dd, int fTwice, int fVerbose)
void Llb_Nonlin4SetupVarMap(DdManager *dd, Aig_Man_t *pAig, Vec_Int_t *vOrder)
DdNode * Llb_Nonlin4ComputeCube(DdManager *dd, Aig_Man_t *pAig, Vec_Int_t *vOrder, char *pValues, int Flag)
void Llb_MnxStop(Llb_Mnx_t *p)
Vec_Ptr_t * Llb_Nonlin4DeriveCex(Llb_Mnx_t *p, int fBackward, int fVerbose)
Vec_Int_t * Llb_Nonlin4CreateOrder(Aig_Man_t *pAig)
DdNode * Llb_Nonlin4ComputeBad(DdManager *dd, Aig_Man_t *pAig, Vec_Int_t *vOrder)
FUNCTION DEFINITIONS ///.
typedefABC_NAMESPACE_IMPL_START struct Llb_Mnx_t_ Llb_Mnx_t
DECLARATIONS ///.
Vec_Ptr_t * Llb_Nonlin4Multiply(DdManager *dd, DdNode *bCube, Vec_Ptr_t *vParts)
void Llb_MnxCheckNextStateVars(Llb_Mnx_t *p)
Vec_Int_t * Llb_Nonlin4CollectHighRefNodes(Aig_Man_t *pAig, int nFans)
Vec_Int_t * Llb_Nonlin4CreateOrderSimple(Aig_Man_t *pAig)
Vec_Ptr_t * Llb_Nonlin4DerivePartitions(DdManager *dd, Aig_Man_t *pAig, Vec_Int_t *vOrder)
Llb_Mnx_t * Llb_MnxStart(Aig_Man_t *pAig, Gia_ParLlb_t *pPars)
DdNode * Llb_Nonlin4ComputeInitState(DdManager *dd, Aig_Man_t *pAig, Vec_Int_t *vOrder, int fBackward)
Vec_Int_t * Llb_Nonlin4CreateVars2Q(DdManager *dd, Aig_Man_t *pAig, Vec_Int_t *vOrder, int fBackward)
int Llb_Nonlin4Reachability(Llb_Mnx_t *p)
int Llb_Nonlin4CoreReach(Aig_Man_t *pAig, Gia_ParLlb_t *pPars)
Aig_Man_t * Llb_ReachableStates(Aig_Man_t *pAig)
void Llb_Nonlin4CreateOrder_rec(Aig_Man_t *pAig, Aig_Obj_t *pObj, Vec_Int_t *vOrder, int *pCounter)
void Llb_Nonlin4RecordState(Aig_Man_t *pAig, Vec_Int_t *vOrder, unsigned *pState, char *pValues, int fBackward)
void Llb4_Nonlin4Sweep(Aig_Man_t *pAig, int nSweepMax, int nClusterMax, DdManager **pdd, Vec_Int_t **pvOrder, Vec_Ptr_t **pvGroups, int fVerbose)
void Llb_ManSetDefaultParams(Gia_ParLlb_t *pPars)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Gia_ParLlb_t_ Gia_ParLlb_t
INCLUDES ///.
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
#define Saig_ManForEachLi(p, pObj, i)
#define Saig_ManForEachPo(p, pObj, i)
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)
#define Vec_PtrForEachEntryReverse(Type, vVec, pEntry, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.