RE: [sv-ac] Re: [sv-ec] mantis item 1681 - global clocking

From: Neil Korpusik <Neil.Korpusik_at_.....>
Date: Fri Mar 02 2007 - 09:37:02 PST
<forwarding bounced email from Korchemny, Dmitry>

-------- Original Message --------
Subject: RE: [sv-ac] Re: [sv-ec] mantis item 1681 - global clocking
Date: Fri, 02 Mar 2007 05:44:06 +0200
From: Korchemny, Dmitry <dmitry.korchemny@intel.com>
To: Neil.Korpusik@Sun.COM, SV_EC List <sv-ec@eda.org>, sv-ac@eda-stds.org
CC: adam.krolnik@verisilicon.com

Hi Mr. Krolnik,

Please, see my comments below.

Thanks,
Dmitry

-----Original Message-----
From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On
Behalf Of Neil Korpusik
Sent: Wednesday, February 28, 2007 8:12 PM
To: SV_EC List; sv-ac@server.eda-stds.org
Cc: adam.krolnik@verisilicon.com
Subject: [sv-ac] Re: [sv-ec] mantis item 1681 - global clocking

<forwarding email from Adam Krolnik>

-------- Original Message --------
Date: Wed, 28 Feb 2007 08:48:44 -0600
From: Adam Krolnik <adam.krolnik@verisilicon.com>
To: SV_EC List <sv-ec@server.eda.org>
CC: Havlicek John <john.havlicek@freescale.com>, Sv_Ac
<sv-ac@server.eda.org>
Subject: Re: [sv-ec] mantis item 1681 - global clocking

Good morning all;

The idea of a global clock is interesting, but seems to be a problematic
for reuse.

The spec says in 15.12 "The main purpose of the global clock[ing] is to
introduce the [a] common system clock
for all concurrent assertions in the entire design. This is convenient
for synchronous designs."

What about synchronous designs with multiple clock domains. Surely, one
would agree that a design
with a JTAG controller (that has its clock) and main logic (with its own
clock) is still a synchronous system.
Yet clocking assertions from these two domains with one clock will
produce possibly wrong results compared
with clocking assertions with the local domain clock.

An example is shown:

   ...
   global clocking sys @(clk1 or clk2); endclocking

This example will need some explaining. Why is the global clock the
combination of all events of clk1 + clk2?
It is not common to see designs clocked on both edges of a clock.
Assertions written for one clock domain
will definitely fail if clocked with this global clock that has 4 times
the number of events as the logic.

[Korchemny, Dmitry] If your assertion is written relative to some clock
domain, it will behave absolutely the same way with global clocking and
without it. Therefore the correctness will not be broken.

E.g.,
clocking sys @(clk1 or clk2); endclocking

does not affect the assertion

assert property (@(posedge clk1) a);

In 17.3, it states, "where global clocking has been specified ... for
correct operation the user should make sure that
the ticks of all other clocks are aligned with the ticks of the global
clock. The simulation tool may issue an error message when it detects
that this requirement has been violated."

How can one fulfill this requirement in the general case simulation. I
have designs that have 3-4 clock domains, running
at different frequencies (some synchronous to each other, some not.) I'm
sure larger companies have dozens of clock domains.

[Korchemny, Dmitry] This requirement may be relaxed for assertions that
can be written according to the current LRM. It is gating for new
enhancements to be introduced (e.g., next value functions).

Also, having global clocking is (and was) important to keep  formal
verification of multiclock synchronous designs consistent with their
simulation. Thus, if you have two clocks clk1 and clk2 in your design,
the formal verification tool will  normally require a clock pattern,
e.g., clk1 has a pattern 0011, and clk2 01110. This is equivalent to the
global clock introduction.

The example in 17.14 shows this point. The property

    property p5;
       (a |-> ##2 b);
    endproperty

Is supposed to expect that B ocurrs 2 cycles after A. If you combine
that with the global clocking specification above,
how can this property be expected to pass when simulated with 4 edges of
a clock counting as a 'cycle'.

[Korchemny, Dmitry] The inference of the global clock will occur if no
clock can be inferred otherwise. If, say, you write:

always (@(posedge clk2)) assert property(p5);

the clock of p5 will be posedge clk2, and not the global clock.

Instead of a global clock block, it would be more useful to have a
hierarchical default clock. Assertions obtain their
clock from the current scope, or the parent scope, up to this
hierarchical default clock. That way a verification engineer
can specify a clock block for a clock domain and place the required
clock block at the necessary levels of hierarchy to achieve this. Most
likely this would be something that is bound (via the bind statement) to
modules in a design.

With this approach, one can define the default clock for each domain
however the system is composed of pieces and
their specific clock domain.

[Korchemny, Dmitry] You are welcome to submit this enhancement.
-- 
    Soli Deo Gloria
    Adam Krolnik
    Director of Design Verification
    VeriSilicon Inc.
    Plano TX. 75074
    Co-author "Assertion-Based Design"







-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Fri Mar 2 09:37:21 2007

This archive was generated by hypermail 2.1.8 : Fri Mar 02 2007 - 09:37:55 PST