UVM验证-覆盖率

1、代码覆盖率

行覆盖率(Line Coverage):衡量多少行代码被执行过;
有限状态机覆盖率(FSM Coverage):衡量状态机中哪些状态和状态转换被执行过;
翻转覆盖率(Toggle Coverage):衡量哪些单bit信号0/1翻转被执行过;
分支覆盖率(Branch Coverage),也称路径覆盖率(Path Coverage):衡量哪些if、case、for、forever、while等语句分支被执行过;
条件覆盖率(Condition Coverage):衡量哪些条件中逻辑操作数被执行过。

2、功能覆盖率

用户自定义覆盖率:定义覆盖组(Coverage groups)、覆盖点(Coverage points)、交叉覆盖(Cross Coverage)。
断言覆盖率,常用于查找错误,如两个信号是否互斥、寄存器读写冲突、memory读写冲突等。关键词assert property。

3、覆盖率-覆盖组触发

(1)调用sample触发覆盖组收集覆盖率

covergroup vss_constraint_common_cov;//定义覆盖组
        coverpoint ul_swap//定义覆盖点
         		{bins value[] = {[240:255]}; bins others = default;}
        coverpoint dl_swap
                {bins value[] = {[240:255]}; bins others = default;}
		…
		coverpoint …
endgroup
vss_constraint_common_cov = new();//创建覆盖组实例
vss_constraint_covergroup_common.vss_constraint_common_cov.sample();//收集覆盖率

(2)使用事件触发覆盖组收集覆盖率

covergroup vss_constraint_common_cov @(event_flag);//定义覆盖组
        coverpoint ul_swap//定义覆盖点
         		{bins value[] = {[240:255]}; bins others = default;}
		…
		coverpoint …
endgroup

(3)使用SV断言触发覆盖组收集覆盖率

cover property//断言事件
	(@(posedge clk) write_ena==1)
	->write_event;
covergroup vss_constraint_common_cov @(write_event);//定义覆盖组
        coverpoint ul_swap//定义覆盖点
         		{bins value[] = {[240:255]}; bins others = default;}
		…
		coverpoint …
endgroup

4、覆盖率-数据采样

主要通过创建“仓(bin)”来记录每个数值被捕捉到的次数。
(1)自动创建仓:3bit变量,会被创建23个仓。通过设置auto_bin_max指明建仓个数。
(2)用户自定义仓:

   coverpoint hf_num
               {bins value[] = {[1:15]}; bins others = default;}

(3)条件覆盖率建仓
关键字iff

cpri_rate_iff:
    coverpoint cpri_rate
              iff(dl_type==8)
              {bins value[] = {0}; bins others = default;}

(4)翻转覆盖率建仓

coverpoint cpri_rate
           {bins value[] =0=>1),(1=>2}

(5)忽略覆盖点
关键字ignore_bins

   coverpoint hf_num
               {ignore_bins value[] = {0}; }

(6)不合法的仓
关键字illegal_bins

coverpoint hf_num
           {illegal_bins value[] = {0}; }

(7)交叉覆盖率
关键字cross

covergroup vss_constraint_common_cov;//定义覆盖组
        ul_swap :coverpoint ul_swap;//定义覆盖点
        dl_swap :coverpoint dl_swap;
		cross ul_swap, dl_swap;//交叉覆盖率
endgroup
  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UVM是一种利用SystemVerilog语言开发的硬件验证平台,旨在提高硬件验证的效率和可重用性。APB和SPI作为两种常见的通信协议,在芯片设计中也得到了广泛的应用。基于UVM的APB-SPI验证,可以有效地验证芯片中的通信功能,确保数据传输的正确性和稳定性。 在UVM APB-SPI验证流程中,通过建立测试环境、生成测试用例、执行测试和分析结果等步骤,逐步实现对APB和SPI通信协议的验证。其中,测试环境是搭建UVM框架的基础,通常由DUT(设计单元)、测试控制器、测试代理以及信号记录器等组件构成。测试用例的生成是测试环节的核心,通过模拟不同的使用场景、数据和模式,覆盖不同的协议功能,完整地检查APB和SPI的特性和功能,并对其进行评估和优化。测试执行阶段主要是对测试用例进行仿真验证,并记录其输出结果,包括通信数据、时序波形和错误信息等。最后,在测试结果分析阶段,通过对输出结果的统计分析和比较,识别和解决发现的问题,不断优化和改进芯片的设计和开发,提高生产效率和质量。 总之,基于UVM的APB-SPI验证是一种高效可靠的硬件验证方法,能够在芯片设计和开发阶段准确评估通信协议的性能和功能,发现和解决可能存在的问题,保证芯片设计的质量和可靠性,提高整个芯片研发流程的效率和成功率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值