sv 功能覆盖率

📅 发布时间:2026/7/29 17:22:47
sv 功能覆盖率
covergroup定义在类外面covergroup cmd_fcov with function sample(svt_axi_transaction tr); coverpoint tr.addr; coverpoint tr.id; coverpoint tr.data.size; endgroup class xx_refm extends uvm_refm; cmd_fcov A_cov; function new(string name psub_sdma_scb, uvm_component parent); A_cov new(); endfunction //在具体的位置调用A_cov.sample(axi_tr); endclass一下常用表达表达很大位宽的最大值功能覆盖率的cross采样功能覆盖率基于采样事件采样到当前时刻的值进行cross不会在不同时间片段之间进行cross已验证接口覆盖率方法一定义一个module接口和DUT保持一致接口方向定义为input。在这个module里面定义covergroup去采样相关接口信号。在module里面的initial块里面去实例化covergroup。在top_connect顶层去把fcov_if_module bind到DUT上。采用bind DUT_inst1 fcov_if_module fcov_if_module_inst1(.*)这个方法的好处是在ST重用场景如果BT有多个时会比较友好可以去bind到不同实例上。方法二直接定义在外面一个文件include到顶层连接文件。就是比较简单快捷。如果ST重用有多个对应DUT可以考虑通过实例化多份采样对应的实例信号。常用的方法在SystemVerilog中binsof和intersect是用于处理位向量和集合的内建函数。- binsof函数用于从一个位向量中提取1的位置并将结果返回为一个集合。它的语法如下 systemverilog function integer binsof(input logic [N-1:0] vector); 其中vector是一个位向量N代表位向量的宽度。binsof会遍历vector的每一位并将值为1的索引添加到返回的集合中。例如对于位向量8b11010011binsof会返回{0, 3, 4, 6, 7}。- intersect函数用于计算两个集合的交集并将结果返回为一个集合。它的语法如下 systemverilog function static integer intersect(input integer A[$], input integer B[$]); 其中A和B是两个集合。intersect会返回A和B的交集。例如对于集合{1, 2, 3, 4}和{3, 4, 5}intersect会返回{3, 4}。在 SystemVerilog 中binsof 和 intersect 是在功能覆盖率收集上使用的两个关键字。binsof 用于在 covergroup 或 coverpoint 中获取已定义的覆盖率桶coverage bin的集合。通过使用 binsof可以访问和操作覆盖率桶中的信息。以下是 binsof 的示例用法 systemverilogcovergroup my_coverage;coverpoint my_signal {bins data {0, 1, [2:5], 8};bins edge {posedge, negedge}; }endgroupfunction void my_function();int my_bins[$];my_bins my_coverage.my_signal.binsof(data);foreach (my_bins[i]) $display(Data bin: %0d, my_bins[i]);// 获取与两个覆盖率桶相交的交集my_bins intersect(my_coverage.my_signal.binsof(data), my_coverage.my_signal.binsof(edge)); foreach (my_bins[i]) $display(Intersection bin: %0d, my_bins[i]);endfunction 在上述示例中my_coverage 是一个 covergroup其中包含了一个 coverpoint my_signal它定义了两个覆盖率桶 data 和 edge。通过使用 binsof可以获取名为 data 的覆盖率桶并在 my_function 中进行操作和输出。 intersect 是一个函数用于获取两个集合的交集。在上述示例中intersect 函数用于获取 data 和 edge 这两个覆盖率桶集合的交集并在 my_function 中进行操作和输出。 这些关键字和功能可以帮助开发人员在进行功能覆盖率分析时收集和处理相关数据。cross对两个coverpoint进行cross时这两个cp必须在同一个采样事件时才会进行cross。否则会出现两个cp都有覆盖率但是没有cross的情况