目录

引言

脚本仿真步骤分析

完整的脚本代码

保姆级使用教程

扩展


引言

之前对于工程一直采用的是vivado+questasim联合仿真的模式,对于大型工程来说这个是合适的,因为需要调用一些ip库和包括约束之类的,vivado的图形化界面做的很完善,基本是一站式服务了;而对于一个小demo来说,如果为此要新建一个工程的话操作还是有点复杂的,而且占据的空间也很大。并且对于一个合格的工程师来说,最好还是减少重复工作,毕竟已经21世纪了(虽然我还做不到),所以自己就闲的探索了一下基于脚本化的自动仿真流程,只需要有一个设计文件和TB文件即可对一些小demo完成仿真。

脚本仿真步骤分析

本工程的例子为对一个异步fifo的脚本化仿真测试

1、首先我们先创建一个.do文件,方法随意,我一般建一个txt,然后后缀改成.do,例如 auto_test.do

2、此do文件是在Questa/Modelsim的命令行中执行的,所以需要先退出当前工程,命令为:

quit    -sim

3、然后清除命令行的显示信息

.main   clear

4、仿真器需要创建一个物理目录(文件夹),将编译后的库文件放在其中,以便仿真的时候对其进行调用

vlib    ./lib
vlib    ./lib/work

5、创建逻辑库(work),并映射逻辑库到物理目录,编译工程之后的编译文件存放在该目录下

vmap    work    ./lib/work

6、编译Verilog 源代码,将编译得到的信息文件与编译的文件放到逻辑库里面,库名缺省编译到work本地库,文件按顺序编译。

主要是编译设计文件,测试文件,调用的IP核.v文件,相应的库文件,通配符./../xxx/ *.v,要注意编译的顺序.

NOTE:测试tb文件放在./tb文件夹下,设计文件放在./source文件夹下

vlog    -work   work    ./tb/*.v
vlog    -work   work    ./source/*.v

7、优化部分参数(-voptargs=+acc),链接到默认的work 库,启动仿真顶层测试逻辑库(work)里面的tb文件。

NOTE:这里的测试tb文件名字是tb_asyn_FIFO,使用的时候需要修改为自己tb的名字。

vsim    -voptargs=+acc    work.tb_asyn_FIFO

8、添加波形 add wave 测试顶层的名字/例化子模块的例化名字/子模块信号的名字

add    wave    -radix bin    tb_ex_shift_reg/o_lvds_d

添加分割线:不同的信号之间进行分割,语法格式是

add    wave    -divider    {分割线的名字}

NOTE:可以修改添加wave的方式为从wave.do中读取,wave.do为手动添加波形之后保存的文件

这里直接添TB顶层的所有信号

add     wave    tb_asyn_FIFO/*

9、开始仿真,可以自己设定仿真时间

run    1ms

完整的脚本代码

例子为对一个异步fifo的脚本化仿真测试

quit    -sim.main   clearvlib    ./lib
vlib    ./lib/workvmap    work    ./lib/workvlog    -work   work    ./tb/*.v
vlog    -work   work    ./source/*.vvsim    -voptargs=+acc    work.tb_asyn_FIFOadd     wave    tb_asyn_FIFO/*run    1ms

保姆级使用教程

1、首先创建一个自己的工程文件夹,如asyn_fifo,在里面创建两个文件夹,分别为source和tb,source文件夹存放所有的设计文件,tb文件夹存放所有的tb文件。

2、将脚本do文件和两个文件夹放在同一个目录中,如图所示

3.在questa/modelsim中change directory 到工程文件夹中

4.在命令行中执行do auto_test.do命令

5.之后仿真器便自动开始刷刷刷执行了

扩展

1、如果用到厂商的IP库,在脚本中也是可以添加进去的,但是我做的时候只针对小demo的实现,一般用不上,大家有需要的可以去查阅其他资料。

2、执行后仿之类的操作,仿真器也有相关的指令,这里也不再说明,理由同上。

显示状态机的状态

我们在Modelsim/Questasim中进行仿真的时候,经常会苦恼于状态机的状态跳转不够直观,因为一般状态机的编码都是格雷码或者二进制码。这时候我们可以在modelsim中直接显示状态机的名称而不是数字。

一般用的方法有三种,分别为

  • 在testbench文件中对设计文件中的各种状态进行映射
  • 在testbench文件中对设计文件中的状态机编码进行重定义
  • 使用虚拟对象显示状态机名称

在这里我使用的是第三种,也就是在tcl中进行操作,而不需要修改TB中的内容,对于设计可能会更加方便一些。

virtual type { {2‘b01 ONE} { 2'b10 ZERO} } state_typevirtual function {(state_type)/inst_fsm/state} fsm_stateadd wave -color pink /inst_fsm/fsm_state 

仿真波形变为

详细的介绍可以参考:在Modelsim仿真中显示状态机名称_kkfeng1002的博客-CSDN博客

参考文献

基于脚本的modelsim自动化仿真笔记 - IC_learner - 博客园

脚本化Questasim/Modelsim自动仿真——脱离联合仿真相关推荐

  1. modelsim与debussy的联合仿真

    本文主要讲述的是 modelsim与debussy的联合仿真. 前提:已经安装好 modelsim和debussy软件. 步骤: 1.将Debussy安装目录下share\PLI\modelsim_p ...

  2. Quartus 13.0和Modelsim SE 10.1a 联合仿真

    Quartus 13.0和Modelsim SE 10.1a联合仿真 1.首先在Quartus建立工程,编写HDL文件,进行编译:编译通过后编写testbench文件,再进行编译,直到通过没有错误.. ...

  3. ## modelsim与quartus 2 联合仿真,出现Error loading design

    ** modelsim与quartus 2 联合仿真,出现Error loading design ** 第一次用quartus2和modelsim联合仿真,跟着野火的教程来,不过有不想跟他一摸一样, ...

  4. modelsim独立仿真与联合仿真生成覆盖率流程(随笔)

    modelsim 覆盖率统计 无脚本 生成modelsim工程文件,代码编译成功 全选代码按这个设置 到library界面,打开work,选择写好的TB文件,选择仿真和覆盖率统计 进入仿真界面,点击左 ...

  5. FPGA学习笔记(六)Modelsim单独仿真和Quartus联合仿真及signaltap使用

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  6. Vivado和Modelsim联合仿真问题记录

    目录 写在前面 Modelsim安装 1.以管理员身份运行安装程序 2.去掉mgls.dll和mgl64s.dll文件"只读"属性,直接双击运行patch64_dll.bat 编译 ...

  7. matlab您的安装可能需要执行其他配置步骤_手把手超详细介绍MATLAB+RoadRunner+Unreal Engine自动驾驶联合仿真...

    RoadRuner是MathWorks新收购的自动驾驶场景构建工具,Unreal Engine是商业游戏引擎.RoadRunner创建驾驶场景,导入到Unreal Engine,与Simulink联合 ...

  8. 自动驾驶仿真(五)—— 基于Carsim、Prescan、Simulink的联合仿真

    自动驾驶仿真五--基于Carsim.Prescan.Simulink的联合仿真 1. 联合仿真流程 2. CarSim联合仿真配置要点 3. Prescan联合仿真配置要点 4. Carsim.Pre ...

  9. 【FPGA】vivado和modelsim联合仿真

    文章目录 二.遇到的问题 三. 参考资料: 二.遇到的问题 1. 错误一: # ** Fatal: (vsim-3693) The minimum time resolution limit (10f ...

最新文章

  1. 玩转不同业务场景,这些RabbitMQ特性会是得力助攻
  2. 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。...
  3. oracle怎样开启服务,Oracle 11g必须开启的服务及服务详细介绍
  4. C#取真实IP地址--多个代理背后的ip地址
  5. Istio 网关之南北向流量管理
  6. java gc 循环引用_JVM(3)对象A和B循环引用,最后会不会不被GC回收?-------关于Java的GC机制...
  7. C语言编程数出1到100的整数中出现了多少次数字9
  8. ssas表格模型 权限控制_创建第一个SSAS表格模型数据库
  9. java socket 组包_关于socket 分包和组包
  10. 【EJB基础】开发一个简单的EJB应用程序
  11. 北京今日起最低工资和养老金标准全部上调
  12. 科猫网:72个白手起家创业点子推荐
  13. 家用计算机常见故障及解决方式,常见电脑故障及处理办法 计算机常见故障原因及解决方法...
  14. 期权、期货和权证比较
  15. 支付宝生活号h5网页--蚂蚁认证
  16. 阿里云服务器最低多少钱一个月,租阿里云服务器一年多少钱
  17. 在c语言中char的用法,在C語言中 char的用法是怎麼用的啊
  18. 各种书籍免费下载地址(持续更新中)
  19. Shiro 生成秘钥
  20. 29岁转行程序员,39岁成为总裁,宫崎英高的游戏成名之路!

热门文章

  1. Python爬虫爬取表情包+Autojs微信自动导入表情包脚本(附源码)
  2. 捷讯fw300r虚拟服务器口号,迅捷FW300R无线路由器WDS无线桥接设置方法【详解】
  3. python中文件最重要的功能陶瓷材料_2020大学慕课新型陶瓷材料及商业应用期末考试查题公众号答案...
  4. spring源码之模拟mybatis第三方对象注入
  5. 2022年流动式起重机司机模拟试题及流动式起重机司机证考试
  6. img标签保持纵横比html,无论容器如何,使img增长到最大宽度/高度并保持纵横比...
  7. HTML页面,图片img在容器DIV中,上下左右居中(实用技能,css的table-cell)
  8. 浅谈光流跟踪之KLT稀疏光流跟踪算法
  9. 内容溢出:overflow
  10. OutputStream用法