54 assert( Saig_ManRegNum(pAig) > 0 );
55 pFrames =
Aig_ManStart( Aig_ManNodeNum(pAig) * nFrames );
57 Aig_ManConst1(pAig)->pData = Aig_ManConst1( pFrames );
60 pObj->
pData = Aig_ManConst0( pFrames );
62 for ( f = 0; f < nFrames; f++ )
69 pObj->
pData =
Aig_And( pFrames, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
73 if ( f == nFrames - 1 )
77 pObj->
pData = Aig_ObjChild0Copy(pObj);
99 if ( !Aig_ObjIsNode(pObj) )
101 if ( Aig_ObjIsTravIdCurrent(
p, pObj) )
103 Aig_ObjSetTravIdCurrent(
p, pObj);
125 Aig_Obj_t * pObj, * pObjLi, * pObjLo, * pObjPo;
126 int i, f, Counter = 0;
127 assert( Saig_ManRegNum(pAig) > 0 );
131 Aig_ManConst1(pAig)->pData = Aig_ManConst1( pFrames );
134 pObj->
pData = Aig_ManConst0( pFrames );
137 for ( f = 0; f < nFrames; f++ )
144 pObj->
pData =
Aig_And( pFrames, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
151 if ( Counter >= nSizeMax )
156 if ( f == nFrames - 1 )
160 pObj->
pData = Aig_ObjChild0Copy(pObj);
191 for ( i = 0; i < nVars; i++ )
207int Saig_ManBmcSimple(
Aig_Man_t * pAig,
int nFrames,
int nSizeMax,
int nConfLimit,
int fRewrite,
int fVerbose,
int * piFrame,
int nCofFanLit,
int fUseSatoko )
215 int status, Lit, i, RetValue = -1;
223 if ( pFrames == NULL )
226 else if ( nSizeMax > 0 )
229 nFrames = Aig_ManCoNum(pFrames) / Saig_ManPoNum(pAig) + ((Aig_ManCoNum(pFrames) % Saig_ManPoNum(pAig)) > 0);
237 printf(
"Running \"bmc\". AIG: PI/PO/Reg = %d/%d/%d. Node = %6d. Lev = %5d.\n",
238 Saig_ManPiNum(pAig), Saig_ManPoNum(pAig), Saig_ManRegNum(pAig),
240 printf(
"Time-frames (%d): PI/PO = %d/%d. Node = %6d. Lev = %5d. ",
241 nFrames, Aig_ManCiNum(pFrames), Aig_ManCoNum(pFrames),
243 ABC_PRT(
"Time", Abc_Clock() - clk );
255 printf(
"Time-frames after rewriting: Node = %6d. Lev = %5d. ",
257 ABC_PRT(
"Time", Abc_Clock() - clk );
263 pCnf =
Cnf_Derive( pFrames, Aig_ManCoNum(pFrames) );
274 for ( i = 0; i < pCnf->
nClauses; i++ )
282 for ( i = 0; i < pCnf->
nClauses; i++ )
288 printf(
"CNF: Variables = %6d. Clauses = %7d. Literals = %8d. ", pCnf->
nVars, pCnf->
nClauses, pCnf->
nLiterals );
289 ABC_PRT(
"Time", Abc_Clock() - clk );
297 printf(
"The BMC problem is trivially UNSAT\n" );
306 Lit = toLitCond( pCnf->
pVarNums[pObj->
Id], 0 );
309 printf(
"Solving output %2d of frame %3d ... \r",
310 i % Saig_ManPoNum(pAig), i / Saig_ManPoNum(pAig) );
316 status =
sat_solver_solve( pSat, &Lit, &Lit + 1, (ABC_INT64_T)nConfLimit, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
317 if ( fVerbose && (i % Saig_ManPoNum(pAig) == Saig_ManPoNum(pAig) - 1) )
319 printf(
"Solved %2d outputs of frame %3d. ",
320 Saig_ManPoNum(pAig), i / Saig_ManPoNum(pAig) );
321 printf(
"Conf =%8.0f. Imp =%11.0f. ",
324 ABC_PRT(
"T", Abc_Clock() - clkPart );
325 clkPart = Abc_Clock();
341 else if ( status ==
l_True )
345 pModel[Aig_ManCiNum(pFrames)] = pObj->
Id;
348 Vec_IntFree( vCiIds );
351 *piFrame = i / Saig_ManPoNum(pAig);
358 *piFrame = i / Saig_ManPoNum(pAig);
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_IMPL_START Aig_Man_t * Dar_ManRwsat(Aig_Man_t *pAig, int fBalance, int fVerbose)
DECLARATIONS ///.
int Aig_ManLevelNum(Aig_Man_t *p)
void Aig_ManStop(Aig_Man_t *p)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
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 ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
int Saig_ManBmcSimple(Aig_Man_t *pAig, int nFrames, int nSizeMax, int nConfLimit, int fRewrite, int fVerbose, int *piFrame, int nCofFanLit, int fUseSatoko)
ABC_NAMESPACE_IMPL_START Aig_Man_t * Saig_ManFramesBmc(Aig_Man_t *pAig, int nFrames)
DECLARATIONS ///.
Aig_Man_t * Saig_ManFramesBmcLimit(Aig_Man_t *pAig, int nFrames, int nSizeMax)
int Saig_ManFramesCount_rec(Aig_Man_t *p, Aig_Obj_t *pObj)
ABC_NAMESPACE_IMPL_END ABC_NAMESPACE_IMPL_START int * Sat2_SolverGetModel(satoko_t *p, int *pVars, int nVars)
#define sat_solver_addclause
Cnf_Dat_t * Cnf_Derive(Aig_Man_t *pAig, int nOutputs)
Vec_Int_t * Cnf_DataCollectPiSatNums(Cnf_Dat_t *pCnf, Aig_Man_t *p)
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
Abc_Cex_t * Fra_SmlCopyCounterExample(Aig_Man_t *pAig, Aig_Man_t *pFrames, int *pModel)
Aig_Man_t * Gia_ManCofactorAig(Aig_Man_t *p, int nFrames, int nCofFanLit)
#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)
sat_solver * sat_solver_new(void)
int sat_solver_simplify(sat_solver *s)
void sat_solver_setnvars(sat_solver *s, int n)
void sat_solver_delete(sat_solver *s)
int * Sat_SolverGetModel(sat_solver *p, int *pVars, int nVars)
void satoko_setnvars(satoko_t *, int)
int satoko_conflictnum(satoko_t *)
struct satoko_opts satoko_opts_t
int satoko_solve_assumptions_limit(satoko_t *s, int *plits, int nlits, int nconflim)
void satoko_default_opts(satoko_opts_t *)
int satoko_add_clause(satoko_t *, int *, int)
struct solver_t_ satoko_t
int satoko_read_cex_varvalue(satoko_t *, int)
void satoko_destroy(satoko_t *)
satoko_t * satoko_create(void)
void satoko_configure(satoko_t *, satoko_opts_t *)