在systemverilog中没有`if compiler指令。所以以下几行不正确:
`define BITS 16
reg[`BITS-1:0] my_reg;
...
`if `BITS > 10
my_reg[31] = 1'b0;
endif
...
没有`如果有警告/错误。
我该如何解决或解决此问题?
答案 0 :(得分:3)
您可以使用程序if
声明
if (`BITS > 10)
my_reg[31] = 1'b0;
并且编译器/合成器将使用常量表达式优化分支语句;意味着if
语句不会创建额外的逻辑。
要绕过超出范围的消息,您需要一个更复杂的表达式(仍然是常量)
my_reg[(`BITS>31) ? 31 : 0] = 1'b0;
答案 1 :(得分:0)
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
。