目的:
Vivado のシミュレーション をコマンドラインで 実行する環境を作る 。( Icarus Verilog と同様な環境でシミュレーションできるようにする )
概要:
Ivarus Verilog 用に作成した環境と同様の環境とする。ディレクトリ構成
以下の様にディレクトリを分ける。
rtl : 論理合成可能な RTL を格納する
testbench : テストベンチ を格納する
testpattern : テストパターン を格納する。
log : コンパイル,シミュレーション時の LOG を格納する。
xsim_dir : コンパイル時に生成される作業ディレクトリ。
wave : シミュレーション結果の波形ファイルを格納する。
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ディレクトリに移動する。
- テストパターン ファイルを tp.sv のファイル名で testbench ディレクトリにコピーする。
- シミュレーション (xsim) を実行する。
実行後、ログファイルを ログディレクディレクトリに移動する。
また、結果 (波形ファイル wave.vcd) を wave ディレクトリ下に <テストパターン名>.vcd として移動する。
波形の確認は gtkwave で行う。wave ディレクトリで、
gtkwave <テストパターン名>.vcd
0 件のコメント:
コメントを投稿