story · 2020年05月22日

SystemVerilog​概念浅析之Covergroup

SystemVerilog 中的Covergroup结构封装了 coverage model。Covergroup可以定义在package、module、program、interface和class中

Cover group使用关键字covergroupendgroup定义,使用new()实例化。

covergroup cg;
  .........
endgroup

cg cg_inst = new;

上面的示例定义了一个名为**“ cg”的covergroup 。“cg”的实例化为“ cg\_inst”**。

covergroup 可以使用事件表达式**-edge**,variable,或者显式调用 sample() 方法触发(trigger)

covergroup cg @(posedge clk);
  .........
endgroup



上面的示例定义了一个名为**“ cg”的covergroup 。在“clk”**信号posedge时,此covergroup将自动采样。

covergroup cg;
  .........
endgroup

cg cg_inst = new;
initial // or taskor function or always blockbegin......
  cg_inst.sample();
  ......
 end

也可以通过显式调用sample()方法来完成采样。

一个covergroup 可以包含一个或多个coverage points。coverage point 可以是变量或表达式。

program main;
bit [0:2] y;
bit [0:2] values[$]= '{3,5,6};
covergroup cg;
cover_point_y : coverpoint y;
endgroup

cg cg_inst = new();
initial
foreach(values[i])
begin
y = values[i];
cg_inst.sample();
end
endprogram

在上面的示例中,定义了covergroup “ cg”,并创建了其实例**“ cg\_inst”。我们对cover point“ y”进行了采样。cover point名为“cover\_point\_y”**。

使用VCS仿真工具进行仿真:

//Compilation command:
vcs -sverilog filename.sv
//Simulation Command:
./simv
//Command to generate Coverage report:
//Coverage report in html format will be inthe ./urgReport directory
urg -dir simv.vdb:

当调用cg\_inst.sample()方法时,将采样“y”的值。y的总可能值为0、1、2、3、4、5、6、7。 为变量“ y”赋值3、5、6,覆盖率报告仅覆盖3/8。

Summary forVariable cover_point_y

CATEGORY    EXPECTED    UNCOVERED    COVERED    PERCENT
Automatically Generated Bins    8    5    3    37.50

Automatically Generated Bins for cover_point_y

Uncovered bins

NAME    COUNT    AT LEAST    NUMBER
[auto[0] - auto[2]]    --    --    3
[auto[4]]    0    1    1
[auto[7]]    0    1    1


Covered bins

NAME    COUNT    AT LEAST
auto[3]    1    1
auto[5]    1    1
auto[6]    1    1

covergroup也可以使用参数传递

covergroup cg_ref(ref bit [1:0] ref_y);
  cover_point_y : coverpoint ref_y;
endgroup

然后重新编码program

program main;
bit [0:2] y;
bit [0:2] values[$]= '{3,5,6};
covergroup cg_ref(refbit [1:0] ref_y);
  cover_point_y : coverpoint ref_y;
endgroup

cg_ref cg_inst = new(y);
initial
  repeat(5)  begin
    y = $random ;
    cg_inst.sample();
  end
end
endprogram

覆盖率报告:

Summary forVariable cover_point_y

CATEGORY    EXPECTED    UNCOVERED    COVERED    PERCENT
Automatically Generated Bins    8    4    4    50.00

Automatically Generated Bins for cover_point_y

Uncovered bins

NAME    COUNT    AT LEAST    NUMBER
[auto[0]]    0    1    1
[auto[2]]    0    1    1
[auto[6] - auto[7]]    --    --    2


Covered bins

NAME    COUNT    AT LEAST
auto[1]    2    1
auto[3]    1    1
auto[4]    1    1
auto[5]    1    1

本文转载自公众号:芯片数字实验室
原文链接:
https://mp.weixin.qq.com/s/kCWXffw2czys639K7G7hgQ
未经作者同意,请勿转载!

推荐阅读

想了解更多内容,欢迎关注芯片数字实验室专栏
推荐阅读
关注数
12316
内容数
220
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息