48 DdNode ** pbParts,
Vec_Ptr_t * vOnionRings, DdNode * bCubeFirst,
49 int iOutput,
int fVerbose,
int fSilent )
54 DdNode * bCubeNs, * bState, * bImage;
55 DdNode * bTemp, * bVar, * bRing;
56 int i, v, RetValue, nPiOffset;
62 pCex =
Abc_CexAlloc( Saig_ManRegNum(
p), Saig_ManPiNum(
p), Vec_PtrSize(vOnionRings)+1 );
63 pCex->iFrame = Vec_PtrSize(vOnionRings);
65 nPiOffset = Saig_ManRegNum(
p) + Saig_ManPiNum(
p) * Vec_PtrSize(vOnionRings);
69 pTree =
Bbr_bddImageStart( dd, bCubeNs, Saig_ManRegNum(
p), pbParts, Saig_ManCiNum(
p), dd->vars, 100000000, fVerbose );
70 Cudd_RecursiveDeref( dd, bCubeNs );
74 printf(
"BDDs blew up during qualitification scheduling. " );
82 RetValue = Cudd_bddPickOneCube( dd, bCubeFirst, pValues );
87 if ( pValues[i] == 1 )
88 Abc_InfoSetBit( pCex->pData, nPiOffset + i );
89 nPiOffset -= Saig_ManPiNum(
p);
92 bState = (dd)->one; Cudd_Ref( bState );
95 bVar = Cudd_NotCond( dd->vars[Saig_ManCiNum(
p)+i], pValues[Saig_ManPiNum(
p)+i] != 1 );
96 bState = Cudd_bddAnd( dd, bTemp = bState, bVar ); Cudd_Ref( bState );
97 Cudd_RecursiveDeref( dd, bTemp );
105 if ( bImage == NULL )
107 Cudd_RecursiveDeref( dd, bState );
109 printf(
"BDDs blew up during image computation. " );
115 Cudd_RecursiveDeref( dd, bState );
118 bImage = Cudd_bddAnd( dd, bTemp = bImage, bRing ); Cudd_Ref( bImage );
119 Cudd_RecursiveDeref( dd, bTemp );
122 RetValue = Cudd_bddPickOneCube( dd, bImage, pValues );
124 Cudd_RecursiveDeref( dd, bImage );
128 if ( pValues[i] == 1 )
129 Abc_InfoSetBit( pCex->pData, nPiOffset + i );
130 nPiOffset -= Saig_ManPiNum(
p);
136 assert( pValues[Saig_ManPiNum(
p)+i] == 0 );
141 bState = (dd)->one; Cudd_Ref( bState );
144 bVar = Cudd_NotCond( dd->vars[Saig_ManCiNum(
p)+i], pValues[Saig_ManPiNum(
p)+i] != 1 );
145 bState = Cudd_bddAnd( dd, bTemp = bState, bVar ); Cudd_Ref( bState );
146 Cudd_RecursiveDeref( dd, bTemp );
153 if ( Vec_PtrSize(vOnionRings) < 1000 )
156 if ( RetValue == 0 && !fSilent )
157 printf(
"Aig_ManVerifyUsingBdds(): Counter-example verification has FAILED.\n" );
159 if ( fVerbose && !fSilent )
161 ABC_PRT(
"Counter-example generation time", Abc_Clock() - clk );
Abc_Cex_t * Aig_ManVerifyUsingBddsCountExample(Aig_Man_t *p, DdManager *dd, DdNode **pbParts, Vec_Ptr_t *vOnionRings, DdNode *bCubeFirst, int iOutput, int fVerbose, int fSilent)
FUNCTION DEFINITIONS ///.
Bbr_ImageTree_t * Bbr_bddImageStart(DdManager *dd, DdNode *bCare, int nParts, DdNode **pbParts, int nVars, DdNode **pbVars, int nBddMax, int fVerbose)