ModelSim之TCL仿真
在使用ModelSim时,我们一般都是从界面UI进行操作的,这样也比较直观易学。但是在很多的调试时,发现很多操作都是重复的,修改一下代码就要再次进行相关操作,这样很没有效率。其实,ModelSim是可以进行TCL命令行操作的,在界面的每一次操作,在命令窗口都有相对应的命令。
一、do文件编写
在这里,我们是通过do文件来完成这个仿真过程。do文件中包括你所需要完成操作的命令,直接在命令窗口中运行该文件即可,省去了重复劳动。下面我们以实例讲一下do文件的编写。
1、编写好源文件。包括sram_controller.v和它的Testbench文件sram_controller_tb.v
2、编写.do文件(sram_controller.do),内容如下:
# Create the work library
vlib work
vmap work work
# Compile the verilog files
vlog sram_controller.v
vlog sram_controller_tb.v
# Run simulation
vsim sram_controller_tb
#Add all the top signals
add wave *
#The time of run
run 1us
3、打开ModelSim,修改工作路径到当前工程目录下。在命令窗口中输入do sram_controller.do,软件便开始自动运行进行仿真了。
下面是仿真结果:
4、如果对设计文件进行了修改,需要进行重新仿真。那么,只要在命令行重新输入do sram_controller.do回车即可完成仿真,非常方便,一劳永逸。
5、此外,还有一个更偷懒的方法,不打开ModelSim软件就可以完成自动化仿真。就是编写.bat的批处理文件,用于在Windows cmd下运行整个ModelSim仿真。
源码如下:
vsim -do sram_controller.do
保存文件为sram_controller.bat。在工程目录下直接点击sram_controller.bat运行即可。
6、add wave * 这条命令就将test bench顶层的所有信号加入到wave窗口中。对我们来说,在调试阶段,有很多底层信号都是想观测的,所以需要再手动修改一下命令。比如我们想将实例中的状态机信号加进去,可以在do文件中增加一条命令:add wave /sram_controller_tb/i1/state 。当然也可以通过软件操作完成此功能。
7、此外,有些命令可能我们不熟悉,这时候我们可以借助软件的UI操作来查看并记录这些命令。例如,为了区分仿真波形窗口中的各种信号线,需要信号波形作设置,如不同信号线的颜色、显示基数、显示方式等要有区别,这时就需要在仿真波形窗口单独对每一个信号线手动进行设置,这对于不断修改源代码然后再不断地进行仿真来说,非常麻烦。我们可以先进行一次仿真,然后对颜色等进行设置,最后保存波形格式为wave.do。
这时候建议将前面的sram_controller.do文件拆分为sim.do和wave.do,将波形添加和设置等操作放到wave.do中,分别运行这两个do 文件即可完成仿真,且如上图波形的颜色设置等不需要重复劳动。
总之,如果你对命令不熟悉,可以先进行UI操作,观察命令窗口中对应的命令,就能理解命令的操作。其他还有很多TCL命令,这里就不赘述了。
二、如何让状态机显示状态的名字
在使用Verilog编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示,但当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进制编码的形式显示,如上面第一部分中6添加状态机的状态,这种显示形式不是很直观,但我们可以使用ModelSim提供的命令将状态机变量以“文本”形式的参数名显示,从而有利于调试。
1.首先使用ModelSim的virtual type命令定义一个新的枚举类型(FSM_TYPE):
virtual type {
{0x0 idle} {0x1 write_U9} {0x2 write_U6} {0x4 start_1} {0x8 rdU6_wrU5} {0x10 update_1} {0x20 read_end_1} {0x40 waiting_1}
{0x80 ARM_com_1} {0x100 start_2} {0x200 rdU5_wrU6} {0x400 update_2} {0x800 read_end_2} {0x1000 waiting_2} {0x2000 ARM_com_2}
} FSM_TYPE
注意:状态变量之间需要一个空格。
2.然后我们将需要显示的信号(/sram_controller_tb/i1/state,注意信号在wave窗口中的完整名字)进行类型转换,转换成一个新的信号(state_new)
virtual function {(FSM_TYPE)/sram_controller_tb/i1/state} state_new
3.最后我们将新的信号加入到wave窗口中。
add wave -color pink /sram_controller_tb/i1/state_new
4.仿真结果。
我们可以看到状态名字以参数的形式显示了,这样就直观多了,也方便我们调试。
ModelSim之TCL仿真的更多相关文章
- ModelSim之tcl自动化仿真
摘要: ModelSim的tcl最大的优势就在于它可以让整个仿真自动运行,免除每次进行各种用户界面控制操作的麻烦.用tcl就可以自动完成建库.映射库到物理目录.编译源代码.启动仿真器.运行仿真等一系列 ...
- vivado与modelsim的联合仿真(二)
最近在做Zynq的项目,曾经尝试使用ISE+PlanAhead+XPS+SDK组合和Vivado+SDK来搭建工程,使用中发现前者及其不方便后者有诸多不稳定.近期得闻Xilinx退出Vivado20 ...
- 通过文件读写方式实现Matlab和Modelsim的联合仿真
虽然Modelsim的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足.而进行数字信号处理是Matlab的强项,不但有大量的关于数字信号处 ...
- vivado和modelsim联合调试仿真
vivado和modelsim联合调试仿真 0赞 发表于 2017/5/10 19:10:59 阅读(881) 评论(0) 使用vivado和modelsim联合调试仿真时,在破解完modelsim后 ...
- Modelsim SE自动化仿真——如何将.do文件中自定义的库链接到testbench顶层模块
我们用Modelsim SE进行仿真时,为了方便,一般会编写.do文件来启动当前仿真.关于.do文件的编写,一般网上都有成型的模板,我们只要稍微改几个参数,就可以符合我们的仿真需求了.但是如果仿真时需 ...
- 用Modelsim SE 直接仿真 Altera(Intel PSG) IP核 需要注意的问题
如果我们直接用Modelsim SE仿真 Altera IP核,首先会进入Quartus II目录下找到IP核对应的仿真库源文件,然后在Modelsim SE中进行编译,添加到Modelsim SE的 ...
- Xilinx ISE如何调用Modelsim进行联合仿真
图: 在对设计的芯片进行测试时,经常要用到FPGA,可是里面的仿真工具却不如Modelsim那么好用,且在规模比较大时,ISE在仿真时,软件经常会报告内存限制的问题,此时一般会切换到Modelsim软 ...
- 使用Modelsim进行简单仿真
这里记载一下使用modelsim进行简单的仿真,方便以后使用的时候进行查看.所谓的简单的仿真,就是没有IP核.只用图形界面不用tcl脚本进行的仿真.简单的仿真步骤为: 1.改变路径到工作环境下的路径下 ...
- Vivado关联Modelsim进行联合仿真
Vivado自带仿真工具,但是有点慢,关联Modelsim联合仿真是最好的,注意Modelsim必须是10.7以上版本. 1.安装并成功破解Modelsim 10.7. 2.打开Vivado,点击 T ...
随机推荐
- Aurora学习笔记连载一:仿真平台搭建
由于公司项目需要,需要学习Aurora协议,才有了这样的连载学习笔记,也算是对自己学习的一份记录吧. 对于Aurora是什么,大家自行百度. 当然,Kevin也在此先提醒大家,本套学习笔记不是你想学就 ...
- C++语言基础(6)-const 关键字
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量.成员函数以及对象. 一 const 成员变量 const 成员变量的用法和普通 const 变量 ...
- C++语言基础(4)-构造函数和析构函数
一.构造函数 类似于java,C++中也有构造函数的概念,相关用法如下: 1.1 构造函数的定义 #include <iostream> using namespace std; clas ...
- 605. Can Place Flowers【easy】
605. Can Place Flowers[easy] Suppose you have a long flowerbed in which some of the plots are plante ...
- Android学习之ItemTouchHelper实现RecylerView的拖拽以及滑动删除功能
今天在群里见大神们提到控件的拖动以及滑动删除的效果实现,就在网上找了资料ItemTouchHelper学习,并实现其功能.不胜窃喜之至,忍不住跟大家分享一下,如今就对学习过程做下简介.帮助大家实现这样 ...
- SVN如何新建用户并分配权限
打开SVN服务端,找到特定的项目目录,单击右键,然后点击属性: 在弹出的页面中,点击增加: 在增加的页面中,你可以选择之前已经创建的用户,也可以重新创建用户名和密码: 如果是选择已经有的用 ...
- FTP(File Transfer Protocol)是什么?
文件传输协议 FTP(File Transfer Protocol),是文件传输协议的简称.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).用户可以通过 ...
- linux下装locustio
升级Python版本 #python centOS6.8中默认安装的是2.6版本,因为我在安装到后面的时候报错Python版本较低,所以可以先把python版本升级到2.7: 直接在命令行输入:#wg ...
- Android无线测试之—UiAutomator UiSelector API介绍之三
节点关系介绍 每一个布局文件都是一个严格的层次结构布局文件,只有对层次结构非常的了解,才能更好的搜索定位我们需要的主键元素 一.XML文档节点关系介绍 备注:查看节点关系主要使用UiAutomatro ...
- Assertion (software development) -- 断言
Wiki: In computer programming, an assertion is a predicate (a true–false statement) placed in a prog ...