28#ifdef ABC_USE_EXT_SOLVERS
29 #include "extsat/bmc/bmcApi.h"
37 #define bmc_sat_solver satoko_t
38 #define bmc_sat_solver_start(type) satoko_create()
39 #define bmc_sat_solver_stop satoko_destroy
40 #define bmc_sat_solver_addclause satoko_add_clause
41 #define bmc_sat_solver_addvar(s) satoko_add_variable(s, 0)
42 #define bmc_sat_solver_solve satoko_solve_assumptions
43 #define bmc_sat_solver_read_cex_varvalue satoko_read_cex_varvalue
44 #define bmc_sat_solver_setstop satoko_set_stop
49#ifdef ABC_USE_PTHREADS
52 #include "../lib/pthread.h"
67#define PAR_THR_MAX 100
90static inline int * Bmcs_ManCopies(
Bmcs_Man_t *
p,
int f ) {
return (
int*)Vec_PtrEntry(&
p->vGia2Fr, f); }
112 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
114 Gia_ObjSetTravIdCurrentId(
p, iObj);
115 pObj = Gia_ManObj(
p, iObj );
120 Vec_IntPush( vCuts, iObj );
121 Vec_IntPush( vRankCuts, Rank );
126 if ( Gia_ObjIsPi(
p, pObj) )
128 Vec_IntPush( vIns, iObj );
129 Vec_IntPush( vRankIns, Rank );
133 if ( Gia_ObjIsCi(pObj) )
135 Vec_IntPush( vFlops, iObj );
138 assert( Gia_ObjIsAnd(pObj) );
141 Vec_IntPush( vObjs, iObj );
146 Vec_Int_t * vCuts = Vec_IntAlloc( 1000 );
147 Vec_Int_t * vFlops = Vec_IntAlloc( 1000 );
148 Vec_Int_t * vObjs = Vec_IntAlloc( 1000 );
149 Vec_Int_t * vLimIns = Vec_IntAlloc( 1000 );
150 Vec_Int_t * vLimCuts = Vec_IntAlloc( 1000 );
151 Vec_Int_t * vLimFlops = Vec_IntAlloc( 1000 );
152 Vec_Int_t * vLimObjs = Vec_IntAlloc( 1000 );
153 Vec_Int_t * vRankIns = Vec_IntAlloc( 1000 );
154 Vec_Int_t * vRankCuts = Vec_IntAlloc( 1000 );
158 int i, r, Entry, Rank, iPrev, iThis = 0;
161 Vec_IntPush( vFlops, Gia_ObjId(
p, pObj) );
163 for ( Rank = 0; iThis < Vec_IntEntryLast(vFlops); Rank++ )
165 Vec_IntPush( vLimIns, Vec_IntSize(vIns) );
166 Vec_IntPush( vLimCuts, Vec_IntSize(vCuts) );
167 Vec_IntPush( vLimFlops, Vec_IntSize(vFlops) );
168 Vec_IntPush( vLimObjs, Vec_IntSize(vObjs) );
170 iThis = Vec_IntEntryLast(vFlops);
174 Bmc_SuperBuildTents_rec(
p, Gia_ObjFaninId0(Gia_ManObj(
p, iPrev), iPrev), vIns, vCuts, vFlops, vObjs, vRankIns, vRankCuts, Rank );
178 Vec_IntPush( vLimIns, Vec_IntSize(vIns) );
179 Vec_IntPush( vLimCuts, Vec_IntSize(vCuts) );
180 Vec_IntPush( vLimFlops, Vec_IntSize(vFlops) );
181 Vec_IntPush( vLimObjs, Vec_IntSize(vObjs) );
184 pNew->
pName = Abc_UtilStrsav(
p->pName );
185 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
187 Gia_ManConst0(
p)->Value = 0;
189 pObj->
Value = Gia_ManAppendCi(pNew);
191 pObj->
Value = Gia_ManAppendCi(pNew);
192 for ( r = Rank; r >= 0; r-- )
196 pObj = Gia_ManObj(
p, Entry);
197 pObj->
Value = Gia_ObjFanin0Copy(pObj);
201 pObj = Gia_ManObj(
p, Entry);
202 pObj->
Value = Gia_ObjFanin0Copy(pObj);
206 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
208 Gia_ManAppendCo( pNew, Gia_ObjFanin0Copy(pObj) );
213 Vec_IntPushTwo( vMap, Entry, Rank );
215 Vec_IntPushTwo( vMap, Entry, Rank );
218 Vec_IntFree( vCuts );
219 Vec_IntFree( vFlops );
220 Vec_IntFree( vObjs );
222 Vec_IntFree( vLimIns );
223 Vec_IntFree( vLimCuts );
224 Vec_IntFree( vLimFlops );
225 Vec_IntFree( vLimObjs );
227 Vec_IntFree( vRankIns );
228 Vec_IntFree( vRankCuts );
256 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
258 Gia_ObjSetTravIdCurrentId(
p, iObj);
259 pObj = Gia_ManObj(
p, iObj );
260 if ( Gia_ObjIsAnd(pObj) )
265 else if ( Gia_ObjIsRo(
p, pObj) )
266 Vec_IntPush( vRoots, Gia_ObjFaninId0p(
p, Gia_ObjRoToRi(
p, pObj)) );
267 else if ( !Gia_ObjIsPi(
p, pObj) )
274 int t, i, iObj, nSizeCurr = 0;
277 Gia_ObjSetTravIdCurrentId(
p, 0 );
278 vRoots = Vec_IntAlloc( 100 );
280 Vec_IntPush( vRoots, Gia_ObjFaninId0p(
p, pObj) );
281 for ( t = 0; nSizeCurr < Vec_IntSize(vRoots); t++ )
283 int nSizePrev = nSizeCurr;
284 nSizeCurr = Vec_IntSize(vRoots);
288 Vec_IntFree( vRoots );
306 if ( Gia_ObjIsTravIdCurrentId(
p, iObj) )
308 if ( Vec_IntEntry(vRanks, iObj) < Rank )
309 Vec_IntWriteEntry( vCands, iObj, 1 );
312 Gia_ObjSetTravIdCurrentId(
p, iObj);
313 Vec_IntWriteEntry( vRanks, iObj, Rank );
314 pObj = Gia_ManObj(
p, iObj );
315 if ( Gia_ObjIsAnd(pObj) )
320 else if ( Gia_ObjIsRo(
p, pObj) )
321 Vec_IntPush( vRoots, Gia_ObjFaninId0p(
p, Gia_ObjRoToRi(
p, pObj)) );
322 else if ( !Gia_ObjIsPi(
p, pObj) )
328 Vec_Int_t * vRanks = Vec_IntStartFull( Gia_ManObjNum(
p) );
329 Vec_Int_t * vCands = Vec_IntStart( Gia_ManObjNum(
p) );
331 int t, i, iObj, nSizeCurr = 0;
334 Gia_ObjSetTravIdCurrentId(
p, 0 );
335 vRoots = Vec_IntAlloc( 100 );
337 Vec_IntPush( vRoots, Gia_ObjFaninId0p(
p, pObj) );
338 for ( t = 0; nSizeCurr < Vec_IntSize(vRoots); t++ )
340 int nSizePrev = nSizeCurr;
341 nSizeCurr = Vec_IntSize(vRoots);
345 Vec_IntWriteEntry( vCands, 0, 0 );
346 printf(
"Tents = %6d. Cands = %6d. %10.2f %%\n", t, Vec_IntSum(vCands), 100.0*Vec_IntSum(vCands)/Gia_ManCandNum(
p) );
347 Vec_IntFree( vRoots );
348 Vec_IntFree( vRanks );
349 Vec_IntFree( vCands );
368 int i, Lit = Abc_Var2Lit( 0, 1 );
372 assert( Gia_ManRegNum(pGia) > 0 );
380 Vec_PtrGrow( &
p->vGia2Fr, 1000 );
381 Vec_IntGrow( &
p->vFr2Sat, 3*Gia_ManCiNum(pGia) );
382 Vec_IntPush( &
p->vFr2Sat, 0 );
383 Vec_IntGrow( &
p->vCiMap, 3*Gia_ManCiNum(pGia) );
384 for ( i = 0; i < pPars->
nProcs; i++ )
387 opts.
f_rst = 0.8 - i * 0.05;
388 opts.
b_rst = 1.4 - i * 0.05;
392#ifdef ABC_USE_EXT_SOLVERS
393 p->pSats[i]->SolverType = i;
409 Vec_PtrFreeData( &
p->vGia2Fr );
410 Vec_PtrErase( &
p->vGia2Fr );
411 Vec_IntErase( &
p->vFr2Sat );
412 Vec_IntErase( &
p->vCiMap );
413 for ( i = 0; i <
p->pPars->nProcs; i++ )
434 int iLit = 0, * pCopies = Bmcs_ManCopies(
p, f );
435 if ( pCopies[iObj] >= 0 )
436 return pCopies[iObj];
437 pObj = Gia_ManObj(
p->pGia, iObj );
438 if ( Gia_ObjIsCi(pObj) )
440 if ( Gia_ObjIsPi(
p->pGia, pObj) )
442 Vec_IntPushTwo( &
p->vCiMap, Gia_ObjCioId(pObj), f );
443 iLit = Gia_ManAppendCi(
p->pFrames );
447 pObj = Gia_ObjRoToRi(
p->pGia, pObj );
449 iLit = Abc_LitNotCond( iLit, Gia_ObjFaninC0(pObj) );
452 else if ( Gia_ObjIsAnd(pObj) )
455 iLit = Abc_LitNotCond( iLit, Gia_ObjFaninC0(pObj) );
460 iNew = Abc_LitNotCond( iNew, Gia_ObjFaninC1(pObj) );
465 return (pCopies[iObj] = iLit);
470 int iSatVar, iLitClean = Gia_ObjCopyArray(
p->pFrames, iObj );
471 if ( iLitClean >= 0 )
473 pObj = Gia_ManObj(
p->pFrames, iObj );
474 iSatVar = Vec_IntEntry( &
p->vFr2Sat, iObj );
475 if ( iSatVar > 0 || Gia_ObjIsCi(pObj) )
476 iLitClean = Gia_ManAppendCi(
p->pClean );
477 else if ( Gia_ObjIsAnd(pObj) )
481 iLit0 = Abc_LitNotCond( iLit0, Gia_ObjFaninC0(pObj) );
482 iLit1 = Abc_LitNotCond( iLit1, Gia_ObjFaninC1(pObj) );
483 iLitClean = Gia_ManAppendAnd(
p->pClean, iLit0, iLit1 );
486 assert( !Abc_LitIsCompl(iLitClean) );
487 Gia_ManObj(
p->pClean, Abc_Lit2Var(iLitClean) )->Value = iObj;
488 Gia_ObjSetCopyArray(
p->pFrames, iObj, iLitClean );
494 int i, k, iLitFrame, iLitClean, fTrivial = 1;
495 int * pCopies, nFrameObjs = Gia_ManObjNum(
p->pFrames);
496 assert( Gia_ManPoNum(
p->pFrames) == f * Gia_ManPoNum(
p->pGia) );
497 for ( k = 0; k < nFramesAdd; k++ )
500 Vec_PtrPush( &
p->vGia2Fr,
ABC_FALLOC(
int, Gia_ManObjNum(
p->pGia)) );
501 assert( Vec_PtrSize(&
p->vGia2Fr) == f+k+1 );
502 pCopies = Bmcs_ManCopies(
p, f+k );
508 iLitFrame = Abc_LitNotCond( iLitFrame, Gia_ObjFaninC0(pObj) );
509 pCopies[Gia_ObjId(
p->pGia, pObj)] = Gia_ManAppendCo(
p->pFrames, iLitFrame );
510 fTrivial &= (iLitFrame == 0);
516 Vec_IntFillExtra( &
p->vFr2Sat, Gia_ManObjNum(
p->pFrames), -1 );
517 Vec_IntFillExtra( &
p->pFrames->vCopies, Gia_ManObjNum(
p->pFrames), -1 );
520 p->pClean =
Gia_ManStart( Gia_ManObjNum(
p->pFrames) - nFrameObjs + 1000 );
521 Gia_ObjSetCopyArray(
p->pFrames, 0, 0 );
522 for ( k = 0; k < nFramesAdd; k++ )
523 for ( i = 0; i < Gia_ManPoNum(
p->pGia); i++ )
525 pObj = Gia_ManCo(
p->pFrames, (f+k) * Gia_ManPoNum(
p->pGia) + i );
527 iLitClean = Abc_LitNotCond( iLitClean, Gia_ObjFaninC0(pObj) );
528 iLitClean = Gia_ManAppendCo(
p->pClean, iLitClean );
529 Gia_ManObj(
p->pClean, Abc_Lit2Var(iLitClean) )->Value = Gia_ObjId(
p->pFrames, pObj);
530 Gia_ObjSetCopyArray(
p->pFrames, Gia_ObjId(
p->pFrames, pObj), iLitClean );
532 pNew =
p->pClean;
p->pClean = NULL;
534 Gia_ObjSetCopyArray(
p->pFrames, pObj->
Value, -1 );
544 p->timeUnf += Abc_Clock() - clk;
549 pMap =
ABC_FALLOC(
int, Gia_ManObjNum(pNew) );
553 if ( pCnf->
pObj2Count[i] <= 0 && !Gia_ObjIsCi(pObj) )
555 iVar = Vec_IntEntry( &
p->vFr2Sat, pObj->
Value );
557 Vec_IntWriteEntry( &
p->vFr2Sat, pObj->
Value, (iVar =
p->nSatVars++) );
564 p->timeCnf += Abc_Clock() - clk;
582 if ( !
p->pPars->fVerbose )
584 Abc_Print( 1,
"%4d %s : ", f, fUnfinished ?
"-" :
"+" );
585#ifndef ABC_USE_EXT_SOLVERS
586 Abc_Print( 1,
"Var =%8.0f. ", (
double)
satoko_varnum(
p->pSats[0]) );
591 Abc_Print( 1,
"Var =%8.0f. ", (
double)
p->nSatVars );
592 Abc_Print( 1,
"Cla =%9.0f. ", (
double)nClauses );
594 if (
p->pPars->nProcs > 1 )
595 Abc_Print( 1,
"S = %3d. ", Solver );
596 Abc_Print( 1,
"%4.0f MB", 1.0*((
int)
Gia_ManMemory(
p->pFrames) + Vec_IntMemory(&
p->vFr2Sat))/(1<<20) );
597 Abc_Print( 1,
"%9.2f sec ", (
float)(Abc_Clock() - clkStart)/(
float)(CLOCKS_PER_SEC) );
603 abctime clkTotal =
p->timeUnf +
p->timeCnf +
p->timeSat +
p->timeOth;
604 if ( !
p->pPars->fVerbose )
606 ABC_PRTP(
"Unfolding ",
p->timeUnf, clkTotal );
607 ABC_PRTP(
"CNF generation",
p->timeCnf, clkTotal );
608 ABC_PRTP(
"SAT solving ",
p->timeSat, clkTotal );
609 ABC_PRTP(
"Other ",
p->timeOth, clkTotal );
610 ABC_PRTP(
"TOTAL ", clkTotal , clkTotal );
618 int iSatVar = Vec_IntEntry( &
p->vFr2Sat, Gia_ObjId(
p->pFrames, pObj) );
621 int iCiId = Vec_IntEntry( &
p->vCiMap, 2*k+0 );
622 int iFrame = Vec_IntEntry( &
p->vCiMap, 2*k+1 );
623 Abc_InfoSetBit( pCex->pData, Gia_ManRegNum(
p->pGia) + iFrame * Gia_ManPiNum(
p->pGia) + iCiId );
631 for ( i =
p->nSatVarsOld; i < p->nSatVars; i++ )
633 for ( i = 0; i < pCnf->
nClauses; i++ )
639 abctime clkStart = Abc_Clock();
641 int f, k = 0, i = Gia_ManPoNum(pGia), status, RetValue = -1, nClauses = 0;
651 for ( i = 0; i < Gia_ManPoNum(pGia); i++ )
657 p->nSatVarsOld =
p->nSatVars;
659 assert( Gia_ManPoNum(
p->pFrames) == (f + pPars->
nFramesAdd) * Gia_ManPoNum(pGia) );
662 for ( i = 0; i < Gia_ManPoNum(pGia); i++ )
665 int iObj = Gia_ObjId(
p->pFrames, Gia_ManCo(
p->pFrames, (f+k) * Gia_ManPoNum(pGia) + i) );
666 int iLit = Abc_Var2Lit( Vec_IntEntry(&
p->vFr2Sat, iObj), 0 );
667 if ( pPars->
nTimeOut && (Abc_Clock() - clkStart)/CLOCKS_PER_SEC >= pPars->
nTimeOut )
670 p->timeSat += Abc_Clock() - clk;
673 if ( i == Gia_ManPoNum(pGia)-1 )
688 int nOutDigits = Abc_Base10Log( Gia_ManPoNum(pGia) );
689 Abc_Print( 1,
"Output %*d was asserted in frame %2d (solved %*d out of %*d outputs). ",
690 nOutDigits, i, f+k, nOutDigits, pPars->
nFailOuts, nOutDigits, Gia_ManPoNum(pGia) );
698 if ( i < Gia_ManPoNum(pGia) || f+k == pPars->
nFramesMax-1 )
701 if ( k < pPars->nFramesAdd )
704 p->timeOth = Abc_Clock() - clkStart -
p->timeUnf -
p->timeCnf -
p->timeSat;
706 printf(
"No output failed in %d frames. ", f + (k < pPars->nFramesAdd ? k+1 : 0) );
707 Abc_PrintTime( 1,
"Time", Abc_Clock() - clkStart );
726#ifndef ABC_USE_PTHREADS
733typedef struct Par_ThData_t_
742void * Bmcs_ManWorkerThread(
void * pArg )
744 Par_ThData_t * pThData = (Par_ThData_t *)pArg;
745 volatile int * pPlace = &pThData->fWorking;
748 while ( *pPlace == 0 );
749 assert( pThData->fWorking );
750 if ( pThData->pSat == NULL )
752 pthread_exit( NULL );
761 pThData->fWorking = 0;
767int Bmcs_ManPerform_Solve(
Bmcs_Man_t *
p,
int iLit, pthread_t * WorkerThread, Par_ThData_t * ThData,
int nProcs,
int * pSolver )
771 for ( i = 0; i < nProcs; i++ )
773 ThData[i].iLit = iLit;
774 assert( ThData[i].fWorking == 0 );
777 for ( i = 0; i < nProcs; i++ )
778 ThData[i].fWorking = 1;
780 while ( i == nProcs )
782 for ( i = 0; i < nProcs; i++ )
784 if ( ThData[i].fWorking )
789 status = ThData[i].status;
798 for ( i = 0; i < nProcs; i++ )
799 if ( ThData[i].fWorking )
802 for ( i = 0; i < nProcs; i++ )
805 assert( ThData[i].fWorking == 0 );
814 abctime clkStart = Abc_Clock();
818 int f, k = 0, i = Gia_ManPoNum(pGia), status, RetValue = -1, nClauses = 0, Solver = 0;
821 for ( i = 0; i < pPars->
nProcs; i++ )
823 ThData[i].pSat =
p->pSats[i];
825 ThData[i].iThread = i;
826 ThData[i].fWorking = 0;
827 ThData[i].status = -1;
828 status = pthread_create( WorkerThread + i, NULL, Bmcs_ManWorkerThread, (
void *)(ThData + i) );
assert( status == 0 );
839 for ( i = 0; i < Gia_ManPoNum(pGia); i++ )
845 for ( i = 0; i < pPars->
nProcs; i++ )
847 p->nSatVarsOld =
p->nSatVars;
850 assert( Gia_ManPoNum(
p->pFrames) == (f + pPars->
nFramesAdd) * Gia_ManPoNum(pGia) );
853 for ( i = 0; i < Gia_ManPoNum(pGia); i++ )
856 int iObj = Gia_ObjId(
p->pFrames, Gia_ManCo(
p->pFrames, (f+k) * Gia_ManPoNum(pGia) + i) );
857 int iLit = Abc_Var2Lit( Vec_IntEntry(&
p->vFr2Sat, iObj), 0 );
858 if ( pPars->
nTimeOut && (Abc_Clock() - clkStart)/CLOCKS_PER_SEC >= pPars->
nTimeOut )
860 status = Bmcs_ManPerform_Solve(
p, iLit, WorkerThread, ThData, pPars->
nProcs, &Solver );
861 p->timeSat += Abc_Clock() - clk;
864 if ( i == Gia_ManPoNum(pGia)-1 )
879 int nOutDigits = Abc_Base10Log( Gia_ManPoNum(pGia) );
880 Abc_Print( 1,
"Output %*d was asserted in frame %2d (solved %*d out of %*d outputs). ",
881 nOutDigits, i, f+k, nOutDigits, pPars->
nFailOuts, nOutDigits, Gia_ManPoNum(pGia) );
889 if ( i < Gia_ManPoNum(pGia) || f+k == pPars->
nFramesMax-1 )
892 if ( k < pPars->nFramesAdd )
896 for ( i = 0; i < pPars->
nProcs; i++ )
898 assert( !ThData[i].fWorking );
899 ThData[i].pSat = NULL;
900 ThData[i].fWorking = 1;
902 p->timeOth = Abc_Clock() - clkStart -
p->timeUnf -
p->timeCnf -
p->timeSat;
904 printf(
"No output failed in %d frames. ", f + (k < pPars->nFramesAdd ? k+1 : 0) );
905 Abc_PrintTime( 1,
"Time", Abc_Clock() - clkStart );
#define ABC_FALLOC(type, num)
#define ABC_PRTP(a, t, T)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
#define PAR_THR_MAX
DECLARATIONS ///.
Gia_Man_t * Bmc_SuperBuildTents(Gia_Man_t *p, Vec_Int_t **pvMap)
int Bmcs_ManUnfold_rec(Bmcs_Man_t *p, int iObj, int f)
#define bmc_sat_solver_solve
#define bmc_sat_solver_addclause
void Gia_ManCountTents_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vRoots)
Cnf_Dat_t * Bmcs_ManAddNewCnf(Bmcs_Man_t *p, int f, int nFramesAdd)
#define bmc_sat_solver_setstop
int Bmcs_ManPerform(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
#define bmc_sat_solver_start(type)
#define PAR_THR_MAX
DECLARATIONS ///.
Bmcs_Man_t * Bmcs_ManStart(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
int Gia_ManCountRanks(Gia_Man_t *p)
Abc_Cex_t * Bmcs_ManGenerateCex(Bmcs_Man_t *p, int i, int f, int s)
struct Bmcs_Man_t_ Bmcs_Man_t
void Bmcs_ManPrintFrame(Bmcs_Man_t *p, int f, int nClauses, int Solver, abctime clkStart)
#define bmc_sat_solver_stop
void Bmcs_ManPrintTime(Bmcs_Man_t *p)
#define bmc_sat_solver_addvar(s)
#define bmc_sat_solver_read_cex_varvalue
int Bmcs_ManPerformOne(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
void Bmcs_ManStop(Bmcs_Man_t *p)
void Gia_ManCountRanks_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vRoots, Vec_Int_t *vRanks, Vec_Int_t *vCands, int Rank)
int Bmcs_ManCollect_rec(Bmcs_Man_t *p, int iObj)
void Bmc_SuperBuildTents_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vIns, Vec_Int_t *vCuts, Vec_Int_t *vFlops, Vec_Int_t *vObjs, Vec_Int_t *vRankIns, Vec_Int_t *vRankCuts, int Rank)
FUNCTION DEFINITIONS ///.
void Bmcs_ManAddCnf(Bmcs_Man_t *p, bmc_sat_solver *pSat, Cnf_Dat_t *pCnf)
int Bmcs_ManPerformMulti(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
Gia_Man_t * Bmcs_ManUnfold(Bmcs_Man_t *p, int f, int nFramesAdd)
int Gia_ManCountTents(Gia_Man_t *p)
struct Bmc_AndPar_t_ Bmc_AndPar_t
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
void Gia_ManStop(Gia_Man_t *p)
void Gia_ManHashStart(Gia_Man_t *p)
double Gia_ManMemory(Gia_Man_t *p)
#define Gia_ManForEachPo(p, pObj, i)
void Gia_ManStopP(Gia_Man_t **p)
void Gia_ManSetRegNum(Gia_Man_t *p, int nRegs)
#define Gia_ManForEachPi(p, pObj, i)
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
#define Gia_ManForEachObj1(p, pObj, i)
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManIncrementTravId(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
void Gia_ManCleanMark01(Gia_Man_t *p)
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
int satoko_varnum(satoko_t *)
int satoko_conflictnum(satoko_t *)
struct satoko_opts satoko_opts_t
void satoko_default_opts(satoko_opts_t *)
int satoko_clausenum(satoko_t *)
int satoko_learntnum(satoko_t *)
void satoko_configure(satoko_t *, satoko_opts_t *)
void(* pFuncOnFrameDone)(int, int, int)
bmc_sat_solver * pSats[PAR_THR_MAX]
void Abc_CexFreeP(Abc_Cex_t **p)
Abc_Cex_t * Abc_CexMakeTriv(int nRegs, int nTruePis, int nTruePos, int iFrameOut)
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
#define Vec_IntForEachEntryTwo(vVec1, vVec2, Entry1, Entry2, i)
#define Vec_IntForEachEntryStartStop(vVec, Entry, i, Start, Stop)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.