diff --git a/tgt-vhdl/cast.cc b/tgt-vhdl/cast.cc index 2499e0c6f..d56b6de09 100644 --- a/tgt-vhdl/cast.cc +++ b/tgt-vhdl/cast.cc @@ -32,6 +32,11 @@ vhdl_expr *vhdl_expr::cast(const vhdl_type *to) // << " (" << type_->get_width() << ") " // << " to=" << to->get_string() << " (" // << to->get_width() << ")" << std::endl; + + // If this expression hasn't been given a type then + // we can't generate any type conversion code + if (NULL == type_) + return this; if (to->get_name() == type_->get_name()) { if (to->get_width() == type_->get_width()) diff --git a/tgt-vhdl/lpm.cc b/tgt-vhdl/lpm.cc index 3c2af5ead..9213cd24c 100644 --- a/tgt-vhdl/lpm.cc +++ b/tgt-vhdl/lpm.cc @@ -241,6 +241,8 @@ static vhdl_expr *lpm_to_expr(vhdl_scope *scope, ivl_lpm_t lpm) return concat_lpm_to_expr(scope, lpm); case IVL_LPM_CMP_GE: return rel_lpm_to_expr(scope, lpm, VHDL_BINOP_GEQ); + case IVL_LPM_CMP_GT: + return rel_lpm_to_expr(scope, lpm, VHDL_BINOP_GT); case IVL_LPM_CMP_EQ: case IVL_LPM_CMP_EEQ: return rel_lpm_to_expr(scope, lpm, VHDL_BINOP_EQ); @@ -323,7 +325,7 @@ int draw_lpm(vhdl_arch *arch, ivl_lpm_t lpm) out->set_slice(off, ivl_lpm_width(lpm) - 1); } - arch->add_stmt(new vhdl_cassign_stmt(out, f)); + arch->add_stmt(new vhdl_cassign_stmt(out, f->cast(out->get_type()))); return 0; }