简单得modelsim命令行仿真

PART ONE

ModelSim之命令行仿真入门

用do文件进行仿真真得很方便,比写testbench方便多了,采用do文件没有那么多信号定义,管理也比较方便.

1.运行仿真,在主窗口输入命令:vsim work.实体名

2.为时钟信号添加驱动,输入命令:force clk 0 0,1 10 -r 20,将仿真时钟设为50MHz;(设时间单位为ns)

3.打开波形窗口,输入命令:view wave

4.为波形窗口添加信号,输入命令:add wave -hex *,这里的*表示添加设计中所有的信号,-hex表示以十六进制来表示波

形窗口中的信号值;

5.开始仿真,输入命令,run 3us,这时候在波形窗口中出现仿真波形

6.退出仿真,输入命令:quit –sim //很常用!!

7.查看错误详细信息: verror **(错误数字代号)

--vlib - 建立一个新的工作库。
如:vlib work    
    在当前目录建立逻辑库work,运行后会在当前目录下找到work文件夹。

--vmap - 映射逻辑库名到指定的目录

--vsim - 启动仿真
如:vsim -c -l vsim.log -do ./YourDo.do -L ./work work.foo
    开始仿真,-c 选项让vsim工作在commandline模式;-l 选项是输出log文件到vsim.log; -do 选项是开始仿真后运行tcl脚本文件;-L 选项是指定工作逻辑库;work.foo是仿真的top level module。

PART TWO
ModelSim仿真常用命令以及仿真脚本的编写 

在我们用ModelSim仿真的时候经常是修改一点一点修改代码,这样会造成一个无奈的操作循环:修改代码--->编译代码--->仿真设置--->进入仿真页面--->添加需要观察的波形--->运行仿真。如果仿真结果不理想,还得需要重新修改代码,重复上述的操作。

计算机擅长做重复的事情,为什么不让计算机代劳呢?

我们可以参照Xilinx ISE是如何调用ModelSim进行仿真的,尤其是脚本的编写。

下面一个脚本是我用ISE10.1建立了一个AES256的工程,然后在调用ModelSim6.5的时候,ISE会生成这几个脚本文件,AES256_tb.fdo, AES256_tb_wave.fdo 和 AES256_tb.udo。

下面的代码是AES256_tb.fdo文件的内容。

1: vlib work #创建名字是work的库,这个仿真之前必须做的2: vcom -explicit  -93 "SBOX_ROM.vhd"  #编译vhd代码3: vcom -explicit  -93 "Inv_SBOX_ROM.vhd"4: vcom -explicit  -93 "AES_package.vhd"5: vcom -explicit  -93 "subbytes.vhd"6: vcom -explicit  -93 "SBOX_ROM_reg.vhd"7: vcom -explicit  -93 "round_key_BRAM.vhd"8: vcom -explicit  -93 "Inv_subbytes.vhd"9: vcom -explicit  -93 "Keyexpansion_Yao.vhd"10: vcom -explicit  -93 "AES256_ENC_DEC.vhd"11: vcom -explicit  -93 "AES256_TOP.vhd"12: vcom -explicit  -93 "AES256_tb.vhd"13: vsim -t 1ps   -lib work AES256_tb
#进入仿真设置,时间单位为1ps,库指定为work,AES256_tb就是指你的top层设计的名字14: do {AES256_tb_wave.fdo} #执行*.fdo文件,用来添加信号和变量或者内部的寄存器到波形(WAVE)窗口15: view wave #打开波形窗口16: view structure #打开架构(structure)窗口17: view signals   #打开信号列表窗口18: run 1000ns     #运行1000ns19: do {AES256_tb.udo} #运行用户定义的脚本

只要编译的时候没有出现语法错误或者是找不到定义的库文件等错误提示,一般会很容易的看到仿真的波形,而不用手动进行操作。这样方便了仿真的整个过程,而无需用很多鼠标点击操作。

现在通过一个具体的实例来说明如何运用脚本来实现ModelSim的仿真。

工具版本:ISE10.1 ,ModelSim 6.5a

步骤:

1. 创建ISE工程

首先通过ISE创建test.vhd 和test_tb.vhd文件并添加到工程中,这里不细说如何创建HDL源代码。

然后配置ISE的仿真器,右键选中FPGA芯片,点击properties,然后在Simulator选择Modelsim-SE VHDL。

图1. 工程属性

  在source窗口选择“Behavioral Simulation”,可以看到工程中的test_tb.vhd(testbench文件)。

选中test_tb.vhd文件,在Process窗口中双击Simulate Behavioral Model,ISE开始调用ModelSim,

这是ISE自动生成了三个脚本文件:test_tb.fdo, test_tb_wave.fdo和test_tb.udo。

图2. Behavioral Simulation 窗口

  看看三个脚本文件的内容吧。
test_tb.fdo内容如下:

 1: vlib work    #添加library2: vcom -explicit  -93 "test.vhd"  #编译test的顶层文件3: vcom -explicit  -93 "test_tb.vhd" #编译test_tb的testbench文件4: vsim -t 1ps   -lib work test_tb   #进入仿真,时间单位1ps,仿真test_tb5: do {test_tb_wave.fdo}             #执行*.fdo脚本文件,用于添加仿真波形6: view wave                         #打开波形窗口7: view structure                    #打开structure窗口                       8: view signals                      #打开信号窗口9: run 1000ns                        #仿真运行1000ns10: do {test_tb.udo}                  #执行*.udo脚本文件,用于执行用户定义的脚本命令

test_tb_wave.fdo内容如下():

 1: ## Project Navigator simulation template: test_tb_wave.fdo2: ## You may edit this file to control your simulation.3: add wave *  ##添加Top层所有的端口信号

test_tb.ufo内容为空白,是留着给用户自己添加。

对我们来说最有用的就是test_tb.fdo文件了,只要稍微修改就可以成为一个针对这个工程的很好的用于仿真的脚本。

当然我们可以自己手动来编写类似的脚本,用ISE自动生成主要是为了图个省事。

2.调用ModelSim进行仿真

在图2中,Process窗口中双击Simulate Behavioral Model,进入ModelSim仿真环境。请仔细观察ModelSim Transcript窗口中消息的输出。内容如下:

 1: # do {test_tb.fdo}   #<-------执行脚本文件2: # ** Warning: (vlib-34) Library already exists at "work".3: # Model Technology ModelSim SE vcom 6.5 Compiler 2009.01 Jan 22
2009  #<-----编译test.vhd得到的message4: # -- Loading package standard5: # -- Loading package std_logic_11646: # -- Loading package std_logic_arith7: # -- Loading package std_logic_unsigned8: # -- Compiling entity test9: # -- Compiling architecture test of test10: # Model Technology ModelSim SE vcom 6.5 Compiler 2009.01 Jan 22
2009 #<-----编译test.vhd得到的message11: # -- Loading package standard12: # -- Loading package std_logic_116413: # -- Loading package std_logic_arith14: # -- Loading package std_logic_unsigned15: # -- Compiling entity test_tb16: # -- Compiling architecture behavior of test_tb17: # vsim -lib work -t 1ps test_tb                #仿真设置命令行18: # Loading std.standard19: # Loading ieee.std_logic_1164(body)20: # Loading ieee.std_logic_arith(body)21: # Loading ieee.std_logic_unsigned(body)22: # Loading work.test_tb(behavior)#1            #加载test_tb23: # .main_pane.wave.interior.cs.body.pw.wf      #打开wave窗口24: # .main_pane.structure.interior.cs.body.struct #列出structure25: # .main_pane.objects.interior.cs.body   

注:在test_tb.fdo的每一行都可以在ModelSim Transcript窗口中分开一行一行执行。

然后可以观察到仿真波形文件。

图3.仿真波形

3. 调试代码

或许仿真出来的结果不是我们想要的,必须的修改代码,然后再仿真。那我们应该怎么办呢?

在trasncript窗口输入:

  1: quit -sim      #退出仿真2: do test_tb.fdo #修改代码完成后重新执行该脚本进行仿真

  在仿真的波形的时候,我们不仅仅希望看到Top层设计的端口信号的波形,还希望能观察到内部信号是如何变化的,所以我们在Sim窗口中找到内部的信号放到wave中进行观察。但是如果我们重新运行当初test_tb.fdo文件,我们又再一次只能看到Top层设计的端口信号的波形,而内部信号的波形已经被删除。那我们应该如何保存和运用我们仿真波形文件呢?

  我现在需要观察内部的一个寄存器输出:tmp信号,见图4。Ctrl+S,保存波形文件。默认保存为工程目录下/wave.do,但是我们将用波形文件保存为test_tb_wave.fdo文件,这样做的好处可以不用修改test_tb.fdo文件。

图4.内部信号观察

  我们重新运行test_tb.fdo脚本文件之后,输出的波形是图4,而不是图3。

  差不多常用的VHDL仿真命令都用上了,我相信这样做肯定会提高仿真的效率。如果想要熟悉更多的ModelSim的仿真命令,请查看ModelSim的用书手册。

ModelSim之命令行仿真入门 (step 2)相关推荐

  1. FPGA篇(十一)modelsim命令行仿真提示“vsim 不是内部或外部命令,也不是可运行的程序或批处理文件”的解决办法 (转)

    安装完modelsim后,用过命令行模式仿真,如"vsim -c -do run.do",开始时是可以的. 后来偶然再用该仿真方式,发现命令行提示"vsim 不是内部或外 ...

  2. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  3. go Cobra命令行工具入门

    简介 Github:https://github.com/spf13/cobra Star:26.5K Cobra是一个用Go语言实现的命令行工具.并且现在正在被很多项目使用,例如:Kubernete ...

  4. hbase shell 命令行从入门到放弃

    1.启动hbase 进入 hbase bin 目录 ./start-hbase.sh ./当前目录下的start-hbase.sh文件启动 退出hbase  shell 命令行 ctrl+c 补充: ...

  5. Windows命令行简易入门

    文章目录 Windows命令行简介​ 启动命令行 基本命令 dir:查看当前目录下的内容 md与cd命令:创建目录与改变当前目录 copy命令与type命令:拷贝文件与显示文本文件内容 del命令:删 ...

  6. [k8s] 第四章 kubectl 命令行 实战入门

    本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问. Namespace ​ Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来 ...

  7. python 基础命令-Python 命令行(CLI)基础库

    在 CLI 下写 UI 应用 前阵子看了一下自己去年写的 Python-视频转字符动画,感觉好糗..所以几乎把整篇文章重写了一遍.并使用 curses 库实现字符动画的播放. 但是感觉,curses ...

  8. linux命令宝典,Linux命令行完全技术宝典(张栋) PDF扫描版[85MB]

    Linux命令行完全技术宝典 内容简介: <linux命令行完全技术宝典>基于red hat enterprise as操作系统,汇集了绝大部分命令的功能介绍.参数说明和注意事项,并针对具 ...

  9. ModelSim仿真入门之一:软件介绍

     http://www.cnblogs.com/xd-elegant/p/4093645.html 编写这个教程之前,为了让不同水平阶段的人都能阅读,我尽量做到了零基础入门这个目标,所有的操作步骤 ...

最新文章

  1. python好难找工作_Python 太难找工作了
  2. NOIP2017 列队——动态开点线段树
  3. 数据时代总结思维导图模板分享及绘制技巧
  4. C语言实现GBK/GB2312/五大码之间的转换(转)
  5. Linux桌面环境安装matlab并创建快捷方式
  6. 【速达软件】【速达5000】5系3.97批量删除采购开单从表重复项并合计到主表
  7. python是由哪个人创造的文字_楔形文字是由什么人创造的
  8. 爬虫 and 数据分析 | 一万条b站评论看工作细胞
  9. 华为云数据库GaussDB(for openGauss):初次见面,认识一下
  10. 停车场管理系统可行性研究报告
  11. 安装Mediapipe中遇到的问题ERROR: An error occurred during the fetch of repository ‘local_execution_config_pyt
  12. 如何查看mysql的ip地址_如何查mysql的ip地址
  13. 自动刷票工具的实现机理简介
  14. 用C 制作含万年历的台历(2009年样张)之1
  15. 不同主体的微信小程序相互跳转
  16. 一文搞懂│王者游戏中荣耀水晶难抽?探索游戏中的抽奖算法
  17. 理解中国经济的五层思维-中国视角下的宏观经济
  18. 关于html5外文翻译三千字,论文外文文献翻译3000字左右.pdf
  19. kuangbin带你飞 专题一
  20. c# orcale 用C#批量导入图片到orcale的表中

热门文章

  1. TikTok在美逃过一劫,但在印度……
  2. 如何及时获得AI顶尖科研团队的最新论文与进展?你需要一份AI内参!
  3. MemCache在Windows环境下的搭建及启动
  4. Android的IPC机制(一)——AIDL的使用
  5. Unity 编辑器扩展 场景视图内控制对象
  6. ExtJS-Grid框增加复选框checkbox
  7. IIS与COM组件权限的问题
  8. centos6 64位服务器的基本初始化
  9. .net 提供不通过反射访问不同数据库吗?
  10. CSS在ASP.NET中使用