Verilog `ifdef отвечает на переменные окружения? - PullRequest
0 голосов
/ 09 февраля 2019

Если у меня есть следующий код Verilog:

//test.v

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

Могу ли я "управлять" условием из командной строки, используя стандартный синтаксис определения переменной среды?Например, может ли это привести к выполнению {code block 1}?:

$ V1=1 <simulator> test.v

1 Ответ

0 голосов
/ 09 февраля 2019

Оператор 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!
...