| /**CFile**************************************************************** | |
| FileName [cecInt.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: cecInt.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $] | |
| ***********************************************************************/ | |
| #ifndef ABC__aig__cec__cecInt_h | |
| #define ABC__aig__cec__cecInt_h | |
| //////////////////////////////////////////////////////////////////////// | |
| /// INCLUDES /// | |
| //////////////////////////////////////////////////////////////////////// | |
| #include "sat/bsat/satSolver.h" | |
| #include "misc/bar/bar.h" | |
| #include "aig/gia/gia.h" | |
| #include "cec.h" | |
| //////////////////////////////////////////////////////////////////////// | |
| /// PARAMETERS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| ABC_NAMESPACE_HEADER_START | |
| //////////////////////////////////////////////////////////////////////// | |
| /// BASIC TYPES /// | |
| //////////////////////////////////////////////////////////////////////// | |
| // simulation pattern manager | |
| typedef struct Cec_ManPat_t_ Cec_ManPat_t; | |
| struct Cec_ManPat_t_ | |
| { | |
| Vec_Int_t * vPattern1; // pattern in terms of primary inputs | |
| Vec_Int_t * vPattern2; // pattern in terms of primary inputs | |
| Vec_Str_t * vStorage; // storage for compressed patterns | |
| int iStart; // position in the array where recent patterns begin | |
| int nPats; // total number of recent patterns | |
| int nPatsAll; // total number of all patterns | |
| int nPatLits; // total number of literals in recent patterns | |
| int nPatLitsAll; // total number of literals in all patterns | |
| int nPatLitsMin; // total number of literals in minimized recent patterns | |
| int nPatLitsMinAll; // total number of literals in minimized all patterns | |
| int nSeries; // simulation series | |
| int fVerbose; // verbose stats | |
| // runtime statistics | |
| abctime timeFind; // detecting the pattern | |
| abctime timeShrink; // minimizing the pattern | |
| abctime timeVerify; // verifying the result of minimisation | |
| abctime timeSort; // sorting literals | |
| abctime timePack; // packing into sim info structures | |
| abctime timeTotal; // total runtime | |
| abctime timeTotalSave; // total runtime for saving | |
| }; | |
| // SAT solving manager | |
| typedef struct Cec_ManSat_t_ Cec_ManSat_t; | |
| struct Cec_ManSat_t_ | |
| { | |
| // parameters | |
| Cec_ParSat_t * pPars; | |
| // AIGs used in the package | |
| Gia_Man_t * pAig; // the AIG whose outputs are considered | |
| Vec_Int_t * vStatus; // status for each output | |
| // SAT solving | |
| sat_solver * pSat; // recyclable SAT solver | |
| int nSatVars; // the counter of SAT variables | |
| int * pSatVars; // mapping of each node into its SAT var | |
| Vec_Ptr_t * vUsedNodes; // nodes whose SAT vars are assigned | |
| int nRecycles; // the number of times SAT solver was recycled | |
| int nCallsSince; // the number of calls since the last recycle | |
| Vec_Ptr_t * vFanins; // fanins of the CNF node | |
| // counter-examples | |
| Vec_Int_t * vCex; // the latest counter-example | |
| Vec_Int_t * vVisits; // temporary array for visited nodes | |
| // SAT calls statistics | |
| int nSatUnsat; // the number of proofs | |
| int nSatSat; // the number of failure | |
| int nSatUndec; // the number of timeouts | |
| int nSatTotal; // the number of calls | |
| int nCexLits; | |
| // conflicts | |
| int nConfUnsat; // conflicts in unsat problems | |
| int nConfSat; // conflicts in sat problems | |
| int nConfUndec; // conflicts in undec problems | |
| // runtime stats | |
| int timeSatUnsat; // unsat | |
| int timeSatSat; // sat | |
| int timeSatUndec; // undecided | |
| int timeTotal; // total runtime | |
| }; | |
| // combinational simulation manager | |
| typedef struct Cec_ManSim_t_ Cec_ManSim_t; | |
| struct Cec_ManSim_t_ | |
| { | |
| // parameters | |
| Gia_Man_t * pAig; // the AIG to be used for simulation | |
| Cec_ParSim_t * pPars; // simulation parameters | |
| int nWords; // the number of simulation words | |
| // recycable memory | |
| int * pSimInfo; // simulation information offsets | |
| unsigned * pMems; // allocated simulaton memory | |
| int nWordsAlloc; // the number of allocated entries | |
| int nMems; // the number of used entries | |
| int nMemsMax; // the max number of used entries | |
| int MemFree; // next free entry | |
| int nWordsOld; // the number of simulation words after previous relink | |
| // internal simulation info | |
| Vec_Ptr_t * vCiSimInfo; // CI simulation info | |
| Vec_Ptr_t * vCoSimInfo; // CO simulation info | |
| // counter examples | |
| void ** pCexes; // counter-examples for each output | |
| int iOut; // first failed output | |
| int nOuts; // the number of failed outputs | |
| Abc_Cex_t * pCexComb; // counter-example for the first failed output | |
| Abc_Cex_t * pBestState; // the state that led to most of the refinements | |
| // scoring simulation patterns | |
| int * pScores; // counters of refinement for each pattern | |
| // temporaries | |
| Vec_Int_t * vClassOld; // old class numbers | |
| Vec_Int_t * vClassNew; // new class numbers | |
| Vec_Int_t * vClassTemp; // temporary storage | |
| Vec_Int_t * vRefinedC; // refined const reprs | |
| }; | |
| // combinational simulation manager | |
| typedef struct Cec_ManFra_t_ Cec_ManFra_t; | |
| struct Cec_ManFra_t_ | |
| { | |
| // parameters | |
| Gia_Man_t * pAig; // the AIG to be used for simulation | |
| Cec_ParFra_t * pPars; // SAT sweeping parameters | |
| // simulation patterns | |
| Vec_Int_t * vXorNodes; // nodes used in speculative reduction | |
| int nAllProved; // total number of proved nodes | |
| int nAllDisproved; // total number of disproved nodes | |
| int nAllFailed; // total number of failed nodes | |
| // runtime stats | |
| abctime timeSim; // unsat | |
| abctime timePat; // unsat | |
| abctime timeSat; // sat | |
| abctime timeTotal; // total runtime | |
| }; | |
| //////////////////////////////////////////////////////////////////////// | |
| /// MACRO DEFINITIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| //////////////////////////////////////////////////////////////////////// | |
| /// FUNCTION DECLARATIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| /*=== cecCorr.c ============================================================*/ | |
| extern void Cec_ManRefinedClassPrintStats( Gia_Man_t * p, Vec_Str_t * vStatus, int iIter, abctime Time ); | |
| /*=== cecClass.c ============================================================*/ | |
| extern int Cec_ManSimClassRemoveOne( Cec_ManSim_t * p, int i ); | |
| extern int Cec_ManSimClassesPrepare( Cec_ManSim_t * p, int LevelMax ); | |
| extern int Cec_ManSimClassesRefine( Cec_ManSim_t * p ); | |
| extern int Cec_ManSimSimulateRound( Cec_ManSim_t * p, Vec_Ptr_t * vInfoCis, Vec_Ptr_t * vInfoCos ); | |
| /*=== cecIso.c ============================================================*/ | |
| extern int * Cec_ManDetectIsomorphism( Gia_Man_t * p ); | |
| /*=== cecMan.c ============================================================*/ | |
| extern Cec_ManSat_t * Cec_ManSatCreate( Gia_Man_t * pAig, Cec_ParSat_t * pPars ); | |
| extern void Cec_ManSatPrintStats( Cec_ManSat_t * p ); | |
| extern void Cec_ManSatStop( Cec_ManSat_t * p ); | |
| extern Cec_ManPat_t * Cec_ManPatStart(); | |
| extern void Cec_ManPatPrintStats( Cec_ManPat_t * p ); | |
| extern void Cec_ManPatStop( Cec_ManPat_t * p ); | |
| extern Cec_ManSim_t * Cec_ManSimStart( Gia_Man_t * pAig, Cec_ParSim_t * pPars ); | |
| extern void Cec_ManSimStop( Cec_ManSim_t * p ); | |
| extern Cec_ManFra_t * Cec_ManFraStart( Gia_Man_t * pAig, Cec_ParFra_t * pPars ); | |
| extern void Cec_ManFraStop( Cec_ManFra_t * p ); | |
| /*=== cecPat.c ============================================================*/ | |
| extern void Cec_ManPatSavePattern( Cec_ManPat_t * pPat, Cec_ManSat_t * p, Gia_Obj_t * pObj ); | |
| extern void Cec_ManPatSavePatternCSat( Cec_ManPat_t * pMan, Vec_Int_t * vPat ); | |
| extern Vec_Ptr_t * Cec_ManPatCollectPatterns( Cec_ManPat_t * pMan, int nInputs, int nWords ); | |
| extern Vec_Ptr_t * Cec_ManPatPackPatterns( Vec_Int_t * vCexStore, int nInputs, int nRegs, int nWordsInit ); | |
| /*=== cecSeq.c ============================================================*/ | |
| extern int Cec_ManSeqResimulate( Cec_ManSim_t * p, Vec_Ptr_t * vInfo ); | |
| extern int Cec_ManSeqResimulateInfo( Gia_Man_t * pAig, Vec_Ptr_t * vSimInfo, Abc_Cex_t * pBestState, int fCheckMiter ); | |
| extern void Cec_ManSeqDeriveInfoInitRandom( Vec_Ptr_t * vInfo, Gia_Man_t * pAig, Abc_Cex_t * pCex ); | |
| extern int Cec_ManCountNonConstOutputs( Gia_Man_t * pAig ); | |
| extern int Cec_ManCheckNonTrivialCands( Gia_Man_t * pAig ); | |
| /*=== cecSolve.c ============================================================*/ | |
| extern int Cec_ObjSatVarValue( Cec_ManSat_t * p, Gia_Obj_t * pObj ); | |
| extern void Cec_ManSatSolve( Cec_ManPat_t * pPat, Gia_Man_t * pAig, Cec_ParSat_t * pPars, Vec_Int_t * vIdsOrig, Vec_Int_t * vMiterPairs, Vec_Int_t * vEquivPairs ); | |
| extern void Cec_ManSatSolveCSat( Cec_ManPat_t * pPat, Gia_Man_t * pAig, Cec_ParSat_t * pPars ); | |
| extern Vec_Str_t * Cec_ManSatSolveSeq( Vec_Ptr_t * vPatts, Gia_Man_t * pAig, Cec_ParSat_t * pPars, int nRegs, int * pnPats ); | |
| extern Vec_Int_t * Cec_ManSatSolveMiter( Gia_Man_t * pAig, Cec_ParSat_t * pPars, Vec_Str_t ** pvStatus ); | |
| extern int Cec_ManSatCheckNode( Cec_ManSat_t * p, Gia_Obj_t * pObj ); | |
| extern int Cec_ManSatCheckNodeTwo( Cec_ManSat_t * p, Gia_Obj_t * pObj1, Gia_Obj_t * pObj2 ); | |
| extern void Cec_ManSavePattern( Cec_ManSat_t * p, Gia_Obj_t * pObj1, Gia_Obj_t * pObj2 ); | |
| extern Vec_Int_t * Cec_ManSatReadCex( Cec_ManSat_t * p ); | |
| /*=== ceFraeep.c ============================================================*/ | |
| extern Gia_Man_t * Cec_ManFraSpecReduction( Cec_ManFra_t * p ); | |
| extern int Cec_ManFraClassesUpdate( Cec_ManFra_t * p, Cec_ManSim_t * pSim, Cec_ManPat_t * pPat, Gia_Man_t * pNew ); | |
| ABC_NAMESPACE_HEADER_END | |
| #endif | |
| //////////////////////////////////////////////////////////////////////// | |
| /// END OF FILE /// | |
| //////////////////////////////////////////////////////////////////////// | |