基于 Verilog 的 TB 的功能覆盖

Functional Coverage for Verilog based TB

我目前正在为 DUT 开发基于 Verilog 的测试台模型, 我有 System Verilog TB 和验证 IP 方面的经验,这是我第一次开发纯 verilog TB。

我已经完成了 运行 模拟的基本模块并按预期工作。 但我一直坚持实现功能覆盖(我想在示例监视器块中执行)。我已经从规范中提取了功能覆盖,但如何在 Verilog 代码中实现它?

我们在 System verilog 中支持以下(显示语法的示例代码)功能覆盖,

covergroup example_group @ (posedge en);
  parity : coverpoint  par {
    bins even  = {0};
    bins odd   = {1};
  }
endgroup

有没有办法将功能覆盖实现为箱、点和组(在 System verilog 中)以跟踪整体功能覆盖在基于 verilog 的代码中?

编辑: 我知道在 verilog 中没有覆盖范围的替代语法,我不想通过实施覆盖计数器来复杂化和花费更多时间。另外,由于一些内部协议问题,我无法将我的 verilog TB 转换为 System Verilog。

是的,covergroup就相当于这段Verilog代码

always @(posedge en) begin : example_group
                       integer even=0;
                       integer odd=0;
                       if (par == 0) even = even + 1;
                       if (par == 1) odd = odd + 1;
                     end

但真正耗时的部分是编写代码来收集所有这些计数器、合并来自不同测试的数据并生成报告。重新发明这个似乎很愚蠢。大多数工具在 SystemVerilog 中为您提供此功能。