Re: [sv-ac] blocking assignments

From: Doron Bustan <dbustan_at_.....>
Date: Wed Nov 08 2006 - 11:19:55 PST
Hi Dmitry,

I guess that illustrates the problem, but it does not
make sens, does it?

we need a reasonable example that is deterministic,
and in which the assertion is being evaluated at least
twice without leaving the active region.

Doron

Korchemny, Dmitry wrote:

>Hi Doron,
>
>You are right. @(posedge clk) is a typo, should be @(*) (or @(b), but it
>is not synthesizable).
>
>always @* begin
>                if (cond) begin
>                     a = b;
>                     assert (a == c) ;
>                     b = c;
>               end
>end
>
>Is it correct now?
>
>I'll try to get a real life example in addition to this artificial one.
>
>I think, we should define simulation semantics that would be consistent
>with FV in the synthesizable case. Two candidates are
>-  taking the latest signal value from the active region before the
>first entry to the observed region, and
>- "sampling" the signal values at the first entry to the observed
>region. As for non-synthesizable or "difficult" for synthesis example,
>it is important only that the algorithm is well defined: for "exotic"
>cases it is difficult to invent something better than immediate
>assertions.
>
>Thanks,
>Dmitry
>
>-----Original Message-----
>From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On
>Behalf Of Doron Bustan
>Sent: Wednesday, November 08, 2006 12:26 AM
>To: sv-ac@server.eda.org
>Subject: [sv-ac] blocking assignments
>
>Just to make sure that I don't miss something important...
>
>In the example:
>
>always @(posedge clk) begin
>                if (cond) begin
>                     a = b;
>                     assert (a == c) ;
>                     b = c;
>               end
>end
>
>the assertion is being evaluated at most once in every "clk" cycle.
>
>
>I think that we need more than one always block to cause the assertion
>to
>execute more than once, something like:
>
>always @(b) begin
>               if (cond) begin
>                     a = b;
>                     assert (a == c) ;
>               end
>end
>
>always @(c) begin
>            b = c;
>end
>
>this will cause the assert to possibly fire twice at the same time step 
>without
>exiting the active region. We should also consider the following case:
>
>
>always @(b) begin
>               if (cond) begin
>                     a = b;
>                     assert (a == c) ;
>               end
>end
>
>always @(c) begin
>            b <= c;
>end
>
>Here the assert is being triggered twice, but the simulator goes to the
>NBA
>region between the two triggers.
>
>
>is this right?
>
>Doron
>  
>
Received on Wed Nov 8 11:20:00 2006

This archive was generated by hypermail 2.1.8 : Wed Nov 08 2006 - 11:20:19 PST