/**CFile**************************************************************** FileName [resInt.h] SystemName [ABC: Logic synthesis and verification system.] PackageName [Resynthesis package.] Synopsis [Internal declarations.] Author [Alan Mishchenko] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - January 15, 2007.] Revision [$Id: resInt.h,v 1.00 2007/01/15 00:00:00 alanmi Exp $] ***********************************************************************/ #ifndef ABC__opt__res__resInt_h #define ABC__opt__res__resInt_h //////////////////////////////////////////////////////////////////////// /// INCLUDES /// //////////////////////////////////////////////////////////////////////// #include "res.h" //////////////////////////////////////////////////////////////////////// /// PARAMETERS /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_HEADER_START //////////////////////////////////////////////////////////////////////// /// BASIC TYPES /// //////////////////////////////////////////////////////////////////////// typedef struct Res_Win_t_ Res_Win_t; struct Res_Win_t_ { // windowing parameters Abc_Obj_t * pNode; // the node in the center int nWinTfiMax; // the fanin levels int nWinTfoMax; // the fanout levels int nLevDivMax; // the maximum divisor level // internal windowing parameters int nFanoutLimit; // the limit on the fanout count of a TFO node (if more, the node is treated as a root) int nLevTfiMinus; // the number of additional levels to search from TFO below the level of leaves // derived windowing parameters int nLevLeafMin; // the minimum level of a leaf int nLevTravMin; // the minimum level to search from TFO int nDivsPlus; // the number of additional divisors // the window data Vec_Ptr_t * vRoots; // outputs of the window Vec_Ptr_t * vLeaves; // inputs of the window Vec_Ptr_t * vBranches; // side nodes of the window Vec_Ptr_t * vNodes; // internal nodes of the window Vec_Ptr_t * vDivs; // candidate divisors of the node // temporary data Vec_Vec_t * vMatrix; // TFI nodes below the given node }; typedef struct Res_Sim_t_ Res_Sim_t; struct Res_Sim_t_ { Abc_Ntk_t * pAig; // AIG for simulation int nTruePis; // the number of true PIs of the window int fConst0; // the node can be replaced by constant 0 int fConst1; // the node can be replaced by constant 0 // simulation parameters int nWords; // the number of simulation words int nPats; // the number of patterns int nWordsIn; // the number of simulation words in the input patterns int nPatsIn; // the number of patterns in the input patterns int nBytesIn; // the number of bytes in the input patterns int nWordsOut; // the number of simulation words in the output patterns int nPatsOut; // the number of patterns in the output patterns // simulation info Vec_Ptr_t * vPats; // input simulation patterns Vec_Ptr_t * vPats0; // input simulation patterns Vec_Ptr_t * vPats1; // input simulation patterns Vec_Ptr_t * vOuts; // output simulation info int nPats0; // the number of 0-patterns accumulated int nPats1; // the number of 1-patterns accumulated // resub candidates Vec_Vec_t * vCands; // resubstitution candidates // statistics abctime timeSat; }; //////////////////////////////////////////////////////////////////////// /// MACRO DEFINITIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DECLARATIONS /// //////////////////////////////////////////////////////////////////////// /*=== resDivs.c ==========================================================*/ extern void Res_WinDivisors( Res_Win_t * p, int nLevDivMax ); extern void Res_WinSweepLeafTfo_rec( Abc_Obj_t * pObj, int nLevelLimit ); extern int Res_WinVisitMffc( Abc_Obj_t * pNode ); /*=== resFilter.c ==========================================================*/ extern int Res_FilterCandidates( Res_Win_t * pWin, Abc_Ntk_t * pAig, Res_Sim_t * pSim, Vec_Vec_t * vResubs, Vec_Vec_t * vResubsW, int nFaninsMax, int fArea ); extern int Res_FilterCandidatesArea( Res_Win_t * pWin, Abc_Ntk_t * pAig, Res_Sim_t * pSim, Vec_Vec_t * vResubs, Vec_Vec_t * vResubsW, int nFaninsMax ); /*=== resSat.c ==========================================================*/ extern void * Res_SatProveUnsat( Abc_Ntk_t * pAig, Vec_Ptr_t * vFanins ); extern int Res_SatSimulate( Res_Sim_t * p, int nPats, int fOnSet ); /*=== resSim.c ==========================================================*/ extern Res_Sim_t * Res_SimAlloc( int nWords ); extern void Res_SimFree( Res_Sim_t * p ); extern int Res_SimPrepare( Res_Sim_t * p, Abc_Ntk_t * pAig, int nTruePis, int fVerbose ); /*=== resStrash.c ==========================================================*/ extern Abc_Ntk_t * Res_WndStrash( Res_Win_t * p ); /*=== resWnd.c ==========================================================*/ extern void Res_UpdateNetwork( Abc_Obj_t * pObj, Vec_Ptr_t * vFanins, Hop_Obj_t * pFunc, Vec_Vec_t * vLevels ); /*=== resWnd.c ==========================================================*/ extern Res_Win_t * Res_WinAlloc(); extern void Res_WinFree( Res_Win_t * p ); extern int Res_WinIsTrivial( Res_Win_t * p ); extern int Res_WinCompute( Abc_Obj_t * pNode, int nWinTfiMax, int nWinTfoMax, Res_Win_t * p ); ABC_NAMESPACE_HEADER_END #endif //////////////////////////////////////////////////////////////////////// /// END OF FILE /// ////////////////////////////////////////////////////////////////////////