Index in memory assign should be a NetExpr.

This commit is contained in:
steve 2000-06-13 03:24:48 +00:00
parent 413d852012
commit 66ae567b25
6 changed files with 41 additions and 34 deletions

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: design_dump.cc,v 1.85 2000/05/11 23:37:27 steve Exp $"
#ident "$Id: design_dump.cc,v 1.86 2000/06/13 03:24:48 steve Exp $"
#endif
/*
@ -483,7 +483,7 @@ void NetAssignMem::dump(ostream&o, unsigned ind) const
o << setw(ind) << "";
o << "/* " << get_line() << " */" << endl;
o << setw(ind) << "";
o << memory()->name() << "[" << index()->name() << "] = ";
o << memory()->name() << "[" << *index() << "] = ";
rval()->dump(o);
o << ";" << endl;
}
@ -493,7 +493,7 @@ void NetAssignMemNB::dump(ostream&o, unsigned ind) const
o << setw(ind) << "";
o << "/* " << get_line() << " */" << endl;
o << setw(ind) << "";
o << memory()->name() << "[" << index()->name() << "] <= ";
o << memory()->name() << "[" << *index() << "] <= ";
rval()->dump(o);
o << ";" << endl;
}
@ -979,6 +979,9 @@ void Design::dump(ostream&o) const
/*
* $Log: design_dump.cc,v $
* Revision 1.86 2000/06/13 03:24:48 steve
* Index in memory assign should be a NetExpr.
*
* Revision 1.85 2000/05/11 23:37:27 steve
* Add support for procedural continuous assignment.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: elaborate.cc,v 1.175 2000/05/31 02:26:49 steve Exp $"
#ident "$Id: elaborate.cc,v 1.176 2000/06/13 03:24:48 steve Exp $"
#endif
/*
@ -709,7 +709,7 @@ NetProc* PAssign::assign_to_memory_(NetMemory*mem, PExpr*ix,
}
assert(ix);
NetNet*idx = ix->elaborate_net(des, path, 0, 0, 0, 0);
NetExpr*idx = ix->elaborate_expr(des, scope);
assert(idx);
if (rv->expr_width() < mem->width())
@ -1034,7 +1034,7 @@ NetProc* PAssignNB::assign_to_memory_(NetMemory*mem, PExpr*ix,
rv->set_width(mem->width());
/* Elaborate the expression to calculate the index, ... */
NetNet*idx = ix->elaborate_net(des, path, 0, 0, 0, 0);
NetExpr*idx = ix->elaborate_expr(des, scope);
assert(idx);
/* And connect them together in an assignment NetProc. */
@ -1474,8 +1474,7 @@ NetProc* PCallTask::elaborate_usr(Design*des, const string&path) const
of a normal assignment. */
if (mem != 0) {
assert(id->msb_);
NetNet*ix = id->msb_->elaborate_net(des, path,
0, 0, 0, 0);
NetExpr*ix = id->msb_->elaborate_expr(des, scope);
assert(ix);
NetExpr*rv = new NetESignal(port);
@ -2436,6 +2435,9 @@ Design* elaborate(const map<string,Module*>&modules,
/*
* $Log: elaborate.cc,v $
* Revision 1.176 2000/06/13 03:24:48 steve
* Index in memory assign should be a NetExpr.
*
* Revision 1.175 2000/05/31 02:26:49 steve
* Globally merge redundant event objects.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: netlist.cc,v 1.128 2000/06/12 03:57:10 steve Exp $"
#ident "$Id: netlist.cc,v 1.129 2000/06/13 03:24:48 steve Exp $"
#endif
# include <cassert>
@ -1621,18 +1621,16 @@ NetAssignNB::~NetAssignNB()
}
NetAssignMem_::NetAssignMem_(NetMemory*m, NetNet*i, NetExpr*r)
NetAssignMem_::NetAssignMem_(NetMemory*m, NetExpr*i, NetExpr*r)
: mem_(m), index_(i), rval_(r)
{
index_->incr_eref();
}
NetAssignMem_::~NetAssignMem_()
{
index_->decr_eref();
}
NetAssignMem::NetAssignMem(NetMemory*m, NetNet*i, NetExpr*r)
NetAssignMem::NetAssignMem(NetMemory*m, NetExpr*i, NetExpr*r)
: NetAssignMem_(m, i, r)
{
}
@ -1641,7 +1639,7 @@ NetAssignMem::~NetAssignMem()
{
}
NetAssignMemNB::NetAssignMemNB(NetMemory*m, NetNet*i, NetExpr*r)
NetAssignMemNB::NetAssignMemNB(NetMemory*m, NetExpr*i, NetExpr*r)
: NetAssignMem_(m, i, r)
{
}
@ -2636,6 +2634,9 @@ bool NetUDP::sequ_glob_(string input, char output)
/*
* $Log: netlist.cc,v $
* Revision 1.129 2000/06/13 03:24:48 steve
* Index in memory assign should be a NetExpr.
*
* Revision 1.128 2000/06/12 03:57:10 steve
* NetEParam supports dup_expr.
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: netlist.h,v 1.140 2000/05/31 02:26:49 steve Exp $"
#ident "$Id: netlist.h,v 1.141 2000/06/13 03:24:48 steve Exp $"
#endif
/*
@ -1140,27 +1140,27 @@ class NetAssignNB : public NetAssign_ {
class NetAssignMem_ : public NetProc {
public:
explicit NetAssignMem_(NetMemory*, NetNet*idx, NetExpr*rv);
explicit NetAssignMem_(NetMemory*, NetExpr*idx, NetExpr*rv);
~NetAssignMem_();
NetMemory*memory() { return mem_; }
NetNet*index() { return index_; }
NetExpr*index() { return index_; }
NetExpr*rval() { return rval_; }
const NetMemory*memory()const { return mem_; }
const NetNet*index()const { return index_; }
const NetExpr*index()const { return index_; }
const NetExpr*rval()const { return rval_; }
private:
NetMemory*mem_;
NetNet * index_;
NetExpr* index_;
NetExpr* rval_;
};
class NetAssignMem : public NetAssignMem_ {
public:
explicit NetAssignMem(NetMemory*, NetNet*idx, NetExpr*rv);
explicit NetAssignMem(NetMemory*, NetExpr*idx, NetExpr*rv);
~NetAssignMem();
virtual int match_proc(struct proc_match_t*);
@ -1173,7 +1173,7 @@ class NetAssignMem : public NetAssignMem_ {
class NetAssignMemNB : public NetAssignMem_ {
public:
explicit NetAssignMemNB(NetMemory*, NetNet*idx, NetExpr*rv);
explicit NetAssignMemNB(NetMemory*, NetExpr*idx, NetExpr*rv);
~NetAssignMemNB();
virtual bool emit_proc(ostream&, struct target_t*) const;
@ -2595,6 +2595,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
/*
* $Log: netlist.h,v $
* Revision 1.141 2000/06/13 03:24:48 steve
* Index in memory assign should be a NetExpr.
*
* Revision 1.140 2000/05/31 02:26:49 steve
* Globally merge redundant event objects.
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: syn-rules.y,v 1.3 2000/05/14 17:55:04 steve Exp $"
#ident "$Id: syn-rules.y,v 1.4 2000/06/13 03:24:48 steve Exp $"
#endif
/*
@ -161,7 +161,10 @@ static void make_RAM_CE(Design*des, NetProcTop*top, NetEvWait*wclk,
NetEvent*eclk, NetExpr*cexp, NetAssignMem*asn)
{
NetMemory*mem = asn->memory();
NetNet*adr = asn->index();
NetExpr*adr_e = asn->index();
NetNet*adr = adr_e->synthesize(des);
assert(adr);
NetEvProbe*pclk = eclk->probe(0);
NetESignal*d = dynamic_cast<NetESignal*> (asn->rval());

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: t-vvm.cc,v 1.156 2000/06/06 02:32:45 steve Exp $"
#ident "$Id: t-vvm.cc,v 1.157 2000/06/13 03:24:48 steve Exp $"
#endif
# include <iostream>
@ -2247,11 +2247,7 @@ void target_vvm::proc_assign(ostream&os, const NetAssign*net)
void target_vvm::proc_assign_mem(ostream&os, const NetAssignMem*amem)
{
/* make a temporary to reference the index signal. */
string index = make_temp();
defn << " vvm_bitset_t " << index << "("
<< mangle(amem->index()->name()) << ".bits, "
<< mangle(amem->index()->name()) << ".nbits);" << endl;
string index = emit_proc_rval(defn, this, amem->index());
/* Evaluate the rval that gets written into the memory word. */
string rval = emit_proc_rval(defn, this, amem->rval());
@ -2317,11 +2313,7 @@ void target_vvm::proc_assign_nb(ostream&os, const NetAssignNB*net)
void target_vvm::proc_assign_mem_nb(ostream&os, const NetAssignMemNB*amem)
{
/* make a temporary to reference the index signal. */
string index = make_temp();
defn << " vvm_bitset_t " << index << "("
<< mangle(amem->index()->name()) << ".bits, "
<< mangle(amem->index()->name()) << ".nbits);" << endl;
string index = emit_proc_rval(defn, this, amem->index());
/* Evaluate the rval that gets written into the memory word. */
@ -3063,6 +3055,9 @@ extern const struct target tgt_vvm = {
};
/*
* $Log: t-vvm.cc,v $
* Revision 1.157 2000/06/13 03:24:48 steve
* Index in memory assign should be a NetExpr.
*
* Revision 1.156 2000/06/06 02:32:45 steve
* Expand constants in its special case assignment. (Stephan Boettcher)
*