使用脚本配置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

以上脚本完成了:

  1. 建立一个库(这里就都用work库不做区分)
  2. 将文件导入对应库
  3. 编译文件(注意,tb中每层模块调用的verilog文件都要编译)
  4. 启动仿真
  5. 导入波形配置文件(如果是第一次就没有)
  6. 运行仿真(注意,在ModelSim环境下,使用$stop函数比$finish函数好些

再建立.bat文件为:

::打开Modelsim并执行do sim.tcl
vsim -do sim.tcl

这样,就只需要在cmd中运行.bat文件就能启动ModelSim并完成仿真。

如果是第一次仿真,在调好展示的信号后应当保存.do文件。

如果使用VS Code,可以在内部启动terminal,写完verilog就直接运行.bat文件,非常舒服。

image

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)

需要说明以下几点:

  1. external_editor只是一个变量名,可以是其它的字符串。
  2. "Code.exe"就是VS Code可执行程序的名称。我之所以没有加目录是因为路径在系统变量$PATH中。如果不在,考虑添加系统变量或使用完整路径名。
  3. $filename :$linenumber理论上可以用VS Code打开对应文件并跳转到某一行。但实测只能打开文件,不能跳转行,用cmd试验得知:应该是错误的,但没有找到解决方法。
  4. &意味着新开一个软件窗口。如果希望跳转到已打开的编辑器窗口而不是打开新的,就去掉&

如果在ModelSim内部输入以上命令,那么重启软件时这些设置不会保存。

显然,如果想要改编辑器命令一直有效,可以考虑将其写到tcl文件里执行。如果写到ModelSim软件自带的pref.tcl中,那么就等于修改了默认设置,这样可能有点风险。

或者将其写入本文前述的tcl文件中一并执行即可。


  1. Modelsim——do脚本、bat命令 - 咸鱼IC - 博客园 (cnblogs.com) ↩︎

  2. Modelsim保存与打开仿真波形的方式_modelsim打开wlf文件-CSDN博客 ↩︎

  3. modelsim更改默认编辑器以及恢复默认编辑器_modelsim自带编辑器 .v-CSDN博客 ↩︎

posted @ 2024-03-06 19:28  白发戴花君莫笑  阅读(113)  评论(0编辑  收藏  举报