在第 3 篇中讲到了如何使用图形进行仿真激励输入,图形输入法尽管简单易学,但如若要求复杂的仿真输入激励、较长的仿真时间或是要求打印输出信息乃至输出文件日志则显得不够用了。

本篇以上一篇的 3-8 译码器为基础,讲一下 Modelsim 仿真工具的使用方法。在 Modelsim 中不再提供图形的激励输入方法,取而代之的testbench 测试脚本。testbench 简称 tb,虽然名字听起来很专业,但掌握却没什么难度。tb 的语法与 verilog 高度类似;但由于 tb 脚本是在 PC 上运行,语法上显得更加轻松自由。我们在初学 C 语言时会用到一个 printf 函数,同样在 testbench 中也存在对应的功能,这里有一个简单的例子,熟悉使用 $dispalay() 输出打印信息。

打开上一篇的工程,按照如图所示的按钮自动生成 testbench 模版。

这里生成的 testbench 脚本模版被存放在 D:\Quartus\my38decode\simulation\modelsim\my38decode.vt,注意扩展名是 .vt。vt 文件是供 Modelsim 软件使用的,自身并不属于 Quartus 工程;生成之后也不会出现在 Quartus 工程导航栏里;用户也不需要手动添加它到工程里。

关于 Modelsim-Altera:

Modelsim-Altera 是 Modelsim 的一个 OEM 版本,它集成了一些 Altera 的专有库文件,例如你在 verilog 里使用了乘法,FPGA 内部综合器会调用内嵌的嵌入式乘法器硬核来完成乘法操作,但在仿真的时候为了使结果与综合结果一致,需要手动添加 Altera 的库文件到 Modelsim 工程里。而 Modelsim-Altera 默认包含了所有的 Altera 专有器件库,从而使用户不需要手动添加任何 Altera 的库文件。当然这对初学者几乎没什么意义,但伴随者学习的深入和接触器件的增加,初学者则不得不重新审视这个问题。

由于 Modelsim 的文件编辑器功能十分的简陋,像我机器上的版本 10.1d (集成在 Quartus 13.0SP1)只有简单语法高亮功能;作为代替这里我们使用 Quartus 的文本编辑器来修改 vt 文件;您也可以选择自己喜好的文本编辑器来编辑这个文件。下图显示的是通过 Quartus 打开这个测试脚本文件。

使用 Quartus 的编辑器来修改 my38decode.vt:

在仿真器前需要设定仿真工具路径:

好需要设定仿真环境:

添加测试文件脚本到仿真设置中:

运行仿真工具:

Modelsim 的返回信息:

下图为弹出的仿真波形,可以看到,波形验证了我们的设计是正确的:

至此,使用 Quartus 调用 Modelsim 进行仿真就告一段落了,读者可以感觉到 Modelsim 的功能的强大,我会在后面的章节会详细讨论 Modelsim 的使用方法。

我的 FPGA 学习历程(05)—— 使用 Modelsim 仿真工具的更多相关文章

  1. 我的 FPGA 学习历程(03)—— 使用 Quaruts 自带仿真工具

    在上一篇中详细的介绍了怎样创建原理图工程,这篇同样使用原理图工程新建一个多路选择器,目的是学习使用图形输入的仿真工具输入仿真激励. 新建工程,并绘制以下的原理图. 编译项目,会多出一个警告: Crit ...

  2. 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装

    高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...

  3. 我的 FPGA 学习历程(09)—— 时序逻辑入门

    讲到这篇时,组合逻辑就告一段落了,下面是一些总结: 描述组合逻辑时,always 语句中的敏感信号列表中需要列出全部的可能影响输出的变量 描述组合逻辑时,always 语句中的赋值总是使用阻塞赋值符号 ...

  4. 我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制

    PWM 是一种调节输出功率的技术(俗称调压),其原理在于改变输出方波的占空比,具体输出见下图: 输出信号为电压值,当负载为恒阻时,上图中的输出功率分别为 25%.50%.75%. 实现方法如下: 设置 ...

  5. 我的 FPGA 学习历程(02)—— 实验:点亮 LED 灯

    关于 Quartus 的操作可以使用 Quartus 自带的帮助,帮助中带有全套的操作教程. 中文网络教程链接(链接至 altera中文官网,点击观看) Quartus II 软件设计系列:基础 Qu ...

  6. 我的 FPGA 学习历程(12)—— 电子钟项目准备

    初学 FPGA 的时候,我们总是存在很多疑问,比如:xilinx 和 altera 的 FPGA 那种比较好.verilog 语言被如何综合成具体硬件电路.RTL 级电路是什么意思等等.现在我们就不会 ...

  7. 我的 FPGA 学习历程(11)—— 实验:按键消抖

    按键是一个输入设备,在理论上可以归为开关一类,理想的按键波形如下: 然而由于按键的机械特性,断开和闭合动作是不可能在一瞬间完成的,实际的波形如下: 抖动期间电平处于临界值,由于晶振的频率相当的高,数字 ...

  8. 我的 FPGA 学习历程(08)—— 实验:点亮单个数码管

    数码管是一种常见的用于显示的电子器件,根据数码管大致可以分为共阴极和共阳极两种,下图所示的是一个共阳极的数码管的电路图(摘自金沙滩工作室的 51 开发板电路图),我的 AX301 开发板与这张图的情况 ...

  9. 我的 FPGA 学习历程(07)—— BCD 编码:移位加 3 算法

    2-10 进制码,也称为 BCD 码,它的编码方式则是通过一个 4 位二进制来表示一个 10 进制数,部分十进制对应的 BCD 码如下 十进制数 | BCD 码 13 --> 0001_0011 ...

随机推荐

  1. POM文件分析记

    pom英文全称:project object model 1.简介 pom.xml文件描述了maven项目的基本信息,比如groupId,artifactId,version等.也可以对maven项目 ...

  2. VUE-开发工具VSCode

    VUE-开发工具之VSCode VSCode是微软出的一款轻量级代码编辑器,免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全.Emme ...

  3. [物理学与PDEs]第4章第2节 反应流体力学方程组 2.1 粘性热传导反应流体力学方程组

    1.  记号: $Z=Z(t,{\bf x})$ 表示未燃气体在微团中所占的百分比 ($Z=1$ 表示完全未燃烧; $Z=0$ 表示完全燃烧). 2.  物理化学 (1)  燃烧过程中, 通过化学反应 ...

  4. [译]Ocelot - Request Id / Correlation Id

    原文 Ocelot可以通过header的形式发送一个requestid.ocelot会将这个requestid转发到下游服务. 如果在日志配置中设置了IncludeScopes为true,那么requ ...

  5. vue之生命周期函数例子

    执行代码看生命周期函数的执行顺序 <!-- 根组件 --> <!-- vue的模板内,所有内容要被一个根节点包含起来 App.vue --> <template> ...

  6. 两个同级div重叠的情况

    一个div使用了position,自身脱离了文本流,另一个顶上去.

  7. localhost和127.0.0.1的区别

    localhost(local)是不经网卡传输,它不受网络防火墙和网卡相关的的限制. 127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制. ::1     是IPv6中的12 ...

  8. PowerDesigner的Table视图同时显示Code和Name的方法[转发]

    PowerDesigner中Table视图同时显示Code和Name,像下图这样的效果: 实现方法:Tools-Display Preference

  9. resultset 查询时返回多个相同值

    背景 做个简单的接口开发,拿到的平台比较不理想,好久没重新搭建一个了,正好练练手.用了基础的servlet,maven,logback(log4j不支持格式化,比较烦人),fastjson,druid ...

  10. 全平台网页播放器兼容H5与Flash还带播放列表

    许久不发文了,2018年第一篇文章,写点干货--关于网页播放器的问题.嗯,实际上我是在52破解首发的,当做新人贴. 目前来说,网页播放器不少,随便找找都能找到一大堆,然而好用的就那么几个,比如ckpl ...