Skip to content
This repository
Browse code

Add support for bit select of parameters.

 This leads to a NetESelect node and the
 vvp code generator to support that.
  • Loading branch information...
commit 364ffc9024a018a111e959778edea3188fbdaf7a 1 parent 712080f
steve authored
6 Makefile.in
@@ -16,7 +16,7 @@
16 16 # 59 Temple Place - Suite 330
17 17 # Boston, MA 02111-1307, USA
18 18 #
19   -#ident "$Id: Makefile.in,v 1.112 2002/01/25 03:25:16 steve Exp $"
  19 +#ident "$Id: Makefile.in,v 1.113 2002/01/28 00:52:41 steve Exp $"
20 20 #
21 21 #
22 22 SHELL = /bin/sh
@@ -117,8 +117,8 @@ elab_lval.o elab_net.o elab_anet.o elab_pexpr.o elab_scope.o \
117 117 elab_sig.o emit.o eval.o eval_rconst.o \
118 118 eval_tree.o expr_synth.o functor.o lexor.o lexor_keyword.o link_const.o \
119 119 load_module.o mangle.o netlist.o netmisc.o net_assign.o \
120   -net_design.o net_event.o net_force.o net_link.o net_modulo.o net_proc.o \
121   -net_scope.o net_udp.o pad_to_width.o \
  120 +net_design.o net_event.o net_expr.o net_force.o net_link.o net_modulo.o \
  121 +net_proc.o net_scope.o net_udp.o pad_to_width.o \
122 122 parse.o parse_misc.o pform.o pform_dump.o \
123 123 set_width.o \
124 124 verinum.o verireal.o target.o targets.o \
3  README.txt
@@ -405,6 +405,8 @@ constructs.
405 405
406 406 - trireg is not supported. tri0 and tri1 are supported.
407 407
  408 + - force to nets are not supported. Force to variables, and
  409 + assign/deassign, are supported.
408 410
409 411 6.0 CREDITS
410 412
@@ -430,6 +432,7 @@ Verilog guidance, and especially testing from many people, including
430 432 Stuart Sutherland <stuart@sutherland.com>
431 433 Stephen Tell <tell@cs.unc.edu>
432 434 Stefan Theide <Stefan.Thiede@sv.sc.philips.com>
  435 + Tom Verbeure
433 436 Steve Wilson <stevew@home.com>
434 437
435 438 and others. Testers in particular include a larger community of people
13 dup_expr.cc
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT) && !defined(macintosh)
20   -#ident "$Id: dup_expr.cc,v 1.6 2001/11/19 01:54:14 steve Exp $"
  20 +#ident "$Id: dup_expr.cc,v 1.7 2002/01/28 00:52:41 steve Exp $"
21 21 #endif
22 22
23 23 # include "config.h"
@@ -31,6 +31,12 @@ NetEScope* NetEScope::dup_expr() const
31 31 return 0;
32 32 }
33 33
  34 +NetESelect* NetESelect::dup_expr() const
  35 +{
  36 + return new NetESelect(expr_->dup_expr(), base_->dup_expr(),
  37 + expr_width());
  38 +}
  39 +
34 40 NetESFunc* NetESFunc::dup_expr() const
35 41 {
36 42 NetESFunc*tmp = new NetESFunc(name_, expr_width(), nparms());
@@ -68,6 +74,11 @@ NetEUnary* NetEUnary::dup_expr() const
68 74
69 75 /*
70 76 * $Log: dup_expr.cc,v $
  77 + * Revision 1.7 2002/01/28 00:52:41 steve
  78 + * Add support for bit select of parameters.
  79 + * This leads to a NetESelect node and the
  80 + * vvp code generator to support that.
  81 + *
71 82 * Revision 1.6 2001/11/19 01:54:14 steve
72 83 * Port close cropping behavior from mcrgb
73 84 * Move window array reset to libmc.
24 elab_expr.cc
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT) && !defined(macintosh)
20   -#ident "$Id: elab_expr.cc,v 1.49 2002/01/11 05:25:45 steve Exp $"
  20 +#ident "$Id: elab_expr.cc,v 1.50 2002/01/28 00:52:41 steve Exp $"
21 21 #endif
22 22
23 23 # include "config.h"
@@ -415,6 +415,23 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope) const
415 415 else
416 416 tmp = new NetEParam(des, scope, path_);
417 417
  418 + if (msb_ && lsb_) {
  419 + cerr << get_line() << ": error: part select of "
  420 + << "parameter " << path_ << " in " << scope->name()
  421 + << " is illegal." << endl;
  422 + des->errors += 1;
  423 +
  424 + } else if (msb_) {
  425 + /* Handle the case where a parameter has a bit
  426 + select attached to it. Generate a NetESelect
  427 + object to select the bit as desired. */
  428 + NetExpr*mtmp = msb_->elaborate_expr(des, scope);
  429 + NetESelect*stmp = new NetESelect(tmp, mtmp, 1);
  430 + tmp->set_line(*this);
  431 + tmp = stmp;
  432 + }
  433 +
  434 +
418 435 tmp->set_line(*this);
419 436 return tmp;
420 437 }
@@ -673,6 +690,11 @@ NetEUnary* PEUnary::elaborate_expr(Design*des, NetScope*scope) const
673 690
674 691 /*
675 692 * $Log: elab_expr.cc,v $
  693 + * Revision 1.50 2002/01/28 00:52:41 steve
  694 + * Add support for bit select of parameters.
  695 + * This leads to a NetESelect node and the
  696 + * vvp code generator to support that.
  697 + *
676 698 * Revision 1.49 2002/01/11 05:25:45 steve
677 699 * The stime system function is 32bits.
678 700 *
13 elab_pexpr.cc
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT) && !defined(macintosh)
20   -#ident "$Id: elab_pexpr.cc,v 1.12 2001/12/03 04:47:14 steve Exp $"
  20 +#ident "$Id: elab_pexpr.cc,v 1.13 2002/01/28 00:52:41 steve Exp $"
21 21 #endif
22 22
23 23 # include "config.h"
@@ -152,6 +152,12 @@ NetExpr*PEIdent::elaborate_pexpr(Design*des, NetScope*scope) const
152 152 return 0;
153 153 }
154 154
  155 + if (msb_ || lsb_ || idx_) {
  156 + cerr << get_line() << ": error: Cannot bit/part select "
  157 + "bits of parameters." << endl;
  158 + des->errors += 1;
  159 + }
  160 +
155 161 NetExpr*res = new NetEParam(des, pscope, hname_t(name));
156 162 assert(res);
157 163 delete name;
@@ -218,6 +224,11 @@ NetExpr*PEUnary::elaborate_pexpr (Design*des, NetScope*scope) const
218 224
219 225 /*
220 226 * $Log: elab_pexpr.cc,v $
  227 + * Revision 1.13 2002/01/28 00:52:41 steve
  228 + * Add support for bit select of parameters.
  229 + * This leads to a NetESelect node and the
  230 + * vvp code generator to support that.
  231 + *
221 232 * Revision 1.12 2001/12/03 04:47:14 steve
222 233 * Parser and pform use hierarchical names as hname_t
223 234 * objects instead of encoded strings.
12 emit.cc
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT) && !defined(macintosh)
20   -#ident "$Id: emit.cc,v 1.64 2002/01/19 19:02:08 steve Exp $"
  20 +#ident "$Id: emit.cc,v 1.65 2002/01/28 00:52:41 steve Exp $"
21 21 #endif
22 22
23 23 # include "config.h"
@@ -434,6 +434,11 @@ void NetEScope::expr_scan(struct expr_scan_t*tgt) const
434 434 tgt->expr_scope(this);
435 435 }
436 436
  437 +void NetESelect::expr_scan(struct expr_scan_t*tgt) const
  438 +{
  439 + tgt->expr_select(this);
  440 +}
  441 +
437 442 void NetESFunc::expr_scan(struct expr_scan_t*tgt) const
438 443 {
439 444 tgt->expr_sfunc(this);
@@ -477,6 +482,11 @@ bool emit(const Design*des, const char*type)
477 482
478 483 /*
479 484 * $Log: emit.cc,v $
  485 + * Revision 1.65 2002/01/28 00:52:41 steve
  486 + * Add support for bit select of parameters.
  487 + * This leads to a NetESelect node and the
  488 + * vvp code generator to support that.
  489 + *
480 490 * Revision 1.64 2002/01/19 19:02:08 steve
481 491 * Pass back target errors processing conditionals.
482 492 *
8 ivl_target.h
@@ -19,7 +19,7 @@
19 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 20 */
21 21 #if !defined(WINNT) && !defined(macintosh)
22   -#ident "$Id: ivl_target.h,v 1.91 2002/01/03 04:19:01 steve Exp $"
  22 +#ident "$Id: ivl_target.h,v 1.92 2002/01/28 00:52:41 steve Exp $"
23 23 #endif
24 24
25 25 #ifdef __cplusplus
@@ -164,6 +164,7 @@ typedef enum ivl_expr_type_e {
164 164 IVL_EX_MEMORY,
165 165 IVL_EX_NUMBER,
166 166 IVL_EX_SCOPE,
  167 + IVL_EX_SELECT,
167 168 IVL_EX_SFUNC,
168 169 IVL_EX_SIGNAL,
169 170 IVL_EX_STRING,
@@ -977,6 +978,11 @@ _END_DECL
977 978
978 979 /*
979 980 * $Log: ivl_target.h,v $
  981 + * Revision 1.92 2002/01/28 00:52:41 steve
  982 + * Add support for bit select of parameters.
  983 + * This leads to a NetESelect node and the
  984 + * vvp code generator to support that.
  985 + *
980 986 * Revision 1.91 2002/01/03 04:19:01 steve
981 987 * Add structural modulus support down to vvp.
982 988 *
35 netlist.h
... ... @@ -1,7 +1,7 @@
1 1 #ifndef __netlist_H
2 2 #define __netlist_H
3 3 /*
4   - * Copyright (c) 1998-2000 Stephen Williams (steve@icarus.com)
  4 + * Copyright (c) 1998-2002 Stephen Williams (steve@icarus.com)
5 5 *
6 6 * This source code is free software; you can redistribute it
7 7 * and/or modify it in source code form under the terms of the GNU
@@ -19,7 +19,7 @@
19 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 20 */
21 21 #if !defined(WINNT) && !defined(macintosh)
22   -#ident "$Id: netlist.h,v 1.230 2002/01/22 01:40:04 steve Exp $"
  22 +#ident "$Id: netlist.h,v 1.231 2002/01/28 00:52:41 steve Exp $"
23 23 #endif
24 24
25 25 /*
@@ -2309,6 +2309,32 @@ class NetEParam : public NetExpr {
2309 2309
2310 2310
2311 2311 /*
  2312 + * This expression node supports bit/part selects from general
  2313 + * expressions. The sub-expression is self-sized, and has bits
  2314 + * selected from it. The base is the expression that identifies the
  2315 + * lsb of the expression, and the wid is the width of the part select,
  2316 + * or 1 for a bit select.
  2317 + */
  2318 +class NetESelect : public NetExpr {
  2319 +
  2320 + public:
  2321 + NetESelect(NetExpr*exp, NetExpr*base, unsigned wid);
  2322 + ~NetESelect();
  2323 +
  2324 + const NetExpr*sub_expr() const;
  2325 + const NetExpr*select() const;
  2326 +
  2327 + virtual bool set_width(unsigned w);
  2328 + virtual bool has_width() const;
  2329 + virtual void expr_scan(struct expr_scan_t*) const;
  2330 + virtual NetESelect* dup_expr() const;
  2331 +
  2332 + private:
  2333 + NetExpr*expr_;
  2334 + NetExpr*base_;
  2335 +};
  2336 +
  2337 +/*
2312 2338 * This class is a special (and magical) expression node type that
2313 2339 * represents scope names. These can only be found as parameters to
2314 2340 * NetSTask objects.
@@ -2865,6 +2891,11 @@ extern ostream& operator << (ostream&, NetNet::Type);
2865 2891
2866 2892 /*
2867 2893 * $Log: netlist.h,v $
  2894 + * Revision 1.231 2002/01/28 00:52:41 steve
  2895 + * Add support for bit select of parameters.
  2896 + * This leads to a NetESelect node and the
  2897 + * vvp code generator to support that.
  2898 + *
2868 2899 * Revision 1.230 2002/01/22 01:40:04 steve
2869 2900 * Precalculate constant results of memory index expressions.
2870 2901 *
9 t-dll-api.cc
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT) && !defined(macintosh)
20   -#ident "$Id: t-dll-api.cc,v 1.74 2002/01/03 04:19:01 steve Exp $"
  20 +#ident "$Id: t-dll-api.cc,v 1.75 2002/01/28 00:52:41 steve Exp $"
21 21 #endif
22 22
23 23 # include "config.h"
@@ -272,6 +272,7 @@ extern "C" ivl_expr_t ivl_expr_oper1(ivl_expr_t net)
272 272 assert(net);
273 273 switch (net->type_) {
274 274 case IVL_EX_BINARY:
  275 + case IVL_EX_SELECT:
275 276 return net->u_.binary_.lef_;
276 277
277 278 case IVL_EX_BITSEL:
@@ -298,6 +299,7 @@ extern "C" ivl_expr_t ivl_expr_oper2(ivl_expr_t net)
298 299 assert(net);
299 300 switch (net->type_) {
300 301 case IVL_EX_BINARY:
  302 + case IVL_EX_SELECT:
301 303 return net->u_.binary_.rig_;
302 304
303 305 case IVL_EX_TERNARY:
@@ -1450,6 +1452,11 @@ extern "C" ivl_statement_t ivl_stmt_sub_stmt(ivl_statement_t net)
1450 1452
1451 1453 /*
1452 1454 * $Log: t-dll-api.cc,v $
  1455 + * Revision 1.75 2002/01/28 00:52:41 steve
  1456 + * Add support for bit select of parameters.
  1457 + * This leads to a NetESelect node and the
  1458 + * vvp code generator to support that.
  1459 + *
1453 1460 * Revision 1.74 2002/01/03 04:19:01 steve
1454 1461 * Add structural modulus support down to vvp.
1455 1462 *
29 t-dll-expr.cc
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT) & !defined(macintosh)
20   -#ident "$Id: t-dll-expr.cc,v 1.21 2001/12/31 00:08:14 steve Exp $"
  20 +#ident "$Id: t-dll-expr.cc,v 1.22 2002/01/28 00:52:41 steve Exp $"
21 21 #endif
22 22
23 23 # include "config.h"
@@ -161,6 +161,28 @@ void dll_target::expr_scope(const NetEScope*net)
161 161 expr_->u_.scope_.scope = lookup_scope_(net->scope());
162 162 }
163 163
  164 +void dll_target::expr_select(const NetESelect*net)
  165 +{
  166 + assert(expr_ == 0);
  167 +
  168 + net->sub_expr()->expr_scan(this);
  169 + ivl_expr_t left = expr_;
  170 +
  171 + expr_ = 0;
  172 + net->select()->expr_scan(this);
  173 + ivl_expr_t rght = expr_;
  174 +
  175 + expr_ = (ivl_expr_t)calloc(1, sizeof(struct ivl_expr_s));
  176 + assert(expr_);
  177 +
  178 + expr_->type_ = IVL_EX_SELECT;
  179 + expr_->width_= net->expr_width();
  180 + expr_->signed_ = net->has_sign()? 1 : 0;
  181 +
  182 + expr_->u_.binary_.lef_ = left;
  183 + expr_->u_.binary_.rig_ = rght;
  184 +}
  185 +
164 186 void dll_target::expr_sfunc(const NetESFunc*net)
165 187 {
166 188 assert(expr_ == 0);
@@ -347,6 +369,11 @@ void dll_target::expr_unary(const NetEUnary*net)
347 369
348 370 /*
349 371 * $Log: t-dll-expr.cc,v $
  372 + * Revision 1.22 2002/01/28 00:52:41 steve
  373 + * Add support for bit select of parameters.
  374 + * This leads to a NetESelect node and the
  375 + * vvp code generator to support that.
  376 + *
350 377 * Revision 1.21 2001/12/31 00:08:14 steve
351 378 * Support $signed cast of expressions.
352 379 *
8 t-dll.h
@@ -19,7 +19,7 @@
19 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 20 */
21 21 #if !defined(WINNT) && !defined(macintosh)
22   -#ident "$Id: t-dll.h,v 1.74 2002/01/19 19:02:08 steve Exp $"
  22 +#ident "$Id: t-dll.h,v 1.75 2002/01/28 00:52:41 steve Exp $"
23 23 #endif
24 24
25 25 # include "target.h"
@@ -131,6 +131,7 @@ struct dll_target : public target_t, public expr_scan_t {
131 131 void expr_memory(const NetEMemory*);
132 132 void expr_const(const NetEConst*);
133 133 void expr_scope(const NetEScope*);
  134 + void expr_select(const NetESelect*);
134 135 void expr_sfunc(const NetESFunc*);
135 136 void expr_subsignal(const NetEBitSel*);
136 137 void expr_ternary(const NetETernary*);
@@ -590,6 +591,11 @@ struct ivl_statement_s {
590 591
591 592 /*
592 593 * $Log: t-dll.h,v $
  594 + * Revision 1.75 2002/01/28 00:52:41 steve
  595 + * Add support for bit select of parameters.
  596 + * This leads to a NetESelect node and the
  597 + * vvp code generator to support that.
  598 + *
593 599 * Revision 1.74 2002/01/19 19:02:08 steve
594 600 * Pass back target errors processing conditionals.
595 601 *
13 target.cc
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT) && !defined(macintosh)
20   -#ident "$Id: target.cc,v 1.58 2002/01/19 19:02:08 steve Exp $"
  20 +#ident "$Id: target.cc,v 1.59 2002/01/28 00:52:41 steve Exp $"
21 21 #endif
22 22
23 23 # include "config.h"
@@ -340,6 +340,12 @@ void expr_scan_t::expr_scope(const NetEScope*)
340 340 "unhandled expr_scope." << endl;
341 341 }
342 342
  343 +void expr_scan_t::expr_select(const NetESelect*)
  344 +{
  345 + cerr << "expr_scan_t (" << typeid(*this).name() << "): "
  346 + "unhandled expr_select." << endl;
  347 +}
  348 +
343 349 void expr_scan_t::expr_sfunc(const NetESFunc*)
344 350 {
345 351 cerr << "expr_scan_t (" << typeid(*this).name() << "): "
@@ -384,6 +390,11 @@ void expr_scan_t::expr_binary(const NetEBinary*ex)
384 390
385 391 /*
386 392 * $Log: target.cc,v $
  393 + * Revision 1.59 2002/01/28 00:52:41 steve
  394 + * Add support for bit select of parameters.
  395 + * This leads to a NetESelect node and the
  396 + * vvp code generator to support that.
  397 + *
387 398 * Revision 1.58 2002/01/19 19:02:08 steve
388 399 * Pass back target errors processing conditionals.
389 400 *
8 target.h
@@ -19,7 +19,7 @@
19 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20 20 */
21 21 #if !defined(WINNT) && !defined(macintosh)
22   -#ident "$Id: target.h,v 1.55 2002/01/19 19:02:08 steve Exp $"
  22 +#ident "$Id: target.h,v 1.56 2002/01/28 00:52:41 steve Exp $"
23 23 #endif
24 24
25 25 # include "netlist.h"
@@ -132,6 +132,7 @@ struct expr_scan_t {
132 132 virtual void expr_concat(const NetEConcat*);
133 133 virtual void expr_memory(const NetEMemory*);
134 134 virtual void expr_scope(const NetEScope*);
  135 + virtual void expr_select(const NetESelect*);
135 136 virtual void expr_sfunc(const NetESFunc*);
136 137 virtual void expr_signal(const NetESignal*);
137 138 virtual void expr_subsignal(const NetEBitSel*);
@@ -162,6 +163,11 @@ extern const struct target *target_table[];
162 163
163 164 /*
164 165 * $Log: target.h,v $
  166 + * Revision 1.56 2002/01/28 00:52:41 steve
  167 + * Add support for bit select of parameters.
  168 + * This leads to a NetESelect node and the
  169 + * vvp code generator to support that.
  170 + *
165 171 * Revision 1.55 2002/01/19 19:02:08 steve
166 172 * Pass back target errors processing conditionals.
167 173 *
125 tgt-vvp/eval_expr.c
@@ -17,7 +17,7 @@
17 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 18 */
19 19 #if !defined(WINNT)
20   -#ident "$Id: eval_expr.c,v 1.54 2002/01/11 05:23:05 steve Exp $"
  20 +#ident "$Id: eval_expr.c,v 1.55 2002/01/28 00:52:42 steve Exp $"
21 21 #endif
22 22
23 23 # include "vvp_priv.h"
@@ -977,6 +977,55 @@ static struct vector_info draw_memory_expr(ivl_expr_t exp, unsigned wid)
977 977 return res;
978 978 }
979 979
  980 +static struct vector_info draw_select_expr(ivl_expr_t exp, unsigned wid)
  981 +{
  982 + struct vector_info subv, shiv, res;
  983 + ivl_expr_t sube = ivl_expr_oper1(exp);
  984 + ivl_expr_t shift = ivl_expr_oper2(exp);
  985 +
  986 + /* Evaluate the sub-expression. */
  987 + subv = draw_eval_expr(sube);
  988 +
  989 + /* Any bit select of a constant zero is another constant zero,
  990 + so short circuit and return the value we know. */
  991 + if (subv.base == 0) {
  992 + subv.wid = wid;
  993 + return subv;
  994 + }
  995 +
  996 + /* Evaluate the bit select base expression and store the
  997 + result into index register 0. */
  998 + shiv = draw_eval_expr(shift);
  999 + fprintf(vvp_out, " %%ix/get 0, %u, %u;\n", shiv.base, shiv.wid);
  1000 + clr_vector(shiv);
  1001 +
  1002 + /* If the subv result is a magic constant, then make a copy in
  1003 + writeable vector space and work from there instead. */
  1004 + if (subv.base < 0) {
  1005 + res.base = allocate_vector(subv.wid);
  1006 + res.wid = wid;
  1007 + fprintf(vvp_out, " %%mov %u, %u, %u;\n", res.base,
  1008 + subv.base, res.wid);
  1009 + subv = res;
  1010 + }
  1011 +
  1012 + fprintf(vvp_out, " %%shiftr/i0 %u, %u;\n", subv.base, subv.wid);
  1013 +
  1014 + assert(subv.wid >= wid);
  1015 + if (subv.wid > wid) {
  1016 + res.base = subv.base;
  1017 + res.wid = wid;
  1018 +
  1019 + subv.base += wid;
  1020 + clr_vector(subv);
  1021 +
  1022 + } else if (subv.wid == wid) {
  1023 + res = subv;
  1024 + }
  1025 +
  1026 + return res;
  1027 +}
  1028 +
980 1029 static struct vector_info draw_ternary_expr(ivl_expr_t exp, unsigned wid)
981 1030 {
982 1031 struct vector_info res, tmp;
@@ -1415,6 +1464,10 @@ struct vector_info draw_eval_expr_wid(ivl_expr_t exp, unsigned wid)
1415 1464 res = draw_number_expr(exp, wid);
1416 1465 break;
1417 1466
  1467 + case IVL_EX_SELECT:
  1468 + res = draw_select_expr(exp, wid);
  1469 + break;
  1470 +
1418 1471 case IVL_EX_SIGNAL:
1419 1472 res = draw_signal_expr(exp, wid);
1420 1473 break;
@@ -1450,6 +1503,11 @@ struct vector_info draw_eval_expr(ivl_expr_t exp)
1450 1503
1451 1504 /*
1452 1505 * $Log: eval_expr.c,v $
  1506 + * Revision 1.55 2002/01/28 00:52:42 steve
  1507 + * Add support for bit select of parameters.
  1508 + * This leads to a NetESelect node and the
  1509 + * vvp code generator to support that.
  1510 + *
1453 1511 * Revision 1.54 2002/01/11 05:23:05 steve
1454 1512 * Handle certain special cases of stime.
1455 1513 *
@@ -1499,70 +1557,5 @@ struct vector_info draw_eval_expr(ivl_expr_t exp)
1499 1557 *
1500 1558 * Revision 1.39 2001/07/27 02:41:56 steve
1501 1559 * Fix binding of dangling function ports. do not elide them.
1502   - *
1503   - * Revision 1.38 2001/07/22 19:33:51 steve
1504   - * Handle repeat for concatenation expressions.
1505   - *
1506   - * Revision 1.37 2001/07/22 00:17:50 steve
1507   - * Support the NetESubSignal expressions in vvp.tgt.
1508   - *
1509   - * Revision 1.36 2001/07/09 15:38:35 steve
1510   - * Properly step through wide inputs. (Stephan Boettcher)
1511   - *
1512   - * Revision 1.35 2001/07/07 20:20:10 steve
1513   - * Pass parameters to system functions.
1514   - *
1515   - * Revision 1.34 2001/06/30 21:07:26 steve
1516   - * Support non-const right shift (unsigned).
1517   - *
1518   - * Revision 1.33 2001/06/23 18:40:34 steve
1519   - * Generate %shiftl instructions for shift.
1520   - *
1521   - * Revision 1.32 2001/06/21 04:53:59 steve
1522   - * Escaped identifiers in behavioral expressions. (Stephan Boettcher)
1523   - *
1524   - * Revision 1.31 2001/06/18 01:09:32 steve
1525   - * More behavioral unary reduction operators.
1526   - * (Stephan Boettcher)
1527   - *
1528   - * Revision 1.30 2001/06/16 23:45:05 steve
1529   - * Add support for structural multiply in t-dll.
1530   - * Add code generators and vvp support for both
1531   - * structural and behavioral multiply.
1532   - *
1533   - * Revision 1.29 2001/05/24 04:20:10 steve
1534   - * Add behavioral modulus.
1535   - *
1536   - * Revision 1.28 2001/05/20 01:18:38 steve
1537   - * Implement reduction nor.
1538   - *
1539   - * Revision 1.27 2001/05/20 01:02:55 steve
1540   - * Initial support for system functions.
1541   - *
1542   - * Revision 1.26 2001/05/17 04:37:02 steve
1543   - * Behavioral ternary operators for vvp.
1544   - *
1545   - * Revision 1.25 2001/05/10 00:26:53 steve
1546   - * VVP support for memories in expressions,
1547   - * including general support for thread bit
1548   - * vectors as system task parameters.
1549   - * (Stephan Boettcher)
1550   - *
1551   - * Revision 1.24 2001/05/06 17:54:33 steve
1552   - * Behavioral code to read memories. (Stephan Boettcher)
1553   - *
1554   - * Revision 1.23 2001/05/02 01:57:25 steve
1555   - * Support behavioral subtraction.
1556   - *
1557   - * Revision 1.22 2001/05/01 02:07:34 steve
1558   - * Comparisons cant leave their results in the opcode
1559   - * result area or their values will be clobbered by other
1560   - * parts of a complex expression.
1561   - *
1562   - * Revision 1.21 2001/04/30 05:11:18 steve
1563   - * OR is %or. Get this right.
1564   - *
1565   - * Revision 1.20 2001/04/29 20:47:39 steve
1566   - * Evalulate logical or (||)
1567 1560 */
1568 1561

0 comments on commit 364ffc9

Please sign in to comment.
Something went wrong with that request. Please try again.