System verilog 覆盖所有钻头的覆盖点料仓

System verilog 覆盖所有钻头的覆盖点料仓,system-verilog,test-coverage,System Verilog,Test Coverage,我只是SystemVerilog的初学者,现在我正在阅读有关覆盖率的文章。所以我对此有疑问。如何写入coverpoint存储箱以覆盖信号的所有位 interface allSignals; logic [31:0] addr; logic [15:0] len; bit trigger; covegroup signalOne@trigger; coverpoint addr; //This generates

我只是SystemVerilog的初学者,现在我正在阅读有关覆盖率的文章。所以我对此有疑问。如何写入coverpoint存储箱以覆盖信号的所有位

    interface allSignals;
        logic [31:0] addr;
        logic [15:0] len;
        bit trigger;

    covegroup signalOne@trigger;

        coverpoint addr; //This generates bins automatically(64 bins by 
                          default) with each bin containing 2^32/64 values

        coverpoint addr[0]; //each coverpoint covers 2 bins and 50% coverage 
        coverpoint addr[1]; //is shown even if the value is not covered in 
               ...          //that bin
               ...
        coverpoint addr[31];

        coverpoint addr{
            bins a0[] = {[0:5000]};     //should write 2^32 values which is 
            bins a1[] = {[5001:10000]}; //very complex
               ...
               ...
            }

        ad: coverpoint addr{
                bins a[100] = ad; //creates 100 bins with 2^32/100 values in 
                }                  //each bin

    endgroup

        signalOne cvr1 = new;

    endinterface

如何编写覆盖所有32位“addr”信号的覆盖点。有没有其他更好的方法可以做到这一点。

您不会通过尝试访问2**32地址来收集32位地址的功能覆盖率。在具有70ns访问内存的真实硬件中,需要5分钟。考虑到软件模拟通常要慢10000倍,这将花费你一个月的时间

大多数人所做的是寻找从0到1和从1到0的每一位的转换。这就是切换覆盖率。尽管它带有一个
covergroup
,但大多数工具都有内置的分析功能来为您完成这项工作。您需要检查仿真工具的用户手册

如果您确实需要彻底测试整个4GB地址空间,那么您可能需要对该任务进行调查,而不是模拟

“覆盖所有32位”是什么意思?每个都是1/0?