diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2018-09-30 23:37:02 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2018-09-30 23:37:02 -0700 |
commit | 6f6dba429e3f9d030fcc5a141a2554d7a5d6b5ee (patch) | |
tree | b5ad0df35ad3e87933b1a562892c74b87a62be0d /src/base/abc | |
parent | 6159c95ab329a5217e2fd6e461f978da7171e72c (diff) | |
download | abc-6f6dba429e3f9d030fcc5a141a2554d7a5d6b5ee.tar.gz abc-6f6dba429e3f9d030fcc5a141a2554d7a5d6b5ee.tar.bz2 abc-6f6dba429e3f9d030fcc5a141a2554d7a5d6b5ee.zip |
Visualizingn BDDs without complemented edges in 'show_bdd'.
Diffstat (limited to 'src/base/abc')
-rw-r--r-- | src/base/abc/abcShow.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/base/abc/abcShow.c b/src/base/abc/abcShow.c index e7badb12..f91397df 100644 --- a/src/base/abc/abcShow.c +++ b/src/base/abc/abcShow.c @@ -85,12 +85,13 @@ void Abc_NodeShowBddOne( DdManager * dd, DdNode * bFunc ) SeeAlso [] ***********************************************************************/ -void Abc_NodeShowBdd( Abc_Obj_t * pNode ) +void Abc_NodeShowBdd( Abc_Obj_t * pNode, int fCompl ) { FILE * pFile; Vec_Ptr_t * vNamesIn; char FileNameDot[200]; char * pNameOut; + DdManager * dd = (DdManager *)pNode->pNtk->pManFunc; assert( Abc_NtkIsBddLogic(pNode->pNtk) ); // create the file name @@ -105,7 +106,14 @@ void Abc_NodeShowBdd( Abc_Obj_t * pNode ) // set the node names vNamesIn = Abc_NodeGetFaninNames( pNode ); pNameOut = Abc_ObjName(pNode); - Cudd_DumpDot( (DdManager *)pNode->pNtk->pManFunc, 1, (DdNode **)&pNode->pData, (char **)vNamesIn->pArray, &pNameOut, pFile ); + if ( fCompl ) + Cudd_DumpDot( dd, 1, (DdNode **)&pNode->pData, (char **)vNamesIn->pArray, &pNameOut, pFile ); + else + { + DdNode * bAdd = Cudd_BddToAdd( dd, (DdNode *)pNode->pData ); Cudd_Ref( bAdd ); + Cudd_DumpDot( dd, 1, (DdNode **)&bAdd, (char **)vNamesIn->pArray, &pNameOut, pFile ); + Cudd_RecursiveDeref( dd, bAdd ); + } Abc_NodeFreeNames( vNamesIn ); Abc_NtkCleanCopy( pNode->pNtk ); fclose( pFile ); @@ -113,7 +121,7 @@ void Abc_NodeShowBdd( Abc_Obj_t * pNode ) // visualize the file Abc_ShowFile( FileNameDot ); } -void Abc_NtkShowBdd( Abc_Ntk_t * pNtk ) +void Abc_NtkShowBdd( Abc_Ntk_t * pNtk, int fCompl ) { char FileNameDot[200]; char ** ppNamesIn, ** ppNamesOut; @@ -148,7 +156,18 @@ void Abc_NtkShowBdd( Abc_Ntk_t * pNtk ) // set the node names ppNamesIn = Abc_NtkCollectCioNames( pNtk, 0 ); ppNamesOut = Abc_NtkCollectCioNames( pNtk, 1 ); - Cudd_DumpDot( dd, Abc_NtkCoNum(pNtk), (DdNode **)Vec_PtrArray(vFuncsGlob), ppNamesIn, ppNamesOut, pFile ); + if ( fCompl ) + Cudd_DumpDot( dd, Abc_NtkCoNum(pNtk), (DdNode **)Vec_PtrArray(vFuncsGlob), ppNamesIn, ppNamesOut, pFile ); + else + { + DdNode ** pbAdds = ABC_ALLOC( DdNode *, Vec_PtrSize(vFuncsGlob) ); + Vec_PtrForEachEntry( DdNode *, vFuncsGlob, bFunc, i ) + { pbAdds[i] = Cudd_BddToAdd( dd, bFunc ); Cudd_Ref( pbAdds[i] ); } + Cudd_DumpDot( dd, Abc_NtkCoNum(pNtk), pbAdds, ppNamesIn, ppNamesOut, pFile ); + Vec_PtrForEachEntry( DdNode *, vFuncsGlob, bFunc, i ) + Cudd_RecursiveDeref( dd, pbAdds[i] ); + ABC_FREE( pbAdds ); + } ABC_FREE( ppNamesIn ); ABC_FREE( ppNamesOut ); fclose( pFile ); @@ -166,8 +185,8 @@ void Abc_NtkShowBdd( Abc_Ntk_t * pNtk ) } #else -void Abc_NodeShowBdd( Abc_Obj_t * pNode ) {} -void Abc_NtkShowBdd( Abc_Ntk_t * pNtk ) {} +void Abc_NodeShowBdd( Abc_Obj_t * pNode, int fCompl ) {} +void Abc_NtkShowBdd( Abc_Ntk_t * pNtk, int fCompl ) {} #endif /**Function************************************************************* |