ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
bmcBmcG.c
Go to the documentation of this file.
1
20
21#include "bmc.h"
22#include "sat/cnf/cnf.h"
24
26
30
31#define PAR_THR_MAX 100
32
33typedef struct Bmcg_Man_t_ Bmcg_Man_t;
35{
36 Bmc_AndPar_t * pPars; // parameters
37 Gia_Man_t * pGia; // user's AIG
38 Gia_Man_t * pFrames; // unfolded AIG (pFrames->vCopies point to pClean)
39 Gia_Man_t * pClean; // incremental AIG (pClean->Value point to pFrames)
40 Vec_Ptr_t vGia2Fr; // copies of GIA in each timeframe
41 Vec_Int_t vFr2Sat; // mapping of objects in pFrames into SAT variables
42 Vec_Int_t vCiMap; // maps CIs of pFrames into CIs/frames of GIA
43 bmcg_sat_solver * pSats[PAR_THR_MAX]; // concurrent SAT solvers
44 int nSatVars; // number of SAT variables used
45 int nOldFrPis; // number of primary inputs
46 int nOldFrPos; // number of primary output
47 int fStopNow; // signal when it is time to stop
48 abctime timeUnf; // runtime of unfolding
49 abctime timeCnf; // runtime of CNF generation
50 abctime timeSmp; // runtime of CNF simplification
51 abctime timeSat; // runtime of the solvers
52 abctime timeOth; // other runtime
53};
54
55static inline int * Bmcg_ManCopies( Bmcg_Man_t * p, int f ) { return (int*)Vec_PtrEntry(&p->vGia2Fr, f); }
56
60
73{
75 int i, Lit = Abc_Var2Lit( 0, 1 );
76// opts.conf_limit = pPars->nConfLimit;
77 assert( Gia_ManRegNum(pGia) > 0 );
78 p->pPars = pPars;
79 p->pGia = pGia;
80 p->pFrames = Gia_ManStart( 3*Gia_ManObjNum(pGia) ); Gia_ManHashStart(p->pFrames);
81 p->pClean = NULL;
82// Vec_PtrFill( &p->vGia2Fr, Gia_ManCountTents(pGia)+1, NULL );
83// for ( i = 0; i < Vec_PtrSize(&p->vGia2Fr); i++ )
84// Vec_PtrWriteEntry( &p->vGia2Fr, i, ABC_FALLOC(int, Gia_ManObjNum(pGia)) );
85 Vec_PtrGrow( &p->vGia2Fr, 1000 );
86 Vec_IntGrow( &p->vFr2Sat, 3*Gia_ManCiNum(pGia) );
87 Vec_IntPush( &p->vFr2Sat, 0 );
88 Vec_IntGrow( &p->vCiMap, 3*Gia_ManCiNum(pGia) );
89 for ( i = 0; i < p->pPars->nProcs; i++ )
90 {
91 p->pSats[i] = bmcg_sat_solver_start();
92// p->pSats[i]->SolverType = i;
93 bmcg_sat_solver_addvar( p->pSats[i] );
94 bmcg_sat_solver_addclause( p->pSats[i], &Lit, 1 );
95 bmcg_sat_solver_set_stop( p->pSats[i], &p->fStopNow );
96 }
97 p->nSatVars = 1;
98 return p;
99}
101{
102 int i;
103 Gia_ManStopP( &p->pFrames );
104 Gia_ManStopP( &p->pClean );
105 Vec_PtrFreeData( &p->vGia2Fr );
106 Vec_PtrErase( &p->vGia2Fr );
107 Vec_IntErase( &p->vFr2Sat );
108 Vec_IntErase( &p->vCiMap );
109 for ( i = 0; i < p->pPars->nProcs; i++ )
110 if ( p->pSats[i] )
111 bmcg_sat_solver_stop( p->pSats[i] );
112 ABC_FREE( p );
113}
114
115
127int Bmcg_ManUnfold_rec( Bmcg_Man_t * p, int iObj, int f )
128{
129 Gia_Obj_t * pObj;
130 int iLit = 0, * pCopies = Bmcg_ManCopies( p, f );
131 if ( pCopies[iObj] >= 0 )
132 return pCopies[iObj];
133 pObj = Gia_ManObj( p->pGia, iObj );
134 if ( Gia_ObjIsCi(pObj) )
135 {
136 if ( Gia_ObjIsPi(p->pGia, pObj) )
137 {
138 Vec_IntPushTwo( &p->vCiMap, Gia_ObjCioId(pObj), f );
139 iLit = Gia_ManAppendCi( p->pFrames );
140 }
141 else if ( f > 0 )
142 {
143 pObj = Gia_ObjRoToRi( p->pGia, pObj );
144 iLit = Bmcg_ManUnfold_rec( p, Gia_ObjFaninId0p(p->pGia, pObj), f-1 );
145 iLit = Abc_LitNotCond( iLit, Gia_ObjFaninC0(pObj) );
146 }
147 }
148 else if ( Gia_ObjIsAnd(pObj) )
149 {
150 iLit = Bmcg_ManUnfold_rec( p, Gia_ObjFaninId0(pObj, iObj), f );
151 iLit = Abc_LitNotCond( iLit, Gia_ObjFaninC0(pObj) );
152 if ( iLit > 0 )
153 {
154 int iNew;
155 iNew = Bmcg_ManUnfold_rec( p, Gia_ObjFaninId1(pObj, iObj), f );
156 iNew = Abc_LitNotCond( iNew, Gia_ObjFaninC1(pObj) );
157 iLit = Gia_ManHashAnd( p->pFrames, iLit, iNew );
158 }
159 }
160 else assert( 0 );
161 return (pCopies[iObj] = iLit);
162}
164{
165 Gia_Obj_t * pObj;
166 int iSatVar, iLitClean = Gia_ObjCopyArray( p->pFrames, iObj );
167 if ( iLitClean >= 0 )
168 return iLitClean;
169 pObj = Gia_ManObj( p->pFrames, iObj );
170 iSatVar = Vec_IntEntry( &p->vFr2Sat, iObj );
171 if ( iSatVar > 0 || Gia_ObjIsCi(pObj) )
172 iLitClean = Gia_ManAppendCi( p->pClean );
173 else if ( Gia_ObjIsAnd(pObj) )
174 {
175 int iLit0 = Bmcg_ManCollect_rec( p, Gia_ObjFaninId0(pObj, iObj) );
176 int iLit1 = Bmcg_ManCollect_rec( p, Gia_ObjFaninId1(pObj, iObj) );
177 iLit0 = Abc_LitNotCond( iLit0, Gia_ObjFaninC0(pObj) );
178 iLit1 = Abc_LitNotCond( iLit1, Gia_ObjFaninC1(pObj) );
179 iLitClean = Gia_ManAppendAnd( p->pClean, iLit0, iLit1 );
180 }
181 else assert( 0 );
182 assert( !Abc_LitIsCompl(iLitClean) );
183 Gia_ManObj( p->pClean, Abc_Lit2Var(iLitClean) )->Value = iObj;
184 Gia_ObjSetCopyArray( p->pFrames, iObj, iLitClean );
185 return iLitClean;
186}
187Gia_Man_t * Bmcg_ManUnfold( Bmcg_Man_t * p, int f, int nFramesAdd )
188{
189 Gia_Man_t * pNew = NULL; Gia_Obj_t * pObj;
190 int i, k, iLitFrame, iLitClean, fTrivial = 1;
191 int * pCopies, nFrameObjs = Gia_ManObjNum(p->pFrames);
192 assert( Gia_ManPoNum(p->pFrames) == f * Gia_ManPoNum(p->pGia) );
193 for ( k = 0; k < nFramesAdd; k++ )
194 {
195 // unfold this timeframe
196 Vec_PtrPush( &p->vGia2Fr, ABC_FALLOC(int, Gia_ManObjNum(p->pGia)) );
197 assert( Vec_PtrSize(&p->vGia2Fr) == f+k+1 );
198 pCopies = Bmcg_ManCopies( p, f+k );
199 //memset( pCopies, 0xFF, sizeof(int)*Gia_ManObjNum(p->pGia) );
200 pCopies[0] = 0;
201 Gia_ManForEachPo( p->pGia, pObj, i )
202 {
203 iLitFrame = Bmcg_ManUnfold_rec( p, Gia_ObjFaninId0p(p->pGia, pObj), f+k );
204 iLitFrame = Abc_LitNotCond( iLitFrame, Gia_ObjFaninC0(pObj) );
205 pCopies[Gia_ObjId(p->pGia, pObj)] = Gia_ManAppendCo( p->pFrames, iLitFrame );
206 fTrivial &= (iLitFrame == 0);
207 }
208 }
209 if ( fTrivial )
210 return NULL;
211 // create a clean copy of the new nodes of this timeframe
212 Vec_IntFillExtra( &p->vFr2Sat, Gia_ManObjNum(p->pFrames), -1 );
213 Vec_IntFillExtra( &p->pFrames->vCopies, Gia_ManObjNum(p->pFrames), -1 );
214 //assert( Vec_IntCountEntry(&p->pFrames->vCopies, -1) == Vec_IntSize(&p->pFrames->vCopies) );
215 Gia_ManStopP( &p->pClean );
216 p->pClean = Gia_ManStart( Gia_ManObjNum(p->pFrames) - nFrameObjs + 1000 );
217 Gia_ObjSetCopyArray( p->pFrames, 0, 0 );
218 for ( k = 0; k < nFramesAdd; k++ )
219 for ( i = 0; i < Gia_ManPoNum(p->pGia); i++ )
220 {
221 pObj = Gia_ManCo( p->pFrames, (f+k) * Gia_ManPoNum(p->pGia) + i );
222 iLitClean = Bmcg_ManCollect_rec( p, Gia_ObjFaninId0p(p->pFrames, pObj) );
223 iLitClean = Abc_LitNotCond( iLitClean, Gia_ObjFaninC0(pObj) );
224 iLitClean = Gia_ManAppendCo( p->pClean, iLitClean );
225 Gia_ManObj( p->pClean, Abc_Lit2Var(iLitClean) )->Value = Gia_ObjId(p->pFrames, pObj);
226 Gia_ObjSetCopyArray( p->pFrames, Gia_ObjId(p->pFrames, pObj), iLitClean );
227 }
228 pNew = p->pClean; p->pClean = NULL;
229 Gia_ManForEachObj( pNew, pObj, i )
230 Gia_ObjSetCopyArray( p->pFrames, pObj->Value, -1 );
231 return pNew;
232}
233Cnf_Dat_t * Bmcg_ManAddNewCnf( Bmcg_Man_t * p, int f, int nFramesAdd )
234{
235 abctime clk = Abc_Clock();
236 Gia_Man_t * pNew = Bmcg_ManUnfold( p, f, nFramesAdd );
237 Cnf_Dat_t * pCnf;
238 Gia_Obj_t * pObj;
239 int i, iVar, * pMap;
240 p->timeUnf += Abc_Clock() - clk;
241 if ( pNew == NULL )
242 return NULL;
243 clk = Abc_Clock();
244 pCnf = (Cnf_Dat_t *) Mf_ManGenerateCnf( pNew, 8, 1, 0, 0, 0 );
245 pMap = ABC_FALLOC( int, Gia_ManObjNum(pNew) );
246 pMap[0] = 0;
247 Gia_ManForEachObj1( pNew, pObj, i )
248 {
249 if ( pCnf->pObj2Count[i] <= 0 && !Gia_ObjIsCi(pObj) )
250 continue;
251 iVar = Vec_IntEntry( &p->vFr2Sat, pObj->Value );
252 if ( iVar == -1 )
253 Vec_IntWriteEntry( &p->vFr2Sat, pObj->Value, (iVar = p->nSatVars++) );
254 pMap[i] = iVar;
255 }
256 Gia_ManStop( pNew );
257 for ( i = 0; i < pCnf->nLiterals; i++ )
258 pCnf->pClauses[0][i] = Abc_Lit2LitV( pMap, pCnf->pClauses[0][i] );
259 ABC_FREE( pMap );
260 p->timeCnf += Abc_Clock() - clk;
261 return pCnf;
262}
263
275void Bmcg_ManPrintFrame( Bmcg_Man_t * p, int f, int nClauses, int Solver, abctime clkStart )
276{
277 int fUnfinished = 0;
278 if ( !p->pPars->fVerbose )
279 return;
280 Abc_Print( 1, "%4d %s : ", f, fUnfinished ? "-" : "+" );
281// Abc_Print( 1, "Var =%8.0f. ", (double)p->nSatVars );
282// Abc_Print( 1, "Cla =%9.0f. ", (double)nClauses );
283 Abc_Print( 1, "Var =%8.0f. ", (double)(bmcg_sat_solver_varnum(p->pSats[0])-bmcg_sat_solver_elim_varnum(p->pSats[0])) );
284 Abc_Print( 1, "Cla =%9.0f. ", (double)bmcg_sat_solver_clausenum(p->pSats[0]) );
285 Abc_Print( 1, "Learn =%9.0f. ",(double)bmcg_sat_solver_learntnum(p->pSats[0]) );
286 Abc_Print( 1, "Conf =%9.0f. ", (double)bmcg_sat_solver_conflictnum(p->pSats[0]) );
287 if ( p->pPars->nProcs > 1 )
288 Abc_Print( 1, "S = %3d. ", Solver );
289 Abc_Print( 1, "%4.0f MB", 1.0*((int)Gia_ManMemory(p->pFrames) + Vec_IntMemory(&p->vFr2Sat))/(1<<20) );
290 Abc_Print( 1, "%9.2f sec ", (float)(Abc_Clock() - clkStart)/(float)(CLOCKS_PER_SEC) );
291 printf( "\n" );
292 fflush( stdout );
293}
295{
296 abctime clkTotal = p->timeUnf + p->timeCnf + p->timeSmp + p->timeSat + p->timeOth;
297 if ( !p->pPars->fVerbose )
298 return;
299 ABC_PRTP( "Unfolding ", p->timeUnf, clkTotal );
300 ABC_PRTP( "CNF generation", p->timeCnf, clkTotal );
301 ABC_PRTP( "CNF simplify ", p->timeSmp, clkTotal );
302 ABC_PRTP( "SAT solving ", p->timeSat, clkTotal );
303 ABC_PRTP( "Other ", p->timeOth, clkTotal );
304 ABC_PRTP( "TOTAL ", clkTotal , clkTotal );
305}
306Abc_Cex_t * Bmcg_ManGenerateCex( Bmcg_Man_t * p, int i, int f, int s )
307{
308 Abc_Cex_t * pCex = Abc_CexMakeTriv( Gia_ManRegNum(p->pGia), Gia_ManPiNum(p->pGia), Gia_ManPoNum(p->pGia), f*Gia_ManPoNum(p->pGia)+i );
309 Gia_Obj_t * pObj; int k;
310 Gia_ManForEachPi( p->pFrames, pObj, k )
311 {
312 int iSatVar = Vec_IntEntry( &p->vFr2Sat, Gia_ObjId(p->pFrames, pObj) );
313 if ( iSatVar > 0 && bmcg_sat_solver_read_cex_varvalue(p->pSats[s], iSatVar) ) // 1 bit
314 {
315 int iCiId = Vec_IntEntry( &p->vCiMap, 2*k+0 );
316 int iFrame = Vec_IntEntry( &p->vCiMap, 2*k+1 );
317 Abc_InfoSetBit( pCex->pData, Gia_ManRegNum(p->pGia) + iFrame * Gia_ManPiNum(p->pGia) + iCiId );
318 }
319 }
320 return pCex;
321}
323{
324 int i, iSatVar;
325 abctime clk = Abc_Clock();
326 bmcg_sat_solver_set_nvars( pSat, p->nSatVars );
327 if ( p->pPars->fUseEliminate )
328 {
329 for ( i = p->nOldFrPis; i < Gia_ManPiNum(p->pFrames); i++ )
330 {
331 Gia_Obj_t * pObj = Gia_ManPi( p->pFrames, i );
332 int iSatVar = Vec_IntEntry( &p->vFr2Sat, Gia_ObjId(p->pFrames, pObj) );
333 if ( iSatVar > 0 )
334 bmcg_sat_solver_var_set_frozen( pSat, iSatVar, 1 );
335 }
336 for ( i = p->nOldFrPos; i < Gia_ManPoNum(p->pFrames); i++ )
337 {
338 Gia_Obj_t * pObj = Gia_ManPo( p->pFrames, i );
339 int iSatVar = Vec_IntEntry( &p->vFr2Sat, Gia_ObjId(p->pFrames, pObj) );
340 if ( iSatVar > 0 )
341 bmcg_sat_solver_var_set_frozen( pSat, iSatVar, 1 );
342 }
343 p->nOldFrPis = Gia_ManPiNum(p->pFrames);
344 p->nOldFrPos = Gia_ManPoNum(p->pFrames);
345 }
346 for ( i = 0; i < pCnf->nClauses; i++ )
347 if ( !bmcg_sat_solver_addclause( pSat, pCnf->pClauses[i], pCnf->pClauses[i+1]-pCnf->pClauses[i] ) )
348 assert( 0 );
349 if ( !p->pPars->fUseEliminate )
350 return;
351 bmcg_sat_solver_eliminate( pSat, 0 );
352 Vec_IntForEachEntry( &p->vFr2Sat, iSatVar, i )
353 if ( iSatVar > 0 && bmcg_sat_solver_var_is_elim(pSat, iSatVar) )
354 Vec_IntWriteEntry( &p->vFr2Sat, i, -1 );
355 p->timeSmp += Abc_Clock() - clk;
356}
358{
359 abctime clkStart = Abc_Clock();
360 Bmcg_Man_t * p = Bmcg_ManStart( pGia, pPars );
361 int f, k = 0, i = Gia_ManPoNum(pGia), status, RetValue = -1, nClauses = 0;
362 Abc_CexFreeP( &pGia->pCexSeq );
363 for ( f = 0; !pPars->nFramesMax || f < pPars->nFramesMax; f += pPars->nFramesAdd )
364 {
365 Cnf_Dat_t * pCnf = Bmcg_ManAddNewCnf( p, f, pPars->nFramesAdd );
366 if ( pCnf == NULL )
367 {
368 Bmcg_ManPrintFrame( p, f, nClauses, -1, clkStart );
369 if( pPars->pFuncOnFrameDone )
370 for ( k = 0; k < pPars->nFramesAdd; k++ )
371 for ( i = 0; i < Gia_ManPoNum(pGia); i++ )
372 pPars->pFuncOnFrameDone(f+k, i, 0);
373 continue;
374 }
375 nClauses += pCnf->nClauses;
376 Bmcg_ManAddCnf( p, p->pSats[0], pCnf );
377 Cnf_DataFree( pCnf );
378 assert( Gia_ManPoNum(p->pFrames) == (f + pPars->nFramesAdd) * Gia_ManPoNum(pGia) );
379 for ( k = 0; k < pPars->nFramesAdd; k++ )
380 {
381 for ( i = 0; i < Gia_ManPoNum(pGia); i++ )
382 {
383 abctime clk = Abc_Clock();
384 int iObj = Gia_ObjId( p->pFrames, Gia_ManCo(p->pFrames, (f+k) * Gia_ManPoNum(pGia) + i) );
385 int iLit = Abc_Var2Lit( Vec_IntEntry(&p->vFr2Sat, iObj), 0 );
386 if ( pPars->nTimeOut && (Abc_Clock() - clkStart)/CLOCKS_PER_SEC >= pPars->nTimeOut )
387 break;
388 status = bmcg_sat_solver_solve( p->pSats[0], &iLit, 1 );
389 p->timeSat += Abc_Clock() - clk;
390 if ( status == -1 ) // unsat
391 {
392 if ( i == Gia_ManPoNum(pGia)-1 )
393 Bmcg_ManPrintFrame( p, f+k, nClauses, -1, clkStart );
394 if( pPars->pFuncOnFrameDone)
395 pPars->pFuncOnFrameDone(f+k, i, 0);
396 continue;
397 }
398 if ( status == 1 ) // sat
399 {
400 RetValue = 0;
401 pPars->iFrame = f+k;
402 pGia->pCexSeq = Bmcg_ManGenerateCex( p, i, f+k, 0 );
403 pPars->nFailOuts++;
404 Bmcg_ManPrintFrame( p, f+k, nClauses, -1, clkStart );
405 if ( !pPars->fNotVerbose )
406 {
407 int nOutDigits = Abc_Base10Log( Gia_ManPoNum(pGia) );
408 Abc_Print( 1, "Output %*d was asserted in frame %2d (solved %*d out of %*d outputs). ",
409 nOutDigits, i, f+k, nOutDigits, pPars->nFailOuts, nOutDigits, Gia_ManPoNum(pGia) );
410 fflush( stdout );
411 }
412 if( pPars->pFuncOnFrameDone )
413 pPars->pFuncOnFrameDone(f+k, i, 1);
414 }
415 break;
416 }
417 if ( i < Gia_ManPoNum(pGia) || f+k == pPars->nFramesMax-1 )
418 break;
419 }
420 if ( k < pPars->nFramesAdd )
421 break;
422 }
423 p->timeOth = Abc_Clock() - clkStart - p->timeUnf - p->timeCnf - p->timeSmp - p->timeSat;
424 if ( !pPars->fNotVerbose ) {
425 if ( RetValue == -1 && !pPars->fNotVerbose )
426 printf( "No output failed in %d frames. ", f + (k < pPars->nFramesAdd ? k+1 : 0) );
427 Abc_PrintTime( 1, "Time", Abc_Clock() - clkStart );
428 }
430 Bmcg_ManStop( p );
431 return RetValue;
432}
433
446{
447 pPars->nProcs = 1;
448 return Bmcg_ManPerformOne( pGia, pPars );
449}
450
454
455
457
int bmcg_sat_solver_conflictnum(bmcg_sat_solver *s)
void bmcg_sat_solver_set_stop(bmcg_sat_solver *s, int *pstop)
int bmcg_sat_solver_learntnum(bmcg_sat_solver *s)
int bmcg_sat_solver_varnum(bmcg_sat_solver *s)
int bmcg_sat_solver_addvar(bmcg_sat_solver *s)
bmcg_sat_solver * bmcg_sat_solver_start()
MACRO DEFINITIONS ///.
int bmcg_sat_solver_solve(bmcg_sat_solver *s, int *plits, int nlits)
int bmcg_sat_solver_addclause(bmcg_sat_solver *s, int *plits, int nlits)
void bmcg_sat_solver_var_set_frozen(bmcg_sat_solver *s, int v, int freeze)
int bmcg_sat_solver_read_cex_varvalue(bmcg_sat_solver *s, int ivar)
int bmcg_sat_solver_eliminate(bmcg_sat_solver *s, int turn_off_elim)
void bmcg_sat_solver_set_nvars(bmcg_sat_solver *s, int nvars)
int bmcg_sat_solver_elim_varnum(bmcg_sat_solver *s)
int bmcg_sat_solver_clausenum(bmcg_sat_solver *s)
void bmcg_sat_solver_stop(bmcg_sat_solver *s)
int bmcg_sat_solver_var_is_elim(bmcg_sat_solver *s, int v)
void bmcg_sat_solver
Definition AbcGlucose.h:63
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_FALLOC(type, num)
Definition abc_global.h:266
#define ABC_PRTP(a, t, T)
Definition abc_global.h:258
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
void Bmcg_ManStop(Bmcg_Man_t *p)
Definition bmcBmcG.c:100
void Bmcg_ManAddCnf(Bmcg_Man_t *p, bmcg_sat_solver *pSat, Cnf_Dat_t *pCnf)
Definition bmcBmcG.c:322
int Bmcg_ManPerform(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
Definition bmcBmcG.c:445
Abc_Cex_t * Bmcg_ManGenerateCex(Bmcg_Man_t *p, int i, int f, int s)
Definition bmcBmcG.c:306
Cnf_Dat_t * Bmcg_ManAddNewCnf(Bmcg_Man_t *p, int f, int nFramesAdd)
Definition bmcBmcG.c:233
int Bmcg_ManPerformOne(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
Definition bmcBmcG.c:357
void Bmcg_ManPrintTime(Bmcg_Man_t *p)
Definition bmcBmcG.c:294
#define PAR_THR_MAX
DECLARATIONS ///.
Definition bmcBmcG.c:31
int Bmcg_ManUnfold_rec(Bmcg_Man_t *p, int iObj, int f)
Definition bmcBmcG.c:127
Gia_Man_t * Bmcg_ManUnfold(Bmcg_Man_t *p, int f, int nFramesAdd)
Definition bmcBmcG.c:187
Bmcg_Man_t * Bmcg_ManStart(Gia_Man_t *pGia, Bmc_AndPar_t *pPars)
FUNCTION DEFINITIONS ///.
Definition bmcBmcG.c:72
void Bmcg_ManPrintFrame(Bmcg_Man_t *p, int f, int nClauses, int Solver, abctime clkStart)
Definition bmcBmcG.c:275
struct Bmcg_Man_t_ Bmcg_Man_t
Definition bmcBmcG.c:33
int Bmcg_ManCollect_rec(Bmcg_Man_t *p, int iObj)
Definition bmcBmcG.c:163
struct Bmc_AndPar_t_ Bmc_AndPar_t
Definition bmc.h:143
struct Cnf_Dat_t_ Cnf_Dat_t
Definition cnf.h:52
void Cnf_DataFree(Cnf_Dat_t *p)
Definition cnfMan.c:207
Cube * p
Definition exorList.c:222
void Gia_ManStop(Gia_Man_t *p)
Definition giaMan.c:82
void Gia_ManHashStart(Gia_Man_t *p)
Definition giaHash.c:125
double Gia_ManMemory(Gia_Man_t *p)
Definition giaMan.c:194
#define Gia_ManForEachPo(p, pObj, i)
Definition gia.h:1250
void Gia_ManStopP(Gia_Man_t **p)
Definition giaMan.c:224
#define Gia_ManForEachPi(p, pObj, i)
Definition gia.h:1248
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
Definition giaMan.c:57
struct Gia_Obj_t_ Gia_Obj_t
Definition gia.h:76
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
#define Gia_ManForEachObj1(p, pObj, i)
Definition gia.h:1192
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
Definition giaHash.c:576
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
Definition gia.h:1190
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
Definition giaMf.c:1877
int nFramesAdd
Definition bmc.h:148
int nFramesMax
Definition bmc.h:147
int fNotVerbose
Definition bmc.h:161
int nTimeOut
Definition bmc.h:150
int iFrame
Definition bmc.h:162
int nFailOuts
Definition bmc.h:163
void(* pFuncOnFrameDone)(int, int, int)
Definition bmc.h:166
int nProcs
Definition bmc.h:152
int nOldFrPos
Definition bmcBmcG.c:46
Vec_Ptr_t vGia2Fr
Definition bmcBmcG.c:40
int nOldFrPis
Definition bmcBmcG.c:45
abctime timeCnf
Definition bmcBmcG.c:49
int fStopNow
Definition bmcBmcG.c:47
abctime timeUnf
Definition bmcBmcG.c:48
Gia_Man_t * pFrames
Definition bmcBmcG.c:38
abctime timeSmp
Definition bmcBmcG.c:50
Vec_Int_t vCiMap
Definition bmcBmcG.c:42
Bmc_AndPar_t * pPars
Definition bmcBmcG.c:36
bmcg_sat_solver * pSats[PAR_THR_MAX]
Definition bmcBmcG.c:43
Gia_Man_t * pClean
Definition bmcBmcG.c:39
abctime timeSat
Definition bmcBmcG.c:51
Gia_Man_t * pGia
Definition bmcBmcG.c:37
Vec_Int_t vFr2Sat
Definition bmcBmcG.c:41
abctime timeOth
Definition bmcBmcG.c:52
int nSatVars
Definition bmcBmcG.c:44
int * pObj2Count
Definition cnf.h:65
int nLiterals
Definition cnf.h:60
int ** pClauses
Definition cnf.h:62
int nClauses
Definition cnf.h:61
Abc_Cex_t * pCexSeq
Definition gia.h:150
unsigned Value
Definition gia.h:89
void Abc_CexFreeP(Abc_Cex_t **p)
Definition utilCex.c:361
Abc_Cex_t * Abc_CexMakeTriv(int nRegs, int nTruePis, int nTruePos, int iFrameOut)
Definition utilCex.c:85
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
Definition utilCex.h:39
#define assert(ex)
Definition util_old.h:213
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42