34static inline int Saig_ManSimInfoNot(
int Value )
43static inline int Saig_ManSimInfoAnd(
int Value0,
int Value1 )
52static inline int Saig_ManSimInfoGet(
Vec_Ptr_t * vSimInfo,
Aig_Obj_t * pObj,
int iFrame )
54 unsigned * pInfo = (
unsigned *)Vec_PtrEntry( vSimInfo, Aig_ObjId(pObj) );
55 return 3 & (pInfo[iFrame >> 4] >> ((iFrame & 15) << 1));
58static inline void Saig_ManSimInfoSet(
Vec_Ptr_t * vSimInfo,
Aig_Obj_t * pObj,
int iFrame,
int Value )
60 unsigned * pInfo = (
unsigned *)Vec_PtrEntry( vSimInfo, Aig_ObjId(pObj) );
62 Value ^= Saig_ManSimInfoGet( vSimInfo, pObj, iFrame );
63 pInfo[iFrame >> 4] ^= (Value << ((iFrame & 15) << 1));
73static inline int Saig_ManSimInfo2IsOld(
int Value )
78static inline int Saig_ManSimInfo2SetOld(
int Value )
88static inline int Saig_ManSimInfo2Not(
int Value )
102static inline int Saig_ManSimInfo2And(
int Value0,
int Value1 )
112static inline int Saig_ManSimInfo2Get(
Vec_Ptr_t * vSimInfo,
Aig_Obj_t * pObj,
int iFrame )
114 unsigned * pInfo = (
unsigned *)Vec_PtrEntry( vSimInfo, Aig_ObjId(pObj) );
115 return 3 & (pInfo[iFrame >> 4] >> ((iFrame & 15) << 1));
118static inline void Saig_ManSimInfo2Set(
Vec_Ptr_t * vSimInfo,
Aig_Obj_t * pObj,
int iFrame,
int Value )
120 unsigned * pInfo = (
unsigned *)Vec_PtrEntry( vSimInfo, Aig_ObjId(pObj) );
121 Value ^= Saig_ManSimInfo2Get( vSimInfo, pObj, iFrame );
122 pInfo[iFrame >> 4] ^= (Value << ((iFrame & 15) << 1));
145 int Value0, Value1, Value;
146 Value0 = Saig_ManSimInfoGet( vSimInfo, Aig_ObjFanin0(pObj), iFrame );
147 if ( Aig_ObjFaninC0(pObj) )
148 Value0 = Saig_ManSimInfoNot( Value0 );
149 if ( Aig_ObjIsCo(pObj) )
151 Saig_ManSimInfoSet( vSimInfo, pObj, iFrame, Value0 );
154 assert( Aig_ObjIsNode(pObj) );
155 Value1 = Saig_ManSimInfoGet( vSimInfo, Aig_ObjFanin1(pObj), iFrame );
156 if ( Aig_ObjFaninC1(pObj) )
157 Value1 = Saig_ManSimInfoNot( Value1 );
158 Value = Saig_ManSimInfoAnd( Value0, Value1 );
159 Saig_ManSimInfoSet( vSimInfo, pObj, iFrame, Value );
177 int i, f, Entry, iBit = 0;
179 Saig_ManSimInfoSet( vSimInfo, pObj, 0, Abc_InfoHasBit(pCex->pData, iBit++)?
SAIG_ONE:
SAIG_ZER );
180 for ( f = 0; f <= pCex->iFrame; f++ )
182 Saig_ManSimInfoSet( vSimInfo, Aig_ManConst1(
p), f,
SAIG_ONE );
184 Saig_ManSimInfoSet( vSimInfo, pObj, f, Abc_InfoHasBit(pCex->pData, iBit++)?
SAIG_ONE:
SAIG_ZER );
187 Saig_ManSimInfoSet( vSimInfo, Aig_ManCi(
p, Entry), f,
SAIG_UND );
192 if ( f == pCex->iFrame )
195 Saig_ManSimInfoSet( vSimInfo, pObjLo, f+1, Saig_ManSimInfoGet(vSimInfo, pObjLi, f) );
198 pObj = Aig_ManCo(
p, pCex->iPo );
199 return Saig_ManSimInfoGet( vSimInfo, pObj, pCex->iFrame );
215 int Value0, Value1, Value;
216 Value0 = Saig_ManSimInfo2Get( vSimInfo, Aig_ObjFanin0(pObj), iFrame );
217 if ( Aig_ObjFaninC0(pObj) )
218 Value0 = Saig_ManSimInfo2Not( Value0 );
219 if ( Aig_ObjIsCo(pObj) )
221 Saig_ManSimInfo2Set( vSimInfo, pObj, iFrame, Value0 );
224 assert( Aig_ObjIsNode(pObj) );
225 Value1 = Saig_ManSimInfo2Get( vSimInfo, Aig_ObjFanin1(pObj), iFrame );
226 if ( Aig_ObjFaninC1(pObj) )
227 Value1 = Saig_ManSimInfo2Not( Value1 );
228 Value = Saig_ManSimInfo2And( Value0, Value1 );
229 Saig_ManSimInfo2Set( vSimInfo, pObj, iFrame, Value );
250 for ( f = 0; f <= pCex->iFrame; f++ )
252 Saig_ManSimInfo2Set( vSimInfo, Aig_ManConst1(
p), f,
SAIG_ONE_NEW );
259 if ( f == pCex->iFrame )
262 Saig_ManSimInfo2Set( vSimInfo, pObjLo, f+1, Saig_ManSimInfo2Get(vSimInfo, pObjLi, f) );
265 pObj = Aig_ManCo(
p, pCex->iPo );
266 return Saig_ManSimInfo2Get( vSimInfo, pObj, pCex->iFrame );
283 int k, iFanout = -1, Value0, Value1;
284 int Value = Saig_ManSimInfo2Get( vSimInfo, pObj, f );
285 assert( !Saig_ManSimInfo2IsOld( Value ) );
286 Saig_ManSimInfo2Set( vSimInfo, pObj, f, Saig_ManSimInfo2SetOld(Value) );
287 if ( (Aig_ObjIsCo(pObj) && f == fMax) || Saig_ObjIsPo(
p, pObj) )
289 if ( Saig_ObjIsLi(
p, pObj ) )
292 pFanout = Saig_ObjLiToLo(
p, pObj);
293 Value = Saig_ManSimInfo2Get( vSimInfo, pFanout, f+1 );
294 if ( !Saig_ManSimInfo2IsOld( Value ) )
298 assert( Aig_ObjIsCi(pObj) || Aig_ObjIsNode(pObj) || Aig_ObjIsConst1(pObj) );
301 Value = Saig_ManSimInfo2Get( vSimInfo, pFanout, f );
302 if ( Saig_ManSimInfo2IsOld( Value ) )
304 if ( Aig_ObjIsCo(pFanout) )
309 assert( Aig_ObjIsNode(pFanout) );
310 Value0 = Saig_ManSimInfo2Get( vSimInfo, Aig_ObjFanin0(pFanout), f );
311 Value1 = Saig_ManSimInfo2Get( vSimInfo, Aig_ObjFanin1(pFanout), f );
312 if ( Aig_ObjFaninC0(pFanout) )
313 Value0 = Saig_ManSimInfo2Not( Value0 );
314 if ( Aig_ObjFaninC1(pFanout) )
315 Value1 = Saig_ManSimInfo2Not( Value1 );
335 int Value = Saig_ManSimInfo2Get( vSimInfo, pObj, f );
336 if ( Saig_ManSimInfo2IsOld( Value ) )
339 assert( !Aig_ObjIsConst1(pObj) );
340 if ( Saig_ObjIsLo(
p, pObj) && f == 0 )
342 if ( Saig_ObjIsPi(
p, pObj) )
345 int i, iPiNum = Aig_ObjCioId(pObj);
346 for ( i = fMax; i >= 0; i-- )
351 if ( Saig_ObjIsLo(
p, pObj ) )
357 if ( Aig_ObjIsCo(pObj) )
362 assert( Aig_ObjIsNode(pObj) );
394 assert( (
unsigned *)Vec_PtrEntry(vSimInfo,1) - (
unsigned *)Vec_PtrEntry(vSimInfo,0) >= Abc_BitWordNum(2*(pCex->iFrame+1)) );
401 for ( f = pCex->iFrame; f >= 0; f-- )
404 for ( i = 0; i < iFirstFlopPi; i++ )
410 vRes = Vec_IntAlloc( 1000 );
411 vResInv = Vec_IntAlloc( 1000 );
412 for ( i = iFirstFlopPi; i < Saig_ManPiNum(
p); i++ )
414 for ( f = pCex->iFrame; f >= 0; f-- )
416 Value = Saig_ManSimInfo2Get( vSimInfo, Aig_ManCi(
p, i), f );
417 if ( Saig_ManSimInfo2IsOld( Value ) )
421 Vec_IntPush( vRes, i );
423 Vec_IntPush( vResInv, i );
428 Vec_IntFree( vResInv );
448 if ( Saig_ManPiNum(
p) != pCex->nPis )
450 printf(
"Saig_ManExtendCounterExampleTest2(): The PI count of AIG (%d) does not match that of cex (%d).\n",
451 Aig_ManCiNum(
p), pCex->nPis );
455 vSimInfo = Vec_PtrAllocSimInfo( Aig_ManObjNumMax(
p), Abc_BitWordNum(2*(pCex->iFrame+1)) );
456 Vec_PtrCleanSimInfo( vSimInfo, 0, Abc_BitWordNum(2*(pCex->iFrame+1)) );
462 printf(
"Total new PIs = %3d. Non-removable PIs = %3d. ", Saig_ManPiNum(
p)-iFirstFlopPi, Vec_IntSize(vRes) );
463ABC_PRT(
"Time", Abc_Clock() - clk );
465 Vec_PtrFree( vSimInfo );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Vec_Int_t * Saig_ManExtendCounterExampleTest2(Aig_Man_t *p, int iFirstFlopPi, Abc_Cex_t *pCex, int fVerbose)
int Saig_ManExtendOneEval(Vec_Ptr_t *vSimInfo, Aig_Obj_t *pObj, int iFrame)
FUNCTION DEFINITIONS ///.
int Saig_ManSimDataInit2(Aig_Man_t *p, Abc_Cex_t *pCex, Vec_Ptr_t *vSimInfo)
void Saig_ManSetAndDriveImplications_rec(Aig_Man_t *p, Aig_Obj_t *pObj, int f, int fMax, Vec_Ptr_t *vSimInfo)
#define SAIG_ZER
DECLARATIONS ///.
void Saig_ManExplorePaths_rec(Aig_Man_t *p, Aig_Obj_t *pObj, int f, int fMax, Vec_Ptr_t *vSimInfo)
Vec_Int_t * Saig_ManProcessCex(Aig_Man_t *p, int iFirstFlopPi, Abc_Cex_t *pCex, Vec_Ptr_t *vSimInfo, int fVerbose)
int Saig_ManSimDataInit(Aig_Man_t *p, Abc_Cex_t *pCex, Vec_Ptr_t *vSimInfo, Vec_Int_t *vRes)
int Saig_ManExtendOneEval2(Vec_Ptr_t *vSimInfo, Aig_Obj_t *pObj, int iFrame)
void Aig_ManFanoutStart(Aig_Man_t *p)
FUNCTION DEFINITIONS ///.
void Aig_ManFanoutStop(Aig_Man_t *p)
#define Aig_ObjForEachFanout(p, pObj, pFanout, iFan, i)
struct Aig_Obj_t_ Aig_Obj_t
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.