| /**CFile**************************************************************** | |
| FileName [simSwitch.c] | |
| SystemName [ABC: Logic synthesis and verification system.] | |
| PackageName [Network and node package.] | |
| Synopsis [Computes switching activity of nodes in the ABC network.] | |
| Author [Alan Mishchenko] | |
| Affiliation [UC Berkeley] | |
| Date [Ver. 1.0. Started - June 20, 2005.] | |
| Revision [$Id: simSwitch.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] | |
| ***********************************************************************/ | |
| #include "base/abc/abc.h" | |
| #include "sim.h" | |
| ABC_NAMESPACE_IMPL_START | |
| //////////////////////////////////////////////////////////////////////// | |
| /// DECLARATIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| static void Sim_NodeSimulate( Abc_Obj_t * pNode, Vec_Ptr_t * vSimInfo, int nSimWords ); | |
| static float Sim_ComputeSwitching( unsigned * pSimInfo, int nSimWords ); | |
| //////////////////////////////////////////////////////////////////////// | |
| /// FUNCTION DEFINITIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| /**Function************************************************************* | |
| Synopsis [Computes switching activity using simulation.] | |
| Description [Computes switching activity, which is understood as the | |
| probability of switching under random simulation. Assigns the | |
| random simulation information at the CI and propagates it through | |
| the internal nodes of the AIG.] | |
| SideEffects [] | |
| SeeAlso [] | |
| ***********************************************************************/ | |
| Vec_Int_t * Sim_NtkComputeSwitching( Abc_Ntk_t * pNtk, int nPatterns ) | |
| { | |
| Vec_Int_t * vSwitching; | |
| float * pSwitching; | |
| Vec_Ptr_t * vNodes; | |
| Vec_Ptr_t * vSimInfo; | |
| Abc_Obj_t * pNode; | |
| unsigned * pSimInfo; | |
| int nSimWords, i; | |
| // allocate space for simulation info of all nodes | |
| nSimWords = SIM_NUM_WORDS(nPatterns); | |
| vSimInfo = Sim_UtilInfoAlloc( Abc_NtkObjNumMax(pNtk), nSimWords, 0 ); | |
| // assign the random simulation to the CIs | |
| vSwitching = Vec_IntStart( Abc_NtkObjNumMax(pNtk) ); | |
| pSwitching = (float *)vSwitching->pArray; | |
| Abc_NtkForEachCi( pNtk, pNode, i ) | |
| { | |
| pSimInfo = (unsigned *)Vec_PtrEntry(vSimInfo, pNode->Id); | |
| Sim_UtilSetRandom( pSimInfo, nSimWords ); | |
| pSwitching[pNode->Id] = Sim_ComputeSwitching( pSimInfo, nSimWords ); | |
| } | |
| // simulate the internal nodes | |
| vNodes = Abc_AigDfs( pNtk, 1, 0 ); | |
| Vec_PtrForEachEntry( Abc_Obj_t *, vNodes, pNode, i ) | |
| { | |
| pSimInfo = (unsigned *)Vec_PtrEntry(vSimInfo, pNode->Id); | |
| Sim_UtilSimulateNodeOne( pNode, vSimInfo, nSimWords, 0 ); | |
| pSwitching[pNode->Id] = Sim_ComputeSwitching( pSimInfo, nSimWords ); | |
| } | |
| Vec_PtrFree( vNodes ); | |
| Sim_UtilInfoFree( vSimInfo ); | |
| return vSwitching; | |
| } | |
| /**Function************************************************************* | |
| Synopsis [Computes switching activity of one node.] | |
| Description [Uses the formula: Switching = 2 * nOnes * nZeros / (nTotal ^ 2) ] | |
| SideEffects [] | |
| SeeAlso [] | |
| ***********************************************************************/ | |
| float Sim_ComputeSwitching( unsigned * pSimInfo, int nSimWords ) | |
| { | |
| int nOnes, nTotal; | |
| nTotal = 32 * nSimWords; | |
| nOnes = Sim_UtilCountOnes( pSimInfo, nSimWords ); | |
| return (float)2.0 * nOnes / nTotal * (nTotal - nOnes) / nTotal; | |
| } | |
| //////////////////////////////////////////////////////////////////////// | |
| /// END OF FILE /// | |
| //////////////////////////////////////////////////////////////////////// | |
| ABC_NAMESPACE_IMPL_END | |