diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2013-11-01 13:25:19 -0400 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2013-11-01 13:25:19 -0400 |
commit | a509fa8ea89cc6374c7a13e7632cb51bc455ce43 (patch) | |
tree | aaa4fff72e352cf892f22c66d717a35471bd142f /src/proof | |
parent | ea1a2cfdaba5729eb9624bbc54b869784860f9f0 (diff) | |
download | abc-a509fa8ea89cc6374c7a13e7632cb51bc455ce43.tar.gz abc-a509fa8ea89cc6374c7a13e7632cb51bc455ce43.tar.bz2 abc-a509fa8ea89cc6374c7a13e7632cb51bc455ce43.zip |
Sweeper internal verification.
Diffstat (limited to 'src/proof')
-rw-r--r-- | src/proof/ssc/sscCore.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/proof/ssc/sscCore.c b/src/proof/ssc/sscCore.c index aba5c80f..bb89d936 100644 --- a/src/proof/ssc/sscCore.c +++ b/src/proof/ssc/sscCore.c @@ -19,6 +19,7 @@ ***********************************************************************/ #include "sscInt.h" +#include "proof/cec/cec.h" ABC_NAMESPACE_IMPL_START @@ -210,6 +211,47 @@ int Ssc_GiaResimulateOneClass( Ssc_Man_t * p, int iRepr, int iObj ) /**Function************************************************************* + Synopsis [Perform verification of conditional sweeping.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Ssc_PerformVerification( Gia_Man_t * p0, Gia_Man_t * p1, Gia_Man_t * pC ) +{ + int Status; + Cec_ParCec_t ParsCec, * pPars = &ParsCec; + // derive the OR of constraint outputs + Gia_Man_t * pCond = Gia_ManDupAndOr( pC, 1, 0 ); + // derive F = F & !OR(c0, c1, c2, ...) + Gia_Man_t * p0c = Gia_ManMiter( p0, pCond, 0, 0, 0, 1, 0 ); + // derive F = F & !OR(c0, c1, c2, ...) + Gia_Man_t * p1c = Gia_ManMiter( p1, pCond, 0, 0, 0, 1, 0 ); + // derive dual-output miter + Gia_Man_t * pMiter = Gia_ManMiter( p0c, p1c, 0, 1, 0, 0, 0 ); + Gia_ManStop( p0c ); + Gia_ManStop( p1c ); + Gia_ManStop( pCond ); + // run equivalence checking + Cec_ManCecSetDefaultParams( pPars ); + Status = Cec_ManVerify( pMiter, pPars ); + Gia_ManStop( pMiter ); + // report the results + if ( Status == 1 ) + printf( "Verification succeeded.\n" ); + else if ( Status == 0 ) + printf( "Verification failed.\n" ); + else if ( Status == -1 ) + printf( "Verification undecided.\n" ); + else assert( 0 ); + return Status; +} + +/**Function************************************************************* + Synopsis [] Description [] @@ -401,6 +443,7 @@ Gia_Man_t * Ssc_PerformSweepingConstr( Gia_Man_t * p, Ssc_Pars_t * pPars ) pAig = Gia_ManDupLevelized( pResult = pAig ); Gia_ManStop( pResult ); pResult = Ssc_PerformSweeping( pAig, pCare, pPars ); + Ssc_PerformVerification( pAig, pResult, pCare ); if ( pPars->fAppend ) { Gia_ManDupAppendShare( pResult, pCare ); |