k0b0's record.

Computer Engineering, Arts and Books

Verilog/SystemVerilogの条件コンパイル

条件コンパイル `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