RE: [sv-bc] RE: [sv-ac] RE: [sv-ec] Checkers & Formal

From: Korchemny, Dmitry <dmitry.korchemny_at_.....>
Date: Fri Mar 07 2008 - 18:13:07 PST
Hi Gord,

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 Gordon Vreugdenhil
Sent: Thursday, March 06, 2008 12:41 PM
To: Korchemny, Dmitry
Cc: sv-bc@server.eda.org; sv-ec@server.eda.org; sv-ac@server.eda.org
Subject: Re: [sv-bc] RE: [sv-ac] RE: [sv-ec] Checkers & Formal



Korchemny, Dmitry wrote:
> Hi Gord,
[...]
> Could you clarify the following sentence: "Some of the special
routines
> (for example those related to enables) for checkers really need to be
> explained in terms of how they relate to the outer language
> constructs."?

Consider the use of $inferred_enable.  What does it produce in a
type sense?  Can I use it with an untyped formal?  With such a
formal, can I do coverage on it?  What if the inferred enable is
a condition that relates to a loop variable?  Are all combinations
checked in that context as well?  What if the enable is automatic?
Is that legal?  Clearly (from 16.18.4) you expect $inferred_enable
to be able to produce a sequence and be able to use a non-sequence
expression in that inferred role.  Is there anything else that
the $inferred_enable can produce?  After looking at LRM 16.14.5,
Mantis 1674 and 1648, it still isn't clear to me what the
combination of rules implies.  16.14.5 says that for a concurrent
assertion, an inferred enable can't occur in a loop.  Does
that apply to a checker as well?  What if the inferred_enable
isn't actually used in an assertion in the checker?  Would that
be legal?

DK: $inferred_enable is not actually part of the checker proposal, but
is a subject of Mantis 1674 as you mentioned above. $inferred_enable
returns the enabling condition which would have been inferred by the
compiler if a concurrent assertion had been placed at the instantiation
point as explained in 16.14.5.

Consider the following example:

always @(posedge clk) begin
	if (cond1) begin
		if (cond2) begin
			// Checker is instantiated here
			...
		end
	end
end

In this case $inferred_enable is (cond1 && cond2), and its type is the
type of this expression. $inferred_enable is always integral and not a
sequence, and its exact type is unambiguously inferred. $inferred_enable
is legal only as a default value of a formal argument of a sequence,
property or checker. This should answer your other questions:

* You can use it with an untyped argument since its exact type is known
at the compile time.
* If you can do coverage on a sampled value, you can do it in this case
also. I don't see a reason why coverage on a sampled value should be
forbidden.
* As defined in 2110, a loop index should be treated as a constant and
it is allowed in assertions only, so you cannot collect coverage on it
in checkers.
* It should be illegal to place a checker in a conditional context
dependent on an automatic variable, as it is illegal to place an
assertion there. If it is not stated explicitly enough in 16.14.5, it
should be clarified there, and it is not related directly to the checker
proposal.

---

16.14.5 says that for a concurrent assertion, an inferred enable can't
occur in a loop.  Does that apply to a checker as well?  What if the
inferred_enable isn't actually used in an assertion in the checker?
Would that be legal?

DK: This is fixed in 1995.

---

I would like to move beyond a narrow discussion of specific rules
at some point -- no one has addressed my larger concerns about
consistency and regularity of the various constructs.  One
can make the overall LRM as convoluted as necessary to deal
with all the cases that one can imagine, but then one has to
re-examine all of those special cases and rules with any future
change.  I don't think that is a good direction and have said
as much for quite a while now with no response from anyone in
AC -- the only focus has been on adding new rules and covering
specific cases that I am raising.  My basic concern is that
it just shouldn't be this much work -- is it not possible to
devise a simpler set of more consistent abstractions for interaction
between the assertions constructs and the rest of the language?

DK: My assumption is that SV is a language of (besides of its other well
known functions) assertion specification and validation. If this
assumption is incorrect, then the LRM Clause 16 and the SV-AC existence
is redundant. If my assumption is true then the language should provide
adequate support for assertions. I agree, assertions are different from
other language features, e.g., the assertions are declarative, while
most of SV has an imperative nature. RTL assertions require sampling and
static data, there is nothing to do here. If you ask whether one can
envisage assertions that capture any legal SV behavior, including
asynchronous transitions, then the answer is that such assertions are
possible in principle, but they will verify SV simulation program, and
will have nothing to do with the RTL validation (let alone the questions
of complexity and decidability).

The direction of the language development seems quite natural and
logical to me, and I don't consider it as making patches in order to
satisfy immediate user needs. I don't think that the checkers are less
consistent with the rest of the language than its other parts:
functional coverage, random constraints, clocking blocks and classes.
 
Gord.
-- 
--------------------------------------------------------------------
Gordon Vreugdenhil                                503-685-0808
Model Technology (Mentor Graphics)                gordonv@model.com


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Fri Mar 7 18:15:05 2008

This archive was generated by hypermail 2.1.8 : Fri Mar 07 2008 - 18:17:10 PST