ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
bmc.h
Go to the documentation of this file.
1
20
21#ifndef ABC___sat_bmc_BMC_h
22#define ABC___sat_bmc_BMC_h
23
24
28
29#include "aig/saig/saig.h"
30#include "aig/gia/gia.h"
31
35
37
38//#define USE_NODE_ORDER 1
39
43
44
45// exact synthesis parameters
46
77
78static inline void Bmc_EsParSetDefault( Bmc_EsPar_t * pPars )
79{
80 memset( pPars, 0, sizeof(Bmc_EsPar_t) );
81 pPars->nVars = 0;
82 pPars->nNodes = 0;
83 pPars->nLutSize = 2;
84 pPars->nMajSupp = 0;
85 pPars->fMajority = 0;
86 pPars->fUseIncr = 0;
87 pPars->fOnlyAnd = 0;
88 pPars->fDynConstr = 0;
89 pPars->fDumpCnf = 0;
90 pPars->fGlucose = 0;
91 pPars->fOrderNodes = 0;
92 pPars->fEnumSols = 0;
93 pPars->fFewerVars = 0;
94 pPars->fQuadrEnc = 0;
95 pPars->fUniqFans = 0;
96 pPars->fLutCascade = 0;
97 pPars->RuntimeLim = 0;
98 pPars->fVerbose = 0;
99}
100
101
102// unrolling manager
103typedef struct Unr_Man_t_ Unr_Man_t;
104
107{
108 int nStart; // starting timeframe
109 int nFramesMax; // maximum number of timeframes
110 int nConfLimit; // maximum number of conflicts at a node
111 int nConfLimitJump; // maximum number of conflicts after jumping
112 int nFramesJump; // the number of tiemframes to jump
113 int nTimeOut; // approximate timeout in seconds
114 int nTimeOutGap; // approximate timeout in seconds since the last change
115 int nTimeOutOne; // timeout per output in multi-output solving
116 int nPisAbstract; // the number of PIs to abstract
117 int fSolveAll; // does not stop at the first SAT output
118 int fStoreCex; // enable storing CEXes in the MO mode
119 int fUseBridge; // use bridge interface
120 int fDropSatOuts; // replace sat outputs by constant 0
121 int nFfToAddMax; // max number of flops to add during CBA
122 int fSkipRand; // skip random decisions
123 int fNoRestarts; // disables periodic restarts
124 int fUseSatoko; // enables using Satoko
125 int fUseGlucose; // enables using Glucose 3.0
126 int nLearnedStart; // starting learned clause limit
127 int nLearnedDelta; // delta of learned clause limit
128 int nLearnedPerce; // ratio of learned clause limit
129 int fVerbose; // verbose
130 int fNotVerbose; // skip line-by-line print-out
131 char * pLogFileName; // log file name
132 int fSilent; // completely silent
133 int iFrame; // explored up to this frame
134 int nFailOuts; // the number of failed outputs
135 int nDropOuts; // the number of dropped outputs
136 abctime timeLastSolved; // the time when the last output was solved
137 int(*pFuncOnFail)(int,Abc_Cex_t*); // called for a failed output in MO mode
138 int RunId; // BMC id in this run
139 int(*pFuncStop)(int); // callback to terminate
140};
141
142
145{
146 int nStart; // starting timeframe
147 int nFramesMax; // maximum number of timeframes
148 int nFramesAdd; // the number of additional frames
149 int nConfLimit; // maximum number of conflicts at a node
150 int nTimeOut; // timeout in seconds
151 int nLutSize; // LUT size for cut computation
152 int nProcs; // the number of parallel solvers
153 int fLoadCnf; // dynamic CNF loading
154 int fDumpFrames; // dump unrolled timeframes
155 int fUseSynth; // use synthesis
156 int fUseOldCnf; // use old CNF construction
157 int fUseGlucose; // use Glucose 3.0 as the default solver
158 int fUseEliminate; // use variable elimination
159 int fVerbose; // verbose
160 int fVeryVerbose; // very verbose
161 int fNotVerbose; // skip line-by-line print-out
162 int iFrame; // explored up to this frame
163 int nFailOuts; // the number of failed outputs
164 int nDropOuts; // the number of dropped outputs
165
166 void (*pFuncOnFrameDone)(int, int, int); // callback on each frame status (frame, po, statuss)
167};
168
171{
172 int iFrame; // timeframe
173 int iOutput; // property output
174 int nTimeOut; // timeout in seconds
175 char * pFilePivots; // file name with AIG IDs of pivot objects
176 char * pFileProof; // file name to write the resulting proof
177 int fVerbose; // verbose output
178};
179
193
215
219
223
224/*=== bmcBCore.c ==========================================================*/
225extern void Bmc_ManBCorePerform( Gia_Man_t * pGia, Bmc_BCorePar_t * pPars );
226/*=== bmcBmc.c ==========================================================*/
227extern int Saig_ManBmcSimple( Aig_Man_t * pAig, int nFrames, int nSizeMax, int nBTLimit, int fRewrite, int fVerbose, int * piFrame, int nCofFanLit, int fUseSatoko );
228/*=== bmcBmc2.c ==========================================================*/
229extern 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, int fUseSatoko );
230/*=== bmcBmc3.c ==========================================================*/
232extern int Saig_ManBmcScalable( Aig_Man_t * pAig, Saig_ParBmc_t * pPars );
233/*=== bmcBmcAnd.c ==========================================================*/
234extern int Gia_ManBmcPerform( Gia_Man_t * p, Bmc_AndPar_t * pPars );
235/*=== bmcCexCare.c ==========================================================*/
236extern Abc_Cex_t * Bmc_CexCareExtendToObjects( Gia_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexCare );
237extern Abc_Cex_t * Bmc_CexCareMinimize( Aig_Man_t * p, int nRealPis, Abc_Cex_t * pCex, int nTryCexes, int fCheck, int fVerbose );
238extern Abc_Cex_t * Bmc_CexCareMinimizeAig( Gia_Man_t * p, int nRealPis, Abc_Cex_t * pCex, int nTryCexes, int fCheck, int fVerbose );
239extern int Bmc_CexCareVerify( Aig_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexMin, int fVerbose );
240extern int Bmc_CexCareVerifyAnyPo( Aig_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexMin, int fVerbose );
241extern Abc_Cex_t * Bmc_CexCareSatBasedMinimize( Aig_Man_t * p, int nRealPis, Abc_Cex_t * pCex, int fHighEffort, int fCheck, int fVerbose );
242extern Abc_Cex_t * Bmc_CexCareSatBasedMinimizeAig( Gia_Man_t * p, Abc_Cex_t * pCex, int fHighEffort, int fVerbose );
243/*=== bmcCexCut.c ==========================================================*/
244extern 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 );
245extern 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 );
246/*=== bmcCexMin.c ==========================================================*/
247extern Abc_Cex_t * Saig_ManCexMinPerform( Aig_Man_t * pAig, Abc_Cex_t * pCex );
248/*=== bmcCexTool.c ==========================================================*/
249extern void Bmc_CexPrint( Abc_Cex_t * pCex, int nRealPis, int fVerbose );
250extern int Bmc_CexVerify( Gia_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexCare );
251extern int Bmc_CexVerifyAnyPo( Gia_Man_t * p, Abc_Cex_t * pCex, Abc_Cex_t * pCexCare );
252/*=== bmcICheck.c ==========================================================*/
253extern void Bmc_PerformICheck( Gia_Man_t * p, int nFramesMax, int nTimeOut, int fEmpty, int fVerbose );
254extern Vec_Int_t * Bmc_PerformISearch( Gia_Man_t * p, int nFramesMax, int nTimeOut, int fReverse, int fBackTopo, int fDump, int fVerbose );
255/*=== bmcUnroll.c ==========================================================*/
256extern Unr_Man_t * Unr_ManUnrollStart( Gia_Man_t * pGia, int fVerbose );
257extern Gia_Man_t * Unr_ManUnrollFrame( Unr_Man_t * p, int f );
258extern void Unr_ManFree( Unr_Man_t * p );
259
260
262
263
264
265#endif
266
270
ABC_INT64_T abctime
Definition abc_global.h:332
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
Definition aig.h:50
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Vec_Int_t * Bmc_PerformISearch(Gia_Man_t *p, int nFramesMax, int nTimeOut, int fReverse, int fBackTopo, int fDump, int fVerbose)
Definition bmcICheck.c:489
void Saig_ParBmcSetDefaultParams(Saig_ParBmc_t *p)
Definition bmcBmc3.c:1334
void Bmc_PerformICheck(Gia_Man_t *p, int nFramesMax, int nTimeOut, int fEmpty, int fVerbose)
Definition bmcICheck.c:196
void Bmc_ManBCorePerform(Gia_Man_t *pGia, Bmc_BCorePar_t *pPars)
MACRO DEFINITIONS ///.
Definition bmcBCore.c:196
struct Bmc_MulPar_t_ Bmc_MulPar_t
Definition bmc.h:180
void Bmc_CexPrint(Abc_Cex_t *pCex, int nRealPis, int fVerbose)
Gia_Man_t * Unr_ManUnrollFrame(Unr_Man_t *p, int f)
Definition bmcUnroll.c:379
Abc_Cex_t * Bmc_CexCareMinimize(Aig_Man_t *p, int nRealPis, Abc_Cex_t *pCex, int nTryCexes, int fCheck, int fVerbose)
Definition bmcCexCare.c:426
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, int fUseSatoko)
Definition bmcBmc2.c:811
int Bmc_CexCareVerifyAnyPo(Aig_Man_t *p, Abc_Cex_t *pCex, Abc_Cex_t *pCexMin, int fVerbose)
Definition bmcCexCare.c:497
Unr_Man_t * Unr_ManUnrollStart(Gia_Man_t *pGia, int fVerbose)
Definition bmcUnroll.c:368
Abc_Cex_t * Saig_ManCexMinPerform(Aig_Man_t *pAig, Abc_Cex_t *pCex)
Definition bmcCexMin1.c:547
void Unr_ManFree(Unr_Man_t *p)
Definition bmcUnroll.c:340
int Saig_ManBmcScalable(Aig_Man_t *pAig, Saig_ParBmc_t *pPars)
Definition bmcBmc3.c:1461
struct Bmc_AndPar_t_ Bmc_AndPar_t
Definition bmc.h:143
Abc_Cex_t * Bmc_CexCareMinimizeAig(Gia_Man_t *p, int nRealPis, Abc_Cex_t *pCex, int nTryCexes, int fCheck, int fVerbose)
Definition bmcCexCare.c:254
int Saig_ManBmcSimple(Aig_Man_t *pAig, int nFrames, int nSizeMax, int nBTLimit, int fRewrite, int fVerbose, int *piFrame, int nCofFanLit, int fUseSatoko)
Definition bmcBmc.c:207
struct Bmc_BCorePar_t_ Bmc_BCorePar_t
Definition bmc.h:169
Abc_Cex_t * Bmc_CexCareSatBasedMinimize(Aig_Man_t *p, int nRealPis, Abc_Cex_t *pCex, int fHighEffort, int fCheck, int fVerbose)
Definition bmcCexCare.c:433
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)
Definition bmcCexCut.c:461
struct Bmc_ParFf_t_ Bmc_ParFf_t
Definition bmc.h:194
typedefABC_NAMESPACE_HEADER_START struct Bmc_EsPar_t_ Bmc_EsPar_t
INCLUDES ///.
Definition bmc.h:47
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)
Definition bmcCexCut.c:513
Abc_Cex_t * Bmc_CexCareExtendToObjects(Gia_Man_t *p, Abc_Cex_t *pCex, Abc_Cex_t *pCexCare)
DECLARATIONS ///.
Definition bmcCexCare.c:46
int Bmc_CexVerifyAnyPo(Gia_Man_t *p, Abc_Cex_t *pCex, Abc_Cex_t *pCexCare)
int Bmc_CexVerify(Gia_Man_t *p, Abc_Cex_t *pCex, Abc_Cex_t *pCexCare)
Abc_Cex_t * Bmc_CexCareSatBasedMinimizeAig(Gia_Man_t *p, Abc_Cex_t *pCex, int fHighEffort, int fVerbose)
Definition giaCex.c:517
struct Saig_ParBmc_t_ Saig_ParBmc_t
Definition bmc.h:105
int Gia_ManBmcPerform(Gia_Man_t *p, Bmc_AndPar_t *pPars)
Definition bmcBmcAnd.c:1066
struct Unr_Man_t_ Unr_Man_t
Definition bmc.h:103
int Bmc_CexCareVerify(Aig_Man_t *p, Abc_Cex_t *pCex, Abc_Cex_t *pCexMin, int fVerbose)
Definition bmcCexCare.c:458
Cube * p
Definition exorList.c:222
struct Gia_Man_t_ Gia_Man_t
Definition gia.h:96
int fUseEliminate
Definition bmc.h:158
int fDumpFrames
Definition bmc.h:154
int nFramesAdd
Definition bmc.h:148
int fUseSynth
Definition bmc.h:155
int fVeryVerbose
Definition bmc.h:160
int nFramesMax
Definition bmc.h:147
int fNotVerbose
Definition bmc.h:161
int fLoadCnf
Definition bmc.h:153
int nTimeOut
Definition bmc.h:150
int fUseOldCnf
Definition bmc.h:156
int iFrame
Definition bmc.h:162
int nFailOuts
Definition bmc.h:163
void(* pFuncOnFrameDone)(int, int, int)
Definition bmc.h:166
int fUseGlucose
Definition bmc.h:157
int fVerbose
Definition bmc.h:159
int nProcs
Definition bmc.h:152
int nConfLimit
Definition bmc.h:149
int nDropOuts
Definition bmc.h:164
int nLutSize
Definition bmc.h:151
int nStart
Definition bmc.h:146
char * pFileProof
Definition bmc.h:176
int nTimeOut
Definition bmc.h:174
char * pFilePivots
Definition bmc.h:175
int fVerbose
Definition bmc.h:177
int iOutput
Definition bmc.h:173
int fFewerVars
Definition bmc.h:63
int nMajSupp
Definition bmc.h:53
int Seed
Definition bmc.h:71
int nVars
Definition bmc.h:50
int fUniqFans
Definition bmc.h:65
int fQuadrEnc
Definition bmc.h:64
int nNodes
Definition bmc.h:51
char * pGuide
Definition bmc.h:75
int nLutSize
Definition bmc.h:52
char * pSymStr
Definition bmc.h:74
int fOrderNodes
Definition bmc.h:61
int fCard
Definition bmc.h:60
int fDumpCnf
Definition bmc.h:58
char * pTtStr
Definition bmc.h:73
int nMintNum
Definition bmc.h:70
int fLutInFixed
Definition bmc.h:67
int fDynConstr
Definition bmc.h:57
int fGlucose
Definition bmc.h:59
int nRandFuncs
Definition bmc.h:69
int fOnlyAnd
Definition bmc.h:56
int fLutCascade
Definition bmc.h:66
int fUseIncr
Definition bmc.h:55
int RuntimeLim
Definition bmc.h:68
int fEnumSols
Definition bmc.h:62
int fMajority
Definition bmc.h:54
int fVerbose
Definition bmc.h:72
int fVeryVerbose
Definition bmc.h:191
int TimeOutGlo
Definition bmc.h:183
int fDumpFinal
Definition bmc.h:189
int fUseSyn
Definition bmc.h:188
int TimeOutLoc
Definition bmc.h:184
int TimeOutGap
Definition bmc.h:186
int fVerbose
Definition bmc.h:190
int TimePerOut
Definition bmc.h:187
int TimeOutInc
Definition bmc.h:185
int fDump
Definition bmc.h:209
int fStartPats
Definition bmc.h:201
int nCardConstr
Definition bmc.h:204
int nTimeOut
Definition bmc.h:202
int fCheckUntest
Definition bmc.h:208
int fBasic
Definition bmc.h:206
int fDumpUntest
Definition bmc.h:211
int Algo
Definition bmc.h:199
int nIterCheck
Definition bmc.h:203
int fNonStrict
Definition bmc.h:205
int fComplVars
Definition bmc.h:200
int fDumpNewFaults
Definition bmc.h:212
int fFfOnly
Definition bmc.h:207
int fDumpDelay
Definition bmc.h:210
int fVerbose
Definition bmc.h:213
char * pFormStr
Definition bmc.h:198
char * pFileName
Definition bmc.h:197
int nTimeOut
Definition bmc.h:113
int nTimeOutOne
Definition bmc.h:115
int fVerbose
Definition bmc.h:129
int nConfLimit
Definition bmc.h:110
int nLearnedStart
Definition bmc.h:126
int(* pFuncOnFail)(int, Abc_Cex_t *)
Definition bmc.h:137
int RunId
Definition bmc.h:138
int nLearnedDelta
Definition bmc.h:127
int fUseSatoko
Definition bmc.h:124
abctime timeLastSolved
Definition bmc.h:136
int fSolveAll
Definition bmc.h:117
int fStoreCex
Definition bmc.h:118
int fSkipRand
Definition bmc.h:122
int nTimeOutGap
Definition bmc.h:114
int nFfToAddMax
Definition bmc.h:121
int fNoRestarts
Definition bmc.h:123
int fUseBridge
Definition bmc.h:119
int(* pFuncStop)(int)
Definition bmc.h:139
int fNotVerbose
Definition bmc.h:130
int fUseGlucose
Definition bmc.h:125
int nFramesMax
Definition bmc.h:109
char * pLogFileName
Definition bmc.h:131
int nDropOuts
Definition bmc.h:135
int nPisAbstract
Definition bmc.h:116
int nFailOuts
Definition bmc.h:134
int fDropSatOuts
Definition bmc.h:120
int fSilent
Definition bmc.h:132
int iFrame
Definition bmc.h:133
int nFramesJump
Definition bmc.h:112
int nConfLimitJump
Definition bmc.h:111
int nStart
Definition bmc.h:108
int nLearnedPerce
Definition bmc.h:128
typedefABC_NAMESPACE_HEADER_START struct Abc_Cex_t_ Abc_Cex_t
INCLUDES ///.
Definition utilCex.h:39
char * memset()