在SystemVerilog中,是否可以将宏索引为长层次引用?即。
`define CONDENSED top.DUT.mod.sub_module.register_map
然后执行以下操作:
`CONDENSED.reg1[0]
答案 0 :(得分:1)
宏只是简单的文本替换。除了令牌(字符串,数字文字,标识符,注释)之外,执行替代的文本预处理器对SystemVerilog语法一无所知。只要生成的文本是合法的SystemVerilog文本,您就可以使用任何宏。 (并注意关于拆分构成令牌的文本的规则)。
答案 1 :(得分:1)
您甚至可以在宏中包含索引:
`define MY_SELECTION(index0, index1) c0_a[index0].c1_a[index1].a
class c1;
int a;
endclass
class c0;
c1 c1_a[10];
function new();
foreach(c1_a[idx]) begin
c1_a[idx] = new();
end
endfunction
endclass
module top;
initial begin
automatic c0 c0_a[10];
foreach(c0_a[idx]) begin
c0_a[idx] = new();
end
`MY_SELECTION(5, 6) = 8;
$display("my_value: %0d", `MY_SELECTION(5, 6));
`MY_SELECTION(5, 6)[0] = 1;
$display("my_value: %0d", `MY_SELECTION(5, 6));
end
endmodule
此代码的输出为:
my_value: 8
my_value: 9
您可以在EDA Playground上运行此示例 - https://www.edaplayground.com/x/4EZZ