IC验证培训——实战SV验证学习(lab6)

时间:2024-04-14 13:05:27

IC验证培训——实战SV验证学习(lab6)

路科验证官网:路科验证 - 专注于数字芯片验证的系统思想和前沿工程领域

EETOP路科首页: EETOP - 路科验证 - IC验证培训

****路科首页:**** - 路科验证 - IC验证培训

分享给微电子相关专业新生:微电子新生入坑指南

在上一期的Lab5中,我们将验证平台更为规范化。今天的Lab6的学习目标是:

  1. 实现功能覆盖率从而可以决定仿真何时结束。

 

在lab5中我们还遗留了一个问题:究竟发送多少数据包才能测试到所有输入端口和输出端口的连接? 根据我们已有的随机激励代码并不能解决这个问题。你需要引入功能覆盖率(functional coverage)。

 

在这次的lab中,你将会给scoreboard类中添加功能覆盖组件。这个功能覆盖率可以来衡量你的testbench的测试进度,并且当你的testbench在完全检查到了所有输入端和输出端的连接后终止仿真。

     

任务一.在scoreboard类中创建一个covergroup

在SV中引入功能覆盖率要做的的第一件事:就是定义coverage group。在coverage group中,coverage bins,update event,timing 和coverage goal 都应该被定义。

应该给每一个输入端和输出端都创建coverage bins。然后,cross 所有输入端和输出端的coverage bins。

1.用编辑器打开Scoreboard.sv文件。

2.添加两个新的类属性。

 

  bit[3:0] sa,da; //functional coverage properties

3.在这两个属性的声明之后,声明一个对cover group(router_cov)的定义。

4.在这个cover group内部

   。根据sa和da来创建coverpoint groups。

   。在两个取样group上来创建 cross bins(这个cross coverage是我们在寻找的real 覆盖率信息。)

 

任务二. 修改new()来构建coverage对象

1.在new()的结构体中,构造router_cov。当完成后,covergroup的定义应跟以下一样。

IC验证培训——实战SV验证学习(lab6)

 

任务三:为了覆盖率修改check()

1.在方法check()中,添加一个新的真实变量 coverage_result(这个数据类型一定是real,因为功能覆盖率的结果是作为真实意义(real values)返回的。)。将会在这个变量中存储跑出的功能覆盖率 (%)。

2.在pkt2send和pkt2Cmp的比较成功之后,设置类变量sa和da来衡量在pkt2send对象中的值。

3.接着,调用router_cov.sample()来触发功能覆盖率bin的更新。

4.调用$get_coverage()来重新获取更新后的功能覆盖率的值,并将他们存储在coverage_result中去。

5.修改$display()中的语句,使其可以打印覆盖率(%)。

6.将if语句修改为:if 覆盖率到达了100%作为event flag来触发DONE的发生。

7.保存和关闭scoreboard.sv文件。

 

 

 

至此,所有Lab都已经完成啦。扫描二维码关注路桑的公众号,即可查看所有要用到的代码。

不多说了,完结撒花!!

IC验证培训——实战SV验证学习(lab6)