diff options
Diffstat (limited to 'src/base/wlc')
-rw-r--r-- | src/base/wlc/wlcNtk.c | 33 | ||||
-rw-r--r-- | src/base/wlc/wlcShow.c | 18 |
2 files changed, 43 insertions, 8 deletions
diff --git a/src/base/wlc/wlcNtk.c b/src/base/wlc/wlcNtk.c index 4ac0c66c..52e2d9a1 100644 --- a/src/base/wlc/wlcNtk.c +++ b/src/base/wlc/wlcNtk.c @@ -305,7 +305,7 @@ int Wlc_NtkMemUsage( Wlc_Ntk_t * p ) SeeAlso [] ***********************************************************************/ -int Wlc_NtkCreateLevels( Wlc_Ntk_t * p ) +int Wlc_NtkCreateLevels_( Wlc_Ntk_t * p ) { Wlc_Obj_t * pObj; int i, k, iFanin, Level, LevelMax = 0; @@ -346,6 +346,37 @@ int Wlc_NtkCreateLevelsRev( Wlc_Ntk_t * p ) /**Function************************************************************* + Synopsis [Assigns object levels.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +void Wlc_NtkCreateLevels_rec( Wlc_Ntk_t * p, Wlc_Obj_t * pObj ) +{ + int k, iFanin, Level = 0; + if ( Vec_IntEntry(&p->vLevels, Wlc_ObjId(p, pObj)) > 0 ) + return; + Wlc_ObjForEachFanin( pObj, iFanin, k ) if ( iFanin ) + Wlc_NtkCreateLevels_rec( p, Wlc_NtkObj(p, iFanin) ); + Wlc_ObjForEachFanin( pObj, iFanin, k ) if ( iFanin ) + Level = Abc_MaxInt( Level, Wlc_ObjLevelId(p, iFanin) ); + Vec_IntWriteEntry( &p->vLevels, Wlc_ObjId(p, pObj), Level + 1 ); +} +int Wlc_NtkCreateLevels( Wlc_Ntk_t * p ) +{ + Wlc_Obj_t * pObj; int i; + Vec_IntFill( &p->vLevels, Wlc_NtkObjNumMax(p), 0 ); + Wlc_NtkForEachCo( p, pObj, i ) + Wlc_NtkCreateLevels_rec( p, pObj ); + return Vec_IntFindMax( &p->vLevels ); +} + +/**Function************************************************************* + Synopsis [Collects statistics for each side of the miter.] Description [] diff --git a/src/base/wlc/wlcShow.c b/src/base/wlc/wlcShow.c index dcd98ebc..6257fb6e 100644 --- a/src/base/wlc/wlcShow.c +++ b/src/base/wlc/wlcShow.c @@ -66,7 +66,11 @@ void Wlc_NtkDumpDot( Wlc_Ntk_t * p, char * pFileName, Vec_Int_t * vBold ) pNode->Mark = 1; // compute levels - LevelMax = 1 + Wlc_NtkCreateLevelsRev( p ); + LevelMax = 1 + Wlc_NtkCreateLevels( p ); + +// Wlc_NtkForEachObj( p, pNode, i ) +// printf( "Obj=%d Lev=%d\n", i, Wlc_ObjLevel(p, pNode) ); +// printf( "\n" ); // write the DOT header fprintf( pFile, "# %s\n", "WLC structure generated by ABC" ); @@ -188,7 +192,7 @@ void Wlc_NtkDumpDot( Wlc_Ntk_t * p, char * pFileName, Vec_Int_t * vBold ) if ( pNode->Type == WLC_OBJ_CONST ) { //char * pName = Wlc_ObjName(p, i); - fprintf( pFile, " Node%d [label = \"%d\'h", i, Wlc_ObjRange(pNode) ); + fprintf( pFile, " Node%d [label = \"%d:%d\'h", i, i, Wlc_ObjRange(pNode) ); if ( Wlc_ObjRange(pNode) > 64 ) { Abc_TtPrintHexArrayRev( pFile, (word *)Wlc_ObjConstValue(pNode), 16 ); @@ -201,15 +205,15 @@ void Wlc_NtkDumpDot( Wlc_Ntk_t * p, char * pFileName, Vec_Int_t * vBold ) else if ( pNode->Type == WLC_OBJ_BUF || pNode->Type == WLC_OBJ_MUX ) fprintf( pFile, " Node%d [label = \"%d\"", i, Wlc_ObjRange(pNode) ); else if ( pNode->Type >= WLC_OBJ_LOGIC_NOT && pNode->Type <= WLC_OBJ_COMP_MOREEQU ) - fprintf( pFile, " Node%d [label = \"%s\"", i, Wlc_ObjTypeName(pNode) ); + fprintf( pFile, " Node%d [label = \"%d:%s\"", i, i, Wlc_ObjTypeName(pNode) ); else - fprintf( pFile, " Node%d [label = \"%s %d\"", i, Wlc_ObjTypeName(pNode), Wlc_ObjRange(pNode) ); + fprintf( pFile, " Node%d [label = \"%d:%s %d\"", i, i, Wlc_ObjTypeName(pNode), Wlc_ObjRange(pNode) ); if ( pNode->Type == WLC_OBJ_ARI_MULTI ) fprintf( pFile, ", shape = doublecircle" ); else if ( pNode->Type >= WLC_OBJ_COMP_EQU && pNode->Type <= WLC_OBJ_COMP_MOREEQU ) fprintf( pFile, ", shape = diamond" ); - else if ( pNode->Type == WLC_OBJ_BIT_SELECT || pNode->Type == WLC_OBJ_BIT_CONCAT ) + else if ( pNode->Type == WLC_OBJ_BIT_SELECT || pNode->Type == WLC_OBJ_BIT_CONCAT || pNode->Type == WLC_OBJ_FF ) fprintf( pFile, ", shape = box" ); else if ( pNode->Type == WLC_OBJ_BUF || pNode->Type == WLC_OBJ_BIT_ZEROPAD || pNode->Type == WLC_OBJ_BIT_SIGNEXT ) fprintf( pFile, ", shape = triangle" ); @@ -237,7 +241,7 @@ void Wlc_NtkDumpDot( Wlc_Ntk_t * p, char * pFileName, Vec_Int_t * vBold ) { if ( vBold && !pNode->Mark ) continue; - fprintf( pFile, " Node%d [label = \"%s %d\"", Wlc_ObjId(p, pNode), Wlc_ObjName(p, Wlc_ObjId(p, pNode)), Wlc_ObjRange(pNode) ); + fprintf( pFile, " Node%d [label = \"%d:%s %d\"", Wlc_ObjId(p, pNode), Wlc_ObjId(p, pNode), Wlc_ObjName(p, Wlc_ObjId(p, pNode)), Wlc_ObjRange(pNode) ); fprintf( pFile, ", shape = %s", i < Wlc_NtkPiNum(p) ? "triangle" : "box" ); fprintf( pFile, ", color = coral, fillcolor = coral" ); fprintf( pFile, "];\n" ); @@ -298,7 +302,7 @@ void Wlc_NtkDumpDot( Wlc_Ntk_t * p, char * pFileName, Vec_Int_t * vBold ) if ( vBold && !pNode->Mark ) continue; // generate the edge from this node to the next - Wlc_ObjForEachFanin( pNode, iFanin, k ) + Wlc_ObjForEachFanin( pNode, iFanin, k ) if ( iFanin ) { fprintf( pFile, "Node%d", i ); fprintf( pFile, " -> " ); |