[sv-bc] RE: [sv-ec] Are variable-width part selects already part of the SV language? (Mantis 2684)

From: Rich, Dave <Dave_Rich@mentor.com>
Date: Wed May 05 2010 - 22:36:48 PDT

Brad,

Section 11.4.14.4 is clear to most readers that the expression to the
left of the 'with' clause in a streaming operation is restricted to an
unpacked array. I don't think we want to relax that restriction unless
streaming operation is in the context of a cast to a recognized data
type.

I would prefer just to allow integral variable-width part selects in the
context of an explicit cast.

bit [31:0] a,b;
int i.j,k;

a = 32'(b[i:k])+32'(a[k-1:j]); // streaming operators cannot work kere

/Dave

> -----Original Message-----
> From: owner-sv-ec@eda.org [mailto:owner-sv-ec@eda.org] On Behalf Of
Brad
> Pierce
> Sent: Wednesday, May 05, 2010 5:04 PM
> To: Bresticker, Shalom
> Cc: sv-bc@eda.org; SV_EC List
> Subject: RE: [sv-ec] Are variable-width part selects already part of
the
> SV language? (Mantis 2684)
>
> Shalom,
>
> I'm not clear whether "if the expression is an unpacked array" is
> actually a restriction against packed arrays, or just an incomplete
> specification. But if the LRM were clarified/enhanced so that the
> following were obviously legal, would this syntax be enough to meet
your
> needs in Mantis 2684?
>
> module test(input int i, j, input logic [0:1000] v_in, output [0:15]
> v_out);
> assign v_out = {<< {v_in with [i:j]}};
> endmodule
>
> -- Brad
>
> -----Original Message-----
> From: Gordon Vreugdenhil [mailto:gordonv@model.com]
> Sent: Wednesday, May 05, 2010 12:53 PM
> To: Brad Pierce
> Cc: sv-bc@eda.org; SV_EC List
> Subject: Re: [sv-ec] Are variable-width part selects already part of
the
> SV language? (Mantis 2684)
>
> I think it is -- 1800-2009 11.4.14.1 has an explicit rule
> for "if the expression is an unpacked array" which should apply
> in this case.
>
> Gord.
>
> Brad Pierce wrote:
> > Gord,
> >
> > Do you agree with my reading of the LRM that the following is legal
> today?
> >
> > module test(input int i, j, input logic v_in[0:1000], output
[0:15]
> v_out);
> > assign v_out = {<< {v_in with [i:j]}};
> > endmodule
> >
> > -- Brad
> >
> > -----Original Message-----
> > From: Gordon Vreugdenhil [mailto:gordonv@model.com]
> > Sent: Wednesday, May 05, 2010 10:59 AM
> > To: Brad Pierce
> > Cc: sv-bc@eda.org; SV_EC List
> > Subject: Re: [sv-ec] Are variable-width part selects already part of
> the SV language? (Mantis 2684)
> >
> >
> > I don't have any issue with a variable operation in a restricted
> > RHS context like a bit-stream cast. Having that be permitted
> > in a cast would be fine. There are no dynamic width *types*
> > in this situation -- the *operation* is defined in a manner
> > that supports dynamic indices, but there is no type that
> > incorporates those indices.
> >
> > If that is all that people want, I'm fine with that.
> >
> > I will have serious issues with allowing dynamic indices
> > in any context in which an expression type width must be computed
> > dynamically (i.e. at very least anything that participates in the
> > calculations defined in table 11-21 of 11.6). To allow that
> > would require substantial work in the core Verilog type
> > calculus and would necessitate the introduction of automatic
> > resizing and recalculation of types on a dynamic basis. I'm
> > not willing to support that.
> >
> > Gord
> >
> >
> >
> > Brad Pierce wrote:
> >> - 1 --- In http://www.eda.org/svdb/view.php?id=2684 , Shalom
requests
> --------------------
> >>
> >> Non-constant width part selects
> >>
> >> - 2 --- In http://www.eda.org/svdb/view.php?id=2684#c9352 , Dave
> writes ------------------
> >>
> >> I believe this can be handled in the context of a bitstream cast or
> streaming operator. In the same manner that we allow casing from
dynamic
> to fixed sized unpacked arrays, we could apply the same rules to
> dynamically sized part selects. As long as the fixed or dynamic size
> target can accommodate the fixed or dynamically sized source, it
should
> be legal.
> >>
> >> So the only change required is to allow variable sized part selects
as
> a component of a bitstream cast or streaming operator.
> >>
> >> - 3 --- In http://www.eda.org/svdb/view.php?id=2684#c9376 , I write

--
> --------------------
> >>
> >> I like Dave's suggestion, but don't we already have the capability
he
> describes, as long we lift the arbitrary restriction that the left
> operand in a stream_expression must be unpacked?
> >>
> >>  lhs = { << { v with [i:j] }};
> >>
> >> A gotcha would be that if there are not enough bits to fill the
left-
> hand side variable, then the 0-padding is on the right.
> >>
> >> To use { << { v with [i:j] }} directly in an arithmetic expression,
> one would need to cast it to some type, as mentioned in
> http://www.eda.org/svdb/view.php?id=1401 .
> >>
> >> So if this is legal
> >>
> >> module test(input int i, j, input logic v_in[0:1000], output [0:15]
> v_out);
> >>   assign v_out = {<< {v_in with [i:j]}};
> >> endmodule
> >>
> >> why not also the following?
> >>
> >> module test(input int i, j, input logic [0:1000] v_in, output
[0:15]
> v_out);
> >>   assign v_out = {<< {v_in with [i:j]}};
> >> endmodule
> >>
> >>
----------------------------------------------------------------------
> ----------------------
> >>
> >> -- Brad
> >>
> >>
> >>
> >
> 
> --
> --------------------------------------------------------------------
> Gordon Vreugdenhil                                503-685-0808
> Model Technology (Mentor Graphics)                gordonv@model.com
> 
> 
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
> 
-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed May 5 22:37:06 2010

This archive was generated by hypermail 2.1.8 : Wed May 05 2010 - 22:39:27 PDT