【发布时间】:2020-09-22 10:12:31
【问题描述】:
我有一个数组en_abist_ov[0:12]。每次我对一个封面组进行采样时,我都想看看是否设置了特定元素 en_abist_ov[i]。
所以我想为数组的每个元素创建一个覆盖点。
提前致谢
【问题讨论】:
标签: code-coverage system-verilog uvm
我有一个数组en_abist_ov[0:12]。每次我对一个封面组进行采样时,我都想看看是否设置了特定元素 en_abist_ov[i]。
所以我想为数组的每个元素创建一个覆盖点。
提前致谢
【问题讨论】:
标签: code-coverage system-verilog uvm
您可以在 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
【讨论】: