写在前面的话
在这里梦翼师兄想特地强调一下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的联合设计、调试过程,我们之后的学习都以此操作为基础,梦翼师兄在这里建议大家一定要勤加练习,掌握好软件的基本用法。