问题描述
我有一个数组en_abist_ov[0:12]
。每次我对一个Covergroup进行采样时,我都想查看是否设置了特定元素en_abist_ov[i]
。
所以我想为数组的每个元素创建一个coverpoint。
预先感谢
解决方法
您可以在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],cg[i].get_inst_coverage);
$display("cg[0].get_inst_coverage= %f",cg[0].get_coverage);
end
endmodule