Vivado XSIMでCUIによる統合シミュレーションの方法


FPGAに実装するシステム全体のシミュレーションを行ってみましょう。

テストベンチとして kite_test.v を作成し、kite_top モジュールを呼び出します(KITEプロセッサ単体のテストのために使用したkite_test.vとは内容が異なります)。KITEプロセッサは、リセット後にメモリに書き込まれたプログラムを実行開始します。ですから、テストベンチからは 100MHzのCLK と RST のみを連続して与えます。
--- kite_test.v ---
`timescale 1ns/1ps
module kite_test;

reg        clk, rstn;
wire	   hdmi_tx_clk_p, hdmi_tx_clk_n;
wire [2:0] hdmi_tx_p,     hdmi_tx_n;

initial
begin
  #16000000;
  $finish;
end

initial
begin
  clk = 0;
  while( 1 )
     clk = #5 ~clk;
end

initial
begin
  rstn = 1;
  rstn = #5  0;
  rstn = #30 1;
end

kite_top kite_top (
	 .clk(clk),		        // Clock
	 .cpu_resetn(rstn),	        // Reset (Negative)
	 .hdmi_tx_clk_p(hdmi_tx_clk_n), // HDMI out clock (P)
	 .hdmi_tx_clk_n(hdmi_tx_clk_n), // HDMI out clock (N)
	 .hdmi_tx_p(hdmi_tx_p),	        // HDMI out data (P)
	 .hdmi_tx_n(hdmi_tx_n)	        // HDMI out data (N)
);

endmodule


統合シミュレーションでは、上記,FPGA内部でクロック生成を行うクロックモ ジュールやDVI信号を生成するrgb2dviモジュールを含めてシミュレーションし ます.

今回はXilinx社Vivadoのシミュレータである XSIM を CUI で使用します.これ は,HDMI信号を作成する際に使用するrgb2dviモジュールがVHDLで記述されており,Verilig HDLとVHDLが混在したミックスドシミュレーションを行う必要があるため,こ れまで使用してきた iverilog が使用できないからです.
XSIMでシミュレーションを行う場合,Verilog HDLコードは xvlog コマンドで, VHDLコードは xvhdl コマンドでコンパイルし,さらにxelab コマンドによりシミュレータxsimにかけるためのスナップショットファイルを作成する必要がある.また,クロック モジュールではXilinx社FPGAのプリミティブ(IBUF, BUFG, MMCME2_ADV)を使用 しており,これらもライブラリとして使用しなければならない.
個別にコンパイルコマンドを実行するのは大変であるので,Makefileを準備した.
Xilinx社VivadoシミュレータXSIM向けMakefile

これにより,make コマンドを実行するのみでシミュレーションに必要なコンパイルをすべて行う. 以下のように,環境設定を行った後 make コマンドを実行する.
  source ~kuga/setup/vivado2019.2
  make

シミュレーションは以下のように実行する.(赤字が手入力した部分)
$ xsim kite_test

****** xsim v2019.2 (64-bit)
  **** SW Build 2708876 on Wed Nov  6 21:39:14 MST 2019
  **** IP Build 2700528 on Thu Nov  7 00:09:20 MST 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

source xsim.dir/kite_test/xsim_script.tcl
# xsim {kite_test} -autoloadwcfg
Vivado Simulator 2019.2
Time resolution is 1 ps
xsim% open_vcd
xsim% log_vcd [ get_object /kite_test/kite_top/* ]
xsim% run 100us
xsim% close_vcd
xsim% exit
exit
$

これにより,"dump.vcd" という名前の vcd ファイルが作成される. これを,gtkwaveの波形ビューアで表示させればよい. 
なお,デバッグのために上記コマンドを何度も入力するのが面倒な場合は,以下を"kite_test.tcl"に保存しておき,
open_vcd
log_vcd [ get_object /kite_test/kite_top/* ]
run 100us
close_vcd
exit

以下のように,tclスクリプトを自動実行するようにすればよい.
  xsim kite_test -t kite_test.tcl

gtkwave を用いて "dump.vcd" に保存された波形情報を表示すると以下のような画面を見ることができる.



また,以下の波形から文字画面表示についても,問題なく動作していることが分かる.
※ HDMIのクロック出力である hdmi_tx_clk_n と hdmi_tx_clk_p は不定値を出しておりシミュレートできていないが, FPGAへ実装を行った場合でも問題なく出力しているようである.




次は、最後にFPGAへの実装処理および実機での動作確認を行います。
| Back |