diff options
Diffstat (limited to 'src/opt/fsim/fsimInt.h')
-rw-r--r-- | src/opt/fsim/fsimInt.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/opt/fsim/fsimInt.h b/src/opt/fsim/fsimInt.h new file mode 100644 index 00000000..0a7493a0 --- /dev/null +++ b/src/opt/fsim/fsimInt.h @@ -0,0 +1,138 @@ +/**CFile**************************************************************** + + FileName [fsimInt.h] + + SystemName [ABC: Logic synthesis and verification system.] + + PackageName [Fast sequential AIG simulator.] + + Synopsis [Internal declarations.] + + Author [Alan Mishchenko] + + Affiliation [UC Berkeley] + + Date [Ver. 1.0. Started - June 20, 2005.] + + Revision [$Id: fsimInt.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $] + +***********************************************************************/ + +#ifndef ABC__aig__fsim__fsimInt_h +#define ABC__aig__fsim__fsimInt_h + + +//////////////////////////////////////////////////////////////////////// +/// INCLUDES /// +//////////////////////////////////////////////////////////////////////// + +#include "aig/saig/saig.h" +#include "fsim.h" + +//////////////////////////////////////////////////////////////////////// +/// PARAMETERS /// +//////////////////////////////////////////////////////////////////////// + + + +ABC_NAMESPACE_HEADER_START + + +//////////////////////////////////////////////////////////////////////// +/// BASIC TYPES /// +//////////////////////////////////////////////////////////////////////// + +// simulation object +typedef struct Fsim_Obj_t_ Fsim_Obj_t; +struct Fsim_Obj_t_ +{ + int iNode; // the node ID + int iFan0; // the first fanin + int iFan1; // the second fanin +}; + +// fast sequential simulation manager +struct Fsim_Man_t_ +{ + // parameters + Aig_Man_t * pAig; // the AIG to be used for simulation + int nWords; // the number of simulation words + // AIG representation + int nPis; // the number of primary inputs + int nPos; // the number of primary outputs + int nCis; // the number of combinational inputs + int nCos; // the number of combinational outputs + int nNodes; // the number of internal nodes + int nObjs; // nCis + nNodes + nCos + 2 + int * pFans0; // fanin0 for all objects + int * pFans1; // fanin1 for all objects + int * pRefs; // reference counter for each node + int * pRefsCopy; // reference counter for each node + Vec_Int_t * vCis2Ids; // mapping of CIs into their PI ids + Vec_Int_t * vLos; // register outputs + Vec_Int_t * vLis; // register inputs + // cross-cut representation + int nCrossCut; // temporary cross-cut variable + int nCrossCutMax; // maximum cross-cut variable + int nFront; // the size of frontier + // derived AIG representation + int nDataAig; // the length of allocated data + unsigned char * pDataAig; // AIG representation + unsigned char * pDataCur; // AIG representation (current position) + int iNodePrev; // previous extracted value + int iNumber; // the number of the last object + Fsim_Obj_t Obj; // current object + // temporary AIG representation + int * pDataAig2; // temporary representation + int * pDataCur2; // AIG representation (current position) + // simulation information + unsigned * pDataSim; // simulation data + unsigned * pDataSimCis; // simulation data for CIs + unsigned * pDataSimCos; // simulation data for COs + // other information + int * pData1; + int * pData2; +}; + +static inline unsigned * Fsim_SimData( Fsim_Man_t * p, int i ) { return p->pDataSim + i * p->nWords; } +static inline unsigned * Fsim_SimDataCi( Fsim_Man_t * p, int i ) { return p->pDataSimCis + i * p->nWords; } +static inline unsigned * Fsim_SimDataCo( Fsim_Man_t * p, int i ) { return p->pDataSimCos + i * p->nWords; } + +//////////////////////////////////////////////////////////////////////// +/// MACRO DEFINITIONS /// +//////////////////////////////////////////////////////////////////////// + +static inline int Fsim_Var2Lit( int Var, int fCompl ) { return Var + Var + fCompl; } +static inline int Fsim_Lit2Var( int Lit ) { return Lit >> 1; } +static inline int Fsim_LitIsCompl( int Lit ) { return Lit & 1; } +static inline int Fsim_LitNot( int Lit ) { return Lit ^ 1; } +static inline int Fsim_LitNotCond( int Lit, int c ) { return Lit ^ (int)(c > 0); } +static inline int Fsim_LitRegular( int Lit ) { return Lit & ~01; } + +#define Fsim_ManForEachObj( p, pObj, i )\ + for ( i = 2, p->pDataCur = p->pDataAig, p->iNodePrev = 0, pObj = &p->Obj;\ + i < p->nObjs && Fsim_ManRestoreObj( p, pObj ); i++ ) + +//////////////////////////////////////////////////////////////////////// +/// FUNCTION DECLARATIONS /// +//////////////////////////////////////////////////////////////////////// + +/*=== fsimFront.c ========================================================*/ +extern void Fsim_ManFront( Fsim_Man_t * p, int fCompressAig ); +/*=== fsimMan.c ==========================================================*/ +extern Fsim_Man_t * Fsim_ManCreate( Aig_Man_t * pAig ); +extern void Fsim_ManDelete( Fsim_Man_t * p ); +extern void Fsim_ManTest( Aig_Man_t * pAig ); + + + +ABC_NAMESPACE_HEADER_END + + + +#endif + +//////////////////////////////////////////////////////////////////////// +/// END OF FILE /// +//////////////////////////////////////////////////////////////////////// + |