NetESignal object no longer need to be NetNode

objects. Let them keep a pointer to NetNet objects.
This commit is contained in:
steve 1999-11-28 23:42:02 +00:00
parent fa088f8baa
commit e96e8c62be
13 changed files with 143 additions and 96 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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: design_dump.cc,v 1.60 1999/11/27 19:07:57 steve Exp $" #ident "$Id: design_dump.cc,v 1.61 1999/11/28 23:42:02 steve Exp $"
#endif #endif
/* /*
@ -754,14 +754,6 @@ void NetEParam::dump(ostream&o) const
o << "<" << path_ << "." << name_ << ">"; o << "<" << path_ << "." << name_ << ">";
} }
void NetESignal::dump_node(ostream&o, unsigned ind) const
{
o << setw(ind) << "" << "Expression Node (NetESignal): " <<
name() << endl;
dump_node_pins(o, ind+4);
}
void NetETernary::dump(ostream&o) const void NetETernary::dump(ostream&o) const
{ {
o << "(" << *cond_ << ") ? (" << *true_val_ << ") : (" << o << "(" << *cond_ << ") ? (" << *true_val_ << ") : (" <<
@ -874,6 +866,10 @@ void Design::dump(ostream&o) const
/* /*
* $Log: design_dump.cc,v $ * $Log: design_dump.cc,v $
* Revision 1.61 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.60 1999/11/27 19:07:57 steve * Revision 1.60 1999/11/27 19:07:57 steve
* Support the creation of scopes. * Support the creation of scopes.
* *

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: elab_expr.cc,v 1.10 1999/11/27 19:07:57 steve Exp $" #ident "$Id: elab_expr.cc,v 1.11 1999/11/28 23:42:02 steve Exp $"
#endif #endif
@ -154,7 +154,6 @@ NetExpr* PECallFunction::elaborate_expr(Design*des, const string&path) const
assert(res); assert(res);
NetESignal*eres = new NetESignal(res); NetESignal*eres = new NetESignal(res);
assert(eres); assert(eres);
des->add_node(eres);
NetEUFunc*func = new NetEUFunc(def, eres, parms); NetEUFunc*func = new NetEUFunc(def, eres, parms);
return func; return func;
} }
@ -215,15 +214,17 @@ NetExpr* PEIdent::elaborate_expr(Design*des, const string&path) const
assert(net->sb_to_idx(msv) >= net->sb_to_idx(lsv)); assert(net->sb_to_idx(msv) >= net->sb_to_idx(lsv));
string tname = des->local_symbol(path); string tname = des->local_symbol(path);
NetESignal*tmp = new NetESignal(tname, wid); NetTmp*tsig = new NetTmp(tname, wid);
tmp->set_line(*this);
// Connect the pins from the lsb up to the msb. // Connect the pins from the lsb up to the msb.
unsigned off = net->sb_to_idx(lsv); unsigned off = net->sb_to_idx(lsv);
for (unsigned idx = 0 ; idx < wid ; idx += 1) for (unsigned idx = 0 ; idx < wid ; idx += 1)
connect(tmp->pin(idx), net->pin(idx+off)); connect(tsig->pin(idx), net->pin(idx+off));
des->add_node(tmp); NetESignal*tmp = new NetESignal(tsig);
tmp->set_line(*this);
des->add_signal(tsig);
return tmp; return tmp;
} }
@ -236,16 +237,16 @@ NetExpr* PEIdent::elaborate_expr(Design*des, const string&path) const
unsigned long msv = msn->as_ulong(); unsigned long msv = msn->as_ulong();
string tname = des->local_symbol(path); string tname = des->local_symbol(path);
NetESignal*tmp = new NetESignal(tname, 1); NetTmp*tsig = new NetTmp(tname);
connect(tsig->pin(0), net->pin(msv));
NetESignal*tmp = new NetESignal(tsig);
tmp->set_line(*this); tmp->set_line(*this);
connect(tmp->pin(0), net->pin(msv));
des->add_node(tmp); des->add_signal(tsig);
return tmp; return tmp;
} }
NetESignal*node = new NetESignal(net); NetESignal*node = new NetESignal(net);
des->add_node(node);
assert(idx_ == 0); assert(idx_ == 0);
// Non-constant bit select? punt and make a subsignal // Non-constant bit select? punt and make a subsignal
@ -330,6 +331,10 @@ NetExpr*PETernary::elaborate_expr(Design*des, const string&path) const
/* /*
* $Log: elab_expr.cc,v $ * $Log: elab_expr.cc,v $
* Revision 1.11 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.10 1999/11/27 19:07:57 steve * Revision 1.10 1999/11/27 19:07:57 steve
* Support the creation of scopes. * Support the creation of scopes.
* *

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: elaborate.cc,v 1.130 1999/11/27 19:07:57 steve Exp $" #ident "$Id: elaborate.cc,v 1.131 1999/11/28 23:42:02 steve Exp $"
#endif #endif
/* /*
@ -1142,7 +1142,6 @@ NetProc* PAssign::elaborate(Design*des, const string&path) const
/* Generate an assignment of the temporary to the r-value... */ /* Generate an assignment of the temporary to the r-value... */
n = des->local_symbol(path); n = des->local_symbol(path);
NetESignal*sig = new NetESignal(tmp); NetESignal*sig = new NetESignal(tmp);
des->add_node(sig);
NetAssign*a2 = new NetAssign(n, des, wid, sig); NetAssign*a2 = new NetAssign(n, des, wid, sig);
a2->set_line(*this); a2->set_line(*this);
des->add_node(a2); des->add_node(a2);
@ -1628,7 +1627,6 @@ NetProc* PCallTask::elaborate_usr(Design*des, const string&path) const
for (unsigned pi = 0 ; pi < val->pin_count() ; pi += 1) for (unsigned pi = 0 ; pi < val->pin_count() ; pi += 1)
connect(val->pin(pi), ass->pin(pi)); connect(val->pin(pi), ass->pin(pi));
des->add_node(sig);
des->add_node(ass); des->add_node(ass);
block->append(ass); block->append(ass);
} }
@ -2152,6 +2150,10 @@ Design* elaborate(const map<string,Module*>&modules,
/* /*
* $Log: elaborate.cc,v $ * $Log: elaborate.cc,v $
* Revision 1.131 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.130 1999/11/27 19:07:57 steve * Revision 1.130 1999/11/27 19:07:57 steve
* Support the creation of scopes. * Support the creation of scopes.
* *

11
emit.cc
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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: emit.cc,v 1.30 1999/11/27 19:07:57 steve Exp $" #ident "$Id: emit.cc,v 1.31 1999/11/28 23:42:02 steve Exp $"
#endif #endif
/* /*
@ -361,11 +361,6 @@ void NetESignal::expr_scan(struct expr_scan_t*tgt) const
tgt->expr_signal(this); tgt->expr_signal(this);
} }
void NetESignal::emit_node(ostream&o, struct target_t*tgt) const
{
tgt->net_esignal(o, this);
}
void NetESubSignal::expr_scan(struct expr_scan_t*tgt) const void NetESubSignal::expr_scan(struct expr_scan_t*tgt) const
{ {
tgt->expr_subsignal(this); tgt->expr_subsignal(this);
@ -394,6 +389,10 @@ bool emit(ostream&o, const Design*des, const char*type)
/* /*
* $Log: emit.cc,v $ * $Log: emit.cc,v $
* Revision 1.31 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.30 1999/11/27 19:07:57 steve * Revision 1.30 1999/11/27 19:07:57 steve
* Support the creation of scopes. * Support the creation of scopes.
* *

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: eval.cc,v 1.10 1999/11/21 20:03:24 steve Exp $" #ident "$Id: eval.cc,v 1.11 1999/11/28 23:42:02 steve Exp $"
#endif #endif
# include "PExpr.h" # include "PExpr.h"
@ -96,12 +96,13 @@ verinum* PEBinary::eval_const(const Design*des, const string&path) const
*/ */
verinum* PEIdent::eval_const(const Design*des, const string&path) const verinum* PEIdent::eval_const(const Design*des, const string&path) const
{ {
assert(msb_ == 0);
const NetExpr*expr = des->find_parameter(path, text_); const NetExpr*expr = des->find_parameter(path, text_);
if (expr == 0) if (expr == 0)
return 0; return 0;
assert(msb_ == 0);
if (dynamic_cast<const NetEParam*>(expr)) { if (dynamic_cast<const NetEParam*>(expr)) {
cerr << get_line() << ": sorry: I cannot evaluate ``" << cerr << get_line() << ": sorry: I cannot evaluate ``" <<
text_ << "'' in this context." << endl; text_ << "'' in this context." << endl;
@ -126,6 +127,10 @@ verinum* PETernary::eval_const(const Design*, const string&) const
/* /*
* $Log: eval.cc,v $ * $Log: eval.cc,v $
* Revision 1.11 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.10 1999/11/21 20:03:24 steve * Revision 1.10 1999/11/21 20:03:24 steve
* Handle multiply in constant expressions. * Handle multiply in constant expressions.
* *

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: expr_synth.cc,v 1.5 1999/11/27 19:07:57 steve Exp $" #ident "$Id: expr_synth.cc,v 1.6 1999/11/28 23:42:02 steve Exp $"
#endif #endif
# include "netlist.h" # include "netlist.h"
@ -195,17 +195,15 @@ NetNet* NetETernary::synthesize(Design *des)
NetNet* NetESignal::synthesize(Design*des) NetNet* NetESignal::synthesize(Design*des)
{ {
NetNet*sig = new NetNet(0, des->local_symbol(name()), return net_;
NetNet::WIRE, pin_count());
sig->local_flag(true);
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1)
connect(sig->pin(idx), pin(idx));
des->add_signal(sig);
return sig;
} }
/* /*
* $Log: expr_synth.cc,v $ * $Log: expr_synth.cc,v $
* Revision 1.6 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.5 1999/11/27 19:07:57 steve * Revision 1.5 1999/11/27 19:07:57 steve
* Support the creation of scopes. * Support the creation of scopes.
* *

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: netlist.cc,v 1.95 1999/11/28 01:16:18 steve Exp $" #ident "$Id: netlist.cc,v 1.96 1999/11/28 23:42:02 steve Exp $"
#endif #endif
# include <cassert> # include <cassert>
@ -371,7 +371,7 @@ NetNode::~NetNode()
NetNet::NetNet(NetScope*s, const string&n, Type t, unsigned npins) NetNet::NetNet(NetScope*s, const string&n, Type t, unsigned npins)
: NetObj(n, npins), sig_next_(0), sig_prev_(0), design_(0), scope_(s), : NetObj(n, npins), sig_next_(0), sig_prev_(0), design_(0), scope_(s),
type_(t), port_type_(NOT_A_PORT), msb_(npins-1), lsb_(0), type_(t), port_type_(NOT_A_PORT), msb_(npins-1), lsb_(0),
local_flag_(false) local_flag_(false), eref_count_(0)
{ {
ivalue_ = new verinum::V[npins]; ivalue_ = new verinum::V[npins];
for (unsigned idx = 0 ; idx < npins ; idx += 1) { for (unsigned idx = 0 ; idx < npins ; idx += 1) {
@ -383,7 +383,8 @@ NetNet::NetNet(NetScope*s, const string&n, Type t, unsigned npins)
NetNet::NetNet(NetScope*s, const string&n, Type t, long ms, long ls) NetNet::NetNet(NetScope*s, const string&n, Type t, long ms, long ls)
: NetObj(n, ((ms>ls)?ms-ls:ls-ms) + 1), sig_next_(0), : NetObj(n, ((ms>ls)?ms-ls:ls-ms) + 1), sig_next_(0),
sig_prev_(0), design_(0), scope_(s), type_(t), sig_prev_(0), design_(0), scope_(s), type_(t),
port_type_(NOT_A_PORT), msb_(ms), lsb_(ls), local_flag_(false) port_type_(NOT_A_PORT), msb_(ms), lsb_(ls), local_flag_(false),
eref_count_(0)
{ {
ivalue_ = new verinum::V[pin_count()]; ivalue_ = new verinum::V[pin_count()];
for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) { for (unsigned idx = 0 ; idx < pin_count() ; idx += 1) {
@ -394,6 +395,7 @@ NetNet::NetNet(NetScope*s, const string&n, Type t, long ms, long ls)
NetNet::~NetNet() NetNet::~NetNet()
{ {
assert(eref_count_ == 0);
if (design_) if (design_)
design_->del_signal(this); design_->del_signal(this);
} }
@ -416,6 +418,22 @@ unsigned NetNet::sb_to_idx(long sb) const
return lsb_ - sb; return lsb_ - sb;
} }
void NetNet::incr_eref()
{
eref_count_ += 1;
}
void NetNet::decr_eref()
{
assert(eref_count_ > 0);
eref_count_ -= 1;
}
unsigned NetNet::get_eref() const
{
return eref_count_;
}
NetTmp::NetTmp(const string&name, unsigned npins) NetTmp::NetTmp(const string&name, unsigned npins)
: NetNet(0, name, IMPLICIT, npins) : NetNet(0, name, IMPLICIT, npins)
{ {
@ -1805,28 +1823,30 @@ const NetScope* NetEScope::scope() const
} }
NetESignal::NetESignal(NetNet*n) NetESignal::NetESignal(NetNet*n)
: NetExpr(n->pin_count()), NetNode(n->name(), n->pin_count()) : NetExpr(n->pin_count()), net_(n)
{ {
net_->incr_eref();
set_line(*n); set_line(*n);
for (unsigned idx = 0 ; idx < n->pin_count() ; idx += 1) {
pin(idx).set_name("P", idx);
pin(idx).set_dir(NetObj::Link::PASSIVE);
connect(pin(idx), n->pin(idx));
}
}
NetESignal::NetESignal(const string&n, unsigned np)
: NetExpr(np), NetNode(n, np)
{
expr_width(pin_count());
for(unsigned idx = 0 ; idx < np ; idx += 1) {
pin(idx).set_name("P", idx);
pin(idx).set_dir(NetObj::Link::PASSIVE);
}
} }
NetESignal::~NetESignal() NetESignal::~NetESignal()
{ {
net_->decr_eref();
}
const string& NetESignal::name() const
{
return net_->name();
}
unsigned NetESignal::pin_count() const
{
return net_->pin_count();
}
NetObj::Link& NetESignal::pin(unsigned idx)
{
return net_->pin(idx);
} }
NetESignal* NetESignal::dup_expr() const NetESignal* NetESignal::dup_expr() const
@ -2621,6 +2641,10 @@ NetNet* Design::find_signal(bool (*func)(const NetNet*))
/* /*
* $Log: netlist.cc,v $ * $Log: netlist.cc,v $
* Revision 1.96 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.95 1999/11/28 01:16:18 steve * Revision 1.95 1999/11/28 01:16:18 steve
* gate outputs need to set signal values. * gate outputs need to set signal values.
* *

View File

@ -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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: netlist.h,v 1.95 1999/11/27 19:07:58 steve Exp $" #ident "$Id: netlist.h,v 1.96 1999/11/28 23:42:02 steve Exp $"
#endif #endif
/* /*
@ -263,6 +263,12 @@ class NetNet : public NetObj, public LineInfo {
bool local_flag() const { return local_flag_; } bool local_flag() const { return local_flag_; }
void local_flag(bool f) { local_flag_ = f; } void local_flag(bool f) { local_flag_ = f; }
/* NetESignal objects may reference this object. Keep a
reference count so that I keep track of them. */
void incr_eref();
void decr_eref();
unsigned get_eref() const;
verinum::V get_ival(unsigned pin) const verinum::V get_ival(unsigned pin) const
{ return ivalue_[pin]; } { return ivalue_[pin]; }
void set_ival(unsigned pin, verinum::V val) void set_ival(unsigned pin, verinum::V val)
@ -284,6 +290,7 @@ class NetNet : public NetObj, public LineInfo {
long msb_, lsb_; long msb_, lsb_;
bool local_flag_; bool local_flag_;
unsigned eref_count_;
verinum::V*ivalue_; verinum::V*ivalue_;
}; };
@ -1804,27 +1811,28 @@ class NetEMemory : public NetExpr {
* A signal shows up as a node in the netlist so that structural * A signal shows up as a node in the netlist so that structural
* activity can invoke the expression. * activity can invoke the expression.
*/ */
class NetESignal : public NetExpr, public NetNode { class NetESignal : public NetExpr {
public: public:
NetESignal(NetNet*n); NetESignal(NetNet*n);
NetESignal(const string&name, unsigned npins);
~NetESignal(); ~NetESignal();
const string& name() const { return NetNode::name(); } const string& name() const;
virtual bool set_width(unsigned); virtual bool set_width(unsigned);
virtual NetESignal* dup_expr() const; virtual NetESignal* dup_expr() const;
NetNet* synthesize(Design*des); NetNet* synthesize(Design*des);
// These methods actually reference the properties of the
// NetNet object that I point to.
unsigned pin_count() const;
NetObj::Link& pin(unsigned idx);
virtual void expr_scan(struct expr_scan_t*) const; virtual void expr_scan(struct expr_scan_t*) const;
virtual void emit_node(ostream&, struct target_t*) const;
virtual void dump(ostream&) const; virtual void dump(ostream&) const;
virtual void dump_node(ostream&, unsigned ind) const;
private: private:
NetNet*net_;
}; };
/* /*
@ -2036,6 +2044,10 @@ extern ostream& operator << (ostream&, NetNet::Type);
/* /*
* $Log: netlist.h,v $ * $Log: netlist.h,v $
* Revision 1.96 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.95 1999/11/27 19:07:58 steve * Revision 1.95 1999/11/27 19:07:58 steve
* Support the creation of scopes. * Support the creation of scopes.
* *

View File

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/ */
#ident "$Id: netlist.txt,v 1.6 1999/11/21 00:13:09 steve Exp $" #ident "$Id: netlist.txt,v 1.7 1999/11/28 23:42:02 steve Exp $"
Note that the netlist.h header contains detailed descriptions of how Note that the netlist.h header contains detailed descriptions of how
@ -204,13 +204,10 @@ INTERACTION OF EXPRESSIONS AND STRUCTURE: NetESignal
The NetAssign_ class described above is the means for processes to The NetAssign_ class described above is the means for processes to
manipulate the net, but values are read from the net by NetESignal manipulate the net, but values are read from the net by NetESignal
objects. These objects are class NetExpr because they can appear in objects. These objects are class NetExpr because they can appear in
expressions (and have width) but are also class NetNode because they expressions (and have width). They are not NetNode object, but hold
connect to and receive signals from the structural aspects of the pointers to a NetNet object, which is used to retrieve values with the
design. expression is evaluated.
The pins of a NetESignal object are passive. The values at the pin are
only sampled when the process evaluates the expression that includes
the NetESignal object.
HIERARCHY IN NETLISTS HIERARCHY IN NETLISTS
@ -243,6 +240,10 @@ some task calls. C++ programmers recognize this as inlining a task.)
$Log: netlist.txt,v $ $Log: netlist.txt,v $
Revision 1.7 1999/11/28 23:42:02 steve
NetESignal object no longer need to be NetNode
objects. Let them keep a pointer to NetNet objects.
Revision 1.6 1999/11/21 00:13:09 steve Revision 1.6 1999/11/21 00:13:09 steve
Support memories in continuous assignments. Support memories in continuous assignments.

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: nodangle.cc,v 1.1 1999/11/18 03:52:20 steve Exp $" #ident "$Id: nodangle.cc,v 1.2 1999/11/28 23:42:02 steve Exp $"
#endif #endif
/* /*
@ -39,6 +39,8 @@ void nodangle_f::signal(Design*des, NetNet*sig)
{ {
if (! sig->local_flag()) if (! sig->local_flag())
return; return;
if (sig->get_eref() > 0)
return;
/* Check to see if there is some significant signal connected /* Check to see if there is some significant signal connected
to every pin of this signal. */ to every pin of this signal. */
@ -71,6 +73,10 @@ void nodangle(Design*des)
/* /*
* $Log: nodangle.cc,v $ * $Log: nodangle.cc,v $
* Revision 1.2 1999/11/28 23:42:02 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.1 1999/11/18 03:52:20 steve * Revision 1.1 1999/11/18 03:52:20 steve
* Turn NetTmp objects into normal local NetNet objects, * Turn NetTmp objects into normal local NetNet objects,
* and add the nodangle functor to clean up the local * and add the nodangle functor to clean up the local

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: t-vvm.cc,v 1.83 1999/11/28 18:05:37 steve Exp $" #ident "$Id: t-vvm.cc,v 1.84 1999/11/28 23:42:03 steve Exp $"
#endif #endif
# include <iostream> # include <iostream>
@ -73,7 +73,6 @@ class target_vvm : public target_t {
virtual void net_assign_nb(ostream&os, const NetAssignNB*); virtual void net_assign_nb(ostream&os, const NetAssignNB*);
virtual void net_case_cmp(ostream&os, const NetCaseCmp*); virtual void net_case_cmp(ostream&os, const NetCaseCmp*);
virtual void net_const(ostream&os, const NetConst*); virtual void net_const(ostream&os, const NetConst*);
virtual void net_esignal(ostream&os, const NetESignal*);
virtual void net_event(ostream&os, const NetNEvent*); virtual void net_event(ostream&os, const NetNEvent*);
virtual bool process(ostream&os, const NetProcTop*); virtual bool process(ostream&os, const NetProcTop*);
virtual void proc_assign(ostream&os, const NetAssign*); virtual void proc_assign(ostream&os, const NetAssign*);
@ -1220,7 +1219,7 @@ void target_vvm::net_assign_nb(ostream&os, const NetAssignNB*net)
// Skip signals, I'll hit them when I handle the // Skip signals, I'll hit them when I handle the
// NetESignal nodes. // NetESignal nodes.
if (dynamic_cast<const NetNet*>(cur)) if (dynamic_cast<const NetESignal*>(cur))
continue; continue;
delayed << " " << mangle(cur->name()) delayed << " " << mangle(cur->name())
@ -1251,8 +1250,8 @@ void target_vvm::net_assign_nb(ostream&os, const NetAssignNB*net)
continue; continue;
// Skip signals, I'll hit them when I handle the // Skip signals, I'll hit them when I handle the
// NetESignal nodes. // NetNet nodes.
if (dynamic_cast<const NetNet*>(cur)) if (dynamic_cast<const NetESignal*>(cur))
continue; continue;
delayed << " " << mangle(cur->name()) << delayed << " " << mangle(cur->name()) <<
@ -1314,10 +1313,6 @@ void target_vvm::net_const(ostream&os, const NetConst*gate)
emit_gate_outputfun_(gate, 0); emit_gate_outputfun_(gate, 0);
} }
void target_vvm::net_esignal(ostream&os, const NetESignal*net)
{
}
/* /*
* The net_event device is a synthetic device type--a fabrication of * The net_event device is a synthetic device type--a fabrication of
* the elaboration phase. An event device receives value changes from * the elaboration phase. An event device receives value changes from
@ -1418,8 +1413,8 @@ void target_vvm::proc_assign(ostream&os, const NetAssign*net)
continue; continue;
// Skip signals, I'll hit them when I handle the // Skip signals, I'll hit them when I handle the
// NetESignal nodes. // NetNet nodes.
if (dynamic_cast<const NetNet*>(cur)) if (dynamic_cast<const NetESignal*>(cur))
continue; continue;
// It is possible for a named device to show up // It is possible for a named device to show up
@ -1459,8 +1454,8 @@ void target_vvm::proc_assign(ostream&os, const NetAssign*net)
continue; continue;
// Skip signals, I'll hit them when I handle the // Skip signals, I'll hit them when I handle the
// NetESignal nodes. // NetNet nodes.
if (dynamic_cast<const NetNet*>(cur)) if (dynamic_cast<const NetESignal*>(cur))
continue; continue;
// It is possible for a named device to show up // It is possible for a named device to show up
@ -1979,6 +1974,10 @@ extern const struct target tgt_vvm = {
}; };
/* /*
* $Log: t-vvm.cc,v $ * $Log: t-vvm.cc,v $
* Revision 1.84 1999/11/28 23:42:03 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.83 1999/11/28 18:05:37 steve * Revision 1.83 1999/11/28 18:05:37 steve
* Set VPI_MODULE_PATH in the target code, if desired. * Set VPI_MODULE_PATH in the target code, if desired.
* *

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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: target.cc,v 1.27 1999/11/27 19:07:58 steve Exp $" #ident "$Id: target.cc,v 1.28 1999/11/28 23:42:03 steve Exp $"
#endif #endif
# include "target.h" # include "target.h"
@ -131,13 +131,6 @@ void target_t::net_const(ostream&os, const NetConst*)
"Unhandled CONSTANT node." << endl; "Unhandled CONSTANT node." << endl;
} }
void target_t::net_esignal(ostream&os, const NetESignal*net)
{
cerr << "target (" << typeid(*this).name() << "): "
"Unhandled Expression Signal node." << endl;
net->dump_node(cerr, 4);
}
void target_t::net_event(ostream&os, const NetNEvent*net) void target_t::net_event(ostream&os, const NetNEvent*net)
{ {
cerr << "target (" << typeid(*this).name() << "): " cerr << "target (" << typeid(*this).name() << "): "
@ -315,6 +308,10 @@ void expr_scan_t::expr_binary(const NetEBinary*ex)
/* /*
* $Log: target.cc,v $ * $Log: target.cc,v $
* Revision 1.28 1999/11/28 23:42:03 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.27 1999/11/27 19:07:58 steve * Revision 1.27 1999/11/27 19:07:58 steve
* Support the creation of scopes. * Support the creation of scopes.
* *

View File

@ -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
*/ */
#if !defined(WINNT) #if !defined(WINNT)
#ident "$Id: target.h,v 1.26 1999/11/27 19:07:58 steve Exp $" #ident "$Id: target.h,v 1.27 1999/11/28 23:42:03 steve Exp $"
#endif #endif
# include "netlist.h" # include "netlist.h"
@ -85,7 +85,6 @@ struct target_t {
virtual void net_assign_nb(ostream&os, const NetAssignNB*); virtual void net_assign_nb(ostream&os, const NetAssignNB*);
virtual void net_case_cmp(ostream&os, const NetCaseCmp*); virtual void net_case_cmp(ostream&os, const NetCaseCmp*);
virtual void net_const(ostream&os, const NetConst*); virtual void net_const(ostream&os, const NetConst*);
virtual void net_esignal(ostream&os, const NetESignal*);
virtual void net_event(ostream&os, const NetNEvent*); virtual void net_event(ostream&os, const NetNEvent*);
/* Output a process (called for each process). It is up to the /* Output a process (called for each process). It is up to the
@ -147,6 +146,10 @@ extern const struct target *target_table[];
/* /*
* $Log: target.h,v $ * $Log: target.h,v $
* Revision 1.27 1999/11/28 23:42:03 steve
* NetESignal object no longer need to be NetNode
* objects. Let them keep a pointer to NetNet objects.
*
* Revision 1.26 1999/11/27 19:07:58 steve * Revision 1.26 1999/11/27 19:07:58 steve
* Support the creation of scopes. * Support the creation of scopes.
* *