49 return Vec_WrdEntryP(
p->vSims, iObj *
p->nSimWords );
51static inline void Gia_ManMoSetCi(
Gia_Man_t *
p,
int iObj )
54 word * pSims = Gia_ManMoObj(
p, iObj );
55 for ( w = 0; w <
p->nSimWords; w++ )
58static inline void Gia_ManMoSimAnd(
Gia_Man_t *
p,
int iObj )
62 word * pSims = Gia_ManMoObj(
p, iObj );
63 word * pSims0 = Gia_ManMoObj(
p, Gia_ObjFaninId0(pObj, iObj) );
64 word * pSims1 = Gia_ManMoObj(
p, Gia_ObjFaninId1(pObj, iObj) );
65 if ( Gia_ObjFaninC0(pObj) )
67 if ( Gia_ObjFaninC1(pObj) )
68 for ( w = 0; w <
p->nSimWords; w++ )
69 pSims[w] = ~(pSims0[w] | pSims1[w]);
71 for ( w = 0; w <
p->nSimWords; w++ )
72 pSims[w] = ~pSims0[w] & pSims1[w];
76 if ( Gia_ObjFaninC1(pObj) )
77 for ( w = 0; w <
p->nSimWords; w++ )
78 pSims[w] = pSims0[w] & ~pSims1[w];
80 for ( w = 0; w <
p->nSimWords; w++ )
81 pSims[w] = pSims0[w] & pSims1[w];
84static inline void Gia_ManMoSetCo(
Gia_Man_t *
p,
int iObj )
88 word * pSims = Gia_ManMoObj(
p, iObj );
89 word * pSims0 = Gia_ManMoObj(
p, Gia_ObjFaninId0(pObj, iObj) );
90 if ( Gia_ObjFaninC0(pObj) )
92 for ( w = 0; w <
p->nSimWords; w++ )
93 pSims[w] = ~pSims0[w];
97 for ( w = 0; w <
p->nSimWords; w++ )
107 Vec_WrdFill(
p->vSims,
nWords * Gia_ManObjNum(
p), 0 );
109 p->vSims = Vec_WrdStart(
nWords * Gia_ManObjNum(
p) );
111 Gia_ManMoSetCi(
p, iObj );
113 Gia_ManMoSimAnd(
p, iObj );
115 Gia_ManMoSetCo(
p, iObj );
131 abctime clk = Abc_Clock(), clk2, clkTotal = 0;
134 int i, v, status, iLit,
nWords = 1, iOutVar = 1, Count = 0;
135 Vec_Int_t * vVars = Vec_IntAlloc( 1000 );
139 iLit = Abc_Var2Lit( iOutVar, 0 );
147 pSimInfo = Gia_ManMoObj(
p, Gia_ObjId(
p, Gia_ManCo(
p, 0)) );
148 for ( i = 0; i < 64*
nWords; i++ )
149 printf(
"%d", Abc_InfoHasBit( (
unsigned *)pSimInfo, i ) );
153 for ( i = 0; i < 64*
nWords; i++ )
155 Vec_IntClear( vVars );
156 for ( v = 0; v < Gia_ManObjNum(
p); v++ )
160 pSimInfo = Gia_ManMoObj(
p, v );
161 if ( !Abc_InfoHasBit( (
unsigned *)pSimInfo, i ) )
163 Vec_IntPush( vVars, pCnf->
pVarNums[v] );
170 clkTotal += Abc_Clock() - clk2;
171 printf(
"%c", status ==
l_True ?
'+' :
'-' );
176 printf(
"Finished generating %d assignments. ", Count );
177 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
178 Abc_PrintTime( 1,
"SAT solver time", clkTotal );
180 Vec_WrdFreeP( &
p->vSims );
181 Vec_IntFree( vVars );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
int Gia_ManTestSatEnum(Gia_Man_t *p)
void Gia_ManMoFindSimulate(Gia_Man_t *p, int nWords)
#define sat_solver_addclause
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
#define Gia_ManForEachCoId(p, Id, i)
word Gia_ManRandomW(int fReset)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachAndId(p, i)
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
#define Gia_ManForEachCiId(p, Id, i)
unsigned __int64 word
DECLARATIONS ///.
void * Cnf_DataWriteIntoSolver(Cnf_Dat_t *p, int nFrames, int fInit)
void sat_solver_delete(sat_solver *s)