RE: implicit event expression lists

From: Jayaram Bhasker (jbhasker@cadence.com)
Date: Mon Feb 04 2002 - 13:06:20 PST


Precedence: bulk

Mac:

> > So, if any element of mem8x10 other the element 10 changes,
> > this statement would not be re-evaluated. Is that the
> > proper interpretation of @(*) in this context?

>Yes.

There is something not right here. Given this interpretation, there can be
mismatches between the implied hardware and the simulation behavior. For ex, if
mem8x10[7] changes, the always stmt will not execute, but the implied hardware will
execute and "a" will get a new value.

My interpretation would be that since a variable index is being used on a memory(mem8x10[b]),
the entire memory (mem8x10) needs to be part of the event list to keep the
semantics of the implied hardware and simulation to match. In other words, my interpretation
of @* would be:

always @(mem8x10[10] or mem8x10[0] or mem8x10[1] or mem8x10[2] or mem8x10[3] or ....<list with all
index values>)

- bhasker

--

J. Bhasker Cadence Design Systems 7535 Windsor Drive, Suite A200, Allentown, PA 18195 (610) 398-6312, (610) 530-7985(fax), jbhasker@cadence.com

-----Original Message----- From: Michael McNamara [mailto:mac@verisity.com] Sent: Sunday, February 03, 2002 2:12 PM To: Dennis Marsa Cc: mac@verisity.com; Paul Graham; btf@boyd.com Subject: Re: implicit event expression lists

Precedence: bulk

Dennis Marsa writes: > Michael McNamara wrote: > > > > Further recognize that one can not refer to an entire memory in an > > expression, so that the statement: > > > > a = mem8x10; > > > > is already illegal, and so would not appear in a procedural block. > > > > So, given > > > > a = mem8x10[10] + mem8x10[b]; > > > > then the sensitivity list becomes: > > > > always @(mem8x10[10] or mem8x10[b]) begin > > > > end > > Mac, > > Your examples are helpful. Thank you. > > Modifying your example slightly, if we have: > > always @(*) begin : named > integer b; > b = <something>; > a = mem8x10[10] + mem8x10[b]; > end > > what would the @(*) expand to in this case? > > Based on your examples, I would guess you might say: > > @(mem8x10[10] or /* events from <something> */) > > b is not in the list since it is not visible from the point of > the @(*), and mem8x10 is not in the list since it is a memory.

Yes. > > So, if any element of mem8x10 other the element 10 changes, > this statement would not be re-evaluated. Is that the > proper interpretation of @(*) in this context?

Yes. > > Contrast that with the case where mem8x10 is a vector and not a > memory. Then, presumably @(*) would expand to: > > @(mem8x10[10] or mem8x10 or /* events from <something> */) > > so this statement would be sensitive to a change in any bit > of the vector, where the memory case is only sensitive to > one element.

Yes, but this is really is an artifact of what Verilog-xl used to do.

> > > > Dennis Marsa > Xilinx, Inc. >



This archive was generated by hypermail 2.1.4 : Mon Jul 08 2002 - 12:55:35 PDT and
sponsored by Boyd Technology, Inc.