summaryrefslogtreecommitdiffstats
path: root/src/sat/bmc/bmcCexCare.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2015-05-14 09:34:20 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2015-05-14 09:34:20 -0700
commita39ef307081a98a99cdac80dab7f213392c1debb (patch)
treeb50f39f43f31b9060af84f469ec5894557920347 /src/sat/bmc/bmcCexCare.c
parenta90700c7537e85fd5178a5f41d82cbad35234fcf (diff)
downloadabc-a39ef307081a98a99cdac80dab7f213392c1debb.tar.gz
abc-a39ef307081a98a99cdac80dab7f213392c1debb.tar.bz2
abc-a39ef307081a98a99cdac80dab7f213392c1debb.zip
Procedure for extending care CEX to all objects.
Diffstat (limited to 'src/sat/bmc/bmcCexCare.c')
-rw-r--r--src/sat/bmc/bmcCexCare.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/sat/bmc/bmcCexCare.c b/src/sat/bmc/bmcCexCare.c
index addb89fd..21fea429 100644
--- a/src/sat/bmc/bmcCexCare.c
+++ b/src/sat/bmc/bmcCexCare.c
@@ -34,6 +34,60 @@ ABC_NAMESPACE_IMPL_START
/**Function*************************************************************
+ Synopsis [Takes CEX and its care-set. Returns care-set of all objects.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Abc_Cex_t * Bmc_CexCareExtendToObjects( Gia_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexCare )
+{
+ Abc_Cex_t * pNew;
+ Gia_Obj_t * pObj;
+ int i, k;
+ assert( pCex->nPis == pCexCare->nPis );
+ assert( pCex->nRegs == pCexCare->nRegs );
+ assert( pCex->nBits == pCexCare->nBits );
+ // start the counter-example
+ pNew = Abc_CexAlloc( pCex->nRegs, Gia_ManObjNum(p), pCex->iFrame + 1 );
+ pNew->iFrame = pCex->iFrame;
+ pNew->iPo = pCex->iPo;
+ // initialize terminary simulation
+ Gia_ObjTerSimSet0( Gia_ManConst0(p) );
+ Gia_ManForEachRi( p, pObj, k )
+ Gia_ObjTerSimSet0( pObj );
+ for ( i = 0; i <= pCex->iFrame; i++ )
+ {
+ Gia_ManForEachPi( p, pObj, k )
+ {
+ if ( !Abc_InfoHasBit( pCexCare->pData, pCexCare->nRegs + i * pCexCare->nPis + k ) )
+ Gia_ObjTerSimSetX( pObj );
+ else if ( Abc_InfoHasBit( pCex->pData, pCex->nRegs + i * pCex->nPis + k ) )
+ Gia_ObjTerSimSet1( pObj );
+ else
+ Gia_ObjTerSimSet0( pObj );
+ }
+ Gia_ManForEachRo( p, pObj, k )
+ Gia_ObjTerSimRo( p, pObj );
+ Gia_ManForEachAnd( p, pObj, k )
+ Gia_ObjTerSimAnd( pObj );
+ Gia_ManForEachCo( p, pObj, k )
+ Gia_ObjTerSimCo( pObj );
+ // add cares to the exdended counter-example
+ Gia_ManForEachObj( p, pObj, k )
+ if ( !Gia_ObjTerSimGetX(pObj) )
+ Abc_InfoSetBit( pNew->pData, pNew->nRegs + pNew->nPis * i + k );
+ }
+ pObj = Gia_ManPo( p, pCex->iPo );
+ assert( Gia_ObjTerSimGet1(pObj) );
+ return pNew;
+}
+
+/**Function*************************************************************
+
Synopsis [Backward propagation.]
Description []