54 assert( Aig_ManRegNum(
p) < Aig_ManCiNum(
p) );
59 Aig_ObjSetCopy( pObj, Aig_ManConst0(pFrames) );
61 for ( f = 0; f < nFrames; f++ )
64 Aig_ObjSetCopy( Aig_ManConst1(
p), Aig_ManConst1(pFrames) );
69 Aig_ObjSetCopy( pObj,
Aig_And( pFrames, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) ) );
72 Aig_ObjSetCopy( pObj, Aig_ObjChild0Copy(pObj) );
76 if ( i < Saig_ManPoNum(
p) - Saig_ManConstrNum(
p) )
82 Aig_ObjSetCopy( pObjLo, Aig_ObjCopy(pObjLi) );
124 (ABC_INT64_T)1000000, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
125 if ( RetValue ==
l_True && pvInits )
127 *pvInits = Vec_IntAlloc( 1000 );
129 Vec_IntPush( *pvInits, sat_solver_var_value(pSat, pCnf->
pVarNums[Aig_ObjId(pObj)]) );
162 int i, f, iVar, RetValue, nRegs;
167 nRegs =
p->nRegs;
p->nRegs = 0;
174 vLits = Vec_IntAlloc( 100 );
178 Vec_IntPush( vLits, toLitCond(pCnf->
pVarNums[Aig_ObjId(pObj)], 1) );
180 for ( f = 0; f < nFrames; f++ )
184 if ( i < Saig_ManPoNum(
p) - Saig_ManConstrNum(
p) )
188 Vec_IntPush( vLits, toLitCond(iVar, 1) );
192 (
int *)Vec_IntArray(vLits) + Vec_IntSize(vLits),
193 (ABC_INT64_T)1000000, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
194 if ( RetValue ==
l_True && pvInits )
196 *pvInits = Vec_IntAlloc( 1000 );
197 for ( f = 0; f < nFrames; f++ )
202 Vec_IntPush( *pvInits, sat_solver_var_value(pSat, iVar) );
207 Vec_IntFree( vLits );
232 Abc_Print( 1,
"%d", pObj->
fPhase );
233 Abc_Print( 1,
"\n" );
250 int f, i, iLits, RetValue1, RetValue2;
251 int nFrames = Vec_IntSize(
p->vInits) / Saig_ManPiNum(
p->pAig);
252 assert( Vec_IntSize(
p->vInits) % Saig_ManPiNum(
p->pAig) == 0 );
258 for ( f = 0; f < nFrames; f++ )
261 Aig_ManConst1(
p->pAig)->fMarkB = 1;
263 pObj->
fMarkB = Vec_IntEntry(
p->vInits, iLits++ );
268 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) )
269 & ( Aig_ObjFanin1(pObj)->fMarkB ^ Aig_ObjFaninC1(pObj) );
272 pObj->
fMarkB = ( Aig_ObjFanin0(pObj)->fMarkB ^ Aig_ObjFaninC0(pObj) );
276 if ( i < Saig_ManPoNum(
p->pAig) - Saig_ManConstrNum(
p->pAig) )
278 if ( pObj->
fMarkB && Saig_ManConstrNum(
p->pAig) )
279 Abc_Print( 1,
"output %d failed in frame %d.\n", i, f );
283 if ( pObj->
fMarkB && Saig_ManConstrNum(
p->pAig) )
284 Abc_Print( 1,
"constraint %d failed in frame %d.\n", i, f );
299 assert( iLits == Vec_IntSize(
p->vInits) );
316 Aig_Obj_t * pObjRepr, * pObjFraig, * pObjFraig2, * pObjReprFraig;
319 pObjRepr = Aig_ObjRepr(
p->pAig, pObj );
320 if ( pObjRepr == NULL )
323 pObjFraig = Ssw_ObjFrame(
p, pObj, f );
325 pObjReprFraig = Ssw_ObjFrame(
p, pObjRepr, f );
327 assert( pObjFraig != NULL && pObjReprFraig != NULL );
328 assert( (pObj->
fPhase == pObjRepr->
fPhase) == (Aig_ObjPhaseReal(pObjFraig) == Aig_ObjPhaseReal(pObjReprFraig)) );
330 if ( Aig_Regular(pObjFraig) == Aig_Regular(pObjReprFraig) )
333 if ( Aig_Regular(pObjFraig) != Aig_ManConst1(
p->pFrames) )
334 RetValue =
Ssw_NodesAreEquiv(
p, Aig_Regular(pObjReprFraig), Aig_Regular(pObjFraig) );
336 RetValue =
Ssw_NodesAreEquiv(
p, Aig_Regular(pObjFraig), Aig_Regular(pObjReprFraig) );
339 pObjFraig2 = Aig_NotCond( pObjReprFraig, pObj->
fPhase ^ pObjRepr->
fPhase );
340 Ssw_ObjSetFrame(
p, pObj, f, pObjFraig2 );
343 if ( RetValue == -1 )
351 assert( Aig_ObjRepr(
p->pAig, pObj ) != pObjRepr );
352 if ( Aig_ObjRepr(
p->pAig, pObj ) == pObjRepr )
354 Abc_Print( 1,
"Ssw_ManSweepNodeConstr(): Failed to refine representative.\n" );
373 pObjNew = Ssw_ObjFrame(
p, pObj, f );
376 assert( !Saig_ObjIsPi(
p->pAig, pObj) );
377 if ( Saig_ObjIsLo(
p->pAig, pObj) )
380 pObjLi = Saig_ObjLoToLi(
p->pAig, pObj );
382 pObjNew = Aig_NotCond( pObjNew, Aig_ObjFaninC0(pObjLi) );
386 assert( Aig_ObjIsNode(pObj) );
389 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
391 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
392 assert( pObjNew != NULL );
410 Aig_Obj_t * pObj, * pObjNew, * pObjLi, * pObjLo;
416 p->pFrames =
Aig_ManStart( Aig_ManObjNumMax(
p->pAig) *
p->pPars->nFramesK );
418 Ssw_ObjSetFrame(
p, pObj, 0, Aig_ManConst0(
p->pFrames) );
422 for ( f = 0; f <
p->pPars->nFramesK; f++ )
425 Ssw_ObjSetFrame(
p, Aig_ManConst1(
p->pAig), f, Aig_ManConst1(
p->pFrames) );
429 pObjNew->
fPhase = Vec_IntEntry(
p->vInits, iLits++ );
430 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
435 if ( i < Saig_ManPoNum(
p->pAig) - Saig_ManConstrNum(
p->pAig) )
438 pObjNew = Aig_NotCond( pObjNew, Aig_ObjFaninC0(pObj) );
439 if ( Aig_Regular(pObjNew) == Aig_ManConst1(
p->pFrames) )
441 assert( Aig_IsComplement(pObjNew) );
447 assert( Vec_IntSize(
p->vInits) == iLits + Saig_ManPiNum(
p->pAig) );
451 if (
p->pPars->fVerbose )
453 for ( f = 0; f <
p->pPars->nFramesK; f++ )
458 if (
p->pPars->fVerbose )
459 Bar_ProgressUpdate( pProgress, Aig_ManObjNumMax(
p->pAig) * f + i, NULL );
460 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
461 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
465 if ( f ==
p->pPars->nFramesK - 1 )
469 Ssw_ObjSetFrame(
p, pObj, f, Ssw_ObjChild0Fra(
p, pObj, f) );
473 pObjNew = Ssw_ObjFrame(
p, pObjLi, f );
474 Ssw_ObjSetFrame(
p, pObjLo, f+1, pObjNew );
478 if (
p->pPars->fVerbose )
483p->timeBmc += Abc_Clock() - clk;
500 Aig_Obj_t * pObj, * pObjNew, * pObjLi, * pObjLo;
506 p->pFrames =
Aig_ManStart( Aig_ManObjNumMax(
p->pAig) *
p->pPars->nFramesK );
508 Ssw_ObjSetFrame(
p, pObj, 0, Aig_ManConst0(
p->pFrames) );
513 for ( f = 0; f <
p->pPars->nFramesK; f++ )
516 Ssw_ObjSetFrame(
p, Aig_ManConst1(
p->pAig), f, Aig_ManConst1(
p->pFrames) );
520 pObjNew->
fPhase = Vec_IntEntry(
p->vInits, iLits++ );
521 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
526 if ( i < Saig_ManPoNum(
p->pAig) - Saig_ManConstrNum(
p->pAig) )
529 pObjNew = Aig_NotCond( pObjNew, Aig_ObjFaninC0(pObj) );
530 if ( Aig_Regular(pObjNew) == Aig_ManConst1(
p->pFrames) )
532 assert( Aig_IsComplement(pObjNew) );
543 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
544 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
548 if ( f ==
p->pPars->nFramesK - 1 )
552 Ssw_ObjSetFrame(
p, pObj, f, Ssw_ObjChild0Fra(
p, pObj, f) );
556 pObjNew = Ssw_ObjFrame(
p, pObjLi, f );
557 Ssw_ObjSetFrame(
p, pObjLo, f+1, pObjNew );
561 assert( Vec_IntSize(
p->vInits) == iLits + Saig_ManPiNum(
p->pAig) );
565p->timeBmc += Abc_Clock() - clk;
586 pObjNew = Ssw_ObjFrame(
p, pObj, f );
589 assert( !Saig_ObjIsPi(
p->pAig, pObj) );
590 if ( Saig_ObjIsLo(
p->pAig, pObj) )
593 pObjLi = Saig_ObjLoToLi(
p->pAig, pObj );
595 pObjNew = Aig_NotCond( pObjNew, Aig_ObjFaninC0(pObjLi) );
599 assert( Aig_ObjIsNode(pObj) );
602 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
604 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
605 assert( pObjNew != NULL );
625 int nConstrPairs, i, f, iLits;
634 nConstrPairs = Aig_ManCoNum(
p->pFrames)-Aig_ManRegNum(
p->pAig);
635 assert( (nConstrPairs & 1) == 0 );
636 for ( i = 0; i < nConstrPairs; i += 2 )
638 pObj = Aig_ManCo(
p->pFrames, i );
639 pObj2 = Aig_ManCo(
p->pFrames, i+1 );
643 for ( i = 0; i < Aig_ManRegNum(
p->pAig); i++ )
645 pObj = Aig_ManCo(
p->pFrames, nConstrPairs + i );
650 f =
p->pPars->nFramesK;
652 iLits = f * Saig_ManPiNum(
p->pAig);
653 Ssw_ObjSetFrame(
p, Aig_ManConst1(
p->pAig), f, Aig_ManConst1(
p->pFrames) );
657 pObjNew->
fPhase = (
p->vInits != NULL) && Vec_IntEntry(
p->vInits, iLits++);
658 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
660 assert( Vec_IntSize(
p->vInits) == iLits );
661p->timeReduce += Abc_Clock() - clk;
664 for ( f = 0; f <=
p->pPars->nFramesK; f++ )
668 if ( i < Saig_ManPoNum(
p->pAig) - Saig_ManConstrNum(
p->pAig) )
672 if ( Ssw_ObjChild0Fra(
p,pObj,f) == Aig_ManConst0(
p->pFrames) )
674 assert( Ssw_ObjChild0Fra(
p,pObj,f) != Aig_ManConst1(
p->pFrames) );
675 if ( Ssw_ObjChild0Fra(
p,pObj,f) == Aig_ManConst1(
p->pFrames) )
677 Abc_Print( 1,
"Polarity violation.\n" );
683 f =
p->pPars->nFramesK;
691 if (
p->pPars->fVerbose )
695 if (
p->pPars->fVerbose )
696 Bar_ProgressUpdate( pProgress, i, NULL );
697 if ( Saig_ObjIsLo(
p->pAig, pObj) )
699 else if ( Aig_ObjIsNode(pObj) )
701 pObjNew =
Aig_And(
p->pFrames, Ssw_ObjChild0Fra(
p, pObj, f), Ssw_ObjChild1Fra(
p, pObj, f) );
702 Ssw_ObjSetFrame(
p, pObj, f, pObjNew );
706 if (
p->pPars->fVerbose )
#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)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
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 ///.
int Aig_ManCleanup(Aig_Man_t *p)
#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 ///.
Cnf_Dat_t * Cnf_Derive(Aig_Man_t *pAig, int nOutputs)
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
void * Cnf_DataWriteIntoSolver(Cnf_Dat_t *p, int nFrames, int fInit)
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
#define Saig_ManForEachLi(p, pObj, i)
#define Saig_ManForEachPo(p, pObj, i)
#define Saig_ManForEachLo(p, pObj, i)
#define Saig_ManForEachPi(p, pObj, i)
int sat_solver_simplify(sat_solver *s)
void sat_solver_delete(sat_solver *s)
Aig_Man_t * Ssw_FramesWithClasses(Ssw_Man_t *p)
void Ssw_ClassesClearRefined(Ssw_Cla_t *p)
int Ssw_ClassesRefineConst1(Ssw_Cla_t *p, int fRecursive)
void Ssw_ClassesRemoveNode(Ssw_Cla_t *p, Aig_Obj_t *pObj)
int Ssw_ClassesRefine(Ssw_Cla_t *p, int fRecursive)
void Ssw_CnfNodeAddToSolver(Ssw_Sat_t *p, Aig_Obj_t *pObj)
int Ssw_ManSweepBmcConstr_old(Ssw_Man_t *p)
ABC_NAMESPACE_IMPL_START Aig_Man_t * Ssw_FramesWithConstraints(Aig_Man_t *p, int nFrames)
DECLARATIONS ///.
void Ssw_ManRefineByConstrSim(Ssw_Man_t *p)
int Ssw_ManSetConstrPhases(Aig_Man_t *p, int nFrames, Vec_Int_t **pvInits)
int Ssw_ManSweepNodeConstr(Ssw_Man_t *p, Aig_Obj_t *pObj, int f, int fBmc)
Aig_Obj_t * Ssw_ManSweepBmcConstr_rec(Ssw_Man_t *p, Aig_Obj_t *pObj, int f)
int Ssw_ManSweepConstr(Ssw_Man_t *p)
void Ssw_ManPrintPolarity(Aig_Man_t *p)
Aig_Obj_t * Ssw_FramesWithClasses_rec(Ssw_Man_t *p, Aig_Obj_t *pObj, int f)
int Ssw_ManSweepBmcConstr(Ssw_Man_t *p)
int Ssw_ManSetConstrPhases_(Aig_Man_t *p, int nFrames, Vec_Int_t **pvInits)
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_SmlSavePatternAig(Ssw_Man_t *p, int f)
int Ssw_NodesAreEquiv(Ssw_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)
DECLARATIONS ///.
int Ssw_NodesAreConstrained(Ssw_Man_t *p, Aig_Obj_t *pOld, Aig_Obj_t *pNew)