vlog95: Add SV queue specific error message and code generation.

This commit is contained in:
Cary R 2014-08-25 16:35:54 -07:00
parent e5f49baaac
commit 4fb91ec7c7
3 changed files with 13 additions and 2 deletions

View File

@ -855,9 +855,11 @@ static void emit_expr_select(ivl_scope_t scope, ivl_expr_t expr, unsigned wid)
ivl_expr_t sig_expr = ivl_expr_oper1(expr);
ivl_select_type_t sel_type = ivl_expr_sel_type(expr);
(void)wid; /* Parameter is not used. */
/* If this is a dynamic array select, translate it differently. */
/* If this is a dynamic array or queue select, translate the
* select differently. */
if ((ivl_expr_type(sig_expr) == IVL_EX_SIGNAL) &&
(ivl_signal_data_type(ivl_expr_signal(sig_expr)) == IVL_VT_DARRAY)) {
((ivl_signal_data_type(ivl_expr_signal(sig_expr)) == IVL_VT_DARRAY) ||
(ivl_signal_data_type(ivl_expr_signal(sig_expr)) == IVL_VT_QUEUE))) {
assert(sel_expr);
emit_select_name(scope, sig_expr);
fprintf(vlog_out, "[");

View File

@ -2127,6 +2127,7 @@ void dump_nexus_information(ivl_scope_t scope, ivl_nexus_t nex)
case IVL_VT_STRING: fprintf(stderr, " string"); break;
case IVL_VT_DARRAY: fprintf(stderr, " dynamic array");
case IVL_VT_CLASS: fprintf(stderr, " class");
case IVL_VT_QUEUE: fprintf(stderr, " queue");
break;
}
if (ivl_signal_signed(sig)) fprintf(stderr, " <signed>");

View File

@ -125,6 +125,14 @@ static void emit_var_def(ivl_signal_t sig)
ivl_signal_file(sig),
ivl_signal_lineno(sig), ivl_signal_basename(sig));
vlog_errors += 1;
} else if (ivl_signal_data_type(sig) == IVL_VT_QUEUE) {
fprintf(vlog_out, "<queue> ");
emit_sig_id(sig);
fprintf(stderr, "%s:%u: vlog95 error: SystemVerilog queues "
"(%s) are not supported.\n",
ivl_signal_file(sig),
ivl_signal_lineno(sig), ivl_signal_basename(sig));
vlog_errors += 1;
} else {
int msb, lsb;
get_sig_msb_lsb(sig, &msb, &lsb);