errata/82: Section 9.7.5: Description of @*, @(*) incomplete

From: drm@xilinx.com
Date: Tue Jul 30 2002 - 07:54:54 PDT


Precedence: bulk

>Number: 82
>Category: errata
>Originator: Dennis Marsa
>Description:

The description of the behavior of @* and @(*) in section
9.7.5 is incomplete.

Previous discussion of the issues can be found in the
following threads from the BTF/ETF archives:

  http://boydtechinc.com/btf/archive/btf_2002/1739.html
  http://boydtechinc.com/btf/archive/btf_2002/1804.html
  http://boydtechinc.com/btf/archive/btf_2002/1818.html
  http://boydtechinc.com/btf/archive/btf_2002/1828.html
  http://boydtechinc.com/etf/archive/etf_2002/0012.html

A detailed algorithmic description of how to compute
the set of events that an @* is equivalent to is needed
in this section.

The description should address how *all* types of statements
and expressions should be processed when under the control
of an @*.

Some (but probably not all) specific issues that are not
clearly addressed in Section 9.7.5 include:

1) When a bit or part select of a vector is used within
   an @*, is the event control sensitive to just the
   bit or part selected, or the entire vector?

       reg [31:0] vector;

       always @* /* @(vector) or @(vector[5])?
           out = vector[5];

   What if a non-constant bit is selected?

       always @* /* @(vector) or @(vector[i]) or @(vector or i)?
           out = vector[i];

2) How are array references handled within an @*?

       reg [31:0] array[1:100];

       always @* // @(array) or @(array[10])
           out = array[10];

   and, what if the index is non-constant?

       always @* // @(array) or @(array[i]) or @(array or i)?
           out = array[i]

   Can an event control be sensitive *any* change
   to an array??

3) How are named-begin/fork blocks handled when under
   the control of a @*?

      always @*
         begin : named
            ...
         end

    Presumably, names defined and used within the named
    block would not be included the @*?

5) The syntax description of @* allows @* to be used
   as an intra-assigment event control:

       a <= @* b;

   Section 9.7.5 does not define any semantics for this
   contruct. Is it meaningful/useful? Should it be
   considered a semantic error?

6) Tokenization of @* and @(*). 1364-2001 does not
   state anywhere how @* and @(*) should be tokenized.

   Is @* 1 token '@*' or 2 tokens '@' '*'?
   Is @(*) 1 token '@(*)' or 4 tokens '@' '(' '*' ')'

   If these are to be considered multiple tokens, then
   one must also consider how the attribute tokens
   '(*' and '*)' interact. Thus, @(*) could also
   be *three* tokens:

       '@' '(*' ')
    or '@' '(' '*)'



This archive was generated by hypermail 2.1.4 : Thu Oct 10 2002 - 09:24:26 PDT and
sponsored by Boyd Technology, Inc.