使用脚本配置ModelSim仿真
最后修改日期:2024/03/06
1. 问题
使用ModelSim建立Project仿真的方法并不困难,但是经常提示类似于:
Error: fail to open ...
这样的错误。ModelSim经常找不到compile之后的模块,不知道为什么。
此外,Project的方式反而会产生一堆乱七八糟的文件,这不便于管理。
2. 解决方法
2.1. ModelSim的启动、仿真
使用tcl脚本运行Modelsim,使用Windows .bat文件启动Modelsim。
根据[1]内容作了一些修改。tcl文件为:
# ========================< 清空软件残留信息 >==============================
# 退出之前仿真
quit -sim
# 清空信息
.main clear
# =========================< 建立工程并仿真 >===============================
# 建立新的工程库
vlib work
# 映射逻辑库到物理目录
vmap work work
set top_mod xxx
set top_tb ${top_mod}_tb
# 编译设计文件,注意路径
vlog ./../../../rtl/${top_mod}.v
# 编译仿真文件,注意路径
vlog ./../../${top_tb}.v
# 无优化simulation *** 请修改文件名 ***
vsim -novopt work.${top_tb}
# ============================< 加载波形 >=================================
# 如果已有波形配置文件,导入
do wave.do
# 清空信息
.main clear
# 跑完
run -all
以上脚本完成了:
- 建立一个库(这里就都用work库不做区分)
- 将文件导入对应库
- 编译文件(注意,tb中每层模块调用的verilog文件都要编译)
- 启动仿真
- 导入波形配置文件(如果是第一次就没有)
- 运行仿真(注意,在ModelSim环境下,使用
$stop
函数比$finish
函数好些)
再建立.bat文件为:
::打开Modelsim并执行do sim.tcl
vsim -do sim.tcl
这样,就只需要在cmd中运行.bat文件就能启动ModelSim并完成仿真。
如果是第一次仿真,在调好展示的信号后应当保存.do文件。
如果使用VS Code,可以在内部启动terminal,写完verilog就直接运行.bat文件,非常舒服。
2.2. ModelSim加载已有的仿真结果
前一个方法每次都是重新跑仿真并画出波形图,如果verilog和tb都没变,那仿真结果也没变,当然可以。
但是假如变了,就回不到之前的仿真结果了。
2.2.1. 保存波形数据
可以保存波形数据文件[2]为wlf文件。
ModelSim有一个特点,波形数据dump是不完备的(而VCS是完备的)。也就是说,如果你在仿真结束后才在波形图中加了一个信号去观测,那么结果是no data
,需要重新仿真一次才行。没有验证过上述保存的.wlf文件是不是完备的。
然后容易写出tcl:
# 退出之前仿真
quit -sim
# 清空信息
.main clear
set opendir xxx
# 导入波形数据
dataset open ./${opendir}/vsim.wlf
# 如果已有波形配置,导入
do ./${opendir}/wave.do
类似地,用.bat代入tcl文件,就可以让ModelSim自动启动,但没仿真,只是导入了保存的波形数据并展示。
2.3. 配置ModelSim编辑器为VS Code
参考配置其它编辑器[3]的做法,在ModelSim中输入如下的tcl命令:
proc external_editor {filename linenumber} {
exec "Code.exe" $filename :$linenumber &
}
然后输入以下tcl设置编辑器:
set PrefSource(altEditor) external_editor
如果需要修改,需要先解除绑定再重复以上步骤。如需恢复默认,直接解除绑定即可。
unset PrefSource(altEditor)
需要说明以下几点:
external_editor
只是一个变量名,可以是其它的字符串。"Code.exe"
就是VS Code可执行程序的名称。我之所以没有加目录是因为路径在系统变量$PATH
中。如果不在,考虑添加系统变量或使用完整路径名。$filename :$linenumber
理论上可以用VS Code打开对应文件并跳转到某一行。但实测只能打开文件,不能跳转行,用cmd试验得知:
应该是错误的,但没有找到解决方法。&
意味着新开一个软件窗口。如果希望跳转到已打开的编辑器窗口而不是打开新的,就去掉&
。
如果在ModelSim内部输入以上命令,那么重启软件时这些设置不会保存。
显然,如果想要改编辑器命令一直有效,可以考虑将其写到tcl文件里执行。如果写到ModelSim软件自带的pref.tcl
中,那么就等于修改了默认设置,这样可能有点风险。
或者将其写入本文前述的tcl文件中一并执行即可。