| /**CFile**************************************************************** |
| |
| FileName [cec.h] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [Combinational equivalence checking.] |
| |
| Synopsis [External declarations.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - June 20, 2005.] |
| |
| Revision [$Id: cec.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #ifndef ABC__aig__cec__cec_h |
| #define ABC__aig__cec__cec_h |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// INCLUDES /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// PARAMETERS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| |
| ABC_NAMESPACE_HEADER_START |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// BASIC TYPES /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| // dynamic SAT parameters |
| typedef struct Cec_ParSat_t_ Cec_ParSat_t; |
| struct Cec_ParSat_t_ |
| { |
| int nBTLimit; // conflict limit at a node |
| int nSatVarMax; // the max number of SAT variables |
| int nCallsRecycle; // calls to perform before recycling SAT solver |
| int fNonChrono; // use non-chronological backtracling (for circuit SAT only) |
| int fPolarFlip; // flops polarity of variables |
| int fCheckMiter; // the circuit is the miter |
| // int fFirstStop; // stop on the first sat output |
| int fLearnCls; // perform clause learning |
| int fVerbose; // verbose stats |
| }; |
| |
| // simulation parameters |
| typedef struct Cec_ParSim_t_ Cec_ParSim_t; |
| struct Cec_ParSim_t_ |
| { |
| int nWords; // the number of simulation words |
| int nFrames; // the number of simulation frames |
| int nRounds; // the number of simulation rounds |
| int nNonRefines; // the max number of rounds without refinement |
| int TimeLimit; // the runtime limit in seconds |
| int fDualOut; // miter with separate outputs |
| int fCheckMiter; // the circuit is the miter |
| // int fFirstStop; // stop on the first sat output |
| int fSeqSimulate; // performs sequential simulation |
| int fLatchCorr; // consider only latch outputs |
| int fConstCorr; // consider only constants |
| int fVeryVerbose; // verbose stats |
| int fVerbose; // verbose stats |
| }; |
| |
| // semiformal parameters |
| typedef struct Cec_ParSmf_t_ Cec_ParSmf_t; |
| struct Cec_ParSmf_t_ |
| { |
| int nWords; // the number of simulation words |
| int nRounds; // the number of simulation rounds |
| int nFrames; // the max number of time frames |
| int nNonRefines; // the max number of rounds without refinement |
| int nMinOutputs; // the min outputs to accumulate |
| int nBTLimit; // conflict limit at a node |
| int TimeLimit; // the runtime limit in seconds |
| int fDualOut; // miter with separate outputs |
| int fCheckMiter; // the circuit is the miter |
| // int fFirstStop; // stop on the first sat output |
| int fVerbose; // verbose stats |
| }; |
| |
| // combinational SAT sweeping parameters |
| typedef struct Cec_ParFra_t_ Cec_ParFra_t; |
| struct Cec_ParFra_t_ |
| { |
| int nWords; // the number of simulation words |
| int nRounds; // the number of simulation rounds |
| int nItersMax; // the maximum number of iterations of SAT sweeping |
| int nBTLimit; // conflict limit at a node |
| int TimeLimit; // the runtime limit in seconds |
| int nLevelMax; // restriction on the level nodes to be swept |
| int nDepthMax; // the depth in terms of steps of speculative reduction |
| int fRewriting; // enables AIG rewriting |
| int fCheckMiter; // the circuit is the miter |
| // int fFirstStop; // stop on the first sat output |
| int fDualOut; // miter with separate outputs |
| int fColorDiff; // miter with separate outputs |
| int fSatSweeping; // enable SAT sweeping |
| int fRunCSat; // enable another solver |
| int fUseCones; // use cones |
| int fUseOrigIds; // enable recording of original IDs |
| int fVeryVerbose; // verbose stats |
| int fVerbose; // verbose stats |
| int iOutFail; // the failed output |
| }; |
| |
| // combinational equivalence checking parameters |
| typedef struct Cec_ParCec_t_ Cec_ParCec_t; |
| struct Cec_ParCec_t_ |
| { |
| int nBTLimit; // conflict limit at a node |
| int TimeLimit; // the runtime limit in seconds |
| // int fFirstStop; // stop on the first sat output |
| int fUseSmartCnf; // use smart CNF computation |
| int fRewriting; // enables AIG rewriting |
| int fNaive; // performs naive SAT-based checking |
| int fSilent; // print no messages |
| int fVeryVerbose; // verbose stats |
| int fVerbose; // verbose stats |
| int iOutFail; // the number of failed output |
| }; |
| |
| // sequential register correspodence parameters |
| typedef struct Cec_ParCor_t_ Cec_ParCor_t; |
| struct Cec_ParCor_t_ |
| { |
| int nWords; // the number of simulation words |
| int nRounds; // the number of simulation rounds |
| int nFrames; // the number of time frames |
| int nPrefix; // the number of time frames in the prefix |
| int nBTLimit; // conflict limit at a node |
| int nLevelMax; // (scorr only) the max number of levels |
| int nStepsMax; // (scorr only) the max number of induction steps |
| int fLatchCorr; // consider only latch outputs |
| int fConstCorr; // consider only constants |
| int fUseRings; // use rings |
| int fMakeChoices; // use equilvaences as choices |
| int fUseCSat; // use circuit-based solver |
| // int fFirstStop; // stop on the first sat output |
| int fUseSmartCnf; // use smart CNF computation |
| int fStopWhenGone; // quit when PO is not a candidate constant |
| int fVerboseFlops; // verbose stats |
| int fVeryVerbose; // verbose stats |
| int fVerbose; // verbose stats |
| // callback |
| void * pData; |
| void * pFunc; |
| }; |
| |
| // sequential register correspodence parameters |
| typedef struct Cec_ParChc_t_ Cec_ParChc_t; |
| struct Cec_ParChc_t_ |
| { |
| int nWords; // the number of simulation words |
| int nRounds; // the number of simulation rounds |
| int nBTLimit; // conflict limit at a node |
| int fUseRings; // use rings |
| int fUseCSat; // use circuit-based solver |
| int fVeryVerbose; // verbose stats |
| int fVerbose; // verbose stats |
| }; |
| |
| // sequential synthesis parameters |
| typedef struct Cec_ParSeq_t_ Cec_ParSeq_t; |
| struct Cec_ParSeq_t_ |
| { |
| int fUseLcorr; // enables latch correspondence |
| int fUseScorr; // enables signal correspondence |
| int nBTLimit; // (scorr/lcorr) conflict limit at a node |
| int nFrames; // (scorr/lcorr) the number of timeframes |
| int nLevelMax; // (scorr only) the max number of levels |
| int fConsts; // (scl only) merging constants |
| int fEquivs; // (scl only) merging equivalences |
| int fUseMiniSat; // enables MiniSat in lcorr/scorr |
| int nMinDomSize; // the size of minimum clock domain |
| int fVeryVerbose; // verbose stats |
| int fVerbose; // verbose stats |
| }; |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// MACRO DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /*=== cecCec.c ==========================================================*/ |
| extern int Cec_ManVerify( Gia_Man_t * p, Cec_ParCec_t * pPars ); |
| extern int Cec_ManVerifyTwo( Gia_Man_t * p0, Gia_Man_t * p1, int fVerbose ); |
| extern int Cec_ManVerifySimple( Gia_Man_t * p ); |
| /*=== cecChoice.c ==========================================================*/ |
| extern Gia_Man_t * Cec_ManChoiceComputation( Gia_Man_t * pAig, Cec_ParChc_t * pPars ); |
| /*=== cecCorr.c ==========================================================*/ |
| extern int Cec_ManLSCorrespondenceClasses( Gia_Man_t * pAig, Cec_ParCor_t * pPars ); |
| extern Gia_Man_t * Cec_ManLSCorrespondence( Gia_Man_t * pAig, Cec_ParCor_t * pPars ); |
| /*=== cecCore.c ==========================================================*/ |
| extern void Cec_ManSatSetDefaultParams( Cec_ParSat_t * p ); |
| extern void Cec_ManSimSetDefaultParams( Cec_ParSim_t * p ); |
| extern void Cec_ManSmfSetDefaultParams( Cec_ParSmf_t * p ); |
| extern void Cec_ManFraSetDefaultParams( Cec_ParFra_t * p ); |
| extern void Cec_ManCecSetDefaultParams( Cec_ParCec_t * p ); |
| extern void Cec_ManCorSetDefaultParams( Cec_ParCor_t * p ); |
| extern void Cec_ManChcSetDefaultParams( Cec_ParChc_t * p ); |
| extern Gia_Man_t * Cec_ManSatSweeping( Gia_Man_t * pAig, Cec_ParFra_t * pPars, int fSilent ); |
| extern Gia_Man_t * Cec_ManSatSolving( Gia_Man_t * pAig, Cec_ParSat_t * pPars ); |
| extern void Cec_ManSimulation( Gia_Man_t * pAig, Cec_ParSim_t * pPars ); |
| /*=== cecSeq.c ==========================================================*/ |
| extern int Cec_ManSeqResimulateCounter( Gia_Man_t * pAig, Cec_ParSim_t * pPars, Abc_Cex_t * pCex ); |
| extern int Cec_ManSeqSemiformal( Gia_Man_t * pAig, Cec_ParSmf_t * pPars ); |
| extern int Cec_ManCheckNonTrivialCands( Gia_Man_t * pAig ); |
| /*=== cecSynth.c ==========================================================*/ |
| extern int Cec_SeqReadMinDomSize( Cec_ParSeq_t * p ); |
| extern int Cec_SeqReadVerbose( Cec_ParSeq_t * p ); |
| extern void Cec_SeqSynthesisSetDefaultParams( Cec_ParSeq_t * pPars ); |
| extern int Cec_SequentialSynthesisPart( Gia_Man_t * p, Cec_ParSeq_t * pPars ); |
| |
| |
| |
| ABC_NAMESPACE_HEADER_END |
| |
| |
| |
| #endif |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |