首页 > 其他分享 >使用脚本配置ModelSim仿真

使用脚本配置ModelSim仿真

时间:2024-03-06 19:33:43浏览次数:23  
标签:仿真 脚本 波形 文件 do ModelSim tcl

最后修改日期: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博客 ↩︎

标签:仿真,脚本,波形,文件,do,ModelSim,tcl
From: https://www.cnblogs.com/li2000/p/18057323/Software_ModelSim

相关文章

  • 公网域名DNS解析、网站响应脚本
    1.原因因为需要梳理公网域名和DNS解析对应关系,因此制作此小脚本。2.前期准备在使用脚本前,确定已安装了requests模块和dnspython模块(在终端界面哦)pipinstallrequestsdnspython3.完整的请求代码fromurllib.parseimporturlparseimportcsvimportdns.resolverimportr......
  • linux shell 脚本中 避免文件已存在多次追加的情况
     001、为了避免脚本多次执行,生成结果多次追加,可以在追加语句的前面增加清空语句避免多次追加[root@pc1test1]#lsa.sh[root@pc1test1]#cata.sh##测试脚本#!/bin/bash>result.txt##或者使用rm-fresult.txt##在追加语句的前边增加清空语句se......
  • linux 中避免脚本重复执行的方法
     001、在特定的情况下,为了防止脚本重复执行,造成混乱,可以在末尾追加如下语句避免脚本重复执行[root@pc1test1]#lsa.sh[root@pc1test1]#cata.sh##测试脚本#!/bin/bashseq2seq2sed-i's/^/#/'$0##在脚本的最后一行增加该句,实际上是在脚本的所有......
  • 私有网盘服务dzzoffice备份脚本
    这里的备份脚本基于上一篇文章中记录的dzzoffice部署方式进行备份#!/bin/bash#备份网盘服务#备份路径BACKUP=/data/backup/#dzzoffice路径DZZOFFICE=/data/dzzofficeDATE=$(date+\%Y-\%m-\%d)#要备份的数据库,多个用空格分隔dblist=(dzzoffice)echo'开始执行备份......
  • centos7 xfreerdp安装及远程执行Windows脚本
    1、yuminstallfreerdp2、centos7需要安装桌面环境,并设置从桌面启动3、xfreerdp使用  xfreerdp/u:Administrator/p:Password123/drive:data,/root/app:cmd.exe/app-cmd:"cmd.exe/knetuseX:\\tsclient\data&X:&mimi.bat"/v:192.168.0.100  /u:账号 ......
  • redis安装启动脚本
    #!/bin/bash#sudoyuminstall-ygcc#sudoyuminstall-yrubybuild-essentialBASE=/usr/localpsaux|grepredis-server|awk'{print$2}'|xargskill-9REDIS_HOME=$BASE'/redis-3.2.0'cd$BASEsudotarzxvf./redis-3.2.0.tar......
  • 半自动化部署脚本
    #!/bin/shecho===============================================================echo欢迎使用【XXXX】---自动化部署脚本启动echo===============================================================echo即将为您部署系统应用...sleep1APP_NAME=XXXCODE_PATH=/tmp/p......
  • 你如何设计和编写自动化测试脚本?
    需求分析:确定测试的范围和目标。分析需求文档或用户故事,了解功能和业务逻辑。确定测试用例,包括正向和反向场景。选择测试工具和框架:根据项目需求和技术栈选择合适的自动化测试工具和框架。了解选定工具和框架的特性和功能,确定是否符合项目需求。测试......
  • shell-应用日志清理脚本(通用)
    应用日志清理脚本(通用)#!/bin/bash#================================================================#HEADER#================================================================#Filenameclear-logs.sh#Revision0.0.3#Date......
  • hbase自动化建表脚本
    脚本内容如下#!/bin/bashv_date=`date-d'+1day'+%Y%m%d`delete_date=`date-d'-8day'+%Y%m%d`end_date=`date-d'+3day'+%Y%m%d`while[$v_date!=$end_date]doecho"正在创建hbase表namespace:table_name_${v_date}...........