diff --git a/design_dump.cc b/design_dump.cc index e0ed53b63..d4bbc1c83 100644 --- a/design_dump.cc +++ b/design_dump.cc @@ -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. * diff --git a/elaborate.cc b/elaborate.cc index 2cecb985e..a028a44d0 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -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&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. * diff --git a/netlist.cc b/netlist.cc index 1293649e0..856017c29 100644 --- a/netlist.cc +++ b/netlist.cc @@ -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 @@ -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. * diff --git a/netlist.h b/netlist.h index 77d6922dc..de67e45e6 100644 --- a/netlist.h +++ b/netlist.h @@ -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. * diff --git a/syn-rules.y b/syn-rules.y index ba6dd691d..773481cdd 100644 --- a/syn-rules.y +++ b/syn-rules.y @@ -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 (asn->rval()); diff --git a/t-vvm.cc b/t-vvm.cc index 1bcc74fca..2089b7143 100644 --- a/t-vvm.cc +++ b/t-vvm.cc @@ -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 @@ -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) *