diff --git a/syn-rules.y b/syn-rules.y index 1507b08df..8a86fe6e5 100644 --- a/syn-rules.y +++ b/syn-rules.y @@ -1,7 +1,7 @@ %{ /* - * Copyright (c) 2000-2010 Stephen Williams (steve@icarus.com) + * Copyright (c) 2000-2014 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -100,7 +100,13 @@ static void hookup_DFF_CE(NetFF*ff, NetESignal*d, NetEvProbe*pclk, NetNet*ce, NetAssign_*a, unsigned rval_pinoffset) { - assert(rval_pinoffset == 0); + if (rval_pinoffset != 0) { + cerr << a->get_fileline() << ": sorry: " + << "unable to hook up an R-value with offset " + << rval_pinoffset << " to signal " << a->name() + << "." << endl; + return; + } // a->sig() is a *NetNet, which doesn't have the loff_ and // lwid_ context. Add the correction for loff_ ourselves. diff --git a/synth2.cc b/synth2.cc index d2e54e797..dcc80895d 100644 --- a/synth2.cc +++ b/synth2.cc @@ -82,7 +82,15 @@ bool NetAssignBase::synth_async(Design*des, NetScope*scope, des->errors += 1; return false; } - assert(lval_->more == 0); + if (lval_->more) { + cerr << get_fileline() << ": sorry: " + << "NetAssignBase::synth_async does not support an " + << "L-value concatenation "; + dump_lval(cerr); + cerr << endl; + des->errors += 1; + return false; + } if (debug_synth2) { cerr << get_fileline() << ": NetAssignBase::synth_async: " @@ -1308,7 +1316,7 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope, NetBus tmp_out(scope, nex_out.pin_count()); NetBus accumulated_tmp_out(scope, nex_out.pin_count()); flag = if_->synth_async(des, scope, nex_map, tmp_out, accumulated_tmp_out); - ivl_assert(*this, flag); + if (! flag) return false; ivl_assert(*this, tmp_out.pin_count() == ff_aclr.pin_count()); ivl_assert(*this, tmp_out.pin_count() == ff_aset.pin_count()); diff --git a/vhdlpp/expression.cc b/vhdlpp/expression.cc index 526d06be2..feeddd88e 100644 --- a/vhdlpp/expression.cc +++ b/vhdlpp/expression.cc @@ -307,12 +307,6 @@ ExpReal::~ExpReal() { } -bool ExpReal::evaluate(ScopeBase*, double&val) const -{ - val = value_; - return true; -} - ExpLogical::ExpLogical(ExpLogical::fun_t ty, Expression*op1, Expression*op2) : ExpBinary(op1, op2), fun_(ty) { diff --git a/vhdlpp/expression.h b/vhdlpp/expression.h index d26a8c5df..7b54705c6 100644 --- a/vhdlpp/expression.h +++ b/vhdlpp/expression.h @@ -519,7 +519,6 @@ class ExpReal : public Expression { int emit(ostream&out, Entity*ent, Architecture*arc); int emit_package(std::ostream&out); bool is_primary(void) const; - bool evaluate(ScopeBase*scope, double&val) const; void dump(ostream&out, int indent = 0) const; virtual ostream& dump_inline(ostream&out) const;