Index in memory assign should be a NetExpr.
This commit is contained in:
parent
413d852012
commit
66ae567b25
|
|
@ -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.
|
||||
*
|
||||
|
|
|
|||
12
elaborate.cc
12
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<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.
|
||||
*
|
||||
|
|
|
|||
13
netlist.cc
13
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 <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.
|
||||
*
|
||||
|
|
|
|||
17
netlist.h
17
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.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
17
t-vvm.cc
17
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 <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)
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue