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.