Description [Derives initial abstraction based on user-specified parameter values, which tell what is the smallest bit-width of a primitive that is being abstracted away. Currently only add/sub, mul/div, mux, and flop are supported with individual parameters. The second step is to refine the initial abstraction until the point when the property is proved.]
303{
305 int nIters, nNodes, nDcFlops, RetValue = -1;
306
307
308 Vec_Bit_t * vUnmark = Vec_BitStart( Wlc_NtkObjNumMax(
p) );
309
310 Pdr_Par_t PdrPars, * pPdrPars = &PdrPars;
312 pPdrPars->fUseAbs = 1;
313 pPdrPars->fCtgs = 1;
314 pPdrPars->fSkipDown = 0;
315
317
318 for ( nIters = 1; nIters < pPars->
nIterMax; nIters++ )
319 {
325
327 printf( "\nIteration %d:\n", nIters );
328
329
330 pAbs = Wlc_NtkAbs(
p, pPars, vUnmark, &vPisNew, pPars->
fVerbose );
332
333
334
335
336
338 if ( nDcFlops > 0 )
339 {
342 }
343
345 {
348 }
350 {
351 printf( "Derived abstraction with %d objects and %d PPIs. Bit-blasted AIG stats are:\n", Wlc_NtkObjNum(pAbs), Vec_IntSize(vPisNew) );
353 }
355
356
359 pCex = pAig->pSeqModel; pAig->pSeqModel = NULL;
361
362
363 if ( pCex == NULL )
364 {
367 Vec_IntFree( vPisNew );
368 break;
369 }
370
371
372 vRefine = Wlc_NtkAbsRefinement(
p, pGia, pCex, vPisNew );
374 Vec_IntFree( vPisNew );
375 if ( vRefine == NULL )
376 {
378 break;
379 }
380
381
382 nNodes = Wlc_NtkRemoveFromAbstraction(
p, vRefine, vUnmark );
384 printf( "Refinement of CEX in frame %d came up with %d un-abstacted PPIs, whose MFFCs include %d objects.\n", pCex->iFrame, Vec_IntSize(vRefine), nNodes );
385 Vec_IntFree( vRefine );
387 }
388 Vec_BitFree( vUnmark );
389
391 printf( "\n" );
392 printf( "Abstraction " );
393 if ( RetValue == 0 )
394 printf( "resulted in a real CEX" );
395 else if ( RetValue == 1 )
396 printf( "is successfully proved" );
397 else
398 printf( "timed out" );
399 printf( " after %d iterations. ", nIters );
400 Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
401 return RetValue;
402}
void Aig_ManStop(Aig_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Aig_Man_t * Gia_ManToAigSimple(Gia_Man_t *p)
void Gia_ManStop(Gia_Man_t *p)
Gia_Man_t * Gia_ManPermuteInputs(Gia_Man_t *p, int nPpis, int nExtra)
struct Gia_Man_t_ Gia_Man_t
Gia_Man_t * Gia_ManTransformMiter2(Gia_Man_t *p)
void Gia_ManPrintStats(Gia_Man_t *p, Gps_Par_t *pPars)
void Pdr_ManSetDefaultParams(Pdr_Par_t *pPars)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Pdr_Par_t_ Pdr_Par_t
INCLUDES ///.
int Pdr_ManSolve(Aig_Man_t *p, Pdr_Par_t *pPars)
void Abc_CexFree(Abc_Cex_t *p)
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Bit_t_ Vec_Bit_t
INCLUDES ///.
Gia_Man_t * Wlc_NtkBitBlast(Wlc_Ntk_t *p, Wlc_BstPar_t *pPars)
void Wlc_NtkFree(Wlc_Ntk_t *p)
struct Wlc_Ntk_t_ Wlc_Ntk_t
int Wlc_NtkCountObjBits(Wlc_Ntk_t *p, Vec_Int_t *vPisNew)
int Wlc_NtkDcFlopNum(Wlc_Ntk_t *p)