bmc.h 8.99 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/**CFile****************************************************************

  FileName    [bmc.h]

  SystemName  [ABC: Logic synthesis and verification system.]

  PackageName [SAT-based bounded model checking.]

  Synopsis    [External declarations.]

  Author      [Alan Mishchenko]
  
  Affiliation [UC Berkeley]

  Date        [Ver. 1.0. Started - June 20, 2005.]

  Revision    [$Id: bmc.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $]

***********************************************************************/
 
#ifndef ABC___sat_bmc_BMC_h
#define ABC___sat_bmc_BMC_h


////////////////////////////////////////////////////////////////////////
///                          INCLUDES                                ///
////////////////////////////////////////////////////////////////////////

#include "aig/saig/saig.h"
30
#include "aig/gia/gia.h"
31 32 33 34 35 36 37 38 39 40

////////////////////////////////////////////////////////////////////////
///                         PARAMETERS                               ///
////////////////////////////////////////////////////////////////////////

ABC_NAMESPACE_HEADER_START

////////////////////////////////////////////////////////////////////////
///                         BASIC TYPES                              ///
////////////////////////////////////////////////////////////////////////
41 42 43 44

// unrolling manager 
typedef struct Unr_Man_t_ Unr_Man_t;

45 46 47 48 49 50 51 52 53
typedef struct Saig_ParBmc_t_ Saig_ParBmc_t;
struct Saig_ParBmc_t_
{
    int         nStart;         // starting timeframe
    int         nFramesMax;     // maximum number of timeframes 
    int         nConfLimit;     // maximum number of conflicts at a node
    int         nConfLimitJump; // maximum number of conflicts after jumping
    int         nFramesJump;    // the number of tiemframes to jump
    int         nTimeOut;       // approximate timeout in seconds
54
    int         nTimeOutGap;    // approximate timeout in seconds since the last change
55
    int         nTimeOutOne;    // timeout per output in multi-output solving
56 57
    int         nPisAbstract;   // the number of PIs to abstract
    int         fSolveAll;      // does not stop at the first SAT output
58
    int         fStoreCex;      // enable storing CEXes in the MO mode
59
    int         fUseBridge;     // use bridge interface
60 61 62
    int         fDropSatOuts;   // replace sat outputs by constant 0
    int         nFfToAddMax;    // max number of flops to add during CBA
    int         fSkipRand;      // skip random decisions
63
    int         fNoRestarts;    // disables periodic restarts
64 65 66
    int         nLearnedStart;  // starting learned clause limit
    int         nLearnedDelta;  // delta of learned clause limit
    int         nLearnedPerce;  // ratio of learned clause limit
67
    int         fVerbose;       // verbose 
68
    int         fNotVerbose;    // skip line-by-line print-out 
69
    char *      pLogFileName;   // log file name
70
    int         fSilent;        // completely silent
71 72
    int         iFrame;         // explored up to this frame
    int         nFailOuts;      // the number of failed outputs
73
    int         nDropOuts;      // the number of dropped outputs
74
    abctime     timeLastSolved; // the time when the last output was solved
75
    int(*pFuncOnFail)(int,Abc_Cex_t*); // called for a failed output in MO mode
76 77
};

78
 
79 80
typedef struct Bmc_AndPar_t_ Bmc_AndPar_t;
struct Bmc_AndPar_t_
81 82 83
{
    int         nStart;         // starting timeframe
    int         nFramesMax;     // maximum number of timeframes 
84
    int         nFramesAdd;     // the number of additional frames
85
    int         nConfLimit;     // maximum number of conflicts at a node
Alan Mishchenko committed
86
    int         nTimeOut;       // timeout in seconds
87
    int         nLutSize;       // LUT size for cut computation
88
    int         fLoadCnf;       // dynamic CNF loading
89
    int         fDumpFrames;    // dump unrolled timeframes
90
    int         fUseSynth;      // use synthesis
Alan Mishchenko committed
91
    int         fUseOldCnf;     // use old CNF construction
92
    int         fVerbose;       // verbose 
93
    int         fVeryVerbose;   // very verbose 
94 95 96 97 98
    int         fNotVerbose;    // skip line-by-line print-out 
    int         iFrame;         // explored up to this frame
    int         nFailOuts;      // the number of failed outputs
    int         nDropOuts;      // the number of dropped outputs
};
99 100 101 102 103 104 105 106 107 108 109 110
  
typedef struct Bmc_BCorePar_t_ Bmc_BCorePar_t;
struct Bmc_BCorePar_t_
{
    int         iFrame;         // timeframe
    int         iOutput;        // property output
    int         nTimeOut;       // timeout in seconds
    char *      pFilePivots;    // file name with AIG IDs of pivot objects
    char *      pFileProof;     // file name to write the resulting proof
    int         fVerbose;       // verbose output
};

111 112 113 114 115 116
typedef struct Bmc_MulPar_t_ Bmc_MulPar_t;
struct Bmc_MulPar_t_
{
    int         TimeOutGlo;
    int         TimeOutLoc;
    int         TimeOutInc;
117
    int         TimeOutGap;
118
    int         TimePerOut;
119 120 121 122 123
    int         fUseSyn;
    int         fDumpFinal;
    int         fVerbose;
    int         fVeryVerbose;
};
124

125 126 127 128 129 130 131 132 133
typedef struct Bmc_ParFf_t_ Bmc_ParFf_t;
struct Bmc_ParFf_t_
{
    char *     pFileName;
    char *     pFormStr;
    int        Algo;
    int        fComplVars;
    int        fStartPats;
    int        nTimeOut;
134
    int        nIterCheck;
135 136
    int        nCardConstr;
    int        fNonStrict;
137
    int        fBasic;
138
    int        fFfOnly;
139
    int        fDump;
140
    int        fDumpDelay;
141
    int        fDumpUntest;
142
    int        fDumpNewFaults;
143 144 145
    int        fVerbose;
};

146 147 148 149 150 151 152 153
////////////////////////////////////////////////////////////////////////
///                      MACRO DEFINITIONS                           ///
////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////
///                    FUNCTION DECLARATIONS                         ///
////////////////////////////////////////////////////////////////////////

154 155
/*=== bmcBCore.c ==========================================================*/
extern void              Bmc_ManBCorePerform( Gia_Man_t * pGia, Bmc_BCorePar_t * pPars );
156
/*=== bmcBmc.c ==========================================================*/
157
extern int               Saig_ManBmcSimple( Aig_Man_t * pAig, int nFrames, int nSizeMax, int nBTLimit, int fRewrite, int fVerbose, int * piFrame, int nCofFanLit );
158
/*=== bmcBmc2.c ==========================================================*/
159
extern int               Saig_BmcPerform( Aig_Man_t * pAig, int nStart, int nFramesMax, int nNodesMax, int nTimeOut, int nConfMaxOne, int nConfMaxAll, int fVerbose, int fVerbOverwrite, int * piFrames, int fSilent );
160
/*=== bmcBmc3.c ==========================================================*/
161 162
extern void              Saig_ParBmcSetDefaultParams( Saig_ParBmc_t * p );
extern int               Saig_ManBmcScalable( Aig_Man_t * pAig, Saig_ParBmc_t * pPars );
163 164
/*=== bmcBmcAnd.c ==========================================================*/
extern int               Gia_ManBmcPerform( Gia_Man_t * p, Bmc_AndPar_t * pPars );
165
/*=== bmcCexCare.c ==========================================================*/
166
extern Abc_Cex_t *       Bmc_CexCareExtendToObjects( Gia_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexCare );
167 168
extern Abc_Cex_t *       Bmc_CexCareMinimize( Aig_Man_t * p, Abc_Cex_t * pCex, int fCheck, int fVerbose );
extern void              Bmc_CexCareVerify( Aig_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexMin, int fVerbose );
169
/*=== bmcCexCut.c ==========================================================*/
170 171
extern Gia_Man_t *       Bmc_GiaTargetStates( Gia_Man_t * p, Abc_Cex_t * pCex, int iFrBeg, int iFrEnd, int fCombOnly, int fGenAll, int fAllFrames, int fVerbose );
extern Aig_Man_t *       Bmc_AigTargetStates( Aig_Man_t * p, Abc_Cex_t * pCex, int iFrBeg, int iFrEnd, int fCombOnly, int fGenAll, int fAllFrames, int fVerbose );
172
/*=== bmcCexMin.c ==========================================================*/
173
extern Abc_Cex_t *       Saig_ManCexMinPerform( Aig_Man_t * pAig, Abc_Cex_t * pCex );
174 175 176
/*=== bmcCexTool.c ==========================================================*/
extern void              Bmc_CexPrint( Abc_Cex_t * pCex, int nInputs, int fVerbose );
extern int               Bmc_CexVerify( Gia_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexCare );
177
/*=== bmcICheck.c ==========================================================*/
178
extern void              Bmc_PerformICheck( Gia_Man_t * p, int nFramesMax, int nTimeOut, int fEmpty, int fVerbose );
179
extern Vec_Int_t *       Bmc_PerformISearch( Gia_Man_t * p, int nFramesMax, int nTimeOut, int fReverse, int fBackTopo, int fDump, int fVerbose );
180 181 182 183
/*=== bmcUnroll.c ==========================================================*/
extern Unr_Man_t *       Unr_ManUnrollStart( Gia_Man_t * pGia, int fVerbose );
extern Gia_Man_t *       Unr_ManUnrollFrame( Unr_Man_t * p, int f );
extern void              Unr_ManFree( Unr_Man_t * p );
184 185 186 187 188 189 190 191 192 193 194 195


ABC_NAMESPACE_HEADER_END



#endif

////////////////////////////////////////////////////////////////////////
///                       END OF FILE                                ///
////////////////////////////////////////////////////////////////////////