From 6765e32ab984dc6a33e99a0b5fcb02f921238861 Mon Sep 17 00:00:00 2001 From: Cary R Date: Thu, 7 Aug 2014 16:24:32 -0700 Subject: [PATCH] Add message that L-value concatenation is not supported in synthesis --- syn-rules.y | 10 ++++++++-- synth2.cc | 12 ++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) 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());