49 int Shift = Gia_ManObjNum(
p) * iFrame;
53 if ( Vec_BitEntry( vJustis, Shift + iObj ) )
55 Vec_BitWriteEntry( vJustis, Shift + iObj, 1 );
56 pObj = Gia_ManObj(
p, iObj );
57 if ( Gia_ObjIsCo(pObj) )
59 if ( Gia_ObjIsCi(pObj) )
61 assert( Gia_ObjIsAnd(pObj) );
62 if ( Vec_BitEntry( vValues, Shift + iObj ) )
67 else if ( Vec_BitEntry( vValues, Shift + Gia_ObjFaninId0(pObj, iObj) ) == Gia_ObjFaninC0(pObj) )
69 else if ( Vec_BitEntry( vValues, Shift + Gia_ObjFaninId1(pObj, iObj) ) == Gia_ObjFaninC1(pObj) )
77 int i, k, Shift = Gia_ManObjNum(
p) * iFrame;
78 for ( i = iFrame; i >= 0; i--, Shift -= Gia_ManObjNum(
p) )
82 if ( k == 0 || Gia_ObjIsPi(
p, pObj) )
84 if ( !Vec_BitEntry( vJustis, Shift + k ) )
86 if ( Gia_ObjIsAnd(pObj) )
88 if ( Vec_BitEntry( vValues, Shift + k ) )
90 Vec_BitWriteEntry( vJustis, Shift + Gia_ObjFaninId0(pObj, k), 1 );
91 Vec_BitWriteEntry( vJustis, Shift + Gia_ObjFaninId1(pObj, k), 1 );
93 else if ( Vec_BitEntry( vValues, Shift + Gia_ObjFaninId0(pObj, k) ) == Gia_ObjFaninC0(pObj) )
94 Vec_BitWriteEntry( vJustis, Shift + Gia_ObjFaninId0(pObj, k), 1 );
95 else if ( Vec_BitEntry( vValues, Shift + Gia_ObjFaninId1(pObj, k) ) == Gia_ObjFaninC1(pObj) )
96 Vec_BitWriteEntry( vJustis, Shift + Gia_ObjFaninId1(pObj, k), 1 );
99 else if ( Gia_ObjIsCo(pObj) )
100 Vec_BitWriteEntry( vJustis, Shift + Gia_ObjFaninId0(pObj, k), 1 );
101 else if ( Gia_ObjIsCi(pObj) && i )
102 Vec_BitWriteEntry( vJustis, Shift - Gia_ManObjNum(
p) + Gia_ObjId(
p, Gia_ObjRoToRi(
p, pObj)), 1 );
108 Vec_Bit_t * vValues = Vec_BitStart( Gia_ManObjNum(
p) * (pCex->iFrame + 1) );
109 Vec_Bit_t * vJustis = Vec_BitStart( Gia_ManObjNum(
p) * (pCex->iFrame + 1) );
111 int i, k, iBit = 0, fCompl0, fCompl1, fJusti0, fJusti1, Shift;
116 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
117 for ( Shift = i = 0; i <= pCex->iFrame; i++, Shift += Gia_ManObjNum(
p) )
121 if ( Gia_ObjIsAnd(pObj) )
123 fCompl0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
124 fCompl1 = Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj);
125 fJusti0 = Gia_ObjFanin0(pObj)->fMark1;
126 fJusti1 = Gia_ObjFanin1(pObj)->fMark1;
127 pObj->
fMark0 = fCompl0 & fCompl1;
129 pObj->
fMark1 = fJusti0 & fJusti1;
130 else if ( !fCompl0 && !fCompl1 )
131 pObj->
fMark1 = fJusti0 | fJusti1;
138 else if ( Gia_ObjIsCi(pObj) )
140 if ( Gia_ObjIsPi(
p, pObj) )
142 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
147 pObj->
fMark0 = Gia_ObjRoToRi(
p, pObj)->fMark0;
148 pObj->
fMark1 = Gia_ObjRoToRi(
p, pObj)->fMark1;
151 else if ( Gia_ObjIsCo(pObj) )
153 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
154 pObj->
fMark1 = Gia_ObjFanin0(pObj)->fMark1;
156 else if ( Gia_ObjIsConst0(pObj) )
160 Vec_BitWriteEntry( vValues, Shift + k, 1 );
162 Vec_BitWriteEntry( vJustis, Shift + k, 1 );
165 assert( iBit == pCex->nBits );
169 pObj = Gia_ManPo(
p, pCex->iPo );
170 assert( Vec_BitEntry(vJustis, Gia_ManObjNum(
p) * pCex->iFrame + Gia_ObjId(
p, pObj)) == 0 );
172 Vec_BitWriteEntry(vJustis, Gia_ManObjNum(
p) * pCex->iFrame + Gia_ObjId(
p, pObj), 1);
174 assert( Vec_BitEntry(vJustis, Gia_ManObjNum(
p) * pCex->iFrame + Gia_ObjId(
p, pObj)) == 1 );
198 int k,
Cube = 1, Counter = 0;
201 *pvInits = Vec_BitStart( Gia_ManRegNum(
p) );
203 if ( Vec_BitEntry(vValues, Gia_ManObjNum(
p) * iFrBeg + Gia_ObjId(
p, pObj)) )
204 Vec_BitWriteEntry( *pvInits, k, 1 );
207 pNew->
pName = Abc_UtilStrsav(
p->pName );
210 int Literal = Gia_ManAppendCi(pNew);
211 if ( !Vec_BitEntry(vJustis, Gia_ManObjNum(
p) * iFrEnd + Gia_ObjId(
p, pObj)) )
213 if ( Vec_BitEntry(vValues, Gia_ManObjNum(
p) * iFrEnd + Gia_ObjId(
p, pObj)) )
214 Cube = Gia_ManAppendAnd( pNew,
Cube, Literal );
216 Cube = Gia_ManAppendAnd( pNew,
Cube, Abc_LitNot(Literal) );
220 Gia_ManAppendCo( pNew,
Cube );
221 Vec_BitFree( vValues );
222 Vec_BitFree( vJustis );
242 int f, i, k, iBitOld, iBit = 0, fCompl0, fCompl1;
247 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
248 *pvInits = Vec_BitStart( Gia_ManRegNum(
p) );
249 for ( i = 0; i < iFrEnd; i++ )
255 Vec_BitWriteEntry( *pvInits, k, 1 );
258 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
260 pObj->
fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) &
261 (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj));
263 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
268 vInitEnd = Vec_BitStart( Gia_ManRegNum(
p) );
271 Vec_BitWriteEntry( vInitEnd, k, 1 );
275 pNew->
pName = Abc_UtilStrsav(
p->pName );
277 Gia_ManAppendCi(pNew);
280 Gia_ManConst0(
p)->Value = 1;
285 for ( f = iFrEnd; f <= pCex->iFrame; f++ )
289 pObjRo->
fMark0 = Vec_BitEntry( vInitEnd, k );
292 for ( i = iFrEnd; i < f; i++ )
295 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
297 pObj->
fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) &
298 (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj));
300 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
306 pObjRo->
Value = Abc_LitNotCond( Gia_Obj2Lit(pNew, Gia_ManPi(pNew, k)), !pObjRo->
fMark0 );
307 for ( i = f; i <= pCex->iFrame; i++ )
310 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
313 fCompl0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
314 fCompl1 = Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj);
315 pObj->
fMark0 = fCompl0 & fCompl1;
317 pObj->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value );
318 else if ( !fCompl0 && !fCompl1 )
319 pObj->
Value =
Gia_ManHashOr( pNew, Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value );
321 pObj->
Value = Gia_ObjFanin0(pObj)->Value;
323 pObj->
Value = Gia_ObjFanin1(pObj)->Value;
329 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
330 pObj->
Value = Gia_ObjFanin0(pObj)->Value;
333 if ( i == pCex->iFrame )
341 assert( iBit == pCex->nBits );
343 Gia_ManAppendCo( pNew, Gia_ManPo(
p, pCex->iPo)->Value );
346 Vec_BitFree( vInitEnd );
369 int i, k, iBit = 0, fCompl0, fCompl1;
374 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
375 *pvInits = Vec_BitStart( Gia_ManRegNum(
p) );
376 for ( i = 0; i < iFrEnd; i++ )
382 Vec_BitWriteEntry( *pvInits, k, 1 );
385 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
387 pObj->
fMark0 = (Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj)) &
388 (Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj));
390 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
398 pNew->
pName = Abc_UtilStrsav(
p->pName );
399 Gia_ManConst0(
p)->Value = 1;
403 pObjRo->
Value = Abc_LitNotCond( Gia_ManAppendCi(pNew), !pObjRo->
fMark0 );
405 for ( i = iFrEnd; i <= pCex->iFrame; i++ )
408 pObj->
fMark0 = Abc_InfoHasBit(pCex->pData, iBit++);
411 fCompl0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
412 fCompl1 = Gia_ObjFanin1(pObj)->fMark0 ^ Gia_ObjFaninC1(pObj);
413 pObj->
fMark0 = fCompl0 & fCompl1;
415 pObj->
Value =
Gia_ManHashAnd( pNew, Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value );
416 else if ( !fCompl0 && !fCompl1 )
417 pObj->
Value =
Gia_ManHashOr( pNew, Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value );
419 pObj->
Value = Gia_ObjFanin0(pObj)->Value;
421 pObj->
Value = Gia_ObjFanin1(pObj)->Value;
427 pObj->
fMark0 = Gia_ObjFanin0(pObj)->fMark0 ^ Gia_ObjFaninC0(pObj);
428 pObj->
Value = Gia_ObjFanin0(pObj)->Value;
431 if ( i == pCex->iFrame )
440 assert( iBit == pCex->nBits );
443 Gia_ManAppendCo( pNew, Gia_ManPo(
p, pCex->iPo)->Value );
467 { printf(
"Starting frame is less than 0.\n" );
return NULL; }
469 { printf(
"Stopping frame is less than 0.\n" );
return NULL; }
470 if ( iFrBeg > pCex->iFrame )
471 { printf(
"Starting frame is more than the last frame of CEX (%d).\n", pCex->iFrame );
return NULL; }
472 if ( iFrEnd > pCex->iFrame )
473 { printf(
"Stopping frame is more than the last frame of CEX (%d).\n", pCex->iFrame );
return NULL; }
474 if ( iFrBeg > iFrEnd )
475 { printf(
"Starting frame (%d) should be less than stopping frame (%d).\n", iFrBeg, iFrEnd );
return NULL; }
476 assert( iFrBeg >= 0 && iFrBeg <= pCex->iFrame );
477 assert( iFrEnd >= 0 && iFrEnd <= pCex->iFrame );
478 assert( iFrBeg < iFrEnd );
482 else if ( fAllFrames )
498 Vec_BitFree( vInitNew );
520 Abc_Print( 1,
"Current CEX does not fail AIG \"%s\".\n",
p->pName );
524 pRes =
Bmc_GiaTargetStates( pGia, pCex, iFrBeg, iFrEnd, fCombOnly, fUseOne, fAllFrames, fVerbose );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Gia_Man_t * Bmc_GiaGenerateGiaAllOne(Gia_Man_t *p, Abc_Cex_t *pCex, Vec_Bit_t **pvInits, int iFrBeg, int iFrEnd)
Gia_Man_t * Bmc_GiaTargetStates(Gia_Man_t *p, Abc_Cex_t *pCex, int iFrBeg, int iFrEnd, int fCombOnly, int fUseOne, int fAllFrames, int fVerbose)
ABC_NAMESPACE_IMPL_START int Bmc_GiaGenerateJust_rec(Gia_Man_t *p, int iFrame, int iObj, Vec_Bit_t *vValues, Vec_Bit_t *vJustis)
DECLARATIONS ///.
Gia_Man_t * Bmc_GiaGenerateGiaOne(Gia_Man_t *p, Abc_Cex_t *pCex, Vec_Bit_t **pvInits, int iFrBeg, int iFrEnd)
Aig_Man_t * Bmc_AigTargetStates(Aig_Man_t *p, Abc_Cex_t *pCex, int iFrBeg, int iFrEnd, int fCombOnly, int fUseOne, int fAllFrames, int fVerbose)
void Bmc_GiaGenerateJustNonRec(Gia_Man_t *p, int iFrame, Vec_Bit_t *vValues, Vec_Bit_t *vJustis)
Gia_Man_t * Bmc_GiaGenerateGiaAllFrames(Gia_Man_t *p, Abc_Cex_t *pCex, Vec_Bit_t **pvInits, int iFrBeg, int iFrEnd)
void Bmc_GiaGenerateJust(Gia_Man_t *p, Abc_Cex_t *pCex, Vec_Bit_t **pvValues, Vec_Bit_t **pvJustis)
Aig_Man_t * Gia_ManToAigSimple(Gia_Man_t *p)
Gia_Man_t * Gia_ManFromAigSimple(Aig_Man_t *p)
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachRo(p, pObj, i)
void Gia_ManHashStart(Gia_Man_t *p)
Gia_Man_t * Gia_ManDupFlip(Gia_Man_t *p, int *pInitState)
#define Gia_ManForEachAnd(p, pObj, i)
Gia_Man_t * Gia_ManDupWithNewPo(Gia_Man_t *p1, Gia_Man_t *p2)
#define Gia_ManForEachObjReverse(p, pObj, i)
#define Gia_ManForEachPi(p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
int Gia_ManHashOr(Gia_Man_t *p, int iLit0, int iLit1)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
void Gia_ManCleanMark0(Gia_Man_t *p)
int Gia_ManVerifyCex(Gia_Man_t *pAig, Abc_Cex_t *p, int fDualOut)
DECLARATIONS ///.
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachRiRo(p, pObjRi, pObjRo, i)
void Gia_ManHashStop(Gia_Man_t *p)
#define Gia_ManForEachRi(p, pObj, i)
void Gia_ManCleanMark1(Gia_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Bit_t_ Vec_Bit_t
INCLUDES ///.