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

From: Steven Sharp (sharp@cadence.com)
Date: Tue Jul 30 2002 - 18:30:02 PDT


Precedence: bulk

The following reply was made to PR errata/82; it has been noted by GNATS.

From: Steven Sharp <sharp@cadence.com>
To: sharp@cadence.com, mac@verisity.com
Cc: etf-bugs@boyd.com
Subject: RE: errata/82: Section 9.7.5: Description of @*, @(*) incomplete
Date: Tue, 30 Jul 2002 21:20:55 -0400 (EDT)

> > Furthermore, as I have pointed out before, there are situations that
> > will not behave properly with @(vector[i]). They require @(vector or i)
> > in order to act like combinational logic. So not only does the letter
> > of the standard require it, so does the intent.
>
>This I do not understand.
>
>combinatorial logic, as specified by
>
>assign out = vector[j]; will make it so out always has the value of
>the expression vector[j];
>
>It is a waste of simulator resources to reassign to out the value of
>vector[j] if that is the same as the current value of out.
 
 All the efficiency in the world is of no use if you don't get the
 right answer. If you really don't mind wrong results, I can give
 you a simulator that is as fast as you like.
 
 My earlier description of this situation appears at
 
 http://boydtechinc.com/btf/archive/btf_2002/1825.html
 
 but I will give another example here. Start with
 
 always @*
   out = vector[j];
   
 This will work with @(vector[j]). It will also work with @(vector or j).
 It will not work with @(vector).
 
 Now try
 
 always @*
   for (j = 0; j < WIDTH; j = j + 1)
     out[j] = vector[j];
     
 This will not work with @(vector[j]). It must wait on all of vector,
 since out depends on all of vector. It will work with @(vector).
 It will also work with @(vector or j).
 
 To make both situations work, @* must expand a reference to vector[j]
 into @(vector or j). There is nothing else it can be expanded to that
 will work in all situations.
 
 An implementation would be free to optimize this as long as the results
 are equivalent to using @(vector or j). It is not the job of the standard
 to dictate exactly how it must be implemented, only how it must behave.
 For the case of a reference to vector[j], @* needs to be equivalent to
 @(vector or j), so that is what the standard should specify.
 
 Steven Sharp
 sharp@cadence.com
 



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