32 int iOutput,
int fVerbose,
int fSilent );
80 assert( iStop >= 0 && iStop <= dd->size );
82 for ( i = iStart; i < iStop; i++ )
108 printf(
"\nThe number of referenced nodes = %d\n\n", RetValue );
126 DdNode ** pbVarsX, ** pbVarsY;
240 int fInternalReorder = 0;
243 DdNode * bReached, * bCubeCs;
248 int i, nIters, nBddSize = 0, status;
249 int nThreshold = 10000;
268 printf(
"BDDs blew up during qualitification scheduling. " );
279 bCurrent = bInitial;
Cudd_Ref( bCurrent );
280 bReached = bInitial;
Cudd_Ref( bReached );
282 for ( nIters = 0; nIters < pPars->
nIterMax; nIters++ )
287 printf(
"Reached timeout after image computation (%d seconds).\n", pPars->
TimeLimit );
294 pPars->
iFrame = nIters - 1;
306 printf(
"BDDs blew up during image computation. " );
312 pPars->
iFrame = nIters - 1;
328 if ( nBddSize > pPars->
nBddMax )
337 assert( p->pSeqModel == NULL );
342 Abc_Print( 1,
"Output %d of miter \"%s\" was asserted in frame %d. ", i, p->pName,
Vec_PtrSize(vOnionRings) );
362 fprintf( stdout,
"Frame = %3d. BDD = %5d. ", nIters, nBddSize );
363 if ( fInternalReorder && pPars->
fReorder && nBddSize > nThreshold )
366 fprintf( stdout,
"Reordering... Before = %5d. ",
Cudd_DagSize(bReached) );
370 fprintf( stdout,
"After = %5d.\r",
Cudd_DagSize(bReached) );
375 fprintf( stdout,
"\n" );
381 fprintf( stdout,
"Reachable states = %.0f. (Ratio = %.4f %%)\n", nMints, 100.0*nMints/pow(2.0,
Saig_ManRegNum(p)) );
396 if ( bReached == NULL )
403 fprintf( stdout,
"Reachability analysis is stopped after %d frames.\n", nIters );
405 fprintf( stdout,
"Reachability analysis completed after %d frames.\n", nIters );
406 fprintf( stdout,
"Reachable states = %.0f. (Ratio = %.4f %%)\n", nMints, 100.0*nMints/pow(2.0,
Saig_ManRegNum(p)) );
415 printf(
"The miter is proved unreachable after %d iterations. ", nIters );
417 pPars->
iFrame = nIters - 1;
422 printf(
"Verified only for states reachable in %d frames. ", nIters );
423 pPars->
iFrame = nIters - 1;
442 DdNode ** pbParts, ** pbOutputs;
443 DdNode * bInitial, * bTemp;
455 printf(
"The number of intermediate BDD nodes exceeded the limit (%d).\n", pPars->
nBddMax );
464 printf(
"Reached timeout after constructing global BDDs (%d seconds).\n", pPars->
TimeLimit );
493 assert( p->pSeqModel == NULL );
498 Abc_Print( 1,
"Output %d of miter \"%s\" was asserted in frame %d. ", i, p->pName, -1 );
508 if ( RetValue == -1 )
550 int i, k, Entry, iBitOld, iBitNew, RetValue;
569 pCexOld = p->pSeqModel;
570 assert( pCexOld != NULL );
574 if ( pObj->
pData != NULL )
580 pCexNew->iFrame = pCexOld->iFrame;
581 pCexNew->iPo = pCexOld->iPo;
583 for ( iBitOld = 0; iBitOld < pCexOld->nRegs; iBitOld++ )
588 for ( i = 0; i <= pCexNew->iFrame; i++ )
600 assert( iBitOld < iBitNew );
601 assert( iBitOld == pCexOld->nBits );
602 assert( iBitNew == pCexNew->nBits );
604 pInit->pSeqModel = pCexNew;
int Aig_ManComputeReachable(DdManager *dd, Aig_Man_t *p, DdNode **pbParts, DdNode *bInitial, DdNode **pbOutputs, Saig_ParBbr_t *pPars, int fCheckOutputs)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
void Cudd_RecursiveDeref(DdManager *table, DdNode *n)
double Cudd_CountMinterm(DdManager *manager, DdNode *node, int nvars)
DdNode ** Aig_ManCreatePartitions(DdManager *dd, Aig_Man_t *p, int fReorder, int fVerbose)
static int Saig_ManPoNum(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 ///.
void Aig_ManStop(Aig_Man_t *p)
static int Abc_InfoHasBit(unsigned *p, int i)
ABC_NAMESPACE_IMPL_START Abc_Cex_t * Abc_CexAlloc(int nRegs, int nRealPis, int nFrames)
DECLARATIONS ///.
void Cudd_Deref(DdNode *node)
static ABC_NAMESPACE_HEADER_START DdNode * Aig_ObjGlobalBdd(Aig_Obj_t *pObj)
INCLUDES ///.
int Cudd_SetVarMap(DdManager *manager, DdNode **x, DdNode **y, int n)
void Aig_ManFreeGlobalBdds(Aig_Man_t *p, DdManager *dd)
static void Vec_PtrPush(Vec_Ptr_t *p, void *Entry)
DdNode * Aig_ManInitStateVarMap(DdManager *dd, Aig_Man_t *p, int fVerbose)
#define ABC_ALLOC(type, num)
void Bbr_ManSetDefaultParams(Saig_ParBbr_t *p)
FUNCTION DEFINITIONS ///.
ABC_NAMESPACE_IMPL_START Abc_Cex_t * Aig_ManVerifyUsingBddsCountExample(Aig_Man_t *p, DdManager *dd, DdNode **pbParts, Vec_Ptr_t *vOnionRings, DdNode *bCubeFirst, int iOutput, int fVerbose, int fSilent)
DECLARATIONS ///.
Bbr_ImageTree_t * Bbr_bddImageStart(DdManager *dd, DdNode *bCare, int nParts, DdNode **pbParts, int nVars, DdNode **pbVars, int nBddMax, int fVerbose)
static abctime Abc_Clock()
static int Vec_PtrSize(Vec_Ptr_t *p)
DdNode ** Aig_ManCreateOutputs(DdManager *dd, Aig_Man_t *p)
Bbr_ImageTree2_t * Bbr_bddImageStart2(DdManager *dd, DdNode *bCare, int nParts, DdNode **pbParts, int nVars, DdNode **pbVars, int fVerbose)
int Aig_ManVerifyUsingBdds_int(Aig_Man_t *p, Saig_ParBbr_t *pPars)
DdNode * Cudd_bddVarMap(DdManager *manager, DdNode *f)
static Vec_Int_t * Vec_IntAlloc(int nCap)
FUNCTION DEFINITIONS ///.
void Bbr_bddImageTreeDelete(Bbr_ImageTree_t *pTree)
int Cudd_ReorderingStatus(DdManager *unique, Cudd_ReorderingType *method)
DdNode * Bbr_bddImageCompute2(Bbr_ImageTree2_t *pTree, DdNode *bCare)
#define Saig_ManForEachLi(p, pObj, i)
static int Aig_ManCiNum(Aig_Man_t *p)
#define ABC_NAMESPACE_IMPL_END
static void Vec_IntPush(Vec_Int_t *p, int Entry)
#define Saig_ManForEachLo(p, pObj, i)
static int Saig_ManCiNum(Aig_Man_t *p)
DdNode * Cudd_bddXnor(DdManager *dd, DdNode *f, DdNode *g)
DdNode * Cudd_bddOr(DdManager *dd, DdNode *f, DdNode *g)
static void Abc_Print(int level, const char *format,...)
static int Saig_ManRegNum(Aig_Man_t *p)
#define ABC_NAMESPACE_IMPL_START
int Cudd_CheckZeroRef(DdManager *manager)
static void Abc_InfoSetBit(unsigned *p, int i)
void Cudd_AutodynDisable(DdManager *unique)
static int Aig_ManRegNum(Aig_Man_t *p)
Aig_Man_t * Aig_ManDupTrim(Aig_Man_t *p)
int Cudd_bddLeq(DdManager *dd, DdNode *f, DdNode *g)
int Aig_ManVerifyUsingBdds(Aig_Man_t *pInit, Saig_ParBbr_t *pPars)
static Vec_Ptr_t * Vec_PtrAlloc(int nCap)
FUNCTION DEFINITIONS ///.
static int Saig_ManPiNum(Aig_Man_t *p)
MACRO DEFINITIONS ///.
DdNode * Bbr_bddImageCompute(Bbr_ImageTree_t *pTree, DdNode *bCare)
void Bbr_StopManager(DdManager *dd)
DdNode * Cudd_bddIthVar(DdManager *dd, int i)
DdNode * Bbr_bddComputeRangeCube(DdManager *dd, int iStart, int iStop)
DECLARATIONS ///.
unsigned int Cudd_ReadKeys(DdManager *dd)
DdNode * Cudd_bddAnd(DdManager *dd, DdNode *f, DdNode *g)
#define Saig_ManForEachPo(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
void Cudd_Quit(DdManager *unique)
int Cudd_ReduceHeap(DdManager *table, Cudd_ReorderingType heuristic, int minsize)
void Cudd_AutodynEnable(DdManager *unique, Cudd_ReorderingType method)
static int Aig_ObjRefs(Aig_Obj_t *pObj)
unsigned int Cudd_ReadDead(DdManager *dd)
static void Vec_IntFree(Vec_Int_t *p)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
DdNode * Cudd_bddIntersect(DdManager *dd, DdNode *f, DdNode *g)
int Cudd_SharingSize(DdNode **nodeArray, int n)
static int Aig_ObjCioId(Aig_Obj_t *pObj)
int Cudd_DagSize(DdNode *node)
static void Vec_PtrFree(Vec_Ptr_t *p)
#define Saig_ManForEachPi(p, pObj, i)
DdManager * Aig_ManComputeGlobalBdds(Aig_Man_t *p, int nBddSizeMax, int fDropInternal, int fReorder, int fVerbose)
void Bbr_bddImageTreeDelete2(Bbr_ImageTree2_t *pTree)