Add error message that only 32 bit immediate CA delays are supported.

The .delay (x,y,z) functor and the get_number_immediate() function
only supports 32 bit delay values. This patch adds an error message
if the user passes a larger, but valid value.
(cherry picked from commit 1f0857606a)
This commit is contained in:
Cary R 2009-10-22 17:48:07 -07:00 committed by Stephen Williams
parent ab5b9271f3
commit 391ef78d42
2 changed files with 42 additions and 6 deletions

View File

@ -53,6 +53,17 @@ static void draw_lpm_mux_ab(ivl_lpm_t net, const char*muxz)
assert( ! number_is_unknown(d_fall));
assert( ! number_is_unknown(d_decay));
// For now .delay (x,y,z) only supports a 32 bit delay value.
if ((! number_is_immediate(d_rise, 32, 0)) ||
(! number_is_immediate(d_fall, 32, 0)) ||
(! number_is_immediate(d_decay, 32, 0))) {
fprintf(stderr, "%s:%u: vvp-tgt sorry: only 32 bit "
"delays are supported in a continuous "
"assignment.\n", ivl_expr_file(d_rise),
ivl_expr_lineno(d_rise));
exit(1);
}
fprintf(vvp_out, "L_%p .delay (%lu,%lu,%lu) L_%p/d;\n",
net, get_number_immediate(d_rise),
get_number_immediate(d_fall),

View File

@ -869,17 +869,29 @@ static void draw_logic_in_scope(ivl_net_logic_t lptr)
/* If there are delays, then draw the delay functor to carry
that delay. This is the final output. */
if (need_delay_flag) {
ivl_expr_t rise_exp = ivl_logic_delay(lptr,0);
ivl_expr_t fall_exp = ivl_logic_delay(lptr,1);
ivl_expr_t decay_exp = ivl_logic_delay(lptr,2);
ivl_expr_t rise_exp = ivl_logic_delay(lptr, 0);
ivl_expr_t fall_exp = ivl_logic_delay(lptr, 1);
ivl_expr_t decay_exp = ivl_logic_delay(lptr, 2);
if (number_is_immediate(rise_exp,64,0)
&& number_is_immediate(fall_exp,64,0)
&& number_is_immediate(decay_exp,64,0)) {
if (number_is_immediate(rise_exp, 64, 0)
&& number_is_immediate(fall_exp, 64, 0)
&& number_is_immediate(decay_exp, 64, 0)) {
assert(! number_is_unknown(rise_exp));
assert(! number_is_unknown(fall_exp));
assert(! number_is_unknown(decay_exp));
// For now .delay (x,y,z) only supports a 32 bit delay value.
if ((! number_is_immediate(rise_exp, 32, 0)) ||
(! number_is_immediate(fall_exp, 32, 0)) ||
(! number_is_immediate(decay_exp, 32, 0))) {
fprintf(stderr, "%s:%u: vvp-tgt sorry: only 32 bit "
"delays are supported in a continuous "
"assignment.\n", ivl_expr_file(rise_exp),
ivl_expr_lineno(rise_exp));
exit(1);
}
fprintf(vvp_out, "L_%p .delay (%lu,%lu,%lu) L_%p/d;\n",
lptr, get_number_immediate(rise_exp),
get_number_immediate(fall_exp),
@ -1085,9 +1097,22 @@ static const char* draw_lpm_output_delay(ivl_lpm_t net)
assert(number_is_immediate(d_rise, 64, 0));
assert(number_is_immediate(d_fall, 64, 0));
assert(number_is_immediate(d_decay, 64, 0));
assert(! number_is_unknown(d_rise));
assert(! number_is_unknown(d_fall));
assert(! number_is_unknown(d_decay));
// For now .delay (x,y,z) only supports a 32 bit delay value.
if ((! number_is_immediate(d_rise, 32, 0)) ||
(! number_is_immediate(d_fall, 32, 0)) ||
(! number_is_immediate(d_decay, 32, 0))) {
fprintf(stderr, "%s:%u: vvp-tgt sorry: only 32 bit "
"delays are supported in a continuous "
"assignment.\n", ivl_expr_file(d_rise),
ivl_expr_lineno(d_rise));
exit(1);
}
dly = "/d";
fprintf(vvp_out, "L_%p .delay (%lu,%lu,%lu) L_%p/d;\n",
net, get_number_immediate(d_rise),