/**CFile**************************************************************** FileName [cgtMan.c] SystemName [ABC: Logic synthesis and verification system.] PackageName [Clock gating package.] Synopsis [Manipulation of clock gating manager.] Author [Alan Mishchenko] Affiliation [UC Berkeley] Date [Ver. 1.0. Started - June 20, 2005.] Revision [$Id: cgtMan.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] ***********************************************************************/ #include "cgtInt.h" ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Creates the manager.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ Cgt_Man_t * Cgt_ManCreate( Aig_Man_t * pAig, Aig_Man_t * pCare, Cgt_Par_t * pPars ) { Cgt_Man_t * p; // prepare the sequential AIG assert( Saig_ManRegNum(pAig) > 0 ); Aig_ManFanoutStart( pAig ); Aig_ManSetCioIds( pAig ); // create interpolation manager p = ABC_ALLOC( Cgt_Man_t, 1 ); memset( p, 0, sizeof(Cgt_Man_t) ); p->pPars = pPars; p->pAig = pAig; p->vGatesAll = Vec_VecStart( Saig_ManRegNum(pAig) ); p->vFanout = Vec_PtrAlloc( 1000 ); p->vVisited = Vec_PtrAlloc( 1000 ); p->nPattWords = 16; if ( pCare == NULL ) return p; // check out the constraints if ( Aig_ManCiNum(pCare) != Aig_ManCiNum(pAig) ) { printf( "The PI count of care (%d) and AIG (%d) differ. Careset is not used.\n", Aig_ManCiNum(pCare), Aig_ManCiNum(pAig) ); return p; } p->pCare = pCare; p->vSuppsInv = (Vec_Vec_t *)Aig_ManSupportsInverse( p->pCare ); return p; } /**Function************************************************************* Synopsis [Creates the manager.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Cgt_ManClean( Cgt_Man_t * p ) { if ( p->pPart ) { Aig_ManStop( p->pPart ); p->pPart = NULL; } if ( p->pCnf ) { Cnf_DataFree( p->pCnf ); p->pCnf = NULL; } if ( p->pSat ) { sat_solver_delete( p->pSat ); p->pSat = NULL; } if ( p->vPatts ) { Vec_PtrFree( p->vPatts ); p->vPatts = NULL; } } /**Function************************************************************* Synopsis [Prints stats of the manager.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Cgt_ManPrintStats( Cgt_Man_t * p ) { printf( "Params: LevMax = %d. CandMax = %d. OdcMax = %d. ConfMax = %d. VarMin = %d. FlopMin = %d.\n", p->pPars->nLevelMax, p->pPars->nCandMax, p->pPars->nOdcMax, p->pPars->nConfMax, p->pPars->nVarsMin, p->pPars->nFlopsMin ); printf( "SAT : Calls = %d. Unsat = %d. Sat = %d. Fails = %d. Recycles = %d. ", p->nCalls, p->nCallsUnsat, p->nCallsSat, p->nCallsUndec, p->nRecycles ); ABC_PRT( "Time", p->timeTotal ); /* p->timeOther = p->timeTotal-p->timeAig-p->timePrepare-p->timeSat-p->timeDecision; ABC_PRTP( "AIG ", p->timeAig, p->timeTotal ); ABC_PRTP( "Prepare ", p->timePrepare, p->timeTotal ); ABC_PRTP( "SAT solving", p->timeSat, p->timeTotal ); ABC_PRTP( " unsat ", p->timeSatUnsat, p->timeTotal ); ABC_PRTP( " sat ", p->timeSatSat, p->timeTotal ); ABC_PRTP( " undecided", p->timeSatUndec, p->timeTotal ); ABC_PRTP( "Other ", p->timeOther, p->timeTotal ); ABC_PRTP( "TOTAL ", p->timeTotal, p->timeTotal ); */ } /**Function************************************************************* Synopsis [Frees the manager.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ void Cgt_ManStop( Cgt_Man_t * p ) { if ( p->pPars->fVerbose ) Cgt_ManPrintStats( p ); if ( p->pFrame ) Aig_ManStop( p->pFrame ); Cgt_ManClean( p ); Vec_PtrFree( p->vFanout ); Vec_PtrFree( p->vVisited ); if ( p->vGates ) Vec_PtrFree( p->vGates ); if ( p->vGatesAll ) Vec_VecFree( p->vGatesAll ); if ( p->vSuppsInv ) Vec_VecFree( p->vSuppsInv ); ABC_FREE( p ); } //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END