Vengineerの妄想

人生を妄想しています。

Xilinx xsimを調べる(その7)

はじめに

昨日は、xelab コマンドで エラボレーションで生成するファイルをみてみました。今日は、xelab コマンドでシミュレーションを実行していきます。

xelab コマンドでシミュレーションを実行

xelab コマンドに -R オプションを指定すると、エラボレーション後、シミュレーションを実行をします。

xelab top -R
Vivado Simulator v2021.2
Copyright 1986-1999, 2001-2021 Xilinx, Inc. All Rights Reserved.
Running: /mnt/usb/XILINX/Vivado/2021.2/bin/unwrapped/lnx64.o/xelab top -R

途中略

シミュレーションを実行が始まると下記のメッセージが表示されました。最初に、source xsim.dir/work.top/xsim_script.tcl にて、デフォルトのtclファイルを読み込んでいます。エラボレーションまででは、この tcl ファイルはありませんでした。

****** xsim v2021.2 (64-bit)
  **** SW Build 3367213 on Tue Oct 19 02:47:39 MDT 2021
  **** IP Build 3369179 on Thu Oct 21 08:25:16 MDT 2021
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.

source xsim.dir/work.top/xsim_script.tcl

xsim.dir/work.top/xsim_script.tclの中をみてみましょう。

xsim コマンドを使って、シミュレーションしているようです。{work.top} は、シミュレーションするときの Snapshot name (トップ階層)。-autoloadwcfg は、xsim の内部コンフィギュレーションをデフォルトとするっぽい。-runall で終了状態なるまでシミュレーションする。

cat xsim.dir/work.top/xsim_script.tcl
xsim {work.top} -autoloadwcfg -runall

Time resolution は、1ps を表示後、run -all でシミュレーションを開始します。$finish システムタスクにて、シミュレーションが終了します。$finish システムタスクの引数として、2 を指定しているので、$finish 後の後のメッセージが表示されます。その後、exit コマンドにて終了します。

# xsim {work.top} -autoloadwcfg -runall
Time resolution is 1 ps
run -all
$finish called at time : 10 us : File "/XXX/top.sv" Line 19
Memory in use : 107472 KB (peak memory: 173008 KB)     CPU usage : 50 ms
exit
INFO: [Common 17-206] Exiting xsim at Sun Jun 12 13:40:57 2022...

$finish システムタスクに引数を何もしていしないと、下記のようにメッセージが出ません。

$finish called at time : 10 us : File "/XXX/top.sv" Line 19
exit
INFO: [Common 17-206] Exiting xsim at Sun Jun 12 13:43:20 2022...

xelab -R コマンドにて生成されたファイル

  • xsimSettings.ini
  • xsim_script.tcl
  • xsimcrash.log
  • xsimkernel.log

xsimSettings.ini と xsim_script.tcl と xsimkernel.log は、ASCIIファイル。xsimcrash.log は空ファイル。

file xsim.dir/work.top/*
xsim.dir/work.top/Compile_Options.txt: ASCII text
xsim.dir/work.top/xsim.dbg:            data
xsim.dir/work.top/xsim.mem:            data
xsim.dir/work.top/xsim.reloc:          data
xsim.dir/work.top/xsim.rtti:           data
xsim.dir/work.top/xsim.svtype:         data
xsim.dir/work.top/xsim.type:           data
xsim.dir/work.top/xsim.xdbg:           data
xsim.dir/work.top/xsimSettings.ini:    ASCII text
xsim.dir/work.top/xsim_script.tcl:     ASCII text
xsim.dir/work.top/xsimcrash.log:       empty
xsim.dir/work.top/xsimk:               ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=39b9a56e92cbcac6b19e8792a99f0ba54104aa79, for GNU/Linux 3.2.0, not stripped
xsim.dir/work.top/xsimkernel.log:      ASCII text

xsim_script.tcl は既に説明しました。xsimSettings.ini の中は次ようになっています。TIME_UNIT=ns になっています。top.sv の中で timeunit 1ns; としているからでしょうね。

cat  xsim.dir/work.top/xsimSettings.ini
[General]
ARRAY_DISPLAY_LIMIT=512
RADIX=hex
TIME_UNIT=ns
TRACE_LIMIT=2147483647
VHDL_ENTITY_SCOPE_FILTER=true
VHDL_PACKAGE_SCOPE_FILTER=false
VHDL_BLOCK_SCOPE_FILTER=true
VHDL_PROCESS_SCOPE_FILTER=false
VHDL_PROCEDURE_SCOPE_FILTER=false
VERILOG_MODULE_SCOPE_FILTER=true
VERILOG_PACKAGE_SCOPE_FILTER=false
VERILOG_BLOCK_SCOPE_FILTER=false
VERILOG_TASK_SCOPE_FILTER=false
VERILOG_PROCESS_SCOPE_FILTER=false
INPUT_OBJECT_FILTER=true
OUTPUT_OBJECT_FILTER=true
INOUT_OBJECT_FILTER=true
INTERNAL_OBJECT_FILTER=true
CONSTANT_OBJECT_FILTER=true
VARIABLE_OBJECT_FILTER=true
INPUT_PROTOINST_FILTER=true
OUTPUT_PROTOINST_FILTER=true
INOUT_PROTOINST_FILTER=true
INTERNAL_PROTOINST_FILTER=true
CONSTANT_PROTOINST_FILTER=true
VARIABLE_PROTOINST_FILTER=true
SCOPE_NAME_COLUMN_WIDTH=0
SCOPE_DESIGN_UNIT_COLUMN_WIDTH=0
SCOPE_BLOCK_TYPE_COLUMN_WIDTH=0
OBJECT_NAME_COLUMN_WIDTH=0
OBJECT_VALUE_COLUMN_WIDTH=0
OBJECT_DATA_TYPE_COLUMN_WIDTH=0
PROCESS_NAME_COLUMN_WIDTH=0
PROCESS_TYPE_COLUMN_WIDTH=0
FRAME_INDEX_COLUMN_WIDTH=0
FRAME_NAME_COLUMN_WIDTH=0
FRAME_FILE_NAME_COLUMN_WIDTH=0
FRAME_LINE_NUM_COLUMN_WIDTH=0
LOCAL_NAME_COLUMN_WIDTH=0
LOCAL_VALUE_COLUMN_WIDTH=0
LOCAL_DATA_TYPE_COLUMN_WIDTH=0
PROTO_NAME_COLUMN_WIDTH=0
PROTO_VALUE_COLUMN_WIDTH=0
INPUT_LOCAL_FILTER=1
OUTPUT_LOCAL_FILTER=1
INOUT_LOCAL_FILTER=1
INTERNAL_LOCAL_FILTER=1
CONSTANT_LOCAL_FILTER=1
VARIABLE_LOCAL_FILTER=1

xsimkernel.log の中を覗いてみると、次のようになっています。シミュレーション時のログファイルっぽいです。メモリの使用量とCPUの実行時間が表示されています。

cat xsim.dir/work.top/xsimkernel.log
Running: xsim.dir/work.top/xsimk -simmode gui -wdb work.top.wdb -simrunnum 0 -socket 54555
Design successfully loaded
Design Loading Memory Usage: 22396 KB (Peak: 22396 KB)
Design Loading CPU Usage: 50 ms
Simulation completed
Simulation Memory Usage: 96128 KB (Peak: 161664 KB)
Simulation CPU Usage: 50 ms

xsim.dir/work.top/xsimk にパラメータを指定しています。このコマンドを実行してみました。エラーになるので、まだ、何か?必要そうです。

LD_LIBRARY_PATH=/mnt/usb/XILINX/Vivado/2021.2/lib/lnx64.o xsim.dir/work.top/xsimk -simmode gui -wdb work.top.wdb -simrunnum 0 -socket 54555
FATAL_ERROR: PrivateChannel: Error connecting to server socket

波形ダンプ

xelab コマンドのデフォルトでは、波形ダンプはしません。--debug wave を追加することで波形ダンプを行います。

xelab top --debug wave -R

work.top.wdb

が生成されます。この波形データは、xsim コマンドにて表示できます。

xsim -gui work.top.wdb

****** xsim v2021.2 (64-bit)
  **** SW Build 3367213 on Tue Oct 19 02:47:39 MDT 2021
  **** IP Build 3369179 on Thu Oct 21 08:25:16 MDT 2021
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.

start_gui

おわりに

今日は、xelab コマンドでシミュレーションの実行までをみてみました。