49 int f, i, RetValue1, RetValue2;
53 pObj->
fMarkB = Abc_InfoHasBit(
p->pPatWords, Saig_ManPiNum(
p->pAig) + i );
55 for ( f = 0; f < nFrames; f++ )
58 Aig_ManConst1(
p->pAig)->fMarkB = 1;
65 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) )
66 & ( Aig_ObjFanin1(pObj)->fMarkB ^ Aig_ObjFaninC1(pObj) );
69 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) );
103 pObj->
fMarkB = Abc_InfoHasBit(
p->pPatWords, Saig_ManPiNum(
p->pAig) + i );
105 for ( f = 0; f < nFrames; f++ )
108 Aig_ManConst1(
p->pAig)->fMarkB = 1;
115 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) )
116 & ( Aig_ObjFanin1(pObj)->fMarkB ^ Aig_ObjFaninC1(pObj) );
119 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) );
123 if ( pObj->
fMarkB ^ Abc_InfoHasBit(
p->pPatWords, Saig_ManPiNum(
p->pAig) + i) )
124 Abc_InfoXorBit(
p->pPatWords, Saig_ManPiNum(
p->pAig) + i );
147 for ( f = 0; f <= pCex->iFrame; f++ )
150 Aig_ManConst1(
p->pAig)->fMarkB = 1;
152 pObj->
fMarkB = Abc_InfoHasBit( pCex->pData, iBit++ );
157 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) )
158 & ( Aig_ObjFanin1(pObj)->fMarkB ^ Aig_ObjFaninC1(pObj) );
161 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) );
163 assert( iBit == pCex->nBits );
170 if ( pObj->
fMarkB ^ Abc_InfoHasBit(
p->pPatWords, Saig_ManPiNum(
p->pAig) + i) )
171 Abc_InfoXorBit(
p->pPatWords, Saig_ManPiNum(
p->pAig) + i );
187 Aig_Obj_t * pObjRepr, * pObjFraig, * pObjFraig2, * pObjReprFraig;
190 pObjRepr = Aig_ObjRepr(
p->pAig, pObj );
191 if ( pObjRepr == NULL )
194 pObjFraig = Ssw_ObjFrame(
p, pObj, f );
196 pObjReprFraig = Ssw_ObjFrame(
p, pObjRepr, f );
198 assert( pObjFraig != NULL && pObjReprFraig != NULL );
199 assert( (pObj->
fPhase == pObjRepr->
fPhase) == (Aig_ObjPhaseReal(pObjFraig) == Aig_ObjPhaseReal(pObjReprFraig)) );
201 if ( Aig_Regular(pObjFraig) == Aig_Regular(pObjReprFraig) )
204 if ( Aig_Regular(pObjFraig) != Aig_ManConst1(
p->pFrames) )
205 RetValue =
Ssw_NodesAreEquiv(
p, Aig_Regular(pObjReprFraig), Aig_Regular(pObjFraig) );
207 RetValue =
Ssw_NodesAreEquiv(
p, Aig_Regular(pObjFraig), Aig_Regular(pObjReprFraig) );
210 pObjFraig2 = Aig_NotCond( pObjReprFraig, pObj->
fPhase ^ pObjRepr->
fPhase );
211 Ssw_ObjSetFrame(
p, pObj, f, pObjFraig2 );
214 if ( RetValue == -1 )
222 assert( Aig_ObjRepr(
p->pAig, pObj ) != pObjRepr );
223 if ( Aig_ObjRepr(
p->pAig, pObj ) == pObjRepr )
225 Abc_Print( 1,
"Ssw_ManSweepNodeFilter(): Failed to refine representative.\n" );
244 pObjNew = Ssw_ObjFrame(
p, pObj, f );
247 assert( !Saig_ObjIsPi(
p->pAig, pObj) );
248 if ( Saig_ObjIsLo(
p->pAig, pObj) )
251 pObjLi = Saig_ObjLoToLi(
p->pAig, pObj );
253 pObjNew = Aig_NotCond( pObjNew, Aig_ObjFaninC0(pObjLi) );
257 assert( Aig_ObjIsNode(pObj) );
260 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
262 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
263 assert( pObjNew != NULL );
280 Aig_Obj_t * pObj, * pObjNew, * pObjLi, * pObjLo;
282 abctime clkTotal = Abc_Clock();
284 p->pFrames =
Aig_ManStart( Aig_ManObjNumMax(
p->pAig) *
p->pPars->nFramesK );
287 if ( Abc_InfoHasBit(
p->pPatWords, Saig_ManPiNum(
p->pAig) + i ) )
289 Ssw_ObjSetFrame(
p, pObj, 0, Aig_ManConst1(
p->pFrames) );
294 Ssw_ObjSetFrame(
p, pObj, 0, Aig_ManConst0(
p->pFrames) );
301 for ( f = 0; f <
p->pPars->nFramesK; f++ )
304 if ( f ==
p->nFrames-1 )
308 for ( f1 = 0; f1 <
p->nFrames; f1++ )
311 pNodeToFrames[2*
p->nFrames*pObj->
Id + f1] = Ssw_ObjFrame(
p, pObj, f1 );
314 p->pNodeToFrames = pNodeToFrames;
318 Ssw_ObjSetFrame(
p, Aig_ManConst1(
p->pAig), f, Aig_ManConst1(
p->pFrames) );
322 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
327 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
328 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
333 if (
p->pPars->fVerbose )
335 Abc_Print( 1,
"Frame %4d : ", f );
338 if ( i < Vec_PtrSize(
p->pAig->vObjs) )
340 if (
p->pPars->fVerbose )
341 Abc_Print( 1,
"Exceeded the resource limits (%d conflicts). Quitting...\n",
p->pPars->nBTLimit );
345 if ( f ==
p->pPars->nFramesK - 1 )
347 if (
p->pPars->fVerbose )
348 Abc_Print( 1,
"Exceeded the time frame limit (%d time frames). Quitting...\n",
p->pPars->nFramesK );
352 if ( TimeLimit && ((
float)TimeLimit <= (
float)(Abc_Clock()-clkTotal)/(
float)(CLOCKS_PER_SEC)) )
356 Ssw_ObjSetFrame(
p, pObj, f, Ssw_ObjChild0Fra(
p, pObj, f) );
360 pObjNew = Ssw_ObjFrame(
p, pObjLi, f );
361 Ssw_ObjSetFrame(
p, pObjLo, f+1, pObjNew );
386 int r, TimeLimitPart;
387 abctime nTimeToStop = TimeLimit ? TimeLimit * CLOCKS_PER_SEC + Abc_Clock(): 0;
388 assert( Aig_ManRegNum(pAig) > 0 );
389 assert( Aig_ManConstrNum(pAig) == 0 );
391 if ( Aig_ManNodeNum(pAig) == 0 )
398 pPars->nBTLimit = nConfMax;
399 pPars->TimeLimit = TimeLimit;
400 pPars->fVerbose = fVerbose;
403 pPars->nFramesK = nFramesMax;
405 if ( pAig->pReprs == NULL )
415 for ( r = 0; r < nRounds; r++ )
417 if (
p->pPars->fVerbose )
418 Abc_Print( 1,
"Round %3d:\n", r );
423 Abc_Print( 1,
"All equivalences are refined away.\n" );
427 if (
p->pPars->fVerbose )
429 Abc_Print( 1,
"Initial : " );
433 TimeLimitPart = TimeLimit ? (nTimeToStop - Abc_Clock()) / CLOCKS_PER_SEC : 0;
437 TimeLimitPart = Abc_MinInt( TimeLimitPart, TimeLimit2 );
439 TimeLimitPart = TimeLimit2;
448 if ( TimeLimit && Abc_Clock() > nTimeToStop )
450 Abc_Print( 1,
"Reached timeout (%d seconds).\n", TimeLimit );
477 if (
p->pReprs != NULL )
483 Ssw_SignalFilter( pAig, nFramesMax, nConfMax, nRounds, TimeLimit, TimeLimit2, pCex, fLatchOnly, fVerbose );
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void Aig_ManCleanMarkB(Aig_Man_t *p)
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
void Aig_ManSetPhase(Aig_Man_t *pAig)
unsigned Aig_ManRandom(int fReset)
Aig_Man_t * Gia_ManToAigSimple(Gia_Man_t *p)
void Gia_ManReprFromAigRepr(Aig_Man_t *pAig, Gia_Man_t *pGia)
void Gia_ManReprToAigRepr2(Aig_Man_t *pAig, Gia_Man_t *pGia)
struct Gia_Man_t_ Gia_Man_t
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
#define Saig_ManForEachLi(p, pObj, i)
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)
Ssw_Cla_t * Ssw_ClassesPrepareFromReprs(Aig_Man_t *pAig)
int Ssw_ClassesCand1Num(Ssw_Cla_t *p)
Ssw_Cla_t * Ssw_ClassesPrepareSimple(Aig_Man_t *pAig, int fLatchCorr, int nMaxLevs)
int Ssw_ClassesRefineConst1(Ssw_Cla_t *p, int fRecursive)
int Ssw_ClassesClassNum(Ssw_Cla_t *p)
void Ssw_ClassesPrint(Ssw_Cla_t *p, int fVeryVerbose)
void Ssw_ClassesSetData(Ssw_Cla_t *p, void *pManData, unsigned(*pFuncNodeHash)(void *, Aig_Obj_t *), int(*pFuncNodeIsConst)(void *, Aig_Obj_t *), int(*pFuncNodesAreEqual)(void *, Aig_Obj_t *, Aig_Obj_t *))
int Ssw_ClassesRefine(Ssw_Cla_t *p, int fRecursive)
void Ssw_SatStop(Ssw_Sat_t *p)
void Ssw_CnfNodeAddToSolver(Ssw_Sat_t *p, Aig_Obj_t *pObj)
ABC_NAMESPACE_IMPL_START Ssw_Sat_t * Ssw_SatStart(int fPolarFlip)
DECLARATIONS ///.
void Ssw_ManRollForward(Ssw_Man_t *p, int nFrames)
void Ssw_SignalFilter(Aig_Man_t *pAig, int nFramesMax, int nConfMax, int nRounds, int TimeLimit, int TimeLimit2, Abc_Cex_t *pCex, int fLatchOnly, int fVerbose)
void Ssw_SignalFilterGia(Gia_Man_t *p, int nFramesMax, int nConfMax, int nRounds, int TimeLimit, int TimeLimit2, Abc_Cex_t *pCex, int fLatchOnly, int fVerbose)
int Ssw_ManSweepBmcFilter(Ssw_Man_t *p, int TimeLimit)
int Ssw_ManSweepNodeFilter(Ssw_Man_t *p, Aig_Obj_t *pObj, int f)
Aig_Obj_t * Ssw_ManSweepBmcFilter_rec(Ssw_Man_t *p, Aig_Obj_t *pObj, int f)
ABC_NAMESPACE_IMPL_START void Ssw_ManRefineByFilterSim(Ssw_Man_t *p, int nFrames)
DECLARATIONS ///.
void Ssw_ManFindStartingState(Ssw_Man_t *p, Abc_Cex_t *pCex)
typedefABC_NAMESPACE_HEADER_START struct Ssw_Man_t_ Ssw_Man_t
INCLUDES ///.
void Ssw_ManResimulateBit(Ssw_Man_t *p, Aig_Obj_t *pObj, Aig_Obj_t *pRepr)
DECLARATIONS ///.
void Ssw_ManStop(Ssw_Man_t *p)
int Ssw_SmlObjIsConstBit(void *p, Aig_Obj_t *pObj)
int Ssw_SmlObjsAreEqualBit(void *p, Aig_Obj_t *pObj0, Aig_Obj_t *pObj1)
void Ssw_SmlSavePatternAig(Ssw_Man_t *p, int f)
void Ssw_ManCleanup(Ssw_Man_t *p)
Ssw_Man_t * Ssw_ManCreate(Aig_Man_t *pAig, Ssw_Pars_t *pPars)
DECLARATIONS ///.
int Ssw_NodesAreEquiv(Ssw_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)
DECLARATIONS ///.
void Ssw_ManSetDefaultParams(Ssw_Pars_t *p)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Ssw_Pars_t_ Ssw_Pars_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.