[sv-ec] Re: $wait_all/any/...


Subject: [sv-ec] Re: $wait_all/any/...
From: Kevin Cameron (Kevin.Cameron@nsc.com)
Date: Wed Dec 18 2002 - 15:02:53 PST


Link: Replace 12

Having posted a list of keywords that shouldn't be, I have to say these
look like they should be keywords rather than system tasks (if they
are actually needed).

What's the difference between:

    $wait_all(x,y,z)

and

    @(x && y && z)

?

Or between

    $wait_any(a,b,c)

and

    @(a or b or c)

?

- Persistance is a property of the event not of the wait, so I don't see why
we need them.

$wait_order could be broken down into an order call:

    $wait_order(d,e,f)

becomes:

    @(ordered(d,e,f))

which lets you do more complex conditions:

    @(reset or ordered(d,e,f))

However, there is probably syntax for assertions that already does that
without extra keywords/functions - which we should just reuse.

I still think we should differentiate between actual events (Verilog) and
dynamic events (donation) with syntax. E.g. the example in (12.8.2) becomes
something like:

event a,d, // events
         &b, &c; // event references

    b &= a;
    -> c; // null operation
    -> a; // also triggers b
    -> b; // also triggers a
    c &= b; // c now refers to a too
    -> a; // also triggers b and c
    -> b; // also triggers a and c
    -> c; // also triggers a and b

    loop1: always @(c) begin
        ...
        c &= null; // block at loop1 until reassigned
    end

    always @(reset) c &= a; // reactivate loop1
    always @(set) c &= d; // reactivate loop1

The proposed scheme defies easy analysis.

Kev.

--
National Semiconductor, Tel: (408) 721 3251
2900 Semiconductor Drive, Mail Stop D3-500, Santa Clara, CA 95052-8090



This archive was generated by hypermail 2b28 : Wed Dec 18 2002 - 15:03:53 PST