ivl: String to vector casting.
This commit is contained in:
parent
103828577b
commit
b12e00d875
16
elab_expr.cc
16
elab_expr.cc
|
|
@ -2445,7 +2445,7 @@ unsigned PECastType::test_width(Design*des, NetScope*scope, width_mode_t&wid)
|
||||||
|
|
||||||
else if(const netstring_t*use_string = dynamic_cast<const netstring_t*> (t)) {
|
else if(const netstring_t*use_string = dynamic_cast<const netstring_t*> (t)) {
|
||||||
expr_type_ = use_string->base_type();
|
expr_type_ = use_string->base_type();
|
||||||
expr_width_ = 1;
|
expr_width_ = 8;
|
||||||
signed_flag_= false;
|
signed_flag_= false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2487,6 +2487,20 @@ NetExpr* PECastType::elaborate_expr(Design*des, NetScope*scope,
|
||||||
return cast_to_int2(expr, expr_width_);
|
return cast_to_int2(expr, expr_width_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(const vector_type_t*vec = dynamic_cast<const vector_type_t*>(target_))
|
||||||
|
{
|
||||||
|
switch(vec->base_type) {
|
||||||
|
case IVL_VT_BOOL:
|
||||||
|
return cast_to_int2(expr, expr_width_);
|
||||||
|
|
||||||
|
case IVL_VT_LOGIC:
|
||||||
|
return cast_to_int4(expr, expr_width_);
|
||||||
|
|
||||||
|
default:
|
||||||
|
break; /* Suppress warnings */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cerr << get_fileline() << "sorry: I don't know how to cast expression." << endl;
|
cerr << get_fileline() << "sorry: I don't know how to cast expression." << endl;
|
||||||
ivl_assert(*this, false);
|
ivl_assert(*this, false);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -593,6 +593,14 @@ static int show_stmt_assign_vector(ivl_statement_t net)
|
||||||
|
|
||||||
fprintf(vvp_out, " %%cvt/vr %u, %u;\n", res.base, res.wid);
|
fprintf(vvp_out, " %%cvt/vr %u, %u;\n", res.base, res.wid);
|
||||||
|
|
||||||
|
} else if (ivl_expr_value(rval) == IVL_VT_STRING) {
|
||||||
|
/* Special case: vector to string casting */
|
||||||
|
ivl_lval_t lval = ivl_stmt_lval(net, 0);
|
||||||
|
fprintf(vvp_out, " %%vpi_call %u %u \"$ivl_string_method$to_vec\", v%p_0, v%p_0 {0 0};\n",
|
||||||
|
ivl_file_table_index(ivl_stmt_file(net)), ivl_stmt_lineno(net),
|
||||||
|
ivl_expr_signal(rval), ivl_lval_sig(lval));
|
||||||
|
return 0;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
res = draw_eval_expr(rval, 0);
|
res = draw_eval_expr(rval, 0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue