RE: [sv-bc] E-mail Ballot: Respond by 8am PDT, Tuesday, March 25

From: Stuart Sutherland <stuart_at_.....>
Date: Tue Apr 01 2008 - 19:54:41 PDT
I accept the arguments given by Shalom and Steven, and withdraw my
objections to the proposal.  What I consider most important is the LRM
specify a non-ambiguous behavior, which I feel this proposal does.

Stu
~~~~~~~~~~~~~~~~~~~~~~~~~
Stuart Sutherland
stuart@sutherland-hdl.com
+1-503-692-0898

> -----Original Message-----
> From: owner-sv-bc@eda.org [mailto:owner-sv-bc@eda.org] On Behalf Of
> Steven Sharp
> Sent: Tuesday, April 01, 2008 5:35 PM
> To: shalom.bresticker@intel.com; sv-bc@eda.org; stuart@sutherland-
> hdl.com
> Subject: RE: [sv-bc] E-mail Ballot: Respond by 8am PDT, Tuesday, March
> 25
> 
> 
> >From: "Stuart Sutherland" <stuart@sutherland-hdl.com>
> 
> >Another already approved Mantis item does allow bit and part-selects
> of
> >abstract expressions.  Therefore it is important that the standard
> does
> >define the bit numbering of a size cast (which the proposal does), and
> that
> >the bit numbering be intuitive (which I feel the proposal fails to
> do).
> 
> As Shalom has pointed out, this is only allowed for concatenations.
> 
> A concatenation can contain multiple nets/variables, each with their
> own bit numberings.  So you cannot derive an overall bit numbering for
> the concatenation from the numberings of the components.  They may even
> have different endiannesses, so you cannot even derive an overall
> endianness from them.  In this case, it seems pretty clear that you
> have to give up on deriving anything from the components, and go to
> a normalized numbering.  Such a normalized numbering already exists,
> and it is [width-1:0].
> 
> Other expression types, including size casts, do not allow bit or part-
> selects.  So the description of the numbering has little impact.  But
> I will give my response to your comments.
> 
> 
> >What I think is intuitive is:
> >- A size cast of a little-endian expression (e.g. logic [47:0] foo;)
> should
> >return a little-endian expression (e.g. 32'(foo) returns an expression
> the
> >bit numbering [31:0]).  Note that the LARGEST-numbered LEFT-most bits
> (the
> >MSB's) of foo are what is affected by the cast.
> 
> I would have expressed that by saying it is the smallest-numbered,
> right-most bits (the LSBs) of foo are what are retained.
> 
> Note that this has the nice property that if an expression with this
> normalized numbering is size-cast into an expression with the same
> normalized numbering, each bit that appears in both has the same index
> in both.
> 
> 
> >- A size cast of a big-endian expression (e.g. logic [0:47] foo;)
> should
> >return a big-endian expression.  What I am undecided on is if a size
> cast of
> >a big-endian expression affects the SMALLEST-numbered LEFT-most bits
> (e.g.
> >32'(foo) returns an expression with the bit numbering [16:47]) or the
> >LARGEST-numbered RIGHT-most bits (e.g 32'(foo) returns an expression
> with
> >the bit numbering [0:31]).
> 
> Regardless of the numbering, it must return the least significant bits.
> That is how all existing integral conversions work in Verilog (and in
> other languages, such as C).  That is the conversion that preserves the
> integer value, assuming that it fits into both types.  Anything else
> is not intuitive, no matter how the bits are numbered.
> 
> That still leaves the issue in your proposed scheme of how those bits
> should be numbered.
> 
> If you use the bit numbering [0:31], even though you have kept the
> right-most bits, then none of the bits have the same index that they
> had before the cast.  That doesn't seem intuitive.
> 
> If you use the original bit numbers for the bits [16:47], then it is
> not zero-based.  As you continue to do operations, you not only have
> to keep track of the width, but of what the starting bit number is.
> You
> cannot just use the width and derive the range by knowing that the
> range is zero-based.  Figuring out what bit index is third from the
> right is not going to be obvious.  If you know that you want the bit
> numbered 40 in the original object, then you are okay (assuming that
> bit is still present).  But if you know that you want bit 40 and that
> it is still present, then why did you do a size cast before selecting
> bit 40 anyway?  Why not just select bit 40 in the first place, without
> doing the size cast?
> 
> 
> As with concatenations, in most expressions you will not be able to
> derive a numbering from the original operands.  What is the proper
> bit numbering for "b+c", when b was declared [31:0] and c was declared
> [40:80]?  In any expression with more than one operand, you will have
> to give up and use a normalized numbering scheme.  In an expression
> that is just an identifier, you use the numbering for that identifier.
> The question is where you switch from one to the other.
> 
> I favor switching to normalized numbering as early as possible.  I
> think it keeps things simple.  And once you have switched to the
> normalized numbering, any subsequent casting won't have the problem
> you raised with figuring out the numbering of the result.
> 
> Steven Sharp
> sharp@cadence.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 Tue Apr 1 19:55:34 2008

This archive was generated by hypermail 2.1.8 : Tue Apr 01 2008 - 19:56:17 PDT