story · 2022年09月29日 · 广东

covergroup/coverpoint简介及示例

什么是covergroup?

  1. “covergroup”是一种用户定义的类型,以在同一个事件触发时采样相应的变量值。
  2. “‘covergroup’中需要收集的信息实际上代表了设计的规格。
  3. covergroup’可以在“package’”、“module’”、“program’”、“interface’ ”和“class’”中定义。

47209cca6256fdc29122447e5fecaf6a.png

上图是covergroup关键语法的示意:

  1. 没有coverpoint的covergroup是没用的,但是编译器可能不会报Error。
  2. Covergroup,顾名思义,就是一组coverpoint,也就是说一个covergroup中可以有多个coverpoint。
  3. 必须实例化covergroup才有意义。
  4. 可以提供(非强制性)一个事件来确定covergroup中的coverpoint何时被采样。如果省略了事件,则必须显式使用内置方法sample。

什么是coverpoint ?

  1. coverpoint 简单来说就是一个能够代表设计规格的变量或者变量表达式
  2. 每个coverpoint 可以是一个值或者值的切换。
  3. “bins”可以由用户定义或由 EDA 工具自动创建。

功能覆盖率就是通过bin的覆盖情况统计出来的。

45b5eeccb093b22c4f330346c3c75c92.png

Coverpoint的语法如上图所示:

covergroup g1 在(posedge clk) 采样。 “oc”是Coverpoint的名称。‘oc’覆盖了2比特变量‘offset’。由于没有指定收集哪些bin,EDA仿真工具会默认为我们创建4个bin(auto[0]、auto[1]、auto[2]、auto[3]),分别表示覆盖2’b00、2‘b01、2’b10、2‘b11

因为上图中所有的场景被被覆盖了,所以覆盖率是100%

一个covergroup/coverpoint的示例

PCI协议由许多不同类型的总线周期组成。我们在仿真过程中希望确认是否已经覆盖了每种类型。

下面使用枚举类型pciCommands定义各种总线周期类型

ac607568209019804735fdfb78c7c32d.png
covergroup指定了正确的采样事件(在这里是FRAME_的下降沿)。

从仿真性能的角度来看,这个采样事件非常重要,如果使用@ (posedge clk)进行采样会增加很多的仿真性能开销。

在上面的例子中,我们没有指定任何bins。仿真器将自动创建12个在FRAME_下降沿采样的bins,分别代表12个总线周期类型。

在每一次FRAME_下降沿,仿真器会查看总线上的pciCommands_cover是否是这12个总线类型中的一个,如果匹配则表示该总线类型被cover一次。

作者:验证哥布林
来源:芯片设计验证微信号https://mp.weixin.qq.com/s/_2KaHWTnK_KEgsQsPzkFkA
https://mp.weixin.qq.com/s/7w2tivnWSK_hxEW1rGSwTQ
https://mp.weixin.qq.com/s/7FlXrRWbtmQAEDQMqM5W0A

推荐阅读

更多数字IC设计技术干货等请关注数字芯片实验室专栏。添加极术小姐姐(微信:aijishu20)微信可申请加入IC设计交流群。
推荐阅读
关注数
12313
内容数
219
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息