Generate SubSignal refrences in vvm.

This commit is contained in:
steve 1999-04-25 22:52:32 +00:00
parent 471d389c8c
commit 4b73655537
2 changed files with 33 additions and 2 deletions

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT)
#ident "$Id: netlist.h,v 1.25 1999/04/25 00:44:10 steve Exp $"
#ident "$Id: netlist.h,v 1.26 1999/04/25 22:52:32 steve Exp $"
#endif
/*
@ -986,6 +986,9 @@ class NetESubSignal : public NetExpr {
NetESubSignal(NetESignal*sig, NetExpr*ex);
~NetESubSignal();
const string&name() const { return sig_->name(); }
const NetExpr*index() const { return idx_.ref(); }
virtual void expr_scan(struct expr_scan_t*) const;
virtual void dump(ostream&) const;
@ -1126,6 +1129,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
/*
* $Log: netlist.h,v $
* Revision 1.26 1999/04/25 22:52:32 steve
* Generate SubSignal refrences in vvm.
*
* Revision 1.25 1999/04/25 00:44:10 steve
* Core handles subsignal expressions.
*

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT)
#ident "$Id: t-vvm.cc,v 1.16 1999/04/22 04:56:58 steve Exp $"
#ident "$Id: t-vvm.cc,v 1.17 1999/04/25 22:52:32 steve Exp $"
#endif
# include <iostream>
@ -101,6 +101,7 @@ class vvm_proc_rval : public expr_scan_t {
result = mangle(mem->name()) + "[" + idx + "]";
}
virtual void expr_signal(const NetESignal*);
virtual void expr_subsignal(const NetESubSignal*sig);
virtual void expr_unary(const NetEUnary*);
virtual void expr_binary(const NetEBinary*);
};
@ -142,6 +143,27 @@ void vvm_proc_rval::expr_signal(const NetESignal*expr)
result = mangle(expr->name()) + "_bits";
}
void vvm_proc_rval::expr_subsignal(const NetESubSignal*sig)
{
string idx = make_temp();
string val = make_temp();
if (const NetEConst*cp = dynamic_cast<const NetEConst*>(sig->index())) {
os_ << setw(indent_) << "" << "const unsigned " << idx <<
" = " << cp->value().as_ulong() << ";" << endl;
} else {
sig->index()->expr_scan(this);
os_ << setw(indent_) << "" << "const unsigned " <<
idx << " = " << result << ".as_unsigned();" <<
endl;
}
os_ << setw(indent_) << "" << "vvm_bitset_t<1>" << val << ";" << endl;
os_ << setw(indent_) << "" << val << "[0] = " <<
mangle(sig->name()) << "_bits[" << idx << "];" << endl;
result = val;
}
void vvm_proc_rval::expr_unary(const NetEUnary*expr)
{
expr->expr()->expr_scan(this);
@ -901,6 +923,9 @@ extern const struct target tgt_vvm = {
};
/*
* $Log: t-vvm.cc,v $
* Revision 1.17 1999/04/25 22:52:32 steve
* Generate SubSignal refrences in vvm.
*
* Revision 1.16 1999/04/22 04:56:58 steve
* Add to vvm proceedural memory references.
*