142 int k, j, iObj, iFanin;
144 fprintf( pFile,
"module %s ( ",
p->pName );
145 fprintf( pFile,
"\n " );
146 if ( Wln_NtkCiNum(
p) > 0 )
149 fprintf( pFile,
",\n " );
151 if ( Wln_NtkCoNum(
p) > 0 )
153 fprintf( pFile,
" );\n" );
156 int End = Wln_ObjRangeEnd(
p, iObj);
157 int Beg = Wln_ObjRangeBeg(
p, iObj);
158 int nDigits = Abc_Base10Log(Abc_AbsInt(End)+1) + Abc_Base10Log(Abc_AbsInt(Beg)+1) + (int)(End < 0) + (int)(Beg < 0);
159 sprintf( Range,
"%s[%d:%d]%*s", (!
p->fSmtLib && Wln_ObjIsSigned(
p, iObj)) ?
"signed ":
" ", End, Beg, 8-nDigits,
"" );
160 fprintf( pFile,
" " );
161 if ( Wln_ObjIsCi(
p, iObj) )
162 fprintf( pFile,
"input " );
163 else if ( Wln_ObjIsCo(
p, iObj) )
164 fprintf( pFile,
"output " );
166 fprintf( pFile,
" " );
167 if ( Wln_ObjIsCio(
p, iObj) )
169 fprintf( pFile,
"wire %s %s ;\n", Range,
Wln_ObjName(
p, iObj) );
170 if ( Wln_ObjIsCi(
p, iObj) )
172 fprintf( pFile,
" assign " );
177 fprintf( pFile,
"reg %s ", Range );
179 fprintf( pFile,
"wire %s ", Range );
183 fprintf( pFile,
"%s ; table%d",
Wln_ObjName(
p, iObj), Wln_ObjFanin1(
p, iObj) );
184 fprintf( pFile,
" s%d_Index(%s, ", iObj,
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
191 fprintf( pFile,
" lut%d (%s, ", iObj,
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
192 for ( k = 1; k < Wln_ObjFaninNum(
p, iObj); k++ )
193 fprintf( pFile,
"%s, ",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, k)) );
196 else if ( Wln_ObjIsConst(
p, iObj) )
201 int Num0 = Wln_ObjFanin1(
p, iObj);
202 int Num1 = Wln_ObjRange(
p, iObj) - Num0;
203 assert( Num0 > 0 && Num0 < Wln_ObjRange(
p, iObj) );
206 fprintf( pFile,
"(%s >> %d) | (%s << %d)",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)), Num0,
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)), Num1 );
208 fprintf( pFile,
"(%s << %d) | (%s >> %d)",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)), Num0,
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)), Num1 );
213 fprintf( pFile,
" " );
214 fprintf( pFile,
"always @( " );
216 fprintf( pFile,
"%s%s", k ?
" or ":
"",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, k)) );
217 fprintf( pFile,
" )\n" );
218 fprintf( pFile,
" " );
219 fprintf( pFile,
"begin\n" );
220 fprintf( pFile,
" " );
221 fprintf( pFile,
"case ( %s )\n",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, 0)) );
225 fprintf( pFile,
" " );
226 fprintf( pFile,
"%d : %s = ", k-1,
Wln_ObjName(
p, iObj) );
227 fprintf( pFile,
"%s ;\n",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, k)) );
229 fprintf( pFile,
" " );
230 fprintf( pFile,
"endcase\n" );
231 fprintf( pFile,
" " );
232 fprintf( pFile,
"end\n" );
238 fprintf( pFile,
" " );
239 fprintf( pFile,
"always @( " );
241 fprintf( pFile,
"%s%s", k ?
" or ":
"",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, k)) );
242 fprintf( pFile,
" )\n" );
243 fprintf( pFile,
" " );
244 fprintf( pFile,
"begin\n" );
245 fprintf( pFile,
" " );
246 fprintf( pFile,
"case ( %s )\n",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, 0)) );
250 fprintf( pFile,
" " );
251 fprintf( pFile,
"%d\'b", Wln_ObjFaninNum(
p, iObj)-1 );
252 for ( j = Wln_ObjFaninNum(
p, iObj)-1; j > 0; j-- )
253 fprintf( pFile,
"%d", (
int)(j==k) );
255 fprintf( pFile,
"%s ;\n",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, k)) );
257 fprintf( pFile,
" " );
258 fprintf( pFile,
"default" );
260 fprintf( pFile,
"%d\'b", Wln_ObjRange(
p, iObj) );
261 for ( j = Wln_ObjRange(
p, iObj)-1; j >= 0; j-- )
262 fprintf( pFile,
"%d", 0 );
263 fprintf( pFile,
" ;\n" );
264 fprintf( pFile,
" " );
265 fprintf( pFile,
"endcase\n" );
266 fprintf( pFile,
" " );
267 fprintf( pFile,
"end\n" );
272 int nRange = Wln_ObjRange(
p, Wln_ObjFanin0(
p, iObj));
273 assert( (1 << nRange) == Wln_ObjRange(
p, iObj) );
275 for ( k = 0; k < Wln_ObjRange(
p, iObj); k++ )
277 fprintf( pFile,
" " );
278 fprintf( pFile,
"wire " );
280 for ( j = 0; j < nRange; j++ )
281 fprintf( pFile,
"%d", (k >> (nRange-1-j)) & 1 );
282 fprintf( pFile,
" = " );
283 for ( j = 0; j < nRange; j++ )
284 fprintf( pFile,
"%s%s%s[%d]",
285 j ?
" & ":
"", ((k >> (nRange-1-j)) & 1) ?
" ":
"~",
287 fprintf( pFile,
" ;\n" );
289 fprintf( pFile,
" " );
290 fprintf( pFile,
"assign %s = { ",
Wln_ObjName(
p, iObj) );
291 for ( k = Wln_ObjRange(
p, iObj)-1; k >= 0; k-- )
293 fprintf( pFile,
"%s%s_", k < Wln_ObjRange(
p, iObj)-1 ?
", ":
"",
Wln_ObjName(
p, iObj) );
294 for ( j = 0; j < nRange; j++ )
295 fprintf( pFile,
"%d", (k >> (nRange-1-j)) & 1 );
297 fprintf( pFile,
" } ;\n" );
304 fprintf( pFile,
" " );
305 fprintf( pFile,
"assign " );
306 fprintf( pFile,
"%s = %s ? %s + %s + %s : %s - %s - %s ;\n",
308 Wln_ObjName(
p, Wln_ObjFanin2(
p, iObj)),
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj,3)),
Wln_ObjName(
p, Wln_ObjFanin1(
p, iObj)),
318 fprintf( pFile,
" " );
319 fprintf( pFile,
"%s (", Wln_ObjType(
p, iObj) ==
ABC_OPER_RAMR ?
"ABC_READ" :
"ABC_WRITE" );
321 fprintf( pFile,
" .%s(%s),", k==0 ?
"mem_in" : (k==1 ?
"addr":
"data"),
Wln_ObjName(
p, iFanin) );
327 int nBitsMem = Wln_ObjRange(
p, Wln_ObjFanin(
p, iObj, 0) );
329 int nBitsDat = Wln_ObjType(
p, iObj) ==
ABC_OPER_RAMR ? Wln_ObjRange(
p, iObj) : Wln_ObjRange(
p, Wln_ObjFanin(
p, iObj, 2));
330 int Depth = nBitsMem / nBitsDat;
331 assert( nBitsMem % nBitsDat == 0 );
333 fprintf( pFile,
" " );
334 fprintf( pFile,
"%s_%d (", Wln_ObjType(
p, iObj) ==
ABC_OPER_RAMR ?
"CPL_MEM_READ" :
"CPL_MEM_WRITE", Depth );
336 fprintf( pFile,
" .%s(%s),", k==0 ?
"mem_data_in" : (k==1 ?
"addr_in":
"data_in"),
Wln_ObjName(
p, iFanin) );
337 fprintf( pFile,
" .%s(%s) ) ;\n",
"data_out",
Wln_ObjName(
p, iObj) );
350 fprintf( pFile,
"%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
353 fprintf( pFile,
"%s ? ",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
354 fprintf( pFile,
"%s : ",
Wln_ObjName(
p, Wln_ObjFanin1(
p, iObj)) );
355 fprintf( pFile,
"%s",
Wln_ObjName(
p, Wln_ObjFanin2(
p, iObj)) );
358 fprintf( pFile,
"-%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
360 fprintf( pFile,
"~%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
362 fprintf( pFile,
"!%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
364 fprintf( pFile,
"&%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
366 fprintf( pFile,
"|%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
368 fprintf( pFile,
"^%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
370 fprintf( pFile,
"~&%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
372 fprintf( pFile,
"~|%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
374 fprintf( pFile,
"~^%s",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
376 fprintf( pFile,
"%s [%d:%d]",
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)), Wln_ObjRangeEnd(
p, iObj), Wln_ObjRangeBeg(
p, iObj) );
378 fprintf( pFile,
"{ {%d{%s[%d]}}, %s }", Wln_ObjRange(
p, iObj) - Wln_ObjRange(
p, Wln_ObjFanin0(
p, iObj)),
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)), Wln_ObjRange(
p, Wln_ObjFanin0(
p, iObj)) - 1,
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
380 fprintf( pFile,
"{ {%d{1\'b0}}, %s }", Wln_ObjRange(
p, iObj) - Wln_ObjRange(
p, Wln_ObjFanin0(
p, iObj)),
Wln_ObjName(
p, Wln_ObjFanin0(
p, iObj)) );
383 fprintf( pFile,
"{" );
385 fprintf( pFile,
" %s%s",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, k)), k == Wln_ObjFaninNum(
p, iObj)-1 ?
"":
"," );
386 fprintf( pFile,
" }" );
390 fprintf( pFile,
"%s ",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, 0)) );
392 fprintf( pFile,
">>" );
394 fprintf( pFile,
">>>" );
396 fprintf( pFile,
"<<" );
398 fprintf( pFile,
"<<<" );
400 fprintf( pFile,
"&" );
402 fprintf( pFile,
"|" );
404 fprintf( pFile,
"^" );
406 fprintf( pFile,
"~&" );
408 fprintf( pFile,
"~|" );
410 fprintf( pFile,
"~^" );
412 fprintf( pFile,
"=>" );
414 fprintf( pFile,
"&&" );
416 fprintf( pFile,
"||" );
418 fprintf( pFile,
"^^" );
420 fprintf( pFile,
"==" );
422 fprintf( pFile,
"!=" );
424 fprintf( pFile,
"<" );
426 fprintf( pFile,
">" );
428 fprintf( pFile,
"<=" );
430 fprintf( pFile,
">=" );
432 fprintf( pFile,
"+" );
434 fprintf( pFile,
"-" );
436 fprintf( pFile,
"*" );
438 fprintf( pFile,
"/" );
440 fprintf( pFile,
"%%" );
442 fprintf( pFile,
"%%" );
444 fprintf( pFile,
"**" );
446 fprintf( pFile,
"@" );
448 fprintf( pFile,
"#" );
452 printf(
"Failed to write node \"%s\" with unknown operator type (%d).\n",
Wln_ObjName(
p, iObj), Wln_ObjType(
p, iObj) );
453 fprintf( pFile,
"???\n" );
456 fprintf( pFile,
" %s",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, 1)) );
458 fprintf( pFile,
" + %s",
Wln_ObjName(
p, Wln_ObjFanin(
p, iObj, 2)) );
461 fprintf( pFile,
" ;%s\n", (
p->fSmtLib && Wln_ObjIsSigned(
p, iObj)) ?
" // signed SMT-LIB operator" :
"" );
465 fprintf( pFile,
"\n" );
468 char * pInNames[8] = {
"d",
"clk",
"reset",
"set",
"enable",
"async",
"sre",
"init"};
469 fprintf( pFile,
" " );
470 fprintf( pFile,
"%s (",
"ABC_DFFRSE" );
472 if ( iFanin ) fprintf( pFile,
" .%s(%s),", pInNames[k],
Wln_ObjName(
p, iFanin) );
473 fprintf( pFile,
" .%s(%s) ) ;\n",
"q",
Wln_ObjName(
p, iObj) );
475 fprintf( pFile,
"\n" );
476 fprintf( pFile,
"endmodule\n\n" );