summaryrefslogtreecommitdiffstats
path: root/src/proof/int2/int2Int.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/proof/int2/int2Int.h')
-rw-r--r--src/proof/int2/int2Int.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/proof/int2/int2Int.h b/src/proof/int2/int2Int.h
new file mode 100644
index 00000000..837a2bca
--- /dev/null
+++ b/src/proof/int2/int2Int.h
@@ -0,0 +1,164 @@
+/**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 ///
+////////////////////////////////////////////////////////////////////////
+