专栏首页摸鱼范式覆盖率||性能影响||自定义采样方法

覆盖率||性能影响||自定义采样方法

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我

欢迎大家加入2022届数字IC交流群,QQ群号 1060380138

自定义采样方法

前面提到,可以显式调用 sample() 方法,而不是在声明覆盖组的时候定义时钟事件。但是,如果想参数化内置的 sample() 方法并将想要采样的数据准确地传递给它呢?换句话说,需要一种从包含覆盖组声明的范围以外的采样覆盖率数据的方法。

例如,可以使用不同的参数调用覆盖的采样方法,将task或者function或者并发断言中的数据直接传递到覆盖组。

并发断言具有特殊的sample语法,即在preponed区域中对数据值进行采样。这一点可以用将来自并发断言的采样数据作为参数传递给覆盖的sample方法,反过来说,又有助于管理断言覆盖的各个方面,例如通过一个属性对多个覆盖组进行采样、通过同一覆盖组对多个属性进行采样或对不同的采样方法采样任意覆盖组的序列或属性(包括局部变量)的分支。

自定义的sample方法的语法如下:

自定义采样方法

下面是一个简单的例子:

covergroup coverSample with function sample (int X);
 coverpoint X;
endgroup : coverSample

coverSample cS = new ( );

property propertySample;
 int pX;   //local variable
 //iSig1, iSig2, iSig3 are some internal signals of your design
 @(posedge clk)   (iSig1, pX = iSig2) |=> (iSig3, cS.sample(pX));
endproperty : propertySample

在这个例子中,我们首先声明一个名为coverSample的covergroup,并使用关键字“with function sample”声明一个名为sample()的函数。这意味着函数示例是用户定义的并且具有形式参数“int X”。有了这样的声明,现在可以从任务或函数内或从并发断言的序列或属性内调用 sample() 函数。

上面的例子里,进一步定义了一个名为 propertySample 的属性,我们在其中声明了一个名为“int pX”的局部变量。这是我们要在covergroup coverSample 中采样的变量。因此,我们在某些条件下从 propertySample 中调用函数 sample(),并将变量 pX(实际)传递给covergroup coverSample 的形式“X”。这样我们就可以在我们想要覆盖的时候覆盖我们想要覆盖的变量数据。用户定义的 sample() 方法可以有任何类型的程序代码来操作我们在组合域和时间域中传递给 sample() 的数据。

下面是一个使用systemverilog的function实现的例子

function fSample;
 int fS;
 ….
 cS.sample (fS);
endfunction

请注意,覆盖组的形式参数和sample的形式参数不能重名。下面是一个例子:

covergroup X1 (int cV) with function sample (int cV);
 coverpoint cV;  //Compile ERROR
endgroup

编译错误:“int cV”被声明为“covergroup X1”的形式参数,和sample的形式参数重名,编译会报错。

下面是另一个例子(Prakash),说明了如何将类对象传递给覆盖组。现在要解决的问题是,如果covergroup参数是一个类对象,那么在实例化covergroup时该对象不能指向NULL。data_ obj 是代码中的一个类。

class coverage;
  
 covergroup cg_abc (data_obj obj);
  coverpoint obj.mode {
   bins range = {[3:'hB]};
    }
 endgroup

  function new ( );
  data_obj obj;
  cg_abc = new (obj);
 endfunction

endclass

module tb;

  initial begin
  coverage m_cov = new( );
  for (int i = 0; i < 10; i++) begin
   data_obj obj = new( );
   obj.randomize( );      // How do I assign obj to  covergroup inst ?
   m_cov.cg_abc.sample( );
  end
  $display ("Coverage : %0.2f %%", m_cov.cg_abc.get_coverage());
 end
endmodule

Simulation Log:
     ncsim> run
     ncsim: ∗E,TRNULLID: NULL pointer dereference.

所以,问题是当你在没有“with function”的情况下调用 sample() 并且你的covergroup 需要data_obj 句柄(obj)时,你如何传递它?如调用 sample() 时的代码所示,不能传递覆盖组“cg_abc”所需的参数。运行的时候会报出NULL指针错误。

下面是正确的代码:

class coverage;
 covergroup cg_abc with function sample (data_obj obj);
  coverpoint obj.mode {
   bins range = {[3:'hB]};
    }
  endgroup
  function new ( );
    data_obj obj;
    cg_abc = new( );
  endfunction
endclass
module tb;
  initial begin
    coverage m_cov = new( );
    for (int i = 0; i < 10; i++) begin
      data_obj obj = new( );
      obj.randomize( );
      m_cov.cg_abc.sample(obj);
    end
    $display ("Coverage : %0.2f %%", m_cov.cg_abc.get_coverage());
  end
endmodule
Simulation Log:
     ncsim> run
     Coverage : 100.00 %
     ncsim: ∗W,RNQUIE: Simulation is complete.

END

本文分享自微信公众号 - 摸鱼范式(icparadigm),作者:空白的贝塔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 覆盖率||性能影响||采样方法

    SVA包含了一些定义何时开始收集覆盖率以及合适停止收集覆盖率的方法。这些方法可以和covergroup关联,并且在程序中调用·。

    空白的贝塔
  • 基于自动化用例的精准测试探索

    在当前web系统或app后端服务测试过程中, 黑盒测试占据了大部分的测试,即便是接口测试,也是基于场景的用例设计,这种测试方法完全依赖于测试人员的能力,经验和业...

    测试开发社区
  • 基于自动化用例的精准测试探索

    在当前web系统或app后端服务测试过程中, 黑盒测试占据了大部分的测试,即便是接口测试,也是基于场景的用例设计,这种测试方法完全依赖于测试人员的能力,经验和业...

    小老鼠
  • 大流量冲击下,腾讯QQ客户端如何保障春节红包活动的用户体验?

    2020腾讯QQ春节红包主要以答题的玩法,结合中国传统文化(成语、诗词、对联、历史等)的方式进行,达到寓教于乐的效果。

    腾小云
  • 社交软件红包技术解密(十):手Q客户端针对2020年春节红包的技术实践

    2020年春节早已过去两月有余,回顾本次腾讯手Q春节红包活动的玩法,主要以答题形式结合中国传统文化(成语、诗词、对联、历史等)的方式进行,达到寓教于乐的效果。

    JackJiang
  • Logistic回归模型、应用建模案例

    一、logistic回归模型概述 广义线性回归是探索“响应变量的期望”与“自变量”的关系,以实现对非线性关系的某种拟合。这里面涉及到一个“连接...

    机器学习AI算法工程
  • IC验证的一种最佳实践:pandora-v0.5

    在写这篇文章前有过很多的犹豫,要不要与当前大众工作方式更近似一些,不引入迭代、看板,不加入基于针对验证的单元测试、功能测试、接口测试。后来发现如果不加入就会使得...

    ExASIC
  • 月活8.89亿背后:微信工程师细数兼容测试经验

    2017年4月,企鹅智酷公布了最新的《2017微信用户&生态研究报告》。报告数据显示,截止到2016年12月微信全球共计8.89亿月活用户,新兴的公众号平台拥有...

    WeTest质量开放平台团队
  • 月活8.89亿背后:微信工程师细数兼容测试经验

    微信团队通过自动化、云端化测试,在兼容性和功能测试方面效率提升了1倍多,更快速、精准地定位解决问题,累计发现并解决的问题数达数千个,覆盖亿级用户,提供了流畅稳定...

    WeTest质量开放平台团队
  • 如何驱使行为改变 | 驱动变革

    绝大多数工程师对于变革有种无力感。这种无力感源于这样的想法:我不是管理人员,没有足够的职权,无法改变自己的组织。当这种感觉足够强烈的时候,它作带来的挫败感会使我...

    ThoughtWorks
  • 坐高铁手机没信号?原因远比你想的要复杂!

    众所周知,我们国家有目前世界上最发达的高速铁路网络。高铁,拉近了城市之间的时间距离,彻底改变了我们的生活。

    鲜枣课堂
  • 关于芯片验证中写testcase的一些想法

    在芯片验证中,搭建好testbench后,就必须开始着手创建testcases。testcase按功能可划分为三类:冒烟用例、随机用例、定向用例。按开发时间顺序...

    AsicWonder
  • OpenGL 抗锯齿

    在你的渲染大冒险中,你可能会遇到模型边缘有锯齿的问题。锯齿边(Jagged Edge)出现的原因是由顶点数据像素化之后成为片段的方式所引起的。下面是一个简单的立...

    字节流动
  • 从精准化测试看ASM在Android中的强势插入-总纲

    精准化测试,实际上就是对「业务」——「测试用例」——「代码」进行关联建模并追踪他们的变化。

    用户1907613
  • 武汉大学 RSIDEA 团队开源LoveDA:可同时推进语义分割和迁移学习

    本文分享论文『LoveDA: A Remote Sensing Land-Cover Dataset for Domain Adaptive Semantic ...

    CV君
  • 学术大讲堂 |(六)基于大数据的网络智慧运营应用研发

    运营商的网络大数据具有实时性高、覆盖业务广、业务价值大等特点,利用网络大数据赋能网络运营智慧化是各运营商的迫切诉求,今天就给大家分享一下我们在利用网络大数据提升...

    灯塔大数据
  • Unity通用渲染管线(URP)系列(四)——方向阴影(Cascaded Shadow Maps)

    当进行物体渲染时,表面和灯光信息足以计算光照。但是在两者之间可能存在某些阻碍光线的东西,导致在我们需要渲染的表面上投射了阴影。为了使阴影能够正常表现,就必须以某...

    放牛的星星
  • 真正的敏捷工作流 —— GitHub flow

    7991 年,随着极限编程(Extreme programming)方法论的提出,持续集成(Continuous integration)也随之成为一项标准化的...

    ThoughtWorks
  • 有效测试设计

    #1.1 定义: 测试设计技术是从特定的测试依据中得到测试用例用来实现特定测试覆盖的标准化方法.

    周希

扫码关注云+社区

领取腾讯云代金券