FUNCTION DEFINITIONS ///.
DECLARATIONS ///.
50{
54 DdNode * bCubeNs, * bState, * bImage;
55 DdNode * bTemp, * bVar, * bRing;
56 int i, v, RetValue, nPiOffset;
57 char * pValues;
59
60
61
62 pCex =
Abc_CexAlloc( Saig_ManRegNum(
p), Saig_ManPiNum(
p), Vec_PtrSize(vOnionRings)+1 );
63 pCex->iFrame = Vec_PtrSize(vOnionRings);
64 pCex->iPo = iOutput;
65 nPiOffset = Saig_ManRegNum(
p) + Saig_ManPiNum(
p) * Vec_PtrSize(vOnionRings);
66
67
69 pTree =
Bbr_bddImageStart( dd, bCubeNs, Saig_ManRegNum(
p), pbParts, Saig_ManCiNum(
p), dd->vars, 100000000, fVerbose );
70 Cudd_RecursiveDeref( dd, bCubeNs );
71 if ( pTree == NULL )
72 {
73 if ( !fSilent )
74 printf( "BDDs blew up during qualitification scheduling. " );
75 return NULL;
76 }
77
78
80
81
82 RetValue = Cudd_bddPickOneCube( dd, bCubeFirst, pValues );
84
85
87 if ( pValues[i] == 1 )
88 Abc_InfoSetBit( pCex->pData, nPiOffset + i );
89 nPiOffset -= Saig_ManPiNum(
p);
90
91
92 bState = (dd)->one; Cudd_Ref( bState );
94 {
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 );
98 }
99
100
102 {
103
105 if ( bImage == NULL )
106 {
107 Cudd_RecursiveDeref( dd, bState );
108 if ( !fSilent )
109 printf( "BDDs blew up during image computation. " );
112 return NULL;
113 }
114 Cudd_Ref( bImage );
115 Cudd_RecursiveDeref( dd, bState );
116
117
118 bImage = Cudd_bddAnd( dd, bTemp = bImage, bRing ); Cudd_Ref( bImage );
119 Cudd_RecursiveDeref( dd, bTemp );
120
121
122 RetValue = Cudd_bddPickOneCube( dd, bImage, pValues );
124 Cudd_RecursiveDeref( dd, bImage );
125
126
128 if ( pValues[i] == 1 )
129 Abc_InfoSetBit( pCex->pData, nPiOffset + i );
130 nPiOffset -= Saig_ManPiNum(
p);
131
132
133 if ( v == 0 )
134 {
136 assert( pValues[Saig_ManPiNum(
p)+i] == 0 );
137 break;
138 }
139
140
141 bState = (dd)->one; Cudd_Ref( bState );
143 {
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 );
147 }
148 }
149
152
153 if ( Vec_PtrSize(vOnionRings) < 1000 )
154 {
156 if ( RetValue == 0 && !fSilent )
157 printf( "Aig_ManVerifyUsingBdds(): Counter-example verification has FAILED.\n" );
158 }
159 if ( fVerbose && !fSilent )
160 {
161 ABC_PRT(
"Counter-example generation time", Abc_Clock() - clk );
162 }
163 return pCex;
164}
#define ABC_ALLOC(type, num)
struct Aig_Obj_t_ Aig_Obj_t
ABC_NAMESPACE_IMPL_START DdNode * Bbr_bddComputeRangeCube(DdManager *dd, int iStart, int iStop)
DECLARATIONS ///.
void Bbr_bddImageTreeDelete(Bbr_ImageTree_t *pTree)
Bbr_ImageTree_t * Bbr_bddImageStart(DdManager *dd, DdNode *bCare, int nParts, DdNode **pbParts, int nVars, DdNode **pbVars, int nBddMax, int fVerbose)
DdNode * Bbr_bddImageCompute(Bbr_ImageTree_t *pTree, DdNode *bCare)
struct Bbr_ImageTree_t_ Bbr_ImageTree_t
FUNCTION DECLARATIONS ///.
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)
int Saig_ManVerifyCex(Aig_Man_t *pAig, Abc_Cex_t *p)
ABC_NAMESPACE_IMPL_START Abc_Cex_t * Abc_CexAlloc(int nRegs, int nRealPis, int nFrames)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
#define Vec_PtrForEachEntryReverse(Type, vVec, pEntry, i)