Fix synthesis of expressions with land of vectors.
This commit is contained in:
parent
9643b86ab3
commit
6cd4adb135
|
|
@ -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: expr_synth.cc,v 1.59.2.4 2006/04/10 03:43:39 steve Exp $"
|
#ident "$Id: expr_synth.cc,v 1.59.2.5 2006/05/15 03:55:22 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -474,13 +474,18 @@ NetNet* NetEBLogic::synthesize(Design*des)
|
||||||
perm_string oname = scope->local_symbol();
|
perm_string oname = scope->local_symbol();
|
||||||
|
|
||||||
olog = new NetLogic(scope, oname, 3, NetLogic::AND);
|
olog = new NetLogic(scope, oname, 3, NetLogic::AND);
|
||||||
|
olog->set_line(*this);
|
||||||
|
|
||||||
connect(osig->pin(0), olog->pin(0));
|
connect(osig->pin(0), olog->pin(0));
|
||||||
des->add_node(olog);
|
des->add_node(olog);
|
||||||
|
|
||||||
/* XXXX Here, I need to reduce the parameters with
|
/* Here, I need to reduce the parameters with
|
||||||
reduction or. */
|
reduction or. Only do this if we must. */
|
||||||
|
if (lsig->pin_count() > 1)
|
||||||
|
lsig = reduction_or(des, lsig);
|
||||||
|
|
||||||
|
if (rsig->pin_count() > 1)
|
||||||
|
rsig = reduction_or(des, rsig);
|
||||||
|
|
||||||
/* By this point, the left and right parameters have been
|
/* By this point, the left and right parameters have been
|
||||||
reduced to single bit values. Now we just connect them to
|
reduced to single bit values. Now we just connect them to
|
||||||
|
|
@ -488,6 +493,11 @@ NetNet* NetEBLogic::synthesize(Design*des)
|
||||||
assert(lsig->pin_count() == 1);
|
assert(lsig->pin_count() == 1);
|
||||||
connect(lsig->pin(0), olog->pin(1));
|
connect(lsig->pin(0), olog->pin(1));
|
||||||
|
|
||||||
|
if (rsig->pin_count() != 1) {
|
||||||
|
cerr << olog->get_line() << ": internal error: "
|
||||||
|
<< "right argument not reduced. expr=" << *this << endl;
|
||||||
|
}
|
||||||
|
|
||||||
assert(rsig->pin_count() == 1);
|
assert(rsig->pin_count() == 1);
|
||||||
connect(rsig->pin(0), olog->pin(2));
|
connect(rsig->pin(0), olog->pin(2));
|
||||||
}
|
}
|
||||||
|
|
@ -924,6 +934,9 @@ NetNet* NetESignal::synthesize(Design*des)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: expr_synth.cc,v $
|
* $Log: expr_synth.cc,v $
|
||||||
|
* Revision 1.59.2.5 2006/05/15 03:55:22 steve
|
||||||
|
* Fix synthesis of expressions with land of vectors.
|
||||||
|
*
|
||||||
* Revision 1.59.2.4 2006/04/10 03:43:39 steve
|
* Revision 1.59.2.4 2006/04/10 03:43:39 steve
|
||||||
* Exploded memories accessed by constant indices.
|
* Exploded memories accessed by constant indices.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
25
netmisc.cc
25
netmisc.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: netmisc.cc,v 1.8 2004/02/20 18:53:35 steve Exp $"
|
#ident "$Id: netmisc.cc,v 1.8.2.1 2006/05/15 03:55:23 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -72,6 +72,26 @@ NetNet* add_to_net(Design*des, NetNet*sig, long val)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetNet* reduction_or(Design*des, NetNet*isig)
|
||||||
|
{
|
||||||
|
NetScope*scope = isig->scope();
|
||||||
|
|
||||||
|
NetLogic*olog = new NetLogic(scope, scope->local_symbol(),
|
||||||
|
isig->pin_count()+1, NetLogic::OR);
|
||||||
|
olog->set_line(*isig);
|
||||||
|
des->add_node(olog);
|
||||||
|
|
||||||
|
NetNet*osig = new NetNet(scope, scope->local_symbol(),
|
||||||
|
NetNet::IMPLICIT, 1);
|
||||||
|
osig->local_flag(true);
|
||||||
|
osig->set_line(*isig);
|
||||||
|
|
||||||
|
connect(olog->pin(0), osig->pin(0));
|
||||||
|
for (unsigned idx = 0 ; idx < isig->pin_count() ; idx += 1)
|
||||||
|
connect(olog->pin(1+idx), isig->pin(idx));
|
||||||
|
|
||||||
|
return osig;
|
||||||
|
}
|
||||||
|
|
||||||
NetExpr* elab_and_eval(Design*des, NetScope*scope, const PExpr*pe)
|
NetExpr* elab_and_eval(Design*des, NetScope*scope, const PExpr*pe)
|
||||||
{
|
{
|
||||||
|
|
@ -90,6 +110,9 @@ NetExpr* elab_and_eval(Design*des, NetScope*scope, const PExpr*pe)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netmisc.cc,v $
|
* $Log: netmisc.cc,v $
|
||||||
|
* Revision 1.8.2.1 2006/05/15 03:55:23 steve
|
||||||
|
* Fix synthesis of expressions with land of vectors.
|
||||||
|
*
|
||||||
* Revision 1.8 2004/02/20 18:53:35 steve
|
* Revision 1.8 2004/02/20 18:53:35 steve
|
||||||
* Addtrbute keys are perm_strings.
|
* Addtrbute keys are perm_strings.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
10
netmisc.h
10
netmisc.h
|
|
@ -19,7 +19,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: netmisc.h,v 1.19 2004/03/07 20:04:11 steve Exp $"
|
#ident "$Id: netmisc.h,v 1.19.2.1 2006/05/15 03:55:23 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "netlist.h"
|
# include "netlist.h"
|
||||||
|
|
@ -57,6 +57,11 @@ extern NetNet*pad_to_width(Design*des, NetNet*n, unsigned w);
|
||||||
*/
|
*/
|
||||||
extern NetNet*add_to_net(Design*des, NetNet*sig, long val);
|
extern NetNet*add_to_net(Design*des, NetNet*sig, long val);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate the reduction OR from the input signal.
|
||||||
|
*/
|
||||||
|
extern NetNet*reduction_or(Design*des, NetNet*sig);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In some cases the lval is accessible as a pointer to the head of
|
* In some cases the lval is accessible as a pointer to the head of
|
||||||
* a list of NetAssign_ objects. This function returns the width of
|
* a list of NetAssign_ objects. This function returns the width of
|
||||||
|
|
@ -75,6 +80,9 @@ extern NetExpr* elab_and_eval(Design*des, NetScope*scope, const PExpr*pe);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netmisc.h,v $
|
* $Log: netmisc.h,v $
|
||||||
|
* Revision 1.19.2.1 2006/05/15 03:55:23 steve
|
||||||
|
* Fix synthesis of expressions with land of vectors.
|
||||||
|
*
|
||||||
* Revision 1.19 2004/03/07 20:04:11 steve
|
* Revision 1.19 2004/03/07 20:04:11 steve
|
||||||
* MOre thorough use of elab_and_eval function.
|
* MOre thorough use of elab_and_eval function.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue