Detect reverse bit order in part select. (PR#33)
This commit is contained in:
parent
7df9943679
commit
f2997d7767
58
elab_net.cc
58
elab_net.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
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: elab_net.cc,v 1.52 2000/10/30 20:55:53 steve Exp $"
|
#ident "$Id: elab_net.cc,v 1.53 2000/10/30 21:35:40 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "PExpr.h"
|
# include "PExpr.h"
|
||||||
|
|
@ -1061,35 +1061,40 @@ NetNet* PEIdent::elaborate_net(Design*des, const string&path,
|
||||||
/* This is a part select, create a new NetNet object
|
/* This is a part select, create a new NetNet object
|
||||||
that connects to just the desired parts of the
|
that connects to just the desired parts of the
|
||||||
identifier. Make sure the NetNet::Type is compatible
|
identifier. Make sure the NetNet::Type is compatible
|
||||||
with the sig type. */
|
with the sig type.
|
||||||
|
|
||||||
if (midx >= lidx) {
|
Be careful to check the bit ordering. If the msb is
|
||||||
NetNet*tmp = new NetNet(scope, des->local_symbol(path),
|
less significant then the msb, then the source is
|
||||||
sig->type(), midx-lidx+1);
|
broken. I can hack it in order to go on, but report
|
||||||
tmp->local_flag(true);
|
an error. */
|
||||||
if (tmp->pin_count() > sig->pin_count()) {
|
|
||||||
cerr << get_line() << ": bit select out of "
|
|
||||||
<< "range for " << sig->name() << endl;
|
|
||||||
return sig;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned idx = lidx ; idx <= midx ; idx += 1)
|
if (midx < lidx) {
|
||||||
connect(tmp->pin(idx-lidx), sig->pin(idx));
|
cerr << get_line() << ": error: part select "
|
||||||
|
<< sig->name() << "[" << mval->as_long() << ":"
|
||||||
|
<< lval->as_long() << "] "
|
||||||
|
<< "has bit order reversed." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
|
||||||
sig = tmp;
|
unsigned tmp = midx;
|
||||||
|
midx = lidx;
|
||||||
} else {
|
lidx = tmp;
|
||||||
NetNet*tmp = new NetNet(scope, des->local_symbol(path),
|
|
||||||
sig->type(), lidx-midx+1);
|
|
||||||
tmp->local_flag(true);
|
|
||||||
|
|
||||||
assert(tmp->pin_count() <= sig->pin_count());
|
|
||||||
for (unsigned idx = lidx ; idx >= midx ; idx -= 1)
|
|
||||||
connect(tmp->pin(idx-midx), sig->pin(idx));
|
|
||||||
|
|
||||||
sig = tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetNet*tmp = new NetNet(scope, des->local_symbol(path),
|
||||||
|
sig->type(), midx-lidx+1);
|
||||||
|
tmp->local_flag(true);
|
||||||
|
if (tmp->pin_count() > sig->pin_count()) {
|
||||||
|
cerr << get_line() << ": bit select out of "
|
||||||
|
<< "range for " << sig->name() << endl;
|
||||||
|
return sig;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned idx = lidx ; idx <= midx ; idx += 1)
|
||||||
|
connect(tmp->pin(idx-lidx), sig->pin(idx));
|
||||||
|
|
||||||
|
sig = tmp;
|
||||||
|
|
||||||
|
|
||||||
} else if (msb_) {
|
} else if (msb_) {
|
||||||
verinum*mval = msb_->eval_const(des, path);
|
verinum*mval = msb_->eval_const(des, path);
|
||||||
if (mval == 0) {
|
if (mval == 0) {
|
||||||
|
|
@ -1752,6 +1757,9 @@ NetNet* PEUnary::elaborate_net(Design*des, const string&path,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: elab_net.cc,v $
|
* $Log: elab_net.cc,v $
|
||||||
|
* Revision 1.53 2000/10/30 21:35:40 steve
|
||||||
|
* Detect reverse bit order in part select. (PR#33)
|
||||||
|
*
|
||||||
* Revision 1.52 2000/10/30 20:55:53 steve
|
* Revision 1.52 2000/10/30 20:55:53 steve
|
||||||
* get width right for reversed part select net. (PR#33)
|
* get width right for reversed part select net. (PR#33)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue