mirror of https://github.com/YosysHQ/abc.git
116 lines
3.3 KiB
C
116 lines
3.3 KiB
C
/**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
|
|
|