在使用modelsim进行前仿真时,为了便于操作和节省时间,可以使用脚本的方式自动执行整个仿真过程,并自动生成覆盖率报告文件等。
需要几个文件:
1.源文件(设计文件,design under test/DUT)
2.testbench文件(激励文件,产生一系列激励用于测试源文件)
3.*.do文件 (用于执行仿真过程、指定生成报告的存放路径等)
4.*.tcl文件(用于设置仿真相关的设置)
举例如下:
1. dut.do文件:
do dut_tb_logic.tcl
vcover merge ../testbench/dut_ucdb dut_tb_ucdb
vcover report -output ../testbench/dut_report ../testbench/dut_ucdb
write transcript ../testbench/dut_transcript.txt
解释:dut_tb_logic.tcl为需要执行的tcl语言文件;‘/testbench’表示存放报告等文件的路径名
2. dut_tb.tcl文件举例:
# Modelsim-Tcl script to run the DUT
#------------------------------------------------------------------------
# Make work directory
#------------------------------------------------------------------------
if {[file exists work]} {
file delete -force work
vlib work
puts "Successfully Created work directory"
} else {
vlib work
puts "Successfully Created work directory"
}
#------------------------------------------------------------------------
# Local RTL files
#------------------------------------------------------------------------
vcom -work work -93 ../RTL/dut1.vhd -cover bcesxf
vcom -work work -93 ../RTL/dut2.vhd -cover bcesxf
vcom -work work -93 ../RTL/dut3.vhd -cover bcesxf
vcom -work work -93 ../RTL/dut4.vhd -cover bcesxf
vcom -work work -93 ../RTL/dut.vhd -cover bcesxf
#------------------------------------------------------------------------
# Local Testbench Components and stimuli
#------------------------------------------------------------------------
vcom -work work -93 ../testbench/dut_tb.vhd -cover bcesxf
# echo '*********** Set Test Case Parameters: *********************'
# echo '*********** $1
# echo '*********** $2 <$RANDOM> *************'
#------------------------------------------------------------------------
# Load and Simulate the testbench
# The following Libraries are precompiled libraries provided in
# Modelsim Xilinx Edition
#------------------------------------------------------------------------
vsim -t ps -coverage work.dut_tb
log -r /*
#------------------------------------------------------------------------
# Add Waves
#------------------------------------------------------------------------
add wave -r sim:/dut_tb/uut/*
add wave -r sim:/dut_tb/*
#------------------------------------------------------------------------
# Perform Simulation
#------------------------------------------------------------------------
run -all
coverage report -file ../testbench/dut_tb_report.txt
coverage save ../testbench/dut_tb_ucdb
注解:
1. 带#的行为注释行。
2. vcom -work work -93 ../RTL/dut1.vhd -cover bcesxf此行中的/RTL与do文件中的/testbench都处于同一目录下,其中/RTL用于存放源文件,文件夹的名字自定义即可。
-cover bcesxf字段表示覆盖率统计的几项指标,其具体解释如下
Each character in bcesxf identifies a type of coverage statistic: "b" indicates branch, "c" indicates condition, "e" indicates expression, "s" indicates statement, "t" indicates 2-transition toggle, "x" indicates extended 6-transition toggle coverage (t and x are mutually exclusive), and “f” indicates Finite State Machine coverage.
-93字段的含义是:
Because accelerated subprograms require attributes that are available only under the 1993 standard, many of the libraries are built using vcom with the -93 option.
3. vcom -work work -93 ../testbench/dut_tb.vhd -cover bcesxf 此行是对testbench进行覆盖率统计,统计指标为bcesxf
4. vsim -t ps -coverage work.dut_tb 此行是指定仿真精度,此处为ps级,也可以定义为100ps或者ns等,详细可以见modelsim中下拉菜单选择,其中default表示ns级精度。
5. add wave -r sim:/dut_tb/uut/*
add wave -r sim:/dut_tb/*
这两行是表示将uut及testbench中的所有信号全部加入波形,以便查看。其中uut是在testbench中实例化dut.vhd端口时的名字。
6. run -all 表示一直跑仿真,此处也可以指定自定义的仿真时间长度。
7. coverage report -file ../testbench/dut_tb_report.txt
coverage save ../testbench/dut_tb_ucdb
此处两行是指生产报告文件及库文件,其存放目录为/testbench
当设计好testbench并建好相应的do文件和Tcl文件之后,就可以在modelsim中跑仿真了。方法是打开modelsim-file-change directory,然后指定至存放do文件和Tcl文件的文件夹,即本例中的/testbench,然后在Transcript中键入 do dut.do即可自动执行仿真过程。
另外一个偷懒的办法是自己建一个*.bat批处理文件,这样就不用打开modelsim,直接双击这个批处理文件就可以自动化执行前仿真了。