2020年8月14日金曜日

verilog : Vivado の コマンドラインでのシミュレーション環境

目的:

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 を起動する。
実行は、
  1. log ファイル を消去する。
  2. コンパイルを以下の順に行う。
    1. テストパターン ファイルを tp.sv のファイル名で testbench ディレクトリにコピーする。
      TESTNAME を指定しない場合( make のみで実行 ) は、空の tp.sv を作成する。
    2. コンパイル (xvlog) を実行する。
    3. エラボレーション (xelab) を実行する。
    4. ログファイルを LOGディレクトリに移動する。
  3. シミュレーション (xsim) を実行する。
    実行後、ログファイルを ログディレクディレクトリに移動する。
    また、結果 (波形ファイル wave.vcd) を wave ディレクトリ下に <テストパターン名>.vcd として移動する。
の順に行う。
波形の確認は gtkwave で行う。wave ディレクトリで、
gtkwave <テストパターン名>.vcd



0 件のコメント:

コメントを投稿