Handle memory assignments out of range during synthesis
This commit is contained in:
parent
3a6e2df958
commit
452eaeaea8
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: net_nex_output.cc,v 1.11.2.3 2006/04/16 19:26:38 steve Exp $"
|
#ident "$Id: net_nex_output.cc,v 1.11.2.4 2006/05/05 01:56:36 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -72,8 +72,14 @@ void NetAssignBase::nex_output(NexusSet&out)
|
||||||
long adr= ae->value().as_long();
|
long adr= ae->value().as_long();
|
||||||
adr = lmem->index_to_address(adr) * lmem->width();
|
adr = lmem->index_to_address(adr) * lmem->width();
|
||||||
|
|
||||||
|
if (adr >= lmem->count()*lmem->width()) {
|
||||||
|
/* Skip assignments with constant
|
||||||
|
addresses that are outside the
|
||||||
|
range of memories. */
|
||||||
|
} else {
|
||||||
for (unsigned idx=0; idx<cur->lwidth(); idx += 1)
|
for (unsigned idx=0; idx<cur->lwidth(); idx += 1)
|
||||||
out.add(tmp->pin(adr+idx).nexus());
|
out.add(tmp->pin(adr+idx).nexus());
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* Put all the bits of the memory into the
|
/* Put all the bits of the memory into the
|
||||||
|
|
@ -154,6 +160,9 @@ void NetWhile::nex_output(NexusSet&out)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: net_nex_output.cc,v $
|
* $Log: net_nex_output.cc,v $
|
||||||
|
* Revision 1.11.2.4 2006/05/05 01:56:36 steve
|
||||||
|
* Handle memory assignments out of range during synthesis
|
||||||
|
*
|
||||||
* Revision 1.11.2.3 2006/04/16 19:26:38 steve
|
* Revision 1.11.2.3 2006/04/16 19:26:38 steve
|
||||||
* Fix handling of exploded memories with partial or missing resets.
|
* Fix handling of exploded memories with partial or missing resets.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
14
synth2.cc
14
synth2.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: synth2.cc,v 1.39.2.29 2006/04/16 19:26:39 steve Exp $"
|
#ident "$Id: synth2.cc,v 1.39.2.30 2006/05/05 01:56:36 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -236,6 +236,15 @@ bool NetAssignBase::synth_async_mem_sync_(Design*des, NetScope*scope,
|
||||||
constant. In this case, just hook up the pertinent bits. */
|
constant. In this case, just hook up the pertinent bits. */
|
||||||
if (NetEConst*ae = dynamic_cast<NetEConst*>(cur->bmux())) {
|
if (NetEConst*ae = dynamic_cast<NetEConst*>(cur->bmux())) {
|
||||||
long adr= ae->value().as_long();
|
long adr= ae->value().as_long();
|
||||||
|
if (adr >= lmem->count()) {
|
||||||
|
cerr << get_line() << ": error: "
|
||||||
|
<< "Address " << adr
|
||||||
|
<< " is outside range of memory."
|
||||||
|
<< " Skipping assignment." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
adr = lmem->index_to_address(adr) * lmem->width();
|
adr = lmem->index_to_address(adr) * lmem->width();
|
||||||
for (unsigned idx = 0 ; idx < cur->lwidth() ; idx += 1) {
|
for (unsigned idx = 0 ; idx < cur->lwidth() ; idx += 1) {
|
||||||
unsigned off = adr+idx;
|
unsigned off = adr+idx;
|
||||||
|
|
@ -1810,6 +1819,9 @@ void synth2(Design*des)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: synth2.cc,v $
|
* $Log: synth2.cc,v $
|
||||||
|
* Revision 1.39.2.30 2006/05/05 01:56:36 steve
|
||||||
|
* Handle memory assignments out of range during synthesis
|
||||||
|
*
|
||||||
* Revision 1.39.2.29 2006/04/16 19:26:39 steve
|
* Revision 1.39.2.29 2006/04/16 19:26:39 steve
|
||||||
* Fix handling of exploded memories with partial or missing resets.
|
* Fix handling of exploded memories with partial or missing resets.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue