From: Shalom.Bresticker@freescale.com
Date: Wed Jul 21 2004 - 04:20:00 PDT
The following reply was made to PR errata/599; it has been noted by GNATS.
From: Shalom.Bresticker@freescale.com
To: eric_mahurin@yahoo.com
Cc: etf-bugs@boyd.com
Subject: Re: errata/599: intermediate variables with @*
Date: Wed, 21 Jul 2004 14:19:11 +0300 (IDT)
The block will not evaluate twice, because tmp1 and tmp2 do not change during the waiting period of the @.
I think that answers your comment about loop counters also.
Regardless, your question has been previously discussed.
See the thread beginning at
http://boydtechinc.com/etf/archive/etf_2002/0068.html
You can find an archive of the full discussion about @* at
http://boydtechinc.com/etf/archive/etf_2004/2687.html
Shalom
> In 9.7.5, @* triggers on all variables which are read by the statement. But, why have intermediate variables as triggers. As in the example:
>
> always @* begin // equivalent to @(a or b or c or d or tmp1 or tmp2)
> tmp1 = a & b;
> tmp2 = c & d;
> y = tmp1 | tmp2;
> end
>
> Having tmp1 and tmp2 as event triggers seems to serve no purpose other than to have the simulator evaluate this block twice instead of once when a, b, c, or d changes. Also, if intermediate variables (i.e. loop counters) are shared between always blocks, it can cause the simulator to hang in an event loop.
>
> If a variable is always assigned (blocking) before it is read within the statement, I don't see why @* needs to imply it.
>
> Maybe this could be an optional feature.
--
Shalom Bresticker Shalom.Bresticker @freescale.com
Design & Reuse Methodology Tel: +972 9 9522268
Freescale Semiconductor Israel, Ltd. Fax: +972 9 9522890
POB 2208, Herzlia 46120, ISRAEL Cell: +972 50 5441478
This archive was generated by hypermail 2.1.4
: Wed Jul 21 2004 - 04:20:10 PDT
and
sponsored by Boyd Technology, Inc.