47int Fra_FraigSat(
Aig_Man_t * pMan, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit,
int nLearnedStart,
int nLearnedDelta,
int nLearnedPerce,
int fFlipBits,
int fAndOuts,
int fNewSolver,
int fVerbose )
56 int status, RetValue = 0;
60 assert( Aig_ManRegNum(pMan) == 0 );
72 printf(
"CNF stats: Vars = %6d. Clauses = %7d. Literals = %8d. ", pCnf->
nVars, pCnf->
nClauses, pCnf->
nLiterals );
73 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
108 printf(
"Created SAT problem with %d variable and %d clauses. ", sat_solver2_nvars(pSat), sat_solver2_nclauses(pSat) );
109 ABC_PRT(
"Time", Abc_Clock() - clk );
118 Vec_IntFree( vCiIds );
128 status =
sat_solver2_solve( pSat, NULL, NULL, (ABC_INT64_T)nConfLimit, (ABC_INT64_T)nInsLimit, (ABC_INT64_T)0, (ABC_INT64_T)0 );
134 else if ( status ==
l_True )
161 Vec_IntFree( vCiIds );
168 int status, RetValue = 0;
172 assert( Aig_ManRegNum(pMan) == 0 );
176 pCnf =
Cnf_Derive( pMan, Aig_ManCoNum(pMan) );
184 printf(
"CNF stats: Vars = %6d. Clauses = %7d. Literals = %8d. ", pCnf->
nVars, pCnf->
nClauses, pCnf->
nLiterals );
185 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
239 Vec_IntFree( vCiIds );
249 status =
sat_solver_solve( pSat, NULL, NULL, (ABC_INT64_T)nConfLimit, (ABC_INT64_T)nInsLimit, (ABC_INT64_T)0, (ABC_INT64_T)0 );
255 else if ( status ==
l_True )
282 Vec_IntFree( vCiIds );
322 int nBTLimitStart = 300;
323 int nBTLimitFirst = 2;
324 int nBTLimitLast = nConfLimit;
334 printf(
"Original miter: Nodes = %6d.\n", Aig_ManNodeNum(pAig) );
340 pAig->pData =
ABC_ALLOC(
int, Aig_ManCiNum(pAig) );
341 memset( pAig->pData, 0,
sizeof(
int) * Aig_ManCiNum(pAig) );
347 RetValue =
Fra_FraigSat( pAig, (ABC_INT64_T)2*nBTLimitStart, (ABC_INT64_T)0, 0, 0, 0, 1, 0, 0, 0 );
350 printf(
"Initial SAT: Nodes = %6d. ", Aig_ManNodeNum(pAig) );
351ABC_PRT(
"Time", Abc_Clock() - clk );
362 printf(
"Rewriting: Nodes = %6d. ", Aig_ManNodeNum(pAig) );
363ABC_PRT(
"Time", Abc_Clock() - clk );
368 pParams->nBTLimitNode = nBTLimitFirst;
369 pParams->nBTLimitMiter = nBTLimitStart;
370 pParams->fDontShowBar = 1;
372 for ( i = 0; i < 6; i++ )
383 printf(
"Balance-X: Nodes = %6d. ", Aig_ManNodeNum(pAig) );
384ABC_PRT(
"Time", Abc_Clock() - clk );
394 printf(
"Fraiging (i=%d): Nodes = %6d. ", i+1, Aig_ManNodeNum(pAig) );
395ABC_PRT(
"Time", Abc_Clock() - clk );
409 printf(
"Rewriting: Nodes = %6d. ", Aig_ManNodeNum(pAig) );
410ABC_PRT(
"Time", Abc_Clock() - clk );
420 pParams->nBTLimitNode = 8 * pParams->nBTLimitNode;
421 pParams->nBTLimitMiter = 2 * pParams->nBTLimitMiter;
425 if ( RetValue == -1 )
428 RetValue =
Fra_FraigSat( pAig, (ABC_INT64_T)nBTLimitLast, (ABC_INT64_T)0, 0, 0, 0, 1, 0, 0, 0 );
431 printf(
"Final SAT: Nodes = %6d. ", Aig_ManNodeNum(pAig) );
432ABC_PRT(
"Time", Abc_Clock() - clk );
455 int i, RetValue = 1, nOutputs;
465 printf(
"Verifying part %4d (out of %4d) PI = %5d. PO = %5d. And = %6d. Lev = %4d.\r",
466 i+1, Vec_PtrSize(vParts), Aig_ManCiNum(pAig), Aig_ManCoNum(pAig),
476 Vec_PtrWriteEntry( vParts, i, pAig );
490 if ( RetValue == -1 )
492 printf(
"Timed out after verifying %d partitions (out of %d).\n", nOutputs, Vec_PtrSize(vParts) );
498 Vec_PtrFree( vParts );
518 abctime clkTotal = Abc_Clock();
520 if ( Aig_ManCiNum(pMan1) != Aig_ManCiNum(pMan1) )
522 printf(
"Abc_CommandAbc8Cec(): Miters have different number of PIs.\n" );
525 if ( Aig_ManCoNum(pMan1) != Aig_ManCoNum(pMan1) )
527 printf(
"Abc_CommandAbc8Cec(): Miters have different number of POs.\n" );
530 assert( Aig_ManCiNum(pMan1) == Aig_ManCiNum(pMan1) );
531 assert( Aig_ManCoNum(pMan1) == Aig_ManCoNum(pMan1) );
534 if ( Aig_ManNodeNum(pMan1) < Aig_ManNodeNum(pMan2) )
540 assert( Aig_ManNodeNum(pMan1) >= Aig_ManNodeNum(pMan2) );
550 printf(
"Networks are equivalent. " );
551ABC_PRT(
"Time", Abc_Clock() - clkTotal );
553 else if ( RetValue == 0 )
555 printf(
"Networks are NOT EQUIVALENT. " );
556ABC_PRT(
"Time", Abc_Clock() - clkTotal );
560 printf(
"Networks are UNDECIDED. " );
561ABC_PRT(
"Time", Abc_Clock() - clkTotal );
#define ABC_ALLOC(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)
int Aig_ObjRecognizeExor(Aig_Obj_t *pObj, Aig_Obj_t **ppFan0, Aig_Obj_t **ppFan1)
void Aig_ManStop(Aig_Man_t *p)
struct Aig_Obj_t_ Aig_Obj_t
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Vec_Ptr_t * Aig_ManMiterPartitioned(Aig_Man_t *p1, Aig_Man_t *p2, int nPartSize, int fSmart)
int Aig_ObjIsMuxType(Aig_Obj_t *pObj)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void * Cnf_DataWriteIntoSolver2(Cnf_Dat_t *p, int nFrames, int fInit)
int Cnf_DataWriteOrClause2(void *p, Cnf_Dat_t *pCnf)
Cnf_Dat_t * Cnf_Derive(Aig_Man_t *pAig, int nOutputs)
Vec_Int_t * Cnf_DataCollectPiSatNums(Cnf_Dat_t *pCnf, Aig_Man_t *p)
void Cnf_DataTranformPolarity(Cnf_Dat_t *pCnf, int fTransformPos)
int Cnf_DataWriteAndClauses(void *p, Cnf_Dat_t *pCnf)
int Cnf_DataWriteOrClause(void *pSat, Cnf_Dat_t *pCnf)
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
Aig_Man_t * Dar_ManBalanceXor(Aig_Man_t *pAig, int fExor, int fUpdateLevel, int fVerbose)
Aig_Man_t * Dar_ManRewriteDefault(Aig_Man_t *pAig)
DECLARATIONS ///.
int Fra_FraigCecPartitioned(Aig_Man_t *pMan1, Aig_Man_t *pMan2, int nConfLimit, int nPartSize, int fSmart, int fVerbose)
ABC_NAMESPACE_IMPL_START int Fra_FraigSat(Aig_Man_t *pMan, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, int nLearnedStart, int nLearnedDelta, int nLearnedPerce, int fFlipBits, int fAndOuts, int fNewSolver, int fVerbose)
DECLARATIONS ///.
int Aig_ManCountXors(Aig_Man_t *p)
int Fra_FraigCec(Aig_Man_t **ppAig, int nConfLimit, int fVerbose)
int Fra_FraigCecTop(Aig_Man_t *pMan1, Aig_Man_t *pMan2, int nConfLimit, int nPartSize, int fSmart, int fVerbose)
typedefABC_NAMESPACE_HEADER_START struct Fra_Par_t_ Fra_Par_t
INCLUDES ///.
Aig_Man_t * Fra_FraigPerform(Aig_Man_t *pManAig, Fra_Par_t *pPars)
int Fra_FraigMiterStatus(Aig_Man_t *p)
DECLARATIONS ///.
void Fra_ParamsDefault(Fra_Par_t *pParams)
DECLARATIONS ///.
void * Cnf_DataWriteIntoSolver(Cnf_Dat_t *p, int nFrames, int fInit)
void sat_solver2_delete(sat_solver2 *s)
int sat_solver2_simplify(sat_solver2 *s)
int sat_solver2_solve(sat_solver2 *s, lit *begin, lit *end, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, ABC_INT64_T nConfLimitGlobal, ABC_INT64_T nInsLimitGlobal)
void Sat_Solver2PrintStats(FILE *pFile, sat_solver2 *p)
struct sat_solver2_t sat_solver2
int * Sat_Solver2GetModel(sat_solver2 *p, int *pVars, int nVars)
int sat_solver_simplify(sat_solver *s)
void sat_solver_delete(sat_solver *s)
int * Sat_SolverGetModel(sat_solver *p, int *pVars, int nVars)
void Sat_SolverPrintStats(FILE *pFile, sat_solver *p)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.