summaryrefslogtreecommitdiffstats
path: root/src/aig/gia/giaMan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/aig/gia/giaMan.c')
-rw-r--r--src/aig/gia/giaMan.c46
1 files changed, 38 insertions, 8 deletions
diff --git a/src/aig/gia/giaMan.c b/src/aig/gia/giaMan.c
index ab0c9bc1..f09ca7b5 100644
--- a/src/aig/gia/giaMan.c
+++ b/src/aig/gia/giaMan.c
@@ -179,7 +179,8 @@ void Gia_ManPrintFlopClasses( Gia_Man_t * p )
}
Counter0 = Vec_IntCountEntry( p->vFlopClasses, 0 );
Counter1 = Vec_IntCountEntry( p->vFlopClasses, 1 );
- printf( "Flop-level abstraction: Excluded FFs = %d Included FFs = %d ", Counter0, Counter1 );
+ printf( "Flop-level abstraction: Excluded FFs = %d Included FFs = %d (%.2f %%) ",
+ Counter0, Counter1, 100.0*Counter1/(Counter0 + Counter1 + 1) );
if ( Counter0 + Counter1 < Gia_ManRegNum(p) )
printf( "and there are other FF classes..." );
printf( "\n" );
@@ -198,7 +199,10 @@ void Gia_ManPrintFlopClasses( Gia_Man_t * p )
***********************************************************************/
void Gia_ManPrintGateClasses( Gia_Man_t * p )
{
- int i, Counter[5];
+ Vec_Int_t * vAssigned, * vPis, * vPPis, * vFlops, * vNodes;
+ Gia_Obj_t * pObj;
+ int i;
+
if ( p->vGateClasses == NULL )
return;
if ( Vec_IntSize(p->vGateClasses) != Gia_ManObjNum(p) )
@@ -206,12 +210,38 @@ void Gia_ManPrintGateClasses( Gia_Man_t * p )
printf( "Gia_ManPrintGateClasses(): The number of flop map entries differs from the number of flops.\n" );
return;
}
- for ( i = 0; i < 5; i++ )
- Counter[i] = Vec_IntCountEntry( p->vGateClasses, i );
- printf( "Gate-level abstraction: PI = %d PPI = %d FF = %d AND = %d Unused = %d\n",
- Counter[1], Counter[2], Counter[3], Counter[4], Counter[0] );
- if ( Counter[0] + Counter[1] + Counter[2] + Counter[3] + Counter[4] != Gia_ManObjNum(p) )
- printf( "Gia_ManPrintGateClasses(): Mismatch in the object count.\n" );
+
+ // create included objects and their fanins
+ vAssigned = Gia_GlaCollectAssigned( p, p->vGateClasses );
+
+ // create additional arrays
+ vPis = Vec_IntAlloc( 1000 );
+ vPPis = Vec_IntAlloc( 1000 );
+ vFlops = Vec_IntAlloc( 1000 );
+ vNodes = Vec_IntAlloc( 1000 );
+ Gia_ManForEachObjVec( vAssigned, p, pObj, i )
+ {
+ if ( Gia_ObjIsPi(p, pObj) )
+ Vec_IntPush( vPis, Gia_ObjId(p,pObj) );
+ else if ( !Vec_IntEntry(p->vGateClasses, Gia_ObjId(p,pObj)) )
+ Vec_IntPush( vPPis, Gia_ObjId(p,pObj) );
+ else if ( Gia_ObjIsAnd(pObj) )
+ Vec_IntPush( vNodes, Gia_ObjId(p,pObj) );
+ else if ( Gia_ObjIsRo(p, pObj) )
+ Vec_IntPush( vFlops, Gia_ObjId(p,pObj) );
+ else assert( Gia_ObjIsConst0(pObj) );
+ }
+
+ printf( "Gate-level abstraction: PI = %d PPI = %d FF = %d (%.2f %%) AND = %d (%.2f %%)\n",
+ Vec_IntSize(vPis), Vec_IntSize(vPPis),
+ Vec_IntSize(vFlops), 100.0*Vec_IntSize(vFlops)/(Gia_ManRegNum(p)+1),
+ Vec_IntSize(vNodes), 100.0*Vec_IntSize(vNodes)/(Gia_ManAndNum(p)+1) );
+
+ Vec_IntFree( vPis );
+ Vec_IntFree( vPPis );
+ Vec_IntFree( vFlops );
+ Vec_IntFree( vNodes );
+ Vec_IntFree( vAssigned );
}
/**Function*************************************************************