diff options
Diffstat (limited to 'src/aig/gia/giaMan.c')
-rw-r--r-- | src/aig/gia/giaMan.c | 46 |
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************************************************************* |