mirror of https://github.com/YosysHQ/abc.git
228 lines
12 KiB
C
228 lines
12 KiB
C
/**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 ///
|
|
////////////////////////////////////////////////////////////////////////
|
|
|