51 int LevelMax, Prev, Level, i;
53 if ( Aig_ManNodeNum(pMan) > 200 )
55 fprintf( stdout,
"Cannot visualize AIG with more than 200 nodes.\n" );
58 if ( (pFile = fopen( pFileName,
"w" )) == NULL )
60 fprintf( stdout,
"Cannot open the intermediate file \"%s\".\n", pFileName );
73 pNode->
Level = LevelMax;
76 fprintf( pFile,
"# %s\n",
"AIG structure generated by IVY package" );
77 fprintf( pFile,
"\n" );
78 fprintf( pFile,
"digraph AIG {\n" );
79 fprintf( pFile,
"size = \"7.5,10\";\n" );
82 fprintf( pFile,
"center = true;\n" );
86 fprintf( pFile,
"edge [dir = back];\n" );
87 fprintf( pFile,
"\n" );
90 fprintf( pFile,
"{\n" );
91 fprintf( pFile,
" node [shape = plaintext];\n" );
92 fprintf( pFile,
" edge [style = invis];\n" );
93 fprintf( pFile,
" LevelTitle1 [label=\"\"];\n" );
94 fprintf( pFile,
" LevelTitle2 [label=\"\"];\n" );
96 for ( Level = LevelMax; Level >= 0; Level-- )
99 fprintf( pFile,
" Level%d", Level );
100 fprintf( pFile,
" [label = " );
102 fprintf( pFile,
"\"" );
103 fprintf( pFile,
"\"" );
104 fprintf( pFile,
"];\n" );
108 fprintf( pFile,
" LevelTitle1 -> LevelTitle2 ->" );
109 for ( Level = LevelMax; Level >= 0; Level-- )
112 fprintf( pFile,
" Level%d", Level );
115 fprintf( pFile,
" ->" );
117 fprintf( pFile,
";" );
119 fprintf( pFile,
"\n" );
120 fprintf( pFile,
"}" );
121 fprintf( pFile,
"\n" );
122 fprintf( pFile,
"\n" );
125 fprintf( pFile,
"{\n" );
126 fprintf( pFile,
" rank = same;\n" );
127 fprintf( pFile,
" LevelTitle1;\n" );
128 fprintf( pFile,
" title1 [shape=plaintext,\n" );
129 fprintf( pFile,
" fontsize=20,\n" );
130 fprintf( pFile,
" fontname = \"Times-Roman\",\n" );
131 fprintf( pFile,
" label=\"" );
132 fprintf( pFile,
"%s",
"AIG structure visualized by ABC" );
133 fprintf( pFile,
"\\n" );
134 fprintf( pFile,
"Benchmark \\\"%s\\\". ",
"aig" );
136 fprintf( pFile,
"\"\n" );
137 fprintf( pFile,
" ];\n" );
138 fprintf( pFile,
"}" );
139 fprintf( pFile,
"\n" );
140 fprintf( pFile,
"\n" );
143 fprintf( pFile,
"{\n" );
144 fprintf( pFile,
" rank = same;\n" );
145 fprintf( pFile,
" LevelTitle2;\n" );
146 fprintf( pFile,
" title2 [shape=plaintext,\n" );
147 fprintf( pFile,
" fontsize=18,\n" );
148 fprintf( pFile,
" fontname = \"Times-Roman\",\n" );
149 fprintf( pFile,
" label=\"" );
150 fprintf( pFile,
"The set contains %d logic nodes and spans %d levels.", Aig_ManNodeNum(pMan), LevelMax );
151 fprintf( pFile,
"\\n" );
152 fprintf( pFile,
"\"\n" );
153 fprintf( pFile,
" ];\n" );
154 fprintf( pFile,
"}" );
155 fprintf( pFile,
"\n" );
156 fprintf( pFile,
"\n" );
159 fprintf( pFile,
"{\n" );
160 fprintf( pFile,
" rank = same;\n" );
162 fprintf( pFile,
" Level%d;\n", LevelMax );
175 fprintf( pFile,
" Node%d [label = \"%d\"", pNode->
Id, pNode->
Id );
177 fprintf( pFile,
", shape = %s",
"invtriangle" );
178 fprintf( pFile,
", color = coral, fillcolor = coral" );
179 fprintf( pFile,
"];\n" );
181 fprintf( pFile,
"}" );
182 fprintf( pFile,
"\n" );
183 fprintf( pFile,
"\n" );
186 for ( Level = LevelMax - 1; Level > 0; Level-- )
188 fprintf( pFile,
"{\n" );
189 fprintf( pFile,
" rank = same;\n" );
191 fprintf( pFile,
" Level%d;\n", Level );
194 if ( (
int)pNode->
Level != Level )
203 fprintf( pFile,
" Node%d [label = \"%d\"", pNode->
Id, pNode->
Id );
205 fprintf( pFile,
", shape = ellipse" );
206 if ( vBold && pNode->
fMarkB )
207 fprintf( pFile,
", style = filled" );
208 fprintf( pFile,
"];\n" );
210 fprintf( pFile,
"}" );
211 fprintf( pFile,
"\n" );
212 fprintf( pFile,
"\n" );
216 fprintf( pFile,
"{\n" );
217 fprintf( pFile,
" rank = same;\n" );
219 fprintf( pFile,
" Level%d;\n", 0 );
221 if ( Aig_ObjRefs(Aig_ManConst1(pMan)) > 0 )
223 pNode = Aig_ManConst1(pMan);
225 fprintf( pFile,
" Node%d [label = \"Const1\"", pNode->
Id );
226 fprintf( pFile,
", shape = ellipse" );
227 fprintf( pFile,
", color = coral, fillcolor = coral" );
228 fprintf( pFile,
"];\n" );
242 fprintf( pFile,
" Node%d [label = \"%d\"", pNode->
Id, pNode->
Id );
244 fprintf( pFile,
", shape = %s",
"triangle" );
245 fprintf( pFile,
", color = coral, fillcolor = coral" );
246 fprintf( pFile,
"];\n" );
248 fprintf( pFile,
"}" );
249 fprintf( pFile,
"\n" );
250 fprintf( pFile,
"\n" );
253 fprintf( pFile,
"title1 -> title2 [style = invis];\n" );
255 fprintf( pFile,
"title2 -> Node%d [style = invis];\n", pNode->
Id );
261 fprintf( pFile,
"Node%d -> Node%d [style = invis];\n", Prev, pNode->
Id );
268 if ( !Aig_ObjIsNode(pNode) && !Aig_ObjIsCo(pNode) && !Aig_ObjIsBuf(pNode) )
271 fprintf( pFile,
"Node%d", pNode->
Id );
272 fprintf( pFile,
" -> " );
273 fprintf( pFile,
"Node%d", Aig_ObjFaninId0(pNode) );
274 fprintf( pFile,
" [" );
275 fprintf( pFile,
"style = %s", Aig_ObjFaninC0(pNode)?
"dotted" :
"bold" );
278 fprintf( pFile,
"]" );
279 fprintf( pFile,
";\n" );
280 if ( !Aig_ObjIsNode(pNode) )
283 fprintf( pFile,
"Node%d", pNode->
Id );
284 fprintf( pFile,
" -> " );
285 fprintf( pFile,
"Node%d", Aig_ObjFaninId1(pNode) );
286 fprintf( pFile,
" [" );
287 fprintf( pFile,
"style = %s", Aig_ObjFaninC1(pNode)?
"dotted" :
"bold" );
290 fprintf( pFile,
"]" );
291 fprintf( pFile,
";\n" );
316 fprintf( pFile,
"}" );
317 fprintf( pFile,
"\n" );
318 fprintf( pFile,
"\n" );
327 pNode->
Level = Aig_ObjFanin0(pNode)->Level;
343 extern void Abc_ShowFile(
char * FileNameDot,
int fKeepDot );
344 char FileNameDot[200];
349 if ( (pFile = fopen( FileNameDot,
"w" )) == NULL )
351 fprintf( stdout,
"Cannot open the intermediate file \"%s\".\n", FileNameDot );
ABC_NAMESPACE_IMPL_START void Abc_ShowFile(char *FileNameDot, int fKeepDot)
DECLARATIONS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_IMPL_START void Aig_WriteDotAig(Aig_Man_t *pMan, char *pFileName, int fHaig, Vec_Ptr_t *vBold)
DECLARATIONS ///.
void Aig_ManShow(Aig_Man_t *pMan, int fHaig, Vec_Ptr_t *vBold)
#define Aig_ManForEachObj(p, pObj, i)
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
struct Aig_Obj_t_ Aig_Obj_t
int Aig_ManLevels(Aig_Man_t *p)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.