errata/321: Table 29, 4.1.14, 2.5.1(3) , 3.9 -- size of unsized numbers and integer variables

From: Brad Pierce (Brad.Pierce@synopsys.com)
Date: Fri Apr 04 2003 - 19:38:45 PST

  • Next message: Stephen Williams: "Re: errata/321: Table 29, 4.1.14, 2.5.1(3) , 3.9 -- size of unsized numbers and integer variables"

    Precedence: bulk

    >Number: 321
    >Category: errata
    >Originator: "Brad Pierce" <Brad.Pierce@synopsys.com>
    >Environment:
    >Description:

    According to Note 3 of 2.5.1, "The number of bits that make up an unsized
    number (which is a simple decimal number or a number without the size
    specification) shall be at least 32."

    According to Table 29, an unsized constant number is a self-determined
    expression with the same bit length as an integer.

    According to a Note in 3.9, "Implementations may limit the maximum size
    of an 'integer' variable, but they shall be at least 32 bits." This seems
    to suggest that there is not conceptually any maximum size and that a bignum
    implementation would match the semantics as well as or better than an
    implementation with C-style ints. This would be consistent with another
    paragraph of 3.9, which says "An 'integer' is a general-purpose variable
    used for manipulating quantities that are not regarded as hardware
    registers."

    In what sense are unsized numbers self-determined expressions? Could one
    think of unsized numbers and integers as having an effectively infinite
    bit length? For example, if 'sb1 were assigned to a register, no matter
    how long the register, it would be filled with 1 bits? Is there any
    difference between 'sb1 and 1?

    What does it mean then to say that the number of bits "shall be at
    least 32"? I guess this is to allow integers to be implemented as
    C-style ints instead of as bignums, but I don't see the relevance to
    'b0, 'b1, 'sb1 and 'sb0.

    According to 4.1.14, "Unsized constant numbers shall not be allowed in
    concatenations. This is because the size of each operand in the
    concatentation is needed to calculate the complete size of the
    concatenation."

    I take this to mean that not only would {'b0, 'b1} and {2{'b0}} be
    disallowed, so also would be { ~'b0 , ~'b1 } and {2{~('b0')}}.
    Likewise, not only { 1, -1} and {2{-1}} would be disallowed, but so
    also would be { 1'b1 + 1 } and {2{1'b1+1}}. Is that interpretation
    correct?

    -- Brad



    This archive was generated by hypermail 2.1.4 : Fri Apr 04 2003 - 19:44:46 PST and
    sponsored by Boyd Technology, Inc.