apb_watchdog的一些功能覆盖率实例

本文详细介绍了IT技术中功能覆盖率的两个关键方面——面向数据的覆盖率(通过covergroups、coverpoints和crosscoverage实现)和面向控制的SVA断言覆盖率。以scoreboard为例,展示了如何编写和验证覆盖率,并通过UVM和覆盖率报告工具进行检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能覆盖率一般分为两种

  • 面向数据的覆盖率
  • 面向控制的覆盖率

面向数据的覆盖率:通过编写覆盖组(coverage groups)、覆盖点(coverage points)、交叉覆盖(cross coverage)等来获得面向数据的覆盖率。

面向控制的覆盖率:一般通过编写SVA获得断言覆盖率


        功能覆盖率的编写要全面,涉及到功能的方方面面都要覆盖到。

        以scoreboard为例,说明面向数据的覆盖率的一种写法,在组件内定义覆盖组,写default值检测那个,test_00_sequence。

        test_00_sequence主要是测定DUT内部寄存器的default值与设计文档中的是否一致,覆盖组中应该存在类型为“R”寄存器的地址以及相应数据等等。

  covergroup dog_cov_sequence_00;
      coverpoint addr{
          bins dog_LOAD ={32'h000};
          bins dog_VALUE={32'h004};
          bins dog_CTRL ={32'h008};
          bins dog_RIS  ={32'h010};
          bins dog_MIS  ={32'h014}; 
          bins dog_LOCK ={32'hC00}; 
          bins dog_ITCR ={32'hF00}; 
          bins dog_PERIPHID4 ={32'hFD0};
          bins dog_PERIPHID5 ={32'hFD4};
          bins dog_PERIPHID6 ={32'hFD8};
          bins dog_PERIPHID7 ={32'hFDC};
          bins dog_PERIPHID0 ={32'hFE0};
          bins dog_PERIPHID1 ={32'hFE4};
          bins dog_PERIPHID2 ={32'hFE8};
          bins dog_PERIPHID3 ={32'hFEC};
          bins dog_PCELLID0  ={32'hFF0};
          bins dog_PCELLID1  ={32'hFF4};
          bins dog_PCELLID2  ={32'hFF8};
          bins dog_PCELLID3  ={32'hFFC};
      }
      coverpoint data{
          bins    load ={32'hFFFFFFFF};    
          bins   value ={32'hFFFFFFFF};    
          bins control ={32'hFFFFFFFF};    
          bins     ris ={32'h0};    
          bins     mis ={32'h0};    
          bins    lock ={32'h0};    
          bins    itcr ={32'h0};    
          //
          bins periphid4 ={32'h04};    
          bins periphid5 ={32'h0};    
          bins periphid6 ={32'h0};    
          bins periphid7 ={32'h0};    
          bins periphid0 ={32'h24};    
          bins periphid1 ={32'hB8};    
          bins periphid2 ={32'h1B};    
          bins periphid3 ={32'hB0};    
          //
          bins pcellid0 ={32'h0D};    
          bins pcellid1 ={32'hF0};    
          bins pcellid2 ={32'h05};    
          bins pcellid3 ={32'hB1};    
      }
  endgroup:dog_cov_sequence_00

        这种是比较清晰简单的写法,test_sequence_00中涉及到的数据以及地址都写一下。

        在scoreboard中,如果比对通过,那么就去采样,触发覆盖组,看是否所有数据都能击中仓。将transaction中的PADDR和PRDATA给到addr和data,或者直接写trans.PADDR和trans.PRDATA。

        然后可以在report_phase中使用get_coverage()去拿到它的一个覆盖率。

//dog_cov_sequence_00.get_coverage()在report_phase中
UVM_INFO ../env/wdog_scoreboard.sv(137) @ 705000: uvm_test_top.env.scb [wdog_scoreboard] report_phase Enter...
dog_coverage is 100.000000
UVM_INFO ../env/wdog_scoreboard.sv(140) @ 705000: uvm_test_top.env.scb [wdog_scoreboard] report_phase Exiting...

        dog_coverage的覆盖率是100%。

        同样,也可以通过firefox查看它的覆盖率。需要在Makefile中添加如下语句生成report报告并用firefox查看报告。

        使用urg命令将coverage数据转成html urg -dir simv.vdb&,生成Urgreport目录。并调用firefox查看覆盖率报告。firefox Urgreport/groups.html&w

      通过覆盖率报告可以查看到,所有仓的数据都被打到了。以上就是写覆盖组到查覆盖率报告的一个基本流程。

未完。。。

    

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值