Fix nexus widths for direct link assign and ternary nets.

This commit is contained in:
steve 2006-11-26 06:29:16 +00:00
parent 0af4ea7cbe
commit 041091cfac
2 changed files with 24 additions and 2 deletions

View File

@ -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: elab_net.cc,v 1.189 2006/08/08 05:11:37 steve Exp $" #ident "$Id: elab_net.cc,v 1.190 2006/11/26 06:29:16 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -2588,6 +2588,11 @@ NetNet* PETernary::elaborate_net(Design*des, NetScope*scope,
if (tru_sig->vector_width() < dwidth) if (tru_sig->vector_width() < dwidth)
tru_sig = pad_to_width(des, tru_sig, dwidth); tru_sig = pad_to_width(des, tru_sig, dwidth);
if (dwidth < fal_sig->vector_width())
fal_sig = crop_to_width(des, fal_sig, dwidth);
if (dwidth < tru_sig->vector_width())
tru_sig = crop_to_width(des, tru_sig, dwidth);
/* Make the device and connect its outputs to the osig and /* Make the device and connect its outputs to the osig and
inputs to the tru and false case nets. Also connect the inputs to the tru and false case nets. Also connect the
@ -2840,6 +2845,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope,
/* /*
* $Log: elab_net.cc,v $ * $Log: elab_net.cc,v $
* Revision 1.190 2006/11/26 06:29:16 steve
* Fix nexus widths for direct link assign and ternary nets.
*
* Revision 1.189 2006/08/08 05:11:37 steve * Revision 1.189 2006/08/08 05:11:37 steve
* Handle 64bit delay constants. * Handle 64bit delay constants.
* *

View File

@ -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: elaborate.cc,v 1.349 2006/11/04 06:19:25 steve Exp $" #ident "$Id: elaborate.cc,v 1.350 2006/11/26 06:29:16 steve Exp $"
#endif #endif
# include "config.h" # include "config.h"
@ -181,6 +181,17 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
lval->vector_width()); lval->vector_width());
rid = tmp; rid = tmp;
} }
} else if (cnt < rid->vector_width()) {
if (debug_elaborate)
cerr << get_line() << ": debug: PGAssign "
<< "Truncate r-value from "
<< cnt << " bits to "
<< lval->vector_width() << " bits." << endl;
NetNet*tmp = crop_to_width(des, rid, lval->vector_width());
rid = tmp;
} }
if (! need_driver_flag) { if (! need_driver_flag) {
@ -3326,6 +3337,9 @@ Design* elaborate(list<perm_string>roots)
/* /*
* $Log: elaborate.cc,v $ * $Log: elaborate.cc,v $
* Revision 1.350 2006/11/26 06:29:16 steve
* Fix nexus widths for direct link assign and ternary nets.
*
* Revision 1.349 2006/11/04 06:19:25 steve * Revision 1.349 2006/11/04 06:19:25 steve
* Remove last bits of relax_width methods, and use test_width * Remove last bits of relax_width methods, and use test_width
* to calculate the width of an r-value expression that may * to calculate the width of an r-value expression that may