条件コンパイル `ifdef 〜 `else
Verilog/SystemVerilogでは`ifdef 〜 `else文を記述することによってプログラムを条件コンパイルすることができる。下記に条件コンパイルの書式を示す。str1が定義済みなら記述1をコンパイルし、str2が定義済みなら記述2をコンパイルする。いずれも定義されていなければ記述3をコンパイルする。
条件コンパイルの書式
`ifdef str1 記述1 `elsif str2 記述2 `else 記述3 `endif
条件コンパイルの記述例
以下に条件コンパイルの記述例を示す。このプログラムでは、文字列"INV_TRUE"が定義されていれば、DFFの出力にインバータが接続された回路記述がコンパイルされる。文字列"INV_TRUE"が定義されていなければ、通常のDFFの回路記述がコンパイルされる。下記の記述では"INV_TRUE"が定義されているので、DFFの出力にインバータが接続された回路記述がコンパイルされる。
`define INV_TRUE; module ff_exp(input ck, reset, d, output reg q); /* DFFの出力にインバータが接続された回路記述 */ `ifdef INV_TRUE reg q0; always_ff @(negedge ck or negedge reset) begin if(!reset) q0 <= 1'b0; else q0 <= d; end assign q = ~q0; // Invert the output. /* 通常のDFFの回路記述 */ `else always_ff @(negedge ck or negedge reset) begin if(!reset) q <= 1'b0; else q <= d; end `endif endmodule