Modelsim和Quartus II联合使用

写在前面的话

在这里梦翼师兄想特地强调一下Modelsim 这个软件,那么这个软件到底是做什么的呢?在这里,我问大家一个问题,假设我们有一块硬件电路板设计完成以后,不知道功能是否正常,那么我们需要怎么做呢?答案很简单的啦,就是我们所谓的“测试”,给电路板上电以后,输入一定的测试激励,观察电路板有什么样的结果输出,如果输出结果和输入激励的对应关系是正确的,说明电路板没有问题,反之,如果电路板有问题,通过这种方式,我们也能最终确定是哪一个部分出现了问题。

     测试硬件电路板是这样,那么测试我们的代码逻辑自然也是同样的道理。我们写的是硬件描述语言,代码写完以后,就可以等效于在FPGA片内实现了一个硬件电路块,那么这个电路块是否能够按照我们的预期进行工作呢?我们也需要对他进行测试。当然了,这里的测试,指的可不是用一堆的导线、电源线连接起来,组成密密麻麻的网络去做测试,如果是这样,以梦翼师兄的智商,估计早就干不下去了呢!

     现在的主流不就是电子设计自动化吗?Modelsim 就是这样神奇的一款软件,我们只需要对其进行简单的编程,就可以模拟真实环境下各种复杂信号的输入,利用软件提供的显示界面和窗口,我们可以方便的查看我们代码逻辑所有信号线的电平变化,可以帮助我们迅速定位问题所在。 

Quartus II和Modelsin联合使用

     根据前面小节的步骤,我们已经安装好了开发必备的软件工具QuartusII 15.0 以及仿真工具Modelsim。可是,这两个工具如何使用呢?本节,梦翼师兄将通过一个很简单的计数器工程教给大家两个工具的常用使用方式。

     首先,新建一个文件夹,并命名一个有意义的英文单词(注意:文件所在路径不能包含任何的中文字符或汉字)

       然后关闭该文件夹,双击并打开桌面上的Quartus软件

点击File->New Project Wizard 选项,创建一个新的工程,出现如下界面

点击【Next】

然后选择工程所在路径如下

 

给工程命名如下(建议:工程名称最好和文件夹名称一致)

 

点击【Next】

点击【Next】

 上边这个界面是让我们添加现有的已经写好的文件,因为我们没有写好的文件,所以忽略这一步,直接点击【Next】

当前界面下,我们可以选择自己所使用的具体芯片型号,梦翼师兄选择芯片型号如下:

点击【Next】

 

选择仿真工具和语言如下

点击【Next】,出现我们的工程设置报告

 点击【Finish】退出,完成工程建立

 

通过以上步骤,一个新的工程就建立完毕了,接下来如果要录入代码,我们需要新建一个文本编辑器。

点击File->New 出现如下对话框

 

点击【Verilog HDL File】,创建一个Verilog的文本编辑器,选中以后点击【OK】

接下来,我们就可以在这个白色的编辑界面下录入我们的代码

代码编写完毕之后我们需要对其进行编译,检查是否有语法错误。编译的快捷方式有两种【ctrl+L】和【ctrl+K】。【ctrl+L】指的是全编译,软件不但会检查代码的语法,同时还会布局布线,将代码映射成具体的网表电路,如果我们需要将代码下载到开发板则在下载之前必须进行一次全编译,全编译的时间也相对较长。【ctrl+K】指的是普通的编译,只是检查语法错误,编译速度较快。在这里,梦翼师兄点击【ctrl+L】,编译以后的结果如下:

上图所示界面为资源报告,编译结束以后,软件会告诉使用者片内资源的使用情况。在底侧的报告栏提示“EDA Netlist Writer was successful”,并且没有给出红色的错误报告,说明我们的代码语法正确。

刚刚说过,编译通过只能说明我们的语法没有问题,那么逻辑呢?我们想要的功能可以实现吗?这个就不得而知了,毕竟软件并不知道我们的最终目的。因此,我们必须借助于另外一个工具Modelsim进行仿真,通过波形查看具体的逻辑是否正确。

那么如何才能进行仿真呢?大家可以将仿真理解为我们平时测试电路板的过程,就是给待测单元一定的输入,观察它有什么样的输出以及内部过程如何。因此,在调用Modelsim之前,我们需要编写一段测试激励,给待测模块输入测试激励。现编写测试代码如下:

测试代码编写完毕之后,我们首先需要对软件进行一些设置。如下图所示,右键点击工程名称“counter”

选择“Settings”,出现如下界面

 

点击选择“Compile test bench”

点击【Test Benchs…】

点击【New】

 输入测试文件模块名称如下

在“File name”这一测点击【…】

 选择tb.v文件

 

点击【Open】

点击【Add】

点击【OK】

点击【OK】

点击【OK】,退出设置即可。通过上面的步骤,Modelsim和Quartus级联的设置就完成了。返回Quartus界面如下

选择Tools->Run Simulation Tool->RTL Simulation

点击以后出现如下Modelsim界面

 

点击stop按钮,停止掉现在的波形

然后【ctrl+A】选中所有的信号

点击键盘上的Delet键,删除全部波形

在“sim”工具栏选中并右键点击counter

接下来选择【Add Wave】(注:通过这种方式,我们可以在波形中看到所有的输入输出变量以及内部变量

点击“Toggle leaf names<->full names”

点击【ctrl+G】实行自动分组

右键选中信号的名称

在【Radix】选项中选择无符号类型数据,改变信号的显示进制(注:大家可以根据需要选择其他的显示进制

点击【ctrl+S】,保存波形

点击【OK】确认保存

接下来,在命令窗口(Transcript)输入restart指令

点击“回车键”确认,弹出如下对话框

 

继续点击“回车键”

 

接着在命令窗口输入“run 0.1ms” (注:具体时间可以自定义

继续点击“回车键”确认

 

用鼠标点击波形界面

通过上面工具栏可以缩小或者放大波形,可以查看波形的任意位置

通过以上过程,我们完成了Quartus和Modelsim的联合设计、调试过程,我们之后的学习都以此操作为基础,梦翼师兄在这里建议大家一定要勤加练习,掌握好软件的基本用法。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )