From: "Arturo Salz" <salz@synopsys.com>
To: <sv-ec@eda.org>
References: <026501c2e4dc$df966a30$bcba42ab@synopsys.com> <5.0.2.1.2.20030310095824.026ed568@otis.cadence.com>
Subject: Re: [sv-ec] Event Proposal
Date: Mon, 10 Mar 2003 10:17:03 -0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_037F_01C2E6EE.32218E20"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700

This is a multi-part message in MIME format.

------=_NextPart_000_037F_01C2E6EE.32218E20
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Francoise,

Thanks for the comments.

The $wait_all and $wait_any and $wait_order are shorthand notations for =
the following:

$wait_all( a, b, c )

    fork
        wait( a.triggered ); wait( b.triggered ); wait( c.triggered );=20
    join

$wait_any( a, b, c )

    wait( a.triggered || b.triggered || c.triggered );

$wait_order( a, b, c )

    reg  abc[1:3] =3D '0;
    fork
        begin wait( a.triggered ); abc[1] =3D 1; if( abc !=3D '100 ) =
$error; end
        begin @b; abc[2] =3D 1; if( abc !=3D '110 ) $error; end
        begin @c; abc[3] =3D 1; if( abc !=3D '111 ) $error; end
    join_none

As for enhancing the other operators, that approach seemed to be rather
controversial and we were unable to reach consensus. I'd prefer to keep
the enhancement simple so that we can all agree.

    Arturo

----- Original Message -----=20
From: "Francoise Martinolle" <fm@cadence.com>
To: "Arturo Salz" <Arturo.Salz@synopsys.COM>
Cc: <sv-ec@eda.org>
Sent: Monday, March 10, 2003 8:07 AM
Subject: Re: [sv-ec] Event Proposal


Arturo,

I like this proposal better.
I suggest that for clarification the definition of $wait_all and =
$wait_any,=20
$wait_order,
is also described in terms of semantically equivalent verilog code.

Note: I am not sure if I have the correct equivalent description. But =
this=20
is just provided
as an example.
Ex:
$wait_all(a, b);
<stmt>;
creates a single process equivalent to:

equivalent to:
                        rega =3D 1'b0;  initialize the state of a and b
                        regb =3D 1'b0;

                        initial(@a or @b)
                          if (a.triggered)
                              rega =3D 1'b1;// state that a has =
triggered=20
already once
                          if (a.triggered) || (rega =3D=3D 1'b1)  { // a =

triggered now or has triggered before
                              @b;
                          }
                          if (b.triggered)
                              regb =3D 1'b1;// state that b has =
triggered=20
already once
                          if ((b.triggered) || (regb =3D=3D 1'b1))
                              @a;
                          <stmt>
                          rega =3D 1'b0; // reset rega and regb
                          regb =3D 1'b0;
                        end

$wait_any(a,b);
<stmt>;
creates a single process equivalent to
                  @(a or b) <stmt>;

$wait_order(a, b);
<stmt>
creates a single process equivalent to:
                       rega =3D 1'b0;
                       initial  (@a or @b)
                          if (a.triggered) {
                                rega =3D 1'b1;
                                @b;
                               <stmt>

                          }
                          if (b.triggered && (!rega))
                             error;

                       end

I also think that another alternative is to enhance the wait statement=20
defined in section 9.7.6
in the Verilog 1364 LRM instead of introducing new built in system tasks

For example:
    wait (@a or @b); would wait on either a or b events to trigger;
                              equivalent to $wait_any(a, b)
    wait ((@a or a.triggered) and (@b or b.triggered)); would wait on =
both=20
a and b events to
                                                                         =
   trigger=20
in any order ;
    In order to wait across multiple simulation steps, you have to=20
introduce a new operator to
    tell you that the execution will not continue until the condition=20
expression "until" becomes
   true. The wait statement waits for the first condition expression to=20
become true and
   then blocks again until the until expression becomes true.

    wait ((@a and @b) or (@a until b.triggered) or ( (@b until =
a.triggered));
                                                                         =
   equivalent=20
to $wait_all(a, b)

    wait (@a);
    wait (@b): would wait on a event to trigger then b event to trigger;
                    equivalent to $wait_order(a, b);


Francoise
        '

At 04:25 PM 3/7/2003 -0800, Kevin Cameron wrote:


>Arturo Salz wrote:
>
> > Attached is a new proposal for event (and the differences with the =
last=20
> draft).
> >
> >     Arturo
>
>Definitely better :-)
>
>However I notice we're still not differentiating events and event=20
>references - sec 12.8.
>I would prefer to drop 12.8 and just use references to events for the=20
>extra functionality
>e.g.:
>         event ref ER =3D null;
>         event E;
>         ....
>         -> ER; // NOP
>         ....
>         ER =3D E;
>         ...
>         -> ER; // same  -> E
>
>- more or less the same functionality but I think it would be clearer =
to=20
>users.
>
>Regards,
>Kev.
>
>
>--
>National Semiconductor, Tel: (408) 721 3251
>2900 Semiconductor Drive, Mail Stop D3-500, Santa Clara, CA 95052-8090


------=_NextPart_000_037F_01C2E6EE.32218E20
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 5.50.4807.2300" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>Francoise,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Thanks for the comments.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>The $wait_all and $wait_any and =
$wait_order are=20
shorthand notations for the following:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><U>$wait_all( a, b, c =
)</U></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; fork</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =
wait(=20
a.triggered ); wait( b.triggered ); wait( c.triggered ); </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; </FONT>join</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DArial =
size=3D2><U>$wait_any( a, b, c=20
)</U></FONT></DIV>
<DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; wait( a.triggered || b.triggered || c.triggered =
);</DIV>
<DIV>&nbsp;</DIV>
<DIV>
<DIV><FONT face=3DArial size=3D2><U>$wait_order( a, b, c =
)</U></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp; =
abc[1:3] =3D=20
'0;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; fork</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =
begin wait(=20
a.triggered ); abc[1] =3D 1; if( abc !=3D&nbsp;'100 ) $error; =
end</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =
begin @b;=20
abc[2] =3D 1; if( abc !=3D '110 ) $error; end</FONT></DIV>
<DIV>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; begin @c; abc[3] =3D 1; if( =
abc !=3D '111=20
) $error; end</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; =
</FONT>join_none</DIV>
<DIV>&nbsp;</DIV>
<DIV>As for enhancing the other operators, that approach seemed to be=20
rather</DIV>
<DIV>controversial and we were unable to reach consensus. I'd prefer to=20
keep</DIV>
<DIV>the enhancement simple so that we can all agree.</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; Arturo</DIV>
<DIV>&nbsp;</DIV></DIV></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>----- Original Message ----- </FONT>
<DIV><FONT face=3DArial size=3D2>From: "Francoise Martinolle" =
&lt;</FONT><A=20
href=3D"mailto:fm@cadence.com"><FONT face=3DArial=20
size=3D2>fm@cadence.com</FONT></A><FONT face=3DArial =
size=3D2>&gt;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>To: "Arturo Salz" &lt;</FONT><A=20
href=3D"mailto:Arturo.Salz@synopsys.COM"><FONT face=3DArial=20
size=3D2>Arturo.Salz@synopsys.COM</FONT></A><FONT face=3DArial=20
size=3D2>&gt;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Cc: &lt;</FONT><A =
href=3D"mailto:sv-ec@eda.org"><FONT=20
face=3DArial size=3D2>sv-ec@eda.org</FONT></A><FONT face=3DArial=20
size=3D2>&gt;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Sent: Monday, March 10, 2003 8:07 =
AM</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Subject: Re: [sv-ec] Event=20
Proposal</FONT></DIV></DIV>
<DIV><FONT face=3DArial><BR><FONT size=3D2></FONT></FONT></DIV><FONT =
face=3DArial=20
size=3D2>Arturo,<BR><BR>I like this proposal better.<BR>I suggest that =
for=20
clarification the definition of $wait_all and $wait_any, =
<BR>$wait_order,<BR>is=20
also described in terms of semantically equivalent verilog =
code.<BR><BR>Note: I=20
am not sure if I have the correct equivalent description. But this =
<BR>is just=20
provided<BR>as an example.<BR>Ex:<BR>$wait_all(a,=20
b);<BR>&lt;stmt&gt;;<BR>creates a single process equivalent=20
to:<BR><BR>equivalent=20
to:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =

rega =3D 1'b0;&nbsp; initialize the state of a and=20
b<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
regb =3D=20
1'b0;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;=20
initial(@a or=20
@b)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;=20
if=20
(a.triggered)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
rega =3D 1'b1;// state that a has triggered <BR>already=20
once<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;=20
if (a.triggered) || (rega =3D=3D 1'b1)&nbsp; { // a <BR>triggered now or =
has=20
triggered=20
before<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
@b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;=20
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;=20
if=20
(b.triggered)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
regb =3D 1'b1;// state that b has triggered <BR>already=20
once<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;=20
if ((b.triggered) || (regb =3D=3D=20
1'b1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
@a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;=20
&lt;stmt&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;=20
rega =3D 1'b0; // reset rega and=20
regb<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;=20
regb =3D=20
1'b0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;=20
end<BR><BR>$wait_any(a,b);<BR>&lt;stmt&gt;;<BR>creates a single process=20
equivalent=20
to<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
@(a or b) &lt;stmt&gt;;<BR><BR>$wait_order(a, =
b);<BR>&lt;stmt&gt;<BR>creates a=20
single process equivalent=20
to:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
rega =3D=20
1'b0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
initial&nbsp; (@a or=20
@b)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;=20
if (a.triggered)=20
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
rega =3D=20
1'b1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
@b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
&lt;stmt&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;=20
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;=20
if (b.triggered &amp;&amp;=20
(!rega))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
error;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
=20
end<BR><BR>I also think that another alternative is to enhance the wait=20
statement <BR>defined in section 9.7.6<BR>in the Verilog 1364 LRM =
instead of=20
introducing new built in system tasks<BR><BR>For =
example:<BR>&nbsp;&nbsp;&nbsp;=20
wait (@a or @b); would wait on either a or b events to=20
trigger;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
equivalent to $wait_any(a, b)<BR>&nbsp;&nbsp;&nbsp; wait ((@a or =
a.triggered)=20
and (@b or b.triggered)); would wait on both <BR>a and b events=20
to<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;=20
trigger <BR>in any order ;<BR>&nbsp;&nbsp;&nbsp; In order to wait across =

multiple simulation steps, you have to <BR>introduce a new operator=20
to<BR>&nbsp;&nbsp;&nbsp; tell you that the execution will not continue =
until the=20
condition <BR>expression "until" becomes<BR>&nbsp;&nbsp; true. The wait=20
statement waits for the first condition expression to <BR>become true=20
and<BR>&nbsp;&nbsp; then blocks again until the until expression becomes =

true.<BR><BR>&nbsp;&nbsp;&nbsp; wait ((@a and @b) or (@a until =
b.triggered) or (=20
(@b until=20
a.triggered));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
equivalent <BR>to $wait_all(a, b)<BR><BR>&nbsp;&nbsp;&nbsp; wait=20
(@a);<BR>&nbsp;&nbsp;&nbsp; wait (@b): would wait on a event to trigger =
then b=20
event to=20
trigger;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
equivalent to $wait_order(a,=20
b);<BR><BR><BR>Francoise<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
'<BR><BR>At 04:25 PM 3/7/2003 -0800, Kevin Cameron =
wrote:<BR><BR><BR>&gt;Arturo=20
Salz wrote:<BR>&gt;<BR>&gt; &gt; Attached is a new proposal for event =
(and the=20
differences with the last <BR>&gt; draft).<BR>&gt; &gt;<BR>&gt;=20
&gt;&nbsp;&nbsp;&nbsp;&nbsp; Arturo<BR>&gt;<BR>&gt;Definitely better=20
:-)<BR>&gt;<BR>&gt;However I notice we're still not differentiating =
events and=20
event <BR>&gt;references - sec 12.8.<BR>&gt;I would prefer to drop 12.8 =
and just=20
use references to events for the <BR>&gt;extra=20
functionality<BR>&gt;e.g.:<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;=20
event ref ER =3D =
null;<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
event E;<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
....<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; ER; =
//=20
NOP<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
....<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ER =3D=20
E;<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
...<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; ER; // =

same&nbsp; -&gt; E<BR>&gt;<BR>&gt;- more or less the same functionality =
but I=20
think it would be clearer to=20
<BR>&gt;users.<BR>&gt;<BR>&gt;Regards,<BR>&gt;Kev.<BR>&gt;<BR>&gt;<BR>&gt=
;--<BR>&gt;National=20
Semiconductor, Tel: (408) 721 3251<BR>&gt;2900 Semiconductor Drive, Mail =
Stop=20
D3-500, Santa Clara, CA 95052-8090<BR></FONT></BODY></HTML>

------=_NextPart_000_037F_01C2E6EE.32218E20--

