在使用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仿真的更多相关文章

  1. ModelSim之tcl自动化仿真

    摘要: ModelSim的tcl最大的优势就在于它可以让整个仿真自动运行,免除每次进行各种用户界面控制操作的麻烦.用tcl就可以自动完成建库.映射库到物理目录.编译源代码.启动仿真器.运行仿真等一系列 ...

  2. vivado与modelsim的联合仿真(二)

     最近在做Zynq的项目,曾经尝试使用ISE+PlanAhead+XPS+SDK组合和Vivado+SDK来搭建工程,使用中发现前者及其不方便后者有诸多不稳定.近期得闻Xilinx退出Vivado20 ...

  3. 通过文件读写方式实现Matlab和Modelsim的联合仿真

    虽然Modelsim的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足.而进行数字信号处理是Matlab的强项,不但有大量的关于数字信号处 ...

  4. vivado和modelsim联合调试仿真

    vivado和modelsim联合调试仿真 0赞 发表于 2017/5/10 19:10:59 阅读(881) 评论(0) 使用vivado和modelsim联合调试仿真时,在破解完modelsim后 ...

  5. Modelsim SE自动化仿真——如何将.do文件中自定义的库链接到testbench顶层模块

    我们用Modelsim SE进行仿真时,为了方便,一般会编写.do文件来启动当前仿真.关于.do文件的编写,一般网上都有成型的模板,我们只要稍微改几个参数,就可以符合我们的仿真需求了.但是如果仿真时需 ...

  6. 用Modelsim SE 直接仿真 Altera(Intel PSG) IP核 需要注意的问题

    如果我们直接用Modelsim SE仿真 Altera IP核,首先会进入Quartus II目录下找到IP核对应的仿真库源文件,然后在Modelsim SE中进行编译,添加到Modelsim SE的 ...

  7. Xilinx ISE如何调用Modelsim进行联合仿真

    图: 在对设计的芯片进行测试时,经常要用到FPGA,可是里面的仿真工具却不如Modelsim那么好用,且在规模比较大时,ISE在仿真时,软件经常会报告内存限制的问题,此时一般会切换到Modelsim软 ...

  8. 使用Modelsim进行简单仿真

    这里记载一下使用modelsim进行简单的仿真,方便以后使用的时候进行查看.所谓的简单的仿真,就是没有IP核.只用图形界面不用tcl脚本进行的仿真.简单的仿真步骤为: 1.改变路径到工作环境下的路径下 ...

  9. Vivado关联Modelsim进行联合仿真

    Vivado自带仿真工具,但是有点慢,关联Modelsim联合仿真是最好的,注意Modelsim必须是10.7以上版本. 1.安装并成功破解Modelsim 10.7. 2.打开Vivado,点击 T ...

随机推荐

  1. zendstdio的智能提示功能

    在项目的include的那个地方邮寄,在addsource file  然后指向TP类库的文件夹,刷新项目即可有智能提示

  2. SQLServer 存储过程中不拼接SQL字符串实现多条件查询

    以前拼接的写法 set @sql=' select * from table where 1=1 ' if (@addDate is not null) set @sql = @sql+' and a ...

  3. testng入门_单元测试

    1.定义TestNG 的配置文件 <test name="exampletest1">        <classes> <!--1.只执行com.t ...

  4. JavaScript Creating 对象

    可通过多种方法在 JavaScript 中创建你自己的对象.可以直接实例化Object 对象 (JavaScript),然后添加你自己的属性和方法.或者可以使用对象文本表示法来定义你的对象.还可使用构 ...

  5. eclipse 断点类别

    行断点 行断点位于一般方法内,双击代码行左边就可以设置行断点: 行断点可以设置条件,右键断点-properties: 1设置效果是第几次到达时暂停,图中所示是当第三次到达时暂停 2是开启条件断点 3是 ...

  6. linux list

    一篇介绍链表不错的文章: 1. 玩转C链表 2. openwrt使用list 3. 深入分析 Linux 内核链表 https://www.ibm.com/developerworks/cn/linu ...

  7. thinkphp5中的一些关于命名空间的tisp

    1.thinkphp5中公共函数文件common中,不需要use,也可以直接使用vendor中的类文件. 2.在类前面的反斜杠作用是,直接使用最外层的命名空间,有时不想use某个X类,却想使用X类时, ...

  8. 学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用

    http://www.importnew.com/13246.html     首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 ...

  9. Mysql配置文件读取顺序

    On Unix, Linux and Mac OS X, MySQL programs read startup options from the following files, in the sp ...

  10. git branch merge到master

    使用merge可以合并多个历史记录的流程. 如下图所示,bugfix分支是从master分支分叉出来的. 合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,那么这个合 ...