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