50 Gia_Obj_t * pObj;
int i, fPhase0, fPhase1;
51 assert( Vec_IntSize(vValues) == Gia_ManCiNum(
p) );
54 pObj->
fPhase = Vec_IntEntry(vValues, i);
57 fPhase0 = Gia_ObjPhase(Gia_ObjFanin0(pObj)) ^ Gia_ObjFaninC0(pObj);
58 fPhase1 = Gia_ObjPhase(Gia_ObjFanin1(pObj)) ^ Gia_ObjFaninC1(pObj);
59 pObj->
fPhase = fPhase0 & fPhase1;
64 Gia_ObjFanin0(pObj)->fMark0 = 1;
69 fPhase0 = Gia_ObjPhase(Gia_ObjFanin0(pObj)) ^ Gia_ObjFaninC0(pObj);
70 fPhase1 = Gia_ObjPhase(Gia_ObjFanin1(pObj)) ^ Gia_ObjFaninC1(pObj);
71 if ( fPhase0 == fPhase1 )
74 Gia_ObjFanin0(pObj)->fMark0 = 1;
75 Gia_ObjFanin1(pObj)->fMark0 = 1;
81 Gia_ObjFanin1(pObj)->fMark0 = 1;
87 Gia_ObjFanin0(pObj)->fMark0 = 1;
93 pNew->
pName = Abc_UtilStrsav(
p->pName );
94 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
95 Gia_ManConst0(
p)->Value = 0;
97 pObj->
Value = Abc_LitNotCond( Gia_ManAppendCi(pNew), !Vec_IntEntry(vValues, i) );
102 fPhase0 = Gia_ObjPhase(Gia_ObjFanin0(pObj)) ^ Gia_ObjFaninC0(pObj);
103 fPhase1 = Gia_ObjPhase(Gia_ObjFanin1(pObj)) ^ Gia_ObjFaninC1(pObj);
104 if ( fPhase0 == fPhase1 )
108 pObj->
Value = Gia_ManAppendAnd( pNew, Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value );
110 pObj->
Value = Gia_ManAppendOr( pNew, Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value );
116 pObj->
Value = Gia_ObjFanin1(pObj)->Value;
122 pObj->
Value = Gia_ObjFanin0(pObj)->Value;
126 Gia_ManAppendCo( pNew, Gia_ObjFanin0(pObj)->Value );
146 Vec_Int_t * vValues = Vec_IntStart( Gia_ManCiNum(
p) );
149 Vec_IntFree( vValues );
169 Vec_Int_t * vValues = Vec_IntStart( Gia_ManCiNum(
p) );
171 int i, iVar, nIter, iPoVarBeg = pCnf->
nVars - Gia_ManCiNum(
p);
174 Vec_IntPush( vLits, Abc_Var2Lit( 1, 1 ) );
175 for ( nIter = 0; nIter < 10000; nIter++ )
177 int status =
sat_solver_solve( pSat, Vec_IntArray(vLits), Vec_IntLimit(vLits), 0, 0, 0, 0 );
182 for ( i = 0; i < Gia_ManCiNum(
p); i++ )
184 Vec_IntWriteEntry( vValues, i, sat_solver_var_value(pSat, iPoVarBeg+i) );
185 printf(
"%d", sat_solver_var_value(pSat, iPoVarBeg+i) );
192 pObj->
Value = iPoVarBeg+i;
195 pObj->
Value = iVar++;
199 sat_solver_add_and( pSat, pObj->
Value, Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value, Gia_ObjFaninC0(pObj), Gia_ObjFaninC1(pObj), 0 );
201 pRoot = Gia_ManCo(pNew, 0);
202 Vec_IntPush( vLits, Abc_Var2Lit(Gia_ObjFanin0(pRoot)->Value, !Gia_ObjFaninC0(pRoot)) );
205 printf(
"Iter = %5d : ", nIter );
206 printf(
"And = %4d ", Gia_ManAndNum(pNew) );
211 Vec_IntFree( vLits );
212 Vec_IntFree( vValues );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
ABC_NAMESPACE_IMPL_START Gia_Man_t * Gia_ManDeriveOne(Gia_Man_t *p, Vec_Int_t *vValues)
DECLARATIONS ///.
Gia_Man_t * Gia_ManDeriveOneTest2(Gia_Man_t *p)
void Gia_ManDeriveOneTest(Gia_Man_t *p)
#define sat_solver_add_and
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachAnd(p, pObj, i)
#define Gia_ManForEachAndReverse(p, pObj, i)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
void Gia_ManFillValue(Gia_Man_t *p)
struct Gia_Man_t_ Gia_Man_t
void Gia_ManCleanMark0(Gia_Man_t *p)
#define Gia_ManForEachCo(p, pObj, i)
#define Gia_ManForEachCi(p, pObj, i)
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
void * Cnf_DataWriteIntoSolver(Cnf_Dat_t *p, int nFrames, int fInit)
void sat_solver_setnvars(sat_solver *s, int n)
int sat_solver_nvars(sat_solver *s)
void sat_solver_delete(sat_solver *s)