SystemVerilog Coverage:为枚举的每个元素创建一个 bin
SystemVerilog Coverage: Create a bin for each element of an enum
假设我有一个包含有效命令或操作码列表的枚举。
有没有办法为枚举的每个元素创建一个 bin?
class command_coverage;
enum {SEQ_WRITE_16_BIT = 32'hBEEFFOOD, SEQ_READ_16_BIT = 32'hFACEFACE,
... } my_valid_commands
covergroup cg();
command_cp : coverpoint cmd {
bins valid_commands[] = each element of enum;
}
endgroup
...
endclass
我试过类似的方法:
bins valid_commands[] = my_valid_commands;
或
bins valid_commands[] = {[0:$] inside my_valid_commands};
但它并没有如我所愿。
可以做到:
command_cp : coverpoint my_valid_commands {
bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};
first
和 last
是枚举的 方法 ,return 分别是第一个和最后一个值。然后将它们用作范围的一部分。
这是 Mentor Questa 的显示(其他模拟器可用 - 我的电脑上安装了 Questa):
这是一个MCVE:
https://www.edaplayground.com/x/5rUu
module enum_cg;
enum {SEQ_WRITE_16_BIT, SEQ_READ_16_BIT} my_valid_commands;
covergroup cg();
command_cp : coverpoint my_valid_commands {
bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};
}
endgroup
cg cg0 = new;
initial begin
my_valid_commands = SEQ_WRITE_16_BIT;
cg0.sample;
end
endmodule
假设我有一个包含有效命令或操作码列表的枚举。 有没有办法为枚举的每个元素创建一个 bin?
class command_coverage;
enum {SEQ_WRITE_16_BIT = 32'hBEEFFOOD, SEQ_READ_16_BIT = 32'hFACEFACE,
... } my_valid_commands
covergroup cg();
command_cp : coverpoint cmd {
bins valid_commands[] = each element of enum;
}
endgroup
...
endclass
我试过类似的方法:
bins valid_commands[] = my_valid_commands;
或
bins valid_commands[] = {[0:$] inside my_valid_commands};
但它并没有如我所愿。
可以做到:
command_cp : coverpoint my_valid_commands {
bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};
first
和 last
是枚举的 方法 ,return 分别是第一个和最后一个值。然后将它们用作范围的一部分。
这是 Mentor Questa 的显示(其他模拟器可用 - 我的电脑上安装了 Questa):
这是一个MCVE:
https://www.edaplayground.com/x/5rUu
module enum_cg;
enum {SEQ_WRITE_16_BIT, SEQ_READ_16_BIT} my_valid_commands;
covergroup cg();
command_cp : coverpoint my_valid_commands {
bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};
}
endgroup
cg cg0 = new;
initial begin
my_valid_commands = SEQ_WRITE_16_BIT;
cg0.sample;
end
endmodule