一、do脚本实现自动化仿真

  Modelsim是支持命令的,我们可以用 .do 文件将这些命令先写好然后在Modelsim上调用。因为我的编辑器不支持.do的语法,所以这里改用 .tcl文件,它和 .do 的使用是没有任何区别的。

1. 我习惯设置一个test文件夹,里面放着仿真文件 XX_tb.v,然后在这test文件夹里放一个sim文件夹,在此文件夹内新建一个sim.tcl文件,这样后面的工程和乱七八糟的文件都在内部的sim文件夹里。

2. 在sim .tcl文件里写好以下代码,这些代码建议保存或制作成代码片段,以后只需要稍微改一改就能用。

 # ========================< 清空软件残留信息 >==============================

 # 退出之前仿真
quit -sim # 清空信息
.main clear # =========================< 建立工程并仿真 >=============================== # 建立新的工程库
vlib work # 映射逻辑库到物理目录
vmap work work # 编译仿真文件
vlog ./../*.v # 编译设计文件
vlog ./../../rtl/*.v # 无优化simulation *** 请修改文件名 ***
vsim -novopt work.fsm_tb # =====================< 状态机名称,不用请删除 >============================= # 结构体设置
virtual type {
{'b0001 S0}
{4'b0010 S1}
{'b0100 S2}
{4'b1000 S3}
} fsm_type; # 结构体和信号名关联,命名为state_name
virtual function {(fsm_type)/fsm_tb/u_fsm/state} state_name # ============================< 加载波形 >================================= # 添加波形,高度30,以unsigned格式显示 *** 请修改路径名 ***
add wave -height -radix unsigned /fsm_tb/u_fsm/* # 清空信息
.main clear # 跑完
run -all

3.打开Modelsim,点击 Files --- Change Directory ,找到刚刚那个 tcl 文件所在的文件夹。

4.在Transcript窗口输入 do sim.tcl,敲击Enter回车键。现在Modelsim就会自动帮你工作啦!

ps:

1.如果你的文件夹结构设置的和我一样,而且testbench文件命名为:XX_tb.v,里面例化的名称为 u_XX ,那么以后只需要将上述代码的 fsm 以"不匹配全词"方式替换成XX即可,当然手动修改也是很方便的,毕竟只要改2处地方即可。

2.这样操作在Project区域是空白的,那我们改了代码后怎么编译调试呢?在Library里找到模块用鼠标右键选择编译即可,和在Project里编译是一样的效果。然后在波形那restart一下重跑就行了。

二、利用do文件保存波形

  变好颜色,设置显示格式,定位时间点,终于看到想要的漂亮波形啦!这时按Crtl + S 保存当前状态为wave.do,路径为默认路径。关闭软件,走人!下次想再看到之前的费了半天调好的漂亮波形,只需要这样做:

1.在你刚刚那个工程的文件夹,出现一个vsim.wlf文件和刚刚保存的wave.do文件。我们双击vsim.wlf,Modelsim就打开了,并且定位到了之前的文件夹,也打开了sim区域,但是没有波形。

2.如果你在sim区域选中模块右键点击add wave,那么波形出现了,却不是你之前的那个漂亮波形,所以我不建议这么做。你应该在做完上面第1步后直接在Transcript输入:do wave.do,按Enter回车键。噔噔噔噔,原来的波形回来了!

三、用bat命令直接运行Modelsim

  如果你懒得连Modelsim都不想打开,那可以试试 .bat文件的操作。

1.在 sim.tcl文件边上新建一个 <新建文本文档.txt> 文件,里面写好下面的的代码然后保存。注意第4行需要和你的 .tcl 文件名称保持一致。

::请按任意键继续...
pause ::打开Modelsim并执行do sim.tcl
vsim -do sim.tcl

2.将刚刚那个 <新建文本文档.txt> 文件重命名为 <点我仿真.bat> 文件

3.打开这个bat文件,按任意键,电脑自动打开Modelsim自动仿真出波形了!

最新文章

  1. Access restriction: The type TaskTopicResolver is not accessible due to restrict
  2. 简洁的jQuery cxMenu 手风琴导航
  3. SVN的目录说明
  4. 用移动智能设备访问Ossim系统
  5. mac osx 系统 brew install hadoop 安装指南
  6. 窗体皮肤实现 - 实现简单Toolbar(六)
  7. Local System/Network Service/Local Service
  8. php学习笔记(1)
  9. Linux C/C++编译环境搭建
  10. C++与类型转换相关的四个关键字及其特点
  11. 使用HttpGet请求json数据
  12. Java中子类对象初始化的过程
  13. 卷积神经网络CNN的原理(三)---代码解析
  14. bzoj4337树的同构
  15. 自制操作系统Antz(3)——进入保护模式 (中) 直接操作显存
  16. Spring再接触 IOC DI
  17. Spark进阶之路-Standalone模式搭建
  18. 在Android开发中替换资源图片不起作用的解决方法
  19. MySQL 中NULL和空值的区别,索引列可以有空值或者null吗?
  20. JS本地存储信息的实现方式(localStorage 与 userData)

热门文章

  1. Windows异常分发函数---KiUserExceptionDispatcher
  2. apache-tomcat安装
  3. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn 题解
  4. Redis BGSAVE因为内存不足 fork 失败导致目标 Redis 无法访问的问题
  5. 转载:线性回归建模–变量选择和正则化(1):R包glmnet
  6. SDN阅读作业
  7. Hadoop(三)—— YARN
  8. vue 中使用阿里iconfont彩色图标
  9. 在python中使用elasticsearch 需要注意的一些问题
  10. python 播放MP3和MP4