DECLARATIONS ///.
Date [Ver. 1.0. Started - May 11, 2006.]
] FUNCTION DEFINITIONS /// Function*************************************************************
48{
49 FILE * pFile;
51 int LevelMax, Prev, Level, i;
52
53 if ( Aig_ManNodeNum(pMan) > 200 )
54 {
55 fprintf( stdout, "Cannot visualize AIG with more than 200 nodes.\n" );
56 return;
57 }
58 if ( (pFile = fopen( pFileName, "w" )) == NULL )
59 {
60 fprintf( stdout, "Cannot open the intermediate file \"%s\".\n", pFileName );
61 return;
62 }
63
64
65 if ( vBold )
68
69
70
73 pNode->
Level = LevelMax;
74
75
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" );
80
81
82 fprintf( pFile, "center = true;\n" );
83
84
85
86 fprintf( pFile, "edge [dir = back];\n" );
87 fprintf( pFile, "\n" );
88
89
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" );
95
96 for ( Level = LevelMax; Level >= 0; Level-- )
97 {
98
99 fprintf( pFile, " Level%d", Level );
100 fprintf( pFile, " [label = " );
101
102 fprintf( pFile, "\"" );
103 fprintf( pFile, "\"" );
104 fprintf( pFile, "];\n" );
105 }
106
107
108 fprintf( pFile, " LevelTitle1 -> LevelTitle2 ->" );
109 for ( Level = LevelMax; Level >= 0; Level-- )
110 {
111
112 fprintf( pFile, " Level%d", Level );
113
114 if ( Level != 0 )
115 fprintf( pFile, " ->" );
116 else
117 fprintf( pFile, ";" );
118 }
119 fprintf( pFile, "\n" );
120 fprintf( pFile, "}" );
121 fprintf( pFile, "\n" );
122 fprintf( pFile, "\n" );
123
124
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" );
135
136 fprintf( pFile, "\"\n" );
137 fprintf( pFile, " ];\n" );
138 fprintf( pFile, "}" );
139 fprintf( pFile, "\n" );
140 fprintf( pFile, "\n" );
141
142
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" );
157
158
159 fprintf( pFile, "{\n" );
160 fprintf( pFile, " rank = same;\n" );
161
162 fprintf( pFile, " Level%d;\n", LevelMax );
163
165 {
166
167
168
169
170
171
172
173
174
175 fprintf( pFile,
" Node%d [label = \"%d\"", pNode->
Id, pNode->
Id );
176
177 fprintf( pFile, ", shape = %s", "invtriangle" );
178 fprintf( pFile, ", color = coral, fillcolor = coral" );
179 fprintf( pFile, "];\n" );
180 }
181 fprintf( pFile, "}" );
182 fprintf( pFile, "\n" );
183 fprintf( pFile, "\n" );
184
185
186 for ( Level = LevelMax - 1; Level > 0; Level-- )
187 {
188 fprintf( pFile, "{\n" );
189 fprintf( pFile, " rank = same;\n" );
190
191 fprintf( pFile, " Level%d;\n", Level );
193 {
194 if ( (
int)pNode->
Level != Level )
195 continue;
196
197
198
199
200
201
202
203 fprintf( pFile,
" Node%d [label = \"%d\"", pNode->
Id, pNode->
Id );
204
205 fprintf( pFile, ", shape = ellipse" );
206 if ( vBold && pNode->
fMarkB )
207 fprintf( pFile, ", style = filled" );
208 fprintf( pFile, "];\n" );
209 }
210 fprintf( pFile, "}" );
211 fprintf( pFile, "\n" );
212 fprintf( pFile, "\n" );
213 }
214
215
216 fprintf( pFile, "{\n" );
217 fprintf( pFile, " rank = same;\n" );
218
219 fprintf( pFile, " Level%d;\n", 0 );
220
221 if ( Aig_ObjRefs(Aig_ManConst1(pMan)) > 0 )
222 {
223 pNode = Aig_ManConst1(pMan);
224
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" );
229 }
230
232 {
233
234
235
236
237
238
239
240
241
242 fprintf( pFile,
" Node%d [label = \"%d\"", pNode->
Id, pNode->
Id );
243
244 fprintf( pFile, ", shape = %s", "triangle" );
245 fprintf( pFile, ", color = coral, fillcolor = coral" );
246 fprintf( pFile, "];\n" );
247 }
248 fprintf( pFile, "}" );
249 fprintf( pFile, "\n" );
250 fprintf( pFile, "\n" );
251
252
253 fprintf( pFile, "title1 -> title2 [style = invis];\n" );
255 fprintf( pFile,
"title2 -> Node%d [style = invis];\n", pNode->
Id );
256
257 Prev = -1;
259 {
260 if ( i > 0 )
261 fprintf( pFile,
"Node%d -> Node%d [style = invis];\n", Prev, pNode->
Id );
263 }
264
265
267 {
268 if ( !Aig_ObjIsNode(pNode) && !Aig_ObjIsCo(pNode) && !Aig_ObjIsBuf(pNode) )
269 continue;
270
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" );
276
277
278 fprintf( pFile, "]" );
279 fprintf( pFile, ";\n" );
280 if ( !Aig_ObjIsNode(pNode) )
281 continue;
282
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" );
288
289
290 fprintf( pFile, "]" );
291 fprintf( pFile, ";\n" );
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314 }
315
316 fprintf( pFile, "}" );
317 fprintf( pFile, "\n" );
318 fprintf( pFile, "\n" );
319 fclose( pFile );
320
321
322 if ( vBold )
325
327 pNode->
Level = Aig_ObjFanin0(pNode)->Level;
328}
#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)
#define Aig_ManForEachCo(p, pObj, i)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.