| /**CFile**************************************************************** |
| |
| FileName [absRef.h] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [Abstraction package.] |
| |
| Synopsis [Refinement manager.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - June 20, 2005.] |
| |
| Revision [$Id: absRef.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #ifndef ABC__proof_abs__AbsRef_h |
| #define ABC__proof_abs__AbsRef_h |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// INCLUDES /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// PARAMETERS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| ABC_NAMESPACE_HEADER_START |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// BASIC TYPES /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// MACRO DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| typedef struct Rnm_Obj_t_ Rnm_Obj_t; // refinement object |
| struct Rnm_Obj_t_ |
| { |
| unsigned Value : 1; // binary value |
| unsigned fVisit : 1; // visited object |
| unsigned fVisitJ : 1; // justified visited object |
| unsigned fPPi : 1; // PPI object |
| unsigned Prio : 24; // priority (0 - highest) |
| }; |
| |
| typedef struct Rnm_Man_t_ Rnm_Man_t; // refinement manager |
| struct Rnm_Man_t_ |
| { |
| // user data |
| Gia_Man_t * pGia; // working AIG manager (it is completely owned by this package) |
| Abc_Cex_t * pCex; // counter-example |
| Vec_Int_t * vMap; // mapping of CEX inputs into objects (PI + PPI, in any order) |
| int fPropFanout; // propagate fanouts |
| int fVerbose; // verbose flag |
| int nRefId; // refinement ID |
| // traversing data |
| Vec_Int_t * vObjs; // internal objects used in value propagation |
| // filtering of selected objects |
| Vec_Str_t * vCounts; // fanin counters |
| Vec_Int_t * vFanins; // fanins |
| /* |
| // SAT solver |
| sat_solver2 * pSat; // incremental SAT solver |
| Vec_Int_t * vSatVars; // SAT variables |
| Vec_Int_t * vSat2Ids; // mapping of SAT variables into object IDs |
| Vec_Int_t * vIsopMem; // memory for ISOP computation |
| */ |
| // internal data |
| Rnm_Obj_t * pObjs; // refinement objects |
| int nObjs; // the number of used objects |
| int nObjsAlloc; // the number of allocated objects |
| int nObjsFrame; // the number of used objects in each frame |
| int nCalls; // total number of calls |
| int nRefines; // total refined objects |
| int nVisited; // visited during justification |
| // statistics |
| abctime timeFwd; // forward propagation |
| abctime timeBwd; // backward propagation |
| abctime timeVer; // ternary simulation |
| abctime timeTotal; // other time |
| }; |
| |
| // accessing the refinement object |
| static inline Rnm_Obj_t * Rnm_ManObj( Rnm_Man_t * p, Gia_Obj_t * pObj, int f ) |
| { |
| assert( Gia_ObjIsConst0(pObj) || pObj->Value ); |
| assert( (int)pObj->Value < p->nObjsFrame ); |
| assert( f >= 0 && f <= p->pCex->iFrame ); |
| return p->pObjs + f * p->nObjsFrame + pObj->Value; |
| } |
| static inline void Rnm_ManSetRefId( Rnm_Man_t * p, int RefId ) { p->nRefId = RefId; } |
| |
| static inline int Rnm_ObjCount( Rnm_Man_t * p, Gia_Obj_t * pObj ) { return Vec_StrEntry( p->vCounts, Gia_ObjId(p->pGia, pObj) ); } |
| static inline void Rnm_ObjSetCount( Rnm_Man_t * p, Gia_Obj_t * pObj, int c ) { Vec_StrWriteEntry( p->vCounts, Gia_ObjId(p->pGia, pObj), (char)c ); } |
| static inline int Rnm_ObjAddToCount( Rnm_Man_t * p, Gia_Obj_t * pObj ) { int c = Rnm_ObjCount(p, pObj); if ( c < 16 ) Rnm_ObjSetCount(p, pObj, c+1); return c; } |
| |
| static inline int Rnm_ObjIsJust( Rnm_Man_t * p, Gia_Obj_t * pObj ) { return Gia_ObjIsConst0(pObj) || (pObj->Value && Rnm_ManObj(p, pObj, 0)->fVisitJ); } |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /*=== absRef.c ===========================================================*/ |
| extern Rnm_Man_t * Rnm_ManStart( Gia_Man_t * pGia ); |
| extern void Rnm_ManStop( Rnm_Man_t * p, int fProfile ); |
| extern double Rnm_ManMemoryUsage( Rnm_Man_t * p ); |
| extern Vec_Int_t * Rnm_ManRefine( Rnm_Man_t * p, Abc_Cex_t * pCex, Vec_Int_t * vMap, int fPropFanout, int fNewRefinement, int fVerbose ); |
| /*=== absRefSelected.c ===========================================================*/ |
| extern Vec_Int_t * Rnm_ManFilterSelected( Rnm_Man_t * p, Vec_Int_t * vOldPPis ); |
| extern Vec_Int_t * Rnm_ManFilterSelectedNew( Rnm_Man_t * p, Vec_Int_t * vOldPPis ); |
| |
| |
| ABC_NAMESPACE_HEADER_END |
| |
| #endif |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |