48 int fUseNoBoundary = 0;
52 pObjFraig = Ssw_ObjFrame(
p, pObj, f );
56 Value ^= Aig_IsComplement(pObjFraig);
60 int nVarNum = Ssw_ObjSatNum(
p->pMSat, Aig_Regular(pObjFraig) );
61 Value = (!nVarNum)? 0 : (Aig_IsComplement(pObjFraig) ^ sat_solver_var_value(
p->pMSat->pSat, nVarNum ));
66 if (
p->pPars->fPolarFlip )
68 if ( Aig_Regular(pObjFraig)->fPhase ) Value ^= 1;
89 nConstrPairs = Aig_ManCoNum(
p->pFrames)-Aig_ManRegNum(
p->pAig);
90 assert( (nConstrPairs & 1) == 0 );
91 for ( i = 0; i < nConstrPairs; i += 2 )
93 pObj = Aig_ManCo(
p->pFrames, i );
94 pObj2 = Aig_ManCo(
p->pFrames, i+1 );
101 Abc_Print( 1,
"Total constraints = %d. Added constraints = %d.\n", nConstrPairs/2, Counter );
119 memset(
p->pPatWords, 0,
sizeof(
unsigned) *
p->nPatWords );
121 if ( Aig_ObjPhaseReal( Ssw_ObjFrame(
p, pObj, f) ) )
122 Abc_InfoSetBit(
p->pPatWords, i );
140 memset(
p->pPatWords, 0,
sizeof(
unsigned) *
p->nPatWords );
143 Abc_InfoSetBit(
p->pPatWords, i );
165 assert( Aig_ObjIsCi(pObj) );
166 nVarNum = Ssw_ObjSatNum(
p->pMSat, pObj );
168 if ( sat_solver_var_value(
p->pMSat->pSat, nVarNum ) )
170 pInfo = (
unsigned *)Vec_PtrEntry(
p->vSimInfo, Aig_ObjCioId(pObj) );
171 Abc_InfoSetBit( pInfo,
p->nPatterns );
189 Aig_Obj_t * pObjRepr, * pObjFraig, * pObjFraig2, * pObjReprFraig;
193 pObjRepr = Aig_ObjRepr(
p->pAig, pObj );
194 if ( pObjRepr == NULL )
197 pObjFraig = Ssw_ObjFrame(
p, pObj, f );
199 pObjReprFraig = Ssw_ObjFrame(
p, pObjRepr, f );
201 assert( pObjFraig != NULL && pObjReprFraig != NULL );
202 assert( (pObj->
fPhase == pObjRepr->
fPhase) == (Aig_ObjPhaseReal(pObjFraig) == Aig_ObjPhaseReal(pObjReprFraig)) );
204 if ( Aig_Regular(pObjFraig) == Aig_Regular(pObjReprFraig) )
207 if ( !fBmc &&
p->pPars->fDynamic )
212p->timeMarkCones += Abc_Clock() - clk;
215 if ( Aig_Regular(pObjFraig) != Aig_ManConst1(
p->pFrames) )
216 RetValue =
Ssw_NodesAreEquiv(
p, Aig_Regular(pObjReprFraig), Aig_Regular(pObjFraig) );
218 RetValue =
Ssw_NodesAreEquiv(
p, Aig_Regular(pObjFraig), Aig_Regular(pObjReprFraig) );
221 pObjFraig2 = Aig_NotCond( pObjReprFraig, pObj->
fPhase ^ pObjRepr->
fPhase );
222 Ssw_ObjSetFrame(
p, pObj, f, pObjFraig2 );
223 if (
p->pPars->fEquivDump2 && vPairs )
225 Vec_IntPush( vPairs, pObjRepr->
Id );
226 Vec_IntPush( vPairs, pObj->
Id );
230 if (
p->pPars->fEquivDump && vPairs )
232 Vec_IntPush( vPairs, pObjRepr->
Id );
233 Vec_IntPush( vPairs, pObj->
Id );
235 if ( RetValue == -1 )
241 if ( !fBmc &&
p->pPars->fDynamic )
249 if ( !
p->pPars->fConstrs )
253 assert( Aig_ObjRepr(
p->pAig, pObj ) != pObjRepr );
254 if ( Aig_ObjRepr(
p->pAig, pObj ) == pObjRepr )
256 Abc_Print( 1,
"Ssw_ManSweepNode(): Failed to refine representative.\n" );
275 Aig_Obj_t * pObj, * pObjNew, * pObjLi, * pObjLo;
281 p->pFrames =
Aig_ManStart( Aig_ManObjNumMax(
p->pAig) *
p->pPars->nFramesK );
283 Ssw_ObjSetFrame(
p, pObj, 0, Aig_ManConst0(
p->pFrames) );
287 if (
p->pPars->fVerbose )
289 for ( f = 0; f <
p->pPars->nFramesK; f++ )
292 Ssw_ObjSetFrame(
p, Aig_ManConst1(
p->pAig), f, Aig_ManConst1(
p->pFrames) );
301 if (
p->pPars->fVerbose )
302 Bar_ProgressUpdate( pProgress, Aig_ManObjNumMax(
p->pAig) * f + i, NULL );
303 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
304 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
308 if ( f ==
p->pPars->nFramesK - 1 )
312 Ssw_ObjSetFrame(
p, pObj, f, Ssw_ObjChild0Fra(
p, pObj, f) );
316 pObjNew = Ssw_ObjFrame(
p, pObjLi, f );
317 Ssw_ObjSetFrame(
p, pObjLo, f+1, pObjNew );
321 if (
p->pPars->fVerbose )
326p->timeBmc += Abc_Clock() - clk;
347 sprintf( pBuffer,
"equiv%03d.aig", Num );
348 pFile = fopen( pBuffer,
"w" );
351 Abc_Print( 1,
"Cannot open file %s for writing.\n", pBuffer );
358 Abc_Print( 1,
"AIG with %4d disproved equivs is dumped into file \"%s\".\n", Vec_IntSize(vPairs)/2, pBuffer );
378 int nConstrPairs, i, f;
387 nConstrPairs = Aig_ManCoNum(
p->pFrames)-Aig_ManRegNum(
p->pAig);
388 assert( (nConstrPairs & 1) == 0 );
389 for ( i = 0; i < nConstrPairs; i += 2 )
391 pObj = Aig_ManCo(
p->pFrames, i );
392 pObj2 = Aig_ManCo(
p->pFrames, i+1 );
396 for ( i = 0; i < Aig_ManRegNum(
p->pAig); i++ )
398 pObj = Aig_ManCo(
p->pFrames, nConstrPairs + i );
404 f =
p->pPars->nFramesK;
405 Ssw_ObjSetFrame(
p, Aig_ManConst1(
p->pAig), f, Aig_ManConst1(
p->pFrames) );
408p->timeReduce += Abc_Clock() - clk;
413 if (
p->pPars->fVerbose )
415 vObjPairs = (
p->pPars->fEquivDump ||
p->pPars->fEquivDump2)? Vec_IntAlloc(1000) : NULL;
418 if (
p->pPars->fVerbose )
419 Bar_ProgressUpdate( pProgress, i, NULL );
420 if ( Saig_ObjIsLo(
p->pAig, pObj) )
422 else if ( Aig_ObjIsNode(pObj) )
424 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
425 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
429 if (
p->pPars->fVerbose )
434 if (
p->pPars->fEquivDump )
436 if (
p->pPars->fEquivDump2 && !
p->fRefined )
438 Vec_IntFreeP( &vObjPairs );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
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 Bar_ProgressStop(Bar_Progress_t *p)
Bar_Progress_t * Bar_ProgressStart(FILE *pFile, int nItemsTotal)
FUNCTION DEFINITIONS ///.
struct Bar_Progress_t_ Bar_Progress_t
BASIC TYPES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Ioa_WriteAiger(Aig_Man_t *pMan, char *pFileName, int fWriteSymbols, int fCompact)
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)
Aig_Man_t * Saig_ManCreateEquivMiter(Aig_Man_t *pAig, Vec_Int_t *vPairs, int fAddOuts)
int sat_solver_simplify(sat_solver *s)
Aig_Man_t * Ssw_FramesWithClasses(Ssw_Man_t *p)
void Ssw_ClassesClearRefined(Ssw_Cla_t *p)
void Ssw_ClassesRemoveNode(Ssw_Cla_t *p, Aig_Obj_t *pObj)
int Ssw_CnfGetNodeValue(Ssw_Sat_t *p, Aig_Obj_t *pObj)
void Ssw_CnfNodeAddToSolver(Ssw_Sat_t *p, Aig_Obj_t *pObj)
void Ssw_ManLoadSolver(Ssw_Man_t *p, Aig_Obj_t *pRepr, Aig_Obj_t *pObj)
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 ///.
int Ssw_NodesAreEquiv(Ssw_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)
DECLARATIONS ///.
void Ssw_ManResimulateWord(Ssw_Man_t *p, Aig_Obj_t *pCand, Aig_Obj_t *pRepr, int f)
int Ssw_NodesAreConstrained(Ssw_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)
void Ssw_ManDumpEquivMiter(Aig_Man_t *p, Vec_Int_t *vPairs, int Num, int fAddOuts)
int Ssw_ManSweepNode(Ssw_Man_t *p, Aig_Obj_t *pObj, int f, int fBmc, Vec_Int_t *vPairs)
void Ssw_SmlSavePatternAig(Ssw_Man_t *p, int f)
void Ssw_SmlSavePatternAigPhase(Ssw_Man_t *p, int f)
int Ssw_ManSweepBmc(Ssw_Man_t *p)
void Ssw_CheckConstraints(Ssw_Man_t *p)
void Ssw_SmlAddPatternDyn(Ssw_Man_t *p)
ABC_NAMESPACE_IMPL_START int Ssw_ManGetSatVarValue(Ssw_Man_t *p, Aig_Obj_t *pObj, int f)
DECLARATIONS ///.
int Ssw_ManSweep(Ssw_Man_t *p)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.