【问题标题】:Array Coverage in systemverilogsystemverilog 中的数组覆盖率
【发布时间】:2020-09-22 10:12:31
【问题描述】:

我有一个数组en_abist_ov[0:12]。每次我对一个封面组进行采样时,我都想看看是否设置了特定元素 en_abist_ov[i]。 所以我想为数组的每个元素创建一个覆盖点。

提前致谢

【问题讨论】:

    标签: code-coverage system-verilog uvm


    【解决方案1】:

    您可以在 SystemVerilog 中拥有覆盖组数组,例如:

    covergroup CG with function sample (input bit c);
      option.per_instance = 1;
      coverpoint c;
    endgroup 
    
    CG cg [16];
    

    然后你需要在循环中构造它们:

    bit en_abist_ov[0:12];
    
    initial begin
      foreach (en_abist_ov[i])
        cg[i] = new;
    

    然后您可以在另一个循环中对每个样本进行采样,例如:

    foreach (en_abist_ov[i]) 
        cg[i].sample(en_abist_ov[i]);     
    

    例如:

    module M;
      
      bit en_abist_ov[0:12];
      
      covergroup CG with function sample (input bit c);
        option.per_instance = 1;
        coverpoint c;
      endgroup 
       
      CG cg [16];
    
      initial begin
        foreach (en_abist_ov[i])
          cg[i] = new;
        { << {en_abist_ov}} = 13'b1010101010101;
        foreach (en_abist_ov[i]) 
            cg[i].sample(en_abist_ov[i]);     
        { << {en_abist_ov}} = 13'b0;
        foreach (en_abist_ov[i]) 
            cg[i].sample(en_abist_ov[i]);     
        foreach (en_abist_ov[i])
          $display("s[%0h]=%b, coverage cg[%0h].get_inst_coverage= %f", i, en_abist_ov[i], i, cg[i].get_inst_coverage);
        $display("cg[0].get_inst_coverage= %f", cg[0].get_coverage);
      end
      
    endmodule
    

    https://www.edaplayground.com/x/LZSi

    【讨论】:

    • 我使用的模拟器(Xcelium)似乎不行
    • @Mxm89 是的,看起来像“xmvlog: *E,CGIANS (testbench.sv,11|3): 不支持覆盖组实例的数组。”
    • @Mxm89 可与 eda playground 中的所有其他模拟器一起使用。检查节奏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多