| /**CFile**************************************************************** |
| |
| FileName [saigScl.c] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [Sequential AIG package.] |
| |
| Synopsis [Sequential cleanup.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - June 20, 2005.] |
| |
| Revision [$Id: saigScl.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #include "saig.h" |
| |
| ABC_NAMESPACE_IMPL_START |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /**Function************************************************************* |
| |
| Synopsis [Report registers useless for SEC.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Saig_ManReportUselessRegisters( Aig_Man_t * pAig ) |
| { |
| Aig_Obj_t * pObj, * pDriver; |
| int i, Counter1, Counter2; |
| // set PIO numbers |
| Aig_ManSetCioIds( pAig ); |
| // check how many POs are driven by a register whose ref count is 1 |
| Counter1 = 0; |
| Saig_ManForEachPo( pAig, pObj, i ) |
| { |
| pDriver = Aig_ObjFanin0(pObj); |
| if ( Saig_ObjIsLo(pAig, pDriver) && Aig_ObjRefs(pDriver) == 1 ) |
| Counter1++; |
| } |
| // check how many PIs have ref count 1 and drive a register |
| Counter2 = 0; |
| Saig_ManForEachLi( pAig, pObj, i ) |
| { |
| pDriver = Aig_ObjFanin0(pObj); |
| if ( Saig_ObjIsPi(pAig, pDriver) && Aig_ObjRefs(pDriver) == 1 ) |
| Counter2++; |
| } |
| if ( Counter1 ) |
| printf( "Network has %d (out of %d) registers driving POs.\n", Counter1, Saig_ManRegNum(pAig) ); |
| if ( Counter2 ) |
| printf( "Network has %d (out of %d) registers driven by PIs.\n", Counter2, Saig_ManRegNum(pAig) ); |
| } |
| |
| |
| /**Function************************************************************* |
| |
| Synopsis [Report the number of pairs of complemented registers.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| int Saig_ManReportComplements( Aig_Man_t * p ) |
| { |
| Aig_Obj_t * pObj, * pFanin; |
| int i, Counter = 0; |
| assert( Aig_ManRegNum(p) > 0 ); |
| Aig_ManForEachObj( p, pObj, i ) |
| assert( !pObj->fMarkA ); |
| Aig_ManForEachLiSeq( p, pObj, i ) |
| { |
| pFanin = Aig_ObjFanin0(pObj); |
| if ( pFanin->fMarkA ) |
| Counter++; |
| else |
| pFanin->fMarkA = 1; |
| } |
| // count fanins that have both attributes |
| Aig_ManForEachLiSeq( p, pObj, i ) |
| { |
| pFanin = Aig_ObjFanin0(pObj); |
| pFanin->fMarkA = 0; |
| } |
| return Counter; |
| } |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| ABC_NAMESPACE_IMPL_END |
| |