我们如何正确地从掩护组中排除{'1}值?

问题描述 投票:0回答:2

我实现了以下掩护组:

covergroup my_covergroup_cg  (input string name);
      enable_reg_cp : coverpoint enabled_reg[PARAM1-1:0] {
         illegal_bins no_enable = {0};
      }
      feature_active_reg_cp : coverpoint feature_active_reg_mask[PARAM2-1:0] { // Interested in covering a PARAM2-width chunk of a 32-bit feature_active_reg
         illegal_bins all_features_active = {'1}; // We must not activate all features (1 bit = 1 feature active)
      }      
      my_covergroup_cross : cross enable_reg_cp , feature_active_reg_cp {
         illegal_bins il0 = (binsof (enable_reg_cp) intersect {0});
         illegal_bins il1 = (binsof (feature_active_reg_cp) intersect {'1});
      }
   endgroup : my_covergroup_cg

[执行时,我的十字架的“ il1”非法垃圾桶被击中的值为“ 0x1”feature_active_reg_mask [PARAM2-1:0]-完全合法,与{'1}不匹配(相当于..111111:全为)。

在“ binsof”范围内如何处理这些{'1}时是否存在特定问题?

system-verilog uvm
2个回答
1
投票

这是最常见的工具问题。根据1800-20167 LRM中的19.5.7节的值解析,所有bin表达式都将在Coverpoint类型的上下文中进行求值。您可以使用[$:$]作为替代,代表最大可能值。

但是...] illegal_bins中的cross是不必要的,因为仅覆盖了掩护点的箱柜。 AND ...您定义了一组明确的垃圾箱,没有隐式定义的垃圾箱,因此应将其写为

covergroup my_covergroup_cg  (input string name);
      enable_reg_cp : coverpoint enabled_reg[PARAM1-1:0] {
         bins enable[] = {[1:$]}; // will be split into N bins according to auto_bins_max
      }
      feature_active_reg_cp : coverpoint feature_active_reg_mask[PARAM2-1:0] { // Interested in covering a PARAM2-width chunk of a 32-bit feature_active_reg
         bins some_features_active = {[0:$]}; 
         ignore_bins all_features_active = {[$:$]}; // We must not activate all features (1 bit = 1 feature active)
      }      
      my_covergroup_cross : cross enable_reg_cp , feature_active_reg_cp;
   endgroup : my_covergroup_cg

在2 nd覆盖点中,$值与两个bin规范重叠,但是ignore_bins覆盖了它。


0
投票

只需分享我的变通方法以进行知识共享:我决定继续使用localparam语义。看起来问题与解释{'1}的工具有关。我做了以下事情:

localparam all_ones = {PARAM2{1'b1}};
covergroup my_covergroup_cg  (input string name);
      enable_reg_c .... // rest of code

并且我将别名传递到我的illegal_bins

illegal_bins il1 = (binsof (feature_active_reg_cp) intersect {all_ones});

干杯,

© www.soinside.com 2019 - 2024. All rights reserved.