/* * If needed, draw a .delay node to delay the output from the LPM * device. Return the "/d" string if we drew this .delay node, or the * "" string if the node was not needed. The caller uses that string * to modify labels that are generated. */ static const char* draw_lpm_output_delay(ivl_lpm_t net) { ivl_expr_t d_rise = ivl_lpm_delay(net, 0); ivl_expr_t d_fall = ivl_lpm_delay(net, 1); ivl_expr_t d_decay = ivl_lpm_delay(net, 2); const char*dly = ""; if (d_rise != 0) { assert(number_is_immediate(d_rise, 64, 0)); assert(number_is_immediate(d_fall, 64, 0)); assert(number_is_immediate(d_decay, 64, 0)); dly = "/d"; fprintf(vvp_out, "L_%p .delay (%lu,%lu,%lu) L_%p/d;\n", net, get_number_immediate(d_rise), get_number_immediate(d_rise), get_number_immediate(d_rise), net); } return dly; }
static void show_lpm_delays(ivl_lpm_t net) { ivl_expr_t rise = ivl_lpm_delay(net, 0); ivl_expr_t fall = ivl_lpm_delay(net, 1); ivl_expr_t decay= ivl_lpm_delay(net, 2); if (rise==0 && fall==0 && decay==0) return; fprintf(out, " #DELAYS\n"); if (rise) show_expression(rise, 8); else fprintf(out, " ERROR: missing rise delay\n"); if (fall) show_expression(fall, 8); else fprintf(out, " ERROR: missing fall delay\n"); if (decay) show_expression(decay, 8); else fprintf(out, " ERROR: missing decay delay\n"); fprintf(out, " #END DELAYS\n"); }