RE: [sv-ac] blocking assignments

From: Korchemny, Dmitry <dmitry.korchemny_at_.....>
Date: Wed Nov 08 2006 - 02:57:38 PST
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 02:59:25 2006

This archive was generated by hypermail 2.1.8 : Wed Nov 08 2006 - 02:59:48 PST