static void show_primitive(ivl_udp_t net, unsigned ref_count) { unsigned rdx; fprintf(out, "primitive %s (referenced %u times)\n", ivl_udp_name(net), ref_count); if (ivl_udp_sequ(net)) fprintf(out, " reg out = %c;\n", ivl_udp_init(net)); else fprintf(out, " wire out;\n"); fprintf(out, " table\n"); for (rdx = 0 ; rdx < ivl_udp_rows(net) ; rdx += 1) { /* Each row has the format: Combinational: iii...io Sequential: oiii...io In the sequential case, the o value in the front is the current output value. */ unsigned idx; const char*row = ivl_udp_row(net,rdx); fprintf(out, " "); if (ivl_udp_sequ(net)) fprintf(out, " cur=%c :", *row++); for (idx = 0 ; idx < ivl_udp_nin(net) ; idx += 1) fprintf(out, " %c", *row++); fprintf(out, " : out=%c\n", *row++); } fprintf(out, " endtable\n"); fprintf(out, "endprimitive\n"); }
static void draw_udp_def(ivl_udp_t udp) { unsigned init; unsigned i; switch (ivl_udp_init(udp)) { case '0': init = 0; break; case '1': init = 1; break; default: init = 2; break; } if (ivl_udp_sequ(udp)) fprintf(vvp_out, "UDP_%s .udp/sequ \"%s\", %d, %d", vvp_mangle_id(ivl_udp_name(udp)), vvp_mangle_name(ivl_udp_name(udp)), ivl_udp_nin(udp), init ); else fprintf(vvp_out, "UDP_%s .udp/comb \"%s\", %d", vvp_mangle_id(ivl_udp_name(udp)), vvp_mangle_name(ivl_udp_name(udp)), ivl_udp_nin(udp)); for (i=0; i<ivl_udp_rows(udp); i++) fprintf(vvp_out, "\n ,\"%s\"", ivl_udp_row(udp, i) ); fprintf(vvp_out, ";\n"); }