systemverilog的解决方法没有`if compiler指令

时间:2017-01-30 14:52:47

标签: if-statement verilog system-verilog compiler-directives

在systemverilog中没有`if compiler指令。所以以下几行不正确:

`define BITS 16

reg[`BITS-1:0] my_reg;

...
`if `BITS > 10
   my_reg[31] = 1'b0;
endif
...

没有`如果有警告/错误。

我该如何解决或解决此问题?

2 个答案:

答案 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