diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2011-02-18 22:19:45 -0800 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2011-02-18 22:19:45 -0800 |
commit | c7ebd9321146a188c4632dd8bfaecc024fbea2c1 (patch) | |
tree | 6f133e3492193e216c9cc2ce1963b968787e8823 /src/base/abci/abcIvy.c | |
parent | 06ae1644b221df44e29b909b7dc4c7557369f5a8 (diff) | |
download | abc-c7ebd9321146a188c4632dd8bfaecc024fbea2c1.tar.gz abc-c7ebd9321146a188c4632dd8bfaecc024fbea2c1.tar.bz2 abc-c7ebd9321146a188c4632dd8bfaecc024fbea2c1.zip |
Improvements to CEC command iprove.
Diffstat (limited to 'src/base/abci/abcIvy.c')
-rw-r--r-- | src/base/abci/abcIvy.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/base/abci/abcIvy.c b/src/base/abci/abcIvy.c index 979b2a4a..092350ca 100644 --- a/src/base/abci/abcIvy.c +++ b/src/base/abci/abcIvy.c @@ -496,7 +496,6 @@ Abc_Ntk_t * Abc_NtkIvyFraig( Abc_Ntk_t * pNtk, int nConfLimit, int fDoSparse, in ***********************************************************************/ int Abc_NtkIvyProve( Abc_Ntk_t ** ppNtk, void * pPars ) { - Prove_Params_t * pParams = (Prove_Params_t *)pPars; Abc_Ntk_t * pNtk = *ppNtk, * pNtkTemp; Abc_Obj_t * pObj, * pFanin; @@ -563,6 +562,8 @@ int Abc_NtkIvyProve( Abc_Ntk_t ** ppNtk, void * pPars ) // solve the CEC problem RetValue = Ivy_FraigProve( &pMan, pParams ); +// RetValue = -1; + // convert IVY network into ABC network pNtk = Abc_NtkIvyAfter( pNtkTemp = pNtk, pMan, 0, 0 ); Abc_NtkDelete( pNtkTemp ); @@ -570,7 +571,24 @@ int Abc_NtkIvyProve( Abc_Ntk_t ** ppNtk, void * pPars ) pNtk->pModel = (int *)pMan->pData; pMan->pData = NULL; Ivy_ManStop( pMan ); - // try to prove it using brute force SAT + // try to prove it using brute force SAT with good CNF encoding + if ( RetValue < 0 ) + { + pMan2 = Abc_NtkToDar( pNtk, 0, 0 ); + // dump the miter before entering high-effort solving + if ( pParams->fVerbose ) + { + char pFileName[100]; + sprintf( pFileName, "cecmiter.aig" ); + Ioa_WriteAiger( pMan2, pFileName, 0, 0 ); + printf( "Intermediate reduced miter is written into file \"%s\".\n", pFileName ); + } + RetValue = Fra_FraigSat( pMan2, pParams->nMiteringLimitLast, 0, 0, 0, pParams->fVerbose ); + pNtk->pModel = (int *)pMan2->pData, pMan2->pData = NULL; + Aig_ManStop( pMan2 ); + } + + // try to prove it using brute force BDDs if ( RetValue < 0 && pParams->fUseBdds ) { if ( pParams->fVerbose ) |