From: Stefen Boyd (stefen@boyd.com)
Date: Wed Aug 12 1998 - 11:20:55 PDT
BAD MSG:
Ok, here's my initial cut at B08... let me know what I've
one wrong!
X-Lines: 24
Content-Type: text/plain; charset="us-ascii"
Content-Length: 1559
X-Status: $$$$
X-UID: 0000000624
Status: RO
Regards,
Stefen
<p><p>Proposal:
Insert new 9.7.5 after 9.7.4
9.7.4 Implicit sensitivity list
The event control immediately following an always construct is considered a sensitivity list. This sensitivity list is a common source of simulation miscompares between rtl and gate level versions of a design because users forget to add some of the nets or registers read in the statement to the sensitivity list.
For a sensitivity list without edge control, the list can be determined automatically by using @(*). The asterisk is an implicit sensitivity list and will be equivalent to explicitly placing all the nets and registers read by the triggered statement into the sensitivity list. Registers which are always used on the left hand side of an assignment before being read shall not be included in the implicit sensitivity list.
The use of the implicit sensitivity list shall be limited to triggered statements which do not contain any delays. This includes delay control (Section 9.7.1), event control (Section 9.7.2), wait statements (Section 9.7.5), blocking assignments with intra-assignment delay, and tasks calls with any of these delays in the body of the task definition. Task calls shall be limited to declarations local to the module containing the calls.
Example1:
always @(*) // equivalent to @(a or b or c or d or f)
y = (a & b) | (c & d) | myfunction(f);
Example 2:
always @(*) begin // equivalent to @(a or b or c or d or e)
tmp1 = a & b; // tmp1 and tmp2 are written before reading
tmp2 = c & d;
y = tmp1 | tmp2;
end
This archive was generated by hypermail 2.1.4
: Mon Jul 08 2002 - 12:52:59 PDT
and
sponsored by Boyd Technology, Inc.