| /**CFile**************************************************************** |
| |
| FileName [int2Int.h] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [Interpolation engine.] |
| |
| Synopsis [Internal declarations.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - Dec 1, 2013.] |
| |
| Revision [$Id: int2Int.h,v 1.00 2013/12/01 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #ifndef ABC__Gia__int2__intInt_h |
| #define ABC__Gia__int2__intInt_h |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// INCLUDES /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| #include "aig/gia/gia.h" |
| #include "sat/bsat/satSolver.h" |
| #include "sat/cnf/cnf.h" |
| #include "int2.h" |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// PARAMETERS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| ABC_NAMESPACE_HEADER_START |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// BASIC TYPES /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| // interpolation manager |
| typedef struct Int2_Man_t_ Int2_Man_t; |
| struct Int2_Man_t_ |
| { |
| // parameters |
| Int2_ManPars_t * pPars; // parameters |
| // GIA managers |
| Gia_Man_t * pGia; // original manager |
| Gia_Man_t * pGiaPref; // prefix manager |
| Gia_Man_t * pGiaSuff; // suffix manager |
| // subset of the manager |
| Vec_Int_t * vSuffCis; // suffix CIs |
| Vec_Int_t * vSuffCos; // suffix COs |
| Vec_Int_t * vPrefCos; // suffix POs |
| Vec_Int_t * vStack; // temporary stack |
| // preimages |
| Vec_Int_t * vImageOne; // latest preimage |
| Vec_Int_t * vImagesAll; // cumulative preimage |
| // variable maps |
| Vec_Ptr_t * vMapFrames; // mapping of GIA IDs into frame IDs |
| Vec_Int_t * vMapPref; // mapping of flop inputs into SAT variables |
| Vec_Int_t * vMapSuff; // mapping of flop outputs into SAT variables |
| // initial minimization |
| Vec_Int_t * vAssign; // assignment of PIs in pGiaSuff |
| Vec_Int_t * vPrio; // priority of PIs in pGiaSuff |
| // SAT solving |
| sat_solver * pSatPref; // prefix solver |
| sat_solver * pSatSuff; // suffix solver |
| // runtime |
| abctime timeSatPref; |
| abctime timeSatSuff; |
| abctime timeOther; |
| abctime timeTotal; |
| }; |
| |
| static inline Int2_Man_t * Int2_ManCreate( Gia_Man_t * pGia, Int2_ManPars_t * pPars ) |
| { |
| Int2_Man_t * p; |
| p = ABC_CALLOC( Int2_Man_t, 1 ); |
| p->pPars = pPars; |
| p->pGia = pGia; |
| p->pGiaPref = Gia_ManStart( 10000 ); |
| // perform structural hashing |
| Gia_ManHashAlloc( pFrames ); |
| // subset of the manager |
| p->vSuffCis = Vec_IntAlloc( Gia_ManCiNum(pGia) ); |
| p->vSuffCos = Vec_IntAlloc( Gia_ManCoNum(pGia) ); |
| p->vPrefCos = Vec_IntAlloc( Gia_ManCoNum(pGia) ); |
| p->vStack = Vec_IntAlloc( 10000 ); |
| // preimages |
| p->vImageOne = Vec_IntAlloc( 1000 ); |
| p->vImagesAll = Vec_IntAlloc( 1000 ); |
| // variable maps |
| p->vMapFrames = Vec_PtrAlloc( 100 ); |
| p->vMapPref = Vec_IntAlloc( Gia_ManRegNum(pGia) ); |
| p->vMapSuff = Vec_IntAlloc( Gia_ManRegNum(pGia) ); |
| // initial minimization |
| p->vAssign = Vec_IntAlloc( Gia_ManCiNum(pGia) ); |
| p->vPrio = Vec_IntAlloc( Gia_ManCiNum(pGia) ); |
| return p; |
| } |
| static inline void Int2_ManStop( Int2_Man_t * p ) |
| { |
| // GIA managers |
| Gia_ManStopP( &p->pGiaPref ); |
| Gia_ManStopP( &p->pGiaSuff ); |
| // subset of the manager |
| Vec_IntFreeP( &p->vSuffCis ); |
| Vec_IntFreeP( &p->vSuffCos ); |
| Vec_IntFreeP( &p->vPrefCos ); |
| Vec_IntFreeP( &p->vStack ); |
| // preimages |
| Vec_IntFreeP( &p->vImageOne ); |
| Vec_IntFreeP( &p->vImagesAll ); |
| // variable maps |
| Vec_VecFree( (Vec_Vec_t *)p->vMapFrames ); |
| Vec_IntFreeP( &p->vMapPref ); |
| Vec_IntFreeP( &p->vMapSuff ); |
| // initial minimization |
| Vec_IntFreeP( &p->vAssign ); |
| Vec_IntFreeP( &p->vPrio ); |
| // SAT solving |
| if ( p->pSatPref ) |
| sat_solver_delete( p->pSatPref ); |
| if ( p->timeSatSuff ) |
| sat_solver_delete( p->pSatSuff ); |
| ABC_FREE( p ); |
| } |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// MACRO DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /*=== int2Bmc.c =============================================================*/ |
| extern int Int2_ManCheckInit( Gia_Man_t * p ); |
| extern Gia_Man_t * Int2_ManDupInit( Gia_Man_t * p, int fVerbose ); |
| extern sat_solver * Int2_ManSetupBmcSolver( Gia_Man_t * p, int nFrames ); |
| extern void Int2_ManCreateFrames( Int2_Man_t * p, int iFrame, Vec_Int_t * vPrefCos ); |
| extern int Int2_ManCheckBmc( Int2_Man_t * p, Vec_Int_t * vCube ); |
| |
| /*=== int2Refine.c =============================================================*/ |
| extern Vec_Int_t * Int2_ManRefineCube( Gia_Man_t * p, Vec_Int_t * vAssign, Vec_Int_t * vPrio ); |
| |
| /*=== int2Util.c ============================================================*/ |
| extern Gia_Man_t * Int2_ManProbToGia( Gia_Man_t * p, Vec_Int_t * vSop ); |
| |
| |
| ABC_NAMESPACE_HEADER_END |
| |
| |
| |
| #endif |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |