8 pObj = Aig_ManCo( pFrame, Counter*3+type_ );
9 Lit = toLitCond( pCnf->
pVarNums[Aig_ObjId(pObj)], 0 );
10 status =
sat_solver_solve( pSat, &Lit, &Lit + 1, (ABC_INT64_T)nConfs, 0, 0, 0 );
15 printf(
"Solver returned undecided.\n" );
27 Aig_Obj_t * pObj, * pObjLi, * pObjLo, * pObjNew;
35 pFrames =
Aig_ManStart( Aig_ManObjNumMax(pAig) * nFrames );
36 pFrames->pName = Abc_UtilStrsav( pAig->pName );
37 pFrames->pSpec = Abc_UtilStrsav( pAig->pSpec );
39 for ( f = 0; f < nFrames; f++ )
40 Aig_ObjSetFrames( pObjMap, nFrames, Aig_ManConst1(pAig), f, Aig_ManConst1(pFrames) );
42 for ( f = 0; f < nFrames; f++ )
44 Aig_ObjSetFrames( pObjMap, nFrames, pObj, f,
Aig_ObjCreateCi(pFrames) );
47 Aig_ObjSetFrames( pObjMap, nFrames, pObj, 0,
Aig_ObjCreateCi(pFrames) );
50 for ( f = 0; f < nFrames; f++ )
55 pObjNew =
Aig_And( pFrames, Aig_ObjChild0Frames(pObjMap,nFrames,pObj,f), Aig_ObjChild1Frames(pObjMap,nFrames,pObj,f) );
56 Aig_ObjSetFrames( pObjMap, nFrames, pObj, f, pObjNew );
61 pObjNew = Aig_ObjChild0Frames(pObjMap,nFrames,pObjLi,f);
62 if ( f < nFrames - 1 )
63 Aig_ObjSetFrames( pObjMap, nFrames, pObjLo, f+1, pObjNew );
73 Aig_Obj_t * pNode0 = pObjMap[nFrames*Aig_ObjId(pObjR)+0];
74 Aig_Obj_t * pNode1 = pObjMap[nFrames*Aig_ObjId(pObjR)+1];
76 Aig_Obj_t * pFan0 = Aig_NotCond( pNode0, Aig_IsComplement(pObj) );
77 Aig_Obj_t * pFan1 = Aig_NotCond( pNode1, !Aig_IsComplement(pObj) );
91 Aig_Obj_t * pNode2 = pObjMap[nFrames*Aig_ObjId(pObjR)+2];
92 Aig_Obj_t * pFan0 = Aig_NotCond( pNode0, Aig_IsComplement(pObj) );
93 Aig_Obj_t * pFan1 = Aig_NotCond( pNode1, Aig_IsComplement(pObj) );
94 Aig_Obj_t * pFan2 = Aig_NotCond( pNode2, !Aig_IsComplement(pObj) );
127 int i, k, k2, Counter;
137 assert( Aig_ManCoNum(pFrames) == Vec_VecSizeSize(vCands)*3 );
143 printf(
"Filtered cands: \n" );
154 Vec_PtrWriteEntry( vNodes, k2++, pObj );
156 printf(
"%d:%s%d \n", i, Aig_IsComplement(pObj)?
"!":
"", Aig_ObjId(Aig_Regular(pObj)) );
157 printf(
" type I : %d:%s%d \n", i, Aig_IsComplement(pObj)?
"!":
"", Aig_ObjId(Aig_Regular(pObj)) );
158 Vec_PtrPush(
p->unfold2_type_I, pObj);
166 printf(
"%d:%s%d \n", i, Aig_IsComplement(pObj)?
"!":
"", Aig_ObjId(Aig_Regular(pObj)) );
167 printf(
" type II: %d:%s%d \n", i, Aig_IsComplement(pObj)?
"!":
"", Aig_ObjId(Aig_Regular(pObj)) );
168 Vec_PtrWriteEntry( vNodes, k2++, pObj );
169 Vec_PtrPush(
p->unfold2_type_II, pObj);
174 Vec_PtrShrink( vNodes, k2 );
207 vCands = Vec_VecAlloc( nFrames );
211 assert( Aig_ManCoNum(pFrames) == 1 );
218 for ( f = 0; f < nFrames; f++ )
222 if ( !Aig_ObjIsCand(pObj) )
227 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
230 pRepr =
p->pObjCopies[nFrames*i + nFrames-1-f];
231 pReprR = Aig_Regular(pRepr);
232 if ( pCnf->
pVarNums[Aig_ObjId(pReprR)] < 0 )
239 Aig_ObjSetTravIdCurrent(
p, pObj);
240 if ( Saig_ObjIsLo(
p, pObj) )
241 Aig_ObjSetTravIdCurrent(
p, Aig_ObjFanin0(Saig_ObjLoToLi(
p, pObj)) );
243 Vec_VecPush( vCands, f, Aig_NotCond( pObj, (
value ==
l_True) ^ Aig_IsComplement(pRepr) ) );
255 printf(
"Found %3d candidates.\n", Vec_VecSizeSize(vCands) );
258 printf(
"Level %d. Cands =%d ", k, Vec_PtrSize(vNodes) );
268 if ( Vec_VecSizeSize(vCands) )
269 printf(
"Found %3d constraints after filtering.\n", Vec_VecSizeSize(vCands) );
274 printf(
"Level %d. Constr =%d ", k, Vec_PtrSize(vNodes) );
301 const int fCompl = 0 ;
306 if ( vCands == NULL || Vec_VecSizeSize(vCands) == 0 )
308 Vec_VecFreeP( &vCands );
313 pNew->nConstrs = pAig->nConstrs + Vec_VecSizeSize(vCands);
314 pNew->nConstrs = pAig->nConstrs + Vec_PtrSize(pAig->unfold2_type_II)
315 + Vec_PtrSize(pAig->unfold2_type_I);
317 *typeII_cnt = Vec_PtrSize(pAig->unfold2_type_II);
325 vNewFlops = Vec_PtrAlloc( 100 );
339 Aig_NotCond(type_II_latch, fCompl),
340 Aig_NotCond(x, fCompl));
354 nNewFlops = Vec_PtrSize(pAig->unfold2_type_II);
357 printf(
"#reg after unfold2: %d\n", Aig_ManRegNum(pAig) + nNewFlops );
358 Vec_VecFreeP( &vCands );
359 Vec_PtrFree( vNewFlops );
379 Aig_Obj_t * pMiter, * pFlopOut, * pFlopIn, * pObj;
380 int i, typeII_cc, type_II;
381 if ( Aig_ManConstrNum(pAig) == 0 )
383 assert( Aig_ManConstrNum(pAig) < Saig_ManPoNum(pAig) );
386 pAigNew->pName = Abc_UtilStrsav( pAig->pName );
387 pAigNew->pSpec = Abc_UtilStrsav( pAig->pSpec );
389 Aig_ManConst1(pAig)->pData = Aig_ManConst1( pAigNew );
395 pObj->
pData =
Aig_And( pAigNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
398 pMiter = Aig_ManConst0( pAigNew );
406 if ( i < Saig_ManPoNum(pAig)-Aig_ManConstrNum(pAig) )
408 if (i + typeII_cnt >= Saig_ManPoNum(pAig) ) {
416 pMiter =
Aig_Or(pAigNew, pMiter,
418 Aig_NotCond(type_II_latch, fCompl),
419 Aig_NotCond( Aig_ObjChild0Copy(pObj), fCompl ) )
421 printf(
"modeling typeII : %d:%s%d \n", i, Aig_IsComplement(pObj)?
"!":
"", Aig_ObjId(Aig_Regular(pObj)) );
423 pMiter =
Aig_Or( pAigNew, pMiter, Aig_NotCond( Aig_ObjChild0Copy(pObj), fCompl ) );
427 if ( Saig_ManRegNum(pAig) > 0 )
430 pFlopIn =
Aig_Or( pAigNew, pMiter, pFlopOut );
438 if ( i >= Saig_ManPoNum(pAig)-Aig_ManConstrNum(pAig) )
440 pMiter =
Aig_And( pAigNew, Aig_ObjChild0Copy(pObj), Aig_Not(pFlopIn) );
450 if( i + typeII_cc < Aig_ManRegNum(pAig)) {
452 Aig_ObjChild0Copy(pObjLi) ,
456 printf (
"skipping: reg%d\n", i);
471 if ( i < Saig_ManPoNum(pAig)-Aig_ManConstrNum(pAig) )
473 if (i + typeII_cnt >= Saig_ManPoNum(pAig) ) {
480 printf(
"Latch for typeII : %d:%s%d \n", i, Aig_IsComplement(pObj)?
"!":
"", Aig_ObjId(Aig_Regular(pObj)) );
487 if ( Saig_ManRegNum(pAig) > 0 )
492 printf(
"#reg after fold2: %d\n", Aig_ManRegNum(pAigNew));
#define ABC_CALLOC(type, num)
int Aig_ManSeqCleanup(Aig_Man_t *p)
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
Aig_Man_t * Aig_ManDupDfs(Aig_Man_t *p)
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
#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)
Aig_Obj_t * Aig_Mux(Aig_Man_t *p, Aig_Obj_t *pC, Aig_Obj_t *p1, Aig_Obj_t *p0)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
Aig_Man_t * Aig_ManDupWithoutPos(Aig_Man_t *p)
void Aig_ManPrintStats(Aig_Man_t *p)
#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_ManForEachPiSeq(p, pObj, i)
SEQUENTIAL ITERATORS ///.
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
#define Aig_ManForEachLoSeq(p, pObj, i)
Aig_Obj_t * Aig_Or(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
#define Aig_ManForEachLiLoSeq(p, pObjLi, pObjLo, k)
ABC_NAMESPACE_IMPL_START typedef signed char value
Cnf_Dat_t * Cnf_DeriveSimple(Aig_Man_t *p, 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)
Aig_Man_t * Saig_ManUnrollCOI(Aig_Man_t *pAig, int nFrames)
Vec_Vec_t * Saig_ManDetectConstrFunc(Aig_Man_t *p, int nFrames, int nConfs, int nProps, int fVerbose)
Aig_Man_t * Saig_ManDupFoldConstrsFunc2(Aig_Man_t *pAig, int fCompl, int fVerbose, int typeII_cnt)
Aig_Man_t * Saig_ManCreateIndMiter2(Aig_Man_t *pAig, Vec_Vec_t *vCands)
void Saig_ManFilterUsingInd2(Aig_Man_t *p, Vec_Vec_t *vCands, int nConfs, int nProps, int fVerbose)
int Saig_ManFilterUsingIndOne2(Aig_Man_t *p, Aig_Man_t *pFrame, sat_solver *pSat, Cnf_Dat_t *pCnf, int nConfs, int nProps, int Counter, int type_)
Vec_Vec_t * Ssw_ManFindDirectImplications2(Aig_Man_t *p, int nFrames, int nConfs, int nProps, int fVerbose)
Aig_Man_t * Saig_ManDupUnfoldConstrsFunc2(Aig_Man_t *pAig, int nFrames, int nConfs, int nProps, int fOldAlgo, int fVerbose, int *typeII_cnt)
#define Saig_ManForEachLiLo(p, pObjLi, pObjLo, i)
#define Saig_ManForEachLi(p, pObj, i)
#define Saig_ManForEachPo(p, pObj, i)
int sat_solver_get_var_value(sat_solver *s, int v)
void sat_solver_delete(sat_solver *s)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_VecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.