Vivado Simulatorにおいて、XilinxのIPを使ってシミュレーションをしようとしたところ、Primitiveなモジュールが存在しないと怒られてしまった。
ERROR: [VRFC 10-2063] Module <GND> not found while processing module instance <GND> [... funcsim.v:2047]
GND GND (.G(\<const0> ));
そういえば、Vivado Simulatorにおいてfsblのようなモジュール群を読み込むためにはどうしたらよいのかと思い調査したところ、ちゃんとVivadoにもunisimのようなライブラリ群が存在していた。
っていうか、以下のFAQを見る限り、これらのライブラリは別に指定しなくても読み込まれるという理解だったんだけどな。
AR# 64052 - Vivado シミュレーション ライブラリの使用 - UNISIM ライブラリ
Vivado 2015.4ならば、以下のVerilogファイルがそれに相当するようだ。
c:/Xilinx/Vivado/2015.4/data/verilog/src/unisim_comp.v
とりあえずfilelistにこのファイルを追加すると、無事にコンパイルされるようになった。
それともう一つ、このunisim_comp.vにはタイムスケールの指定が無いため、コンパイルに失敗するケースがある。
ERROR: [XSIM 43-4099] "c:/Xilinx/Vivado/2015.4/data/verilog/src/unisim_comp.v" Line 3236. Module GND doesn't have a timescale but at least one module in design has a timescale.
これもオプションを調査して行くと、xelabの実行時にタイムスケールを指定すれば良さそうだ。
COMMAND xelab -s run_tb_mag_top work.tb_mag_top --timescale 1ns/100ps
これで、コンパイルとシミュレーションが無事に通るようになった。