RE: [sv-ac] Mantis 1757 Accepton / rejecton operators

From: Lisa Piper <piper_at_.....>
Date: Mon Jun 18 2007 - 08:58:28 PDT
Hi Dmitry,

 

Some questions below...

 

Lisa

 

-----Original Message-----
From: owner-sv-ac@eda.org [mailto:owner-sv-ac@eda.org] On Behalf Of
Korchemny, Dmitry
Sent: Monday, June 18, 2007 11:42 AM
To: Thomas.Thatcher@sun.com; Eduard Cerny
Cc: sv-ac@eda-stds.org
Subject: RE: [sv-ac] Mantis 1757 Accepton / rejecton operators

 

Hi Tom,

 

In assertions and assumptions disable iff is similar to accept_on, but

there is nothing acting as reject_on. Using reject_on helps writing

concise and efficient assertions. The only workaround for reject_on is a

throughout operator, but throughout is synchronous and can be used with

sequences only, while reject_on is asynchronous and can be used with

arbitrary properties.

[Lisa Piper >>>] I thought these were to be synchronous - why do you
want them to be asynchronous?  If they are asynchronous, are the
scheduling considerations identical to those for disable iff?

 

Here is an example: "A sequence beginning with go, followed by two get

during which kill is not asserted, must be followed by a sequence of two

put (not necessarily consecutive) before which stop cannot be asserted".

Here is an implementation using reject_on:

 

assert property (@(posedge clk) go ##1 (get && !kill)[*2] |-> reject_on

(stop) put[->2]);

 

Note the difference with the following implementation

 

assert property (@(posedge clk) go ##1 (get && !kill)[*2] |-> !stop

throughout put[->2]);

 

In the first implementation stop is caught everywhere when awaiting two

put signals, while in the second one it will be caught only if it is

high on the rising edge of the clock.

 

accept_on is a dual operator to reject_on, and it plays the same role in

cover statements as reject_on in assertions.

 

Unfortunately disable iff cannot be reused for the following main

reasons:

* disable iff acts as accept_on in assert and assume statements, and as

reject_on in cover statements

[Lisa Piper >>>] not since 805.  Disable iff is not pass or fail
anymore.

* When disable iff is active, the thread execution is defined as

disabled, while accept_on and reject_on are regular temporal operators

and lead to a success or a failure of the property

 

There is also a positive side in this duplication - disable iff defines

the main reset of an assertion and clearly shows when the assertion is

disabled and when not, so the tools can report the vacuous success, etc.

As for accept_on and reject_on, they act as regular temporal operators

and do not result in a vacuous attempt.

[Lisa Piper >>>] but disable iff is not vacuous either.

 

I think the names accept_on and reject_on exactly reflect their

semantics: accept_on(rst) p says accept p (if not failed before) when

rst is high. The reject is dual.

 

Thanks,

Dmitry

-----Original Message-----

From: owner-sv-ac@server.eda.org [mailto:owner-sv-ac@server.eda.org] On

Behalf Of Thomas Thatcher

Sent: Friday, June 15, 2007 12:59 AM

To: Eduard Cerny

Cc: sv-ac@server.eda-stds.org

Subject: Re: [sv-ac] Mantis 1757 Accepton / rejecton operators

 

Hi Eduard,

 

I just read the proposal.  My first question is:  Why do we need these

operators?  What type of problem are we solving?  It appears that the

only difference from "disable iff" is that the property evaluations will

complete with a given value on a reset, rather than not completing.

 

The second thought is that the rejecton and accepton names don't really

describe their function too well.  I had to read the first part of the

proposal to figure out what these new operators were for.

 

Tom

 

Eduard Cerny wrote On 06/14/07 11:19,:

> Hello,

> 

> I have uploaded an updated version of the proposal, also attached

here.

> 

> best regards,

> ed

> 

 

-- 

------------------

Thomas J. Thatcher

Sun Microsystems

408-616-5589

------------------

 

-- 

This message has been scanned for viruses and

dangerous content by MailScanner, and is

believed to be clean.

 

-- 

This message has been scanned for viruses and

dangerous content by MailScanner, and is

believed to be clean.

 

 


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Mon Jun 18 08:59:02 2007

This archive was generated by hypermail 2.1.8 : Mon Jun 18 2007 - 08:59:08 PDT