Verilog`ifdef是否响应环境变量?

时间:2019-02-08 23:08:12

标签: macros system-verilog conditional-compilation

如果我具有以下Verilog代码:

//test.v

`ifdef V1
{code block 1}
`else
{code block 2}
`endif

我可以使用标准环境变量定义语法从命令行“控制”条件吗? 例如,这会导致{代码块1}执行吗?:

$ V1=1 <simulator> test.v

1 个答案:

答案 0 :(得分:1)

ifdef语句是一个编译器指令,与C或C ++中的预处理器指令非常相似,因此您可以使用-D$var标志以类似的方式将它们通过命令行传递。

假设我们有以下模块:

// test.v

module hello;
  initial 
    begin
`ifdef V1
      $display("V1 defined!");
`else
      $display("V1 not defined!");
`endif
      $finish ;
    end
endmodule

然后使用例如IcarusVerilog,您可以使用以下命令在命令行上定义V1

terminal:~$ iverilog -DV1 -o test test.v
terminal:~$ vvp test
V1 defined!
terminal:~$ iverilog -o test test.v
terminal:~$ vvp test
V1 not defined!