From: Shalom Bresticker (Shalom.Bresticker@motorola.com)
Date: Wed Feb 14 2001 - 04:07:40 PST
<x-html>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Daryl,
<p>(I'm not Ben. I also don't want to confuse Ben further. He already
got an answer.)
<p>The point is your statement:
<blockquote><i>Since your examples have blocking assignments, at the exact
time when a is modified by block P1, it is not actually sensitive to events
on a - it's somewhere at PointA.</i></blockquote>
You know that and I know that, but I don't see such an explicit
statement in the standard, which says that a process is only sensitive
to update events when it is in the middle of execution.
<p>At best, it's not clear.
<p>Shalom
<br>
<p>Daryl Stewart wrote:
<blockquote TYPE=CITE>Ben,
<p>The relevant statements are
<p>Section 5.2:
<br>Every change in value of a net or variable in the circuit being simulated,
as
<br>well as the named event, is considered an
<br>update event.
<br>Processes are sensitive to update events. When an update event is executed,
<br>all the processes that are sensitive to that
<br>event are evaluated in an arbitrary order. The evaluation of a process
is also
<br>an event, known as an evaluation event.
<p>Section 5.4
<br>{..snip..}
<br>E = any active event;
<br>if (E is an update event) {
<br>update the modified object;
<br>add evaluation events for sensitive processes to event queue;
<br>} else { /* shall be an evaluation event */
<br>evaluate the process;
<br>add update events to the event queue;
<br>}
<p>Notice that the sensitive processes are added immediately after an update
<br>event occurs. Since your examples have blocking assignments, at the
exact time
<br>when a is modified by block P1, it is not actually sensitive to events
on a -
<br>it's somewhere at PointA. (If you'd used a nonblocking assign (a <=
#10 ~a) or
<br>(a <= ~a) instead it would be a different matter and the block would
trigger
<br>again because it would execute the @ before the update event occurred
...)
<p>always(@ a or @ b) // P1 block
<br> begin
<br> #10 a =~ a; // PointA
<br> c = b;
<br> end
<p>initial // P2
block
<br> begin
<br> a = 1;
<br> d = 0;
<br> #10;
<br> b = ~ d;
<br> end
<p>> From the above two statements, it would seem that at time 10, "a"
becomes an
<br>> updated event.
<p>You mean that the assignment to "a" is an update event which triggers
all
<br>processes that are sensitive to that event. Block P1 is not sensitive
to that
<br>event at the moment the update event occurs. I suspect you're confusing
<br>verilog's always@ form with vhdls sensitivity lists?
<p>Although section 5 is a bit weak, it seems to cover the behaviour you
describe.
<p>Feel free to email me direct for more discussion...
<p>cheers
<br>Daryl</blockquote>
<pre>--
**************************************************************************
Shalom Bresticker Shalom.Bresticker@motorola.com
Motorola Semiconductor Israel, Ltd. Tel #: +972 9 9522268
P.O.B. 2208, Herzlia 46120, ISRAEL Fax #: +972 9 9522890
**************************************************************************</pre>
</html>
</x-html>
This archive was generated by hypermail 2.1.4
: Mon Jul 08 2002 - 12:54:39 PDT
and
sponsored by Boyd Technology, Inc.