RE: [sv-ac] Re: Request: example of use of covergroup in combination with cover statements?

From: Lisa Piper <piper_at_.....>
Date: Wed Feb 06 2008 - 08:28:51 PST
Sorry!  I'll open another mantis item on the clocked sequence issue.

 

Lisa

 

________________________________

From: Seligman, Erik [mailto:erik.seligman@intel.com] 
Sent: Wednesday, February 06, 2008 11:00 AM
To: Lisa Piper; Thomas.Thatcher@sun.com
Cc: Korchemny, Dmitry; sv-ac@eda.org
Subject: RE: [sv-ac] Re: Request: example of use of covergroup in
combination with cover statements?

 

No, I'm not saying that-- the problem was that the original example we
were looking at just declared a sequence, without actually using it at
all.

The sequence called a function to activate the covergroup; but the
sequence itself was never invoked or instantiated.

 

 

 

________________________________

From: Lisa Piper [mailto:piper@cadence.com] 
Sent: Wednesday, February 06, 2008 7:53 AM
To: Seligman, Erik; Thomas.Thatcher@sun.com
Cc: Korchemny, Dmitry; sv-ac@eda.org
Subject: RE: [sv-ac] Re: Request: example of use of covergroup in
combination with cover statements?

Hi Tom,

 

Are you saying that if "coverage_event" is @(sequence_instance) in the
syntax:

 

covergroup covergroup_identifier [ ( [ tf_port_list ] ) ] [
coverage_event ] ;

{ coverage_spec_or_option }

endgroup [ : covergroup_identifier ]

 

then you need to have a cover property in the design?  That is not
correct, or at least shouldn't be! In the example provided, the sequence
was defined but not "used".  If it is used as a clocking_event in
procedural code or as a strobe to a covergroup, then it is "used". If it
is used in the "cover property" argument, as with the example, it is
also used.

 

Sorry if I mis-interpreted the emails based on quick scans.

 

I noticed what I think is another issue with the LRM. In section 9.4.2.4
on Sequence Events, it is never stated that it must be a clocked
sequence. Does it make sense to add it to this since we can't open new
ones?  If it is temporal, then it needs a clock. 

 

REPLACE 

 

9.4.2.4 Sequence events

A sequence instance can be used in event expressions to control the
execution of procedural statements

based on the successful match of the sequence.

 

WITH

 

9.4.2.4 Sequence events

A clocked sequence instance can be used in event expressions to control
the execution of procedural statements

based on the successful match of the sequence.

 

 

Lisa

 

-----Original Message-----
From: owner-sv-ac@eda.org [mailto:owner-sv-ac@eda.org] On Behalf Of
Seligman, Erik
Sent: Wednesday, February 06, 2008 10:21 AM
To: Thomas.Thatcher@sun.com
Cc: Korchemny, Dmitry; sv-ac@eda.org
Subject: RE: [sv-ac] Re: Request: example of use of covergroup in
combination with cover statements?

 

Ah, ok.  So it looks like my understand was correct, and I don't need to

add yet more language to the proposal to cover sequences.

 

I'll add a 'cover property' to your covergroup example, and I think that

should work well for a clarification to 2110.  

 

Thanks!

 

(BTW-- I wonder if we should open a small item to clarify the LRM on

this matter?  Though it's probably a little late in the  process to add

anything.) 

 

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

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

Behalf Of Thomas Thatcher

Sent: Tuesday, February 05, 2008 5:17 PM

To: Seligman, Erik

Cc: Korchemny, Dmitry; sv-ac@server.eda.org

Subject: [sv-ac] Re: Request: example of use of covergroup in

combination with cover statements?

 

Hi Erik,

 

I can't find anything in the LRM to say one way or another, so I did an 

experiment:   In our simulator, it does seem that the sequence is not 

executed unless it is referenced.  The example code is attached.

The function say_hello() will be called only if the cover property line

is uncommented.

 

Tom

 

Seligman, Erik wrote:

> I think my area of confusion is more basic.  Forget about 2110 for the

 

> moment.

> 

> The question is:  if a sequence is declared, but not referenced in an 

> assertion statement, does it do anything?

> In particular, does it activate a covergroup?

> 

> I thought a sequence had to be used in an assertion statement in order

 

> to cause any actions, including activating a covergroup.  But I 

> haven't dealt with covergroups, or with sequences outside an assertion

 

> context, so that may be a misunderstanding.  I agree, if a sequence 

> does stuff just by being declared, then we need to make them execute 

> for each loop iteration just like assertion statements.

> 

> 

> -----Original Message-----

> From: Thomas.Thatcher@Sun.COM [mailto:Thomas.Thatcher@Sun.COM]

> Sent: Tuesday, February 05, 2008 3:03 PM

> To: Seligman, Erik

> Cc: Korchemny, Dmitry; sv-ac@eda.org

> Subject: Re: Request: example of use of covergroup in combination with

 

> cover statements?

> 

> Hi Erik,

> 

> Interesting . . .  My understanding was that the sequence would be 

> evaluated for every loop iteration, just as a cover property would be.

> Are you saying that the sequence would not be replicated for every 

> loop iteration UNLESS it is referenced by a cover property??? (I think

 

> my brain just did a divide-by-zero).  Or are you saying that sequences

 

> are never replicated?  Either way, this is another non-intuitive 

> feature of checkers in loops which will have to be explained.

> 

> My thought was, that for every iteration of the enclosing loop, the 

> sequence would be evaluated with a different bit of the valid array, 

> and a different slice of the opcodes array.  Each evaluation could 

> potentially trigger the covergroup.  The custom sample() method would 

> be passed the slice of the array that was used to evaluate the 

> sequence in the current loop iteration.

> 

> Tom

> 

> Seligman, Erik wrote:

>> Thanks Tom--

>> One issue is that right now, all your examples would be identical for

 

>> all iterations of an enclosing loop in the current definition of 

>> 2110,

> 

>> as only a 'cover property' is effectively replicated.

>>  

>> But I'm not sure I understand your last example.  If a sequence is 

>> declared, but does not appear in a verification statement, does it 

>> still get executed and trigger covergroups?  If not, adding a 'cover 

>> property op_accept' might make it a good example for this proposal.

>>  

>>  

>> 

>> ---------------------------------------------------------------------

>> -

>> --

>> *From:* Thomas.Thatcher@Sun.COM [mailto:Thomas.Thatcher@Sun.COM]

>> *Sent:* Tuesday, February 05, 2008 12:29 PM

>> *To:* Seligman, Erik

>> *Cc:* Korchemny, Dmitry; sv-ac@eda.org

>> *Subject:* Re: Request: example of use of covergroup in combination 

>> with cover statements?

>> 

>> Hi Erik,

>> 

>> 

>> The first example in my 2088 proposal shows a covergroup which is 

>> triggered by an (@*posedge* clk) event.  If the checker containing 

>> this covergroup were placed in a precedural loop, it would be 

>> executed

> 

>> only once per clock tick, while all the other assertions will be 

>> executed once for every pass of the enclosing loop.  This will be a 

>> little non-intuitive for new users, so it probably should be 

>> explained

> in the text.

>> The second example in the 2088 proposal shows a covergroup which is 

>> triggered by a call to the default *sample()* method.

>> 

>> The third example might be the most useful.  This shows a covergroup 

>> triggered by a custom *sample()* method. It should be easy to modify 

>> this example so it could be placed in a loop.

>> 

>> *checker* op_test (*logic* clk, vld_1, vld_2, *logic* [3:0] opcode)

>> 

>> *    checkvar* *bit* [3:0] opcode_d1;

>> 

>> 

>> *    always_check* @(*posedge* clk) opcode_d1 <= opcode;

>> 

>> 

>> *    covergroup* cg_op *with* *function* sample(*bit* [3:0]

> opcode_d1);

>>         cp_op : *   coverpoint* opcode_d1;

>> 

>> *    endgroup*:cg_op

>> 

>>     cg_op cg_op_1 = *new*();

>> 

>> *    sequence* op_accept;

>> 

>>         @(*posedge* clk) vld_1 ##1 (vld2, cg_op_1.sample(opcode_d1));

>> 

>> *    endsequence*

>> 

>> *endchecker*

>> 

>> 

>> Suppose the above checker is placed in a loop where vld1 and vld2 are

 

>> bits of arrays, and opcode is a slice of a two-dimensional array.  

>> The

> 

>> checker portion could be written like this (I'll take out vld2 to 

>> avoid the procedural code in the checker).

>> 

>> *checker* op_test (*logic* clk, vld_1, *logic* [3:0] opcode)

>> 

>> *    checkvar* *bit* [3:0] opcode_d1;

>> 

>> *    covergroup* cg_op *with* *function* sample(*bit* [3:0]

> opcode_d1);

>>         cp_op : *   coverpoint* opcode_d1;

>> 

>> *    endgroup*:cg_op

>> 

>>     cg_op cg_op_1 = *new*();

>> 

>> *    sequence* op_accept;

>> 

>>         @(*posedge* clk) (vld1, cg_op_1.sample(opcode));

>> 

>> *    endsequence*

>> 

>> *endchecker

>> *

>> 

>> *...

>> logic [3:0] valid;

>> logic [3:0] opcodes [0:3];

>> *

>> 

>> *for (i=0; i<=3; i++) begin

>>     op_test my_op_test (.clk(clk), .vld1(valid[i]), 

>> .opcode(opcodes[i])); end

>> *

>> 

>> 

>> Does this help?

>> 

>> Tom

>> 

>>  

>> Seligman, Erik wrote:

>>> Tom-- can you send me a short fragment giving an example of what you

 

>>> were alluding to in the meeting?

>>> I couldn't find something like this in 2088, or in the current LRM.

>>>  

>>> Thanks!

>>>  

>>>  

>>> 

>>> *Erik Seligman*

>>> 

>>> ***Formal Verification Architect*

>>> 

>>> *Corporate Design Solutions*

>>> *Design Technology and Solutions*

>>> 

>>> *Intel Corporation*

>>> 

>>> M.S. JF4-402                  

>>> 2111 NE 25^th Ave

>>> Hillsboro, OR 97124

>>> 

>>> Phone:   (503) 712-3134

>>> 

>>>  

 

--

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 Wed Feb 6 08:30:40 2008

This archive was generated by hypermail 2.1.8 : Wed Feb 06 2008 - 08:31:01 PST