在 systemverilog 中没有 `if 编译器指令。所以以下几行是不正确的:
`define BITS 16
reg[`BITS-1:0] my_reg;
...
`if `BITS > 10
my_reg[31] = 1'b0;
endif
...
没有`如果有警告/错误。
我该如何解决或解决这个问题?
在 systemverilog 中没有 `if 编译器指令。所以以下几行是不正确的:
`define BITS 16
reg[`BITS-1:0] my_reg;
...
`if `BITS > 10
my_reg[31] = 1'b0;
endif
...
没有`如果有警告/错误。
我该如何解决或解决这个问题?
你可以一个程序if
声明
if (`BITS > 10)
my_reg[31] = 1'b0;
并且编译器/合成器将优化带有常量表达式的分支语句;if
这意味着该语句不会创建额外的逻辑。
要绕过越界消息,您需要一个更复杂的表达式(仍然是一个常量)
my_reg[(`BITS>31) ? 31 : 0] = 1'b0;
1800-2012 LRM,22.5.1:“指令 `define 创建一个用于文本替换的宏。” 例如。:
`define D(x,y) initial $display("start", x, y, "end");
`D( "msg1" , "msg2" ) // expands to 'initial $display("start", "msg1", "msg2", "end");'
对于数值参数,您应该使用parameter
/localparam
根据您的需要。