目的:
Vivado のシミュレーション をコマンドラインで 実行する環境を作る 。
(
Icarus Verilog と同様な環境でシミュレーションできるようにする )
概要:
Ivarus Verilog 用に作成した環境と同様の環境とする。
ディレクトリ構成
以下の様にディレクトリを分ける。
rtl : 論理合成可能な RTL を格納する
testbench : テストベンチ を格納する
testpattern : テストパターン を格納する。
log : コンパイル,シミュレーション時の LOG を格納する。
xsim_dir : コンパイル時に生成される作業ディレクトリ。
wave : シミュレーション結果の波形ファイルを格納する。
コンパイル, シミュレーション実行
カレントディレクトリに Makefile、vlog.prj を作成し、
make TESTNAME=test_1
の様に テストパターンを指定してコンパイル、シミュレーションを実行できる様にする。
コンパイル、シミュレーション時に実行 LOG を log ディレクトリ下に生成/移動する。
シミュレーション結果の波形は、wave ディレクトリに 移動した <TESTNAME>.vcd を gtkwave 等で確認する。
vlog.prj は、verilog のファイル構成を記したファイル。
コンパイル、シミュレーションは vivado のプロジェクトは作成せず、コマンド実行のみで行う。
詳細:
ディレクトリ構成は、概要の通り。
サンプルの環境は
こちら を参照。(rtl, testbench の内容についての説明は省略)
サンプルは パルス生成回路。
テストパターンは test_1. sv と test_2.sv
make TESTNAME=test_1
make TESTNAME=test_2
でそれぞれ異なるパルス出力 (output_pls) が発生。
尚、vivado のインストールは、
Windows : WSL に Vivado をインストールする
を参照。
テストベンチ構成
テストパターン(項目) に依存しない共通部分を testbench.sv に記述。
テストパターン(項目)毎の記述は、パターンごとにファイルを作成し、testpattern ディレクトリに格納する。
make 実行時に、実行するテストパターン(項目)のファイルを testbench ディレクトリにtp.sv のファイル名でコピーし、testbench.sv から include で 呼び出す。
vlog.prj 例
vlog.prj は、以下を記述する。
verilog <work_library> <file_names>...
sv <work_library> <file_names> ...
verilog xil_defaultlib \
"./rtl/plsgen.v" \
"./rtl/D_CNT.v" \
sv xil_defaultlib \
"./testbench/testbench.sv" \
"./testbench/param.sv" \
verilog xil_defaultlib "/tools/Xilinx/Vivado/2020.1/data/verilog/src/glbl.v"
* /tools/Xilinx/ は、Vivado をインストールしたディレクトリ
vlog.prj にvhdl のソースを記述する。
verilog のファイルは verilog に、SystemVerilog のファイルは sv に記述する。
また、glbl.v を記述する必要がある。
Makefile 例
# ==============================================
TESTNAME = default
# -- SHELL setting -------------------------
SHELL=/bin/bash -o pipefail
# -- dir setting ---------------------------
TBDIR = ./testbench
TPDIR = ./testpattern
WAVE = ./wave
LOG = ./log
# -- compile option ------------------------
VLOGOPT = -log $(LOG)/xvlog.log
VLOGOPT += -prj vlog.prj
ELABOPT = -timescale 1ns/100ps
ELABOPT += -log $(LOG)/xelab.log
ELABOPT += -debug typical
ELABOPT += -L xil_defaultlib
# -- simulation option ---------------------
SIMOPT = -log $(LOG)/simulate.log
SIMOPT += -R
# -- wave file name ------------------------
VCD_NAME = wave.vcd
# -- Description ---------------------------
all : clean comp sim
comp :
# --- testpattern copy to tp.sv ----------------------------
ifeq ($(TESTNAME),default)
echo >| $(TBDIR)/tp.sv
else
cp $(TPDIR)/$(TESTNAME).sv $(TBDIR)/tp.sv
endif
# --- analysis ---------------------------------------------
xvlog $(VLOGOPT) 2>&1 | tee $(LOG)/comp.log
# --- elaborate --------------------------------------------
xelab $(ELABOPT) xil_defaultlib xil_defaultlib.testbench -s $(TESTNAME)
# --- move log file ----------------------------------------
mv *.pb $(LOG)/. 2> /dev/null ; true
mv webtalk.* $(LOG)/. 2> /dev/null ; true
sim :
# --- simulation -------------------------------------------
xsim $(SIMOPT) $(TESTNAME)
# --- move log file ----------------------------------------
mv *.log $(LOG)/. 2> /dev/null ; true
mv *.jou $(LOG)/. 2> /dev/null ; true
# --- move wave file ----------------------------------------
mv *.wdb $(WAVE)/. 2> /dev/null ; true
mv $(VCD_NAME ) $(WAVE)/$(TESTNAME).vcd
clean :
rm $(LOG)/* 2> /dev/null ; true
Make file 内容
TESTNAME : テストパターンファイル名の拡張子を除いた部分。初期値として "default" を設定。
SHELL setting :Shell 設定。パイプ中でのエラーコードを返す様にする。
dir setting : 各ディレクトリ名を設定。
compile option : コンパイルオプション (xvlog, xelab のオプション )を指定する。simulation option : シミュレーションオプション (xsim のオプション)を指定する。
wave file name : 波形ファイル名。(テストベンチに記述しているファイル名)Description : make での 実行内容。
実行方法
make TESTNAME=<テストパターンファイル名(拡張子を除く)
で、テストパターンファイルに記述したテスト内容で コンパイル、シミュレーションし、gtkwave を起動する。
実行は、
- log ファイル を消去する。
- コンパイルを以下の順に行う。
- テストパターン ファイルを tp.sv のファイル名で testbench ディレクトリにコピーする。
TESTNAME を指定しない場合( make のみで実行 ) は、空の tp.sv を作成する。
- コンパイル (xvlog) を実行する。
- エラボレーション (xelab) を実行する。
- ログファイルを LOGディレクトリに移動する。
- シミュレーション (xsim) を実行する。
実行後、ログファイルを ログディレクディレクトリに移動する。
また、結果 (波形ファイル wave.vcd) を wave ディレクトリ下に <テストパターン名>.vcd として移動する。
の順に行う。
波形の確認は gtkwave で行う。wave ディレクトリで、
gtkwave <テストパターン名>.vcd