0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

`includeで読み込むファイルの指定にdefineマクロを使う

Last updated at Posted at 2025-01-26

Verilog/SystemVerilogの`includeで読み込むファイルをコンパイル時のdefine指定で変えられないかなぁと思っていろいろ調べたりやってみたのでメモとして残す。

1 " "なしでファイルパスをそのままマクロに指定

+define+FILE_PATH=../AAA/BBB/XXX.svh

1-1 `includeの" "内に直接マクロを記述

`include "`FILE_PATH"

まずこれはダメだった。`FLIE_PATH自体がそのまんま文字列として認識されるみたい。

とか見ると" "内でマクロを展開するには"の前に`を付ける必要があるみたい。

1-2 "の前に`を追加

`include `"`FILE_PATH`"

フリーのシミュレータDSim DesktopVivado Simulator (Xsim)ではこの方法でO.Kであったが、なんと某商用シミュレータVではダメだった。ふつう逆だろ!まあいいや。

1-3 " "を追加した別マクロを定義

`define INC_STRING `"`FILE_PATH`"
`include `INC_STRING

`FILE_PATH" "を追加したものを別マクロ`INC_STRINGとして新たに定義。それを`includeで使う。
これだとDSimでもXsimでも某商用シミュレータVでもO.Kであった。

2 " "込みでファイルパスをマクロに定義

そもそも" "込みのマクロの`INC_STRING自体をシミュレータオプションの+defineで定義すれば良いのではないか。それを同様に`includeのパス指定に渡す。

`include `INC_STRING

2-1 +defineでそのまま"を使う

+define+INC_STRING="../AAA/BBB/XXX.svh"

これはN.G。"自体は無視されて" "の中身のみがマクロに定義されてしまう。

2-2 シングルクオーテーション(')で囲む

+define+INC_STRING='"../AAA/BBB/XXX.svh"'

これならO.K。
以下を参考記事。

2-3 "\でエスケープ

+define+INC_STRING=\"../AAA/BBB/XXX.svh\"

これでもO.Kだった。
以下を参考記事。

実行環境例

以上を踏まえて、以下に(dsimでの)実行環境例を示す。
シミュレータオプションの+defineで`FILE_PATH`INC_STRINGのどちらでも指定できるよう両対応にした。

tb.sv
`ifdef FILE_PATH
  //`include "`FILE_PATH"    // N.G
  //`include `"`FILE_PATH`"  // O.K or N.G
    `define INC_STRING `"`FILE_PATH`"
`endif

module tb;

//`include "./inc.svh"

  initial  begin
`ifdef INC_STRING
    `include `INC_STRING
`else
    $display("No INC_STRING defined");
`endif

    $finish();
  end

endmodule
./inc.svh
    $display("Hello World, FILE_PATH = %s", `INC_STRING);
Makefile
SIM := dsim

path :
	$(SIM) tb.sv +define+FILE_PATH=./inc.svh

#str : # N.G 
#	$(SIM) tb.sv +define+INC_STRING="./inc.svh"

str1 : 
	$(SIM) tb.sv +define+INC_STRING='"./inc.svh"'

str2 : 
	d$(SIM) tb.sv +define+INC_STRING=\"./inc.svh\"

noinc :
	$(SIM) tb.sv

FILE_PATH指定で実行
> make path

INC_STRING指定で実行
> make str1
or
> make str2

includeなしで実行
> make noinc

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?