如何在quartusII中调用modelsimaltera下载-altera

02. ModelSim软件使用讲解 - ZIRCON
HELLO FPGA 之 软件工具篇第二节 ModelSim软件使用讲解§1.1 ModelSim软件介绍Mentor公司的ModelSim是工业界最优秀的语言仿真器,它支持XP、Win7和Linux系统,是单一内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、单一内核仿真,不仅编译仿真速度业界最快、编译的代码与平台无关,而且便于保护IP核。它还提供了最友好的调试环境,具有个性化的图形界面和用户接口,为用户加快调试提供强有力的手段,它是FPGA/ASIC设计的首选仿真软件。Modelsim有几种不同的版本:SE(System Edition)、DE(Deluxe Edition)、PE(PersonalEdition)和OEM(Orignal EquipmentManufactuce,即原始设备制造商),其中SE是最高级的版本,而集成在 Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是OEM版本。我们这里选择使用的是Altera公司提供的OEM版本,也就是我们常说的ModelSim AE(即:ModelSim-Altera Edition)。下面我们给出Altera官方对ModelSim AE的介绍,如图2.1所示。2.1 ModelSim Altera软件介绍(源自)从该图中我们可以看出,ModelsimAltera是有两个版本的,一个是免费版本(ModelSim-Altera Starter Edition);一个是收费版本(ModelSim-Altera Edition)。由于图中给出了收费版本和免费版本的区别,所以我们就不在进一步介绍它们了,这里我们说一下,ModelSim-Altera 版软件与 ModelSim PE/DE软件的区别,ModelSim-Altera 版软件仅支持 Altera 门级库。ModelSim-Altera 版软件包括 ModelSim PE 的基本特性,包括了行为仿真、HDL 测试台和 Tcl 脚本。但是,ModelSim-Altera版软件并不支持 ModelSim PE 的可选特性,ModelSim-Altera版的仿真性能要低于 ModelSim PE/DE软件。介绍完了ModelSim软件,接下来我们再来介绍一下ModelSim使用流程。在介绍ModelSim的使用流程之前,我们需要对给大家说明一下仿真的两个概念,仿真一般分为前仿真与后仿真:(1)前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。(2)后仿真也就是时序仿真。是指电路已经映射到特定的工艺环境下,综合考虑电路的路径延迟与门延迟的影响,验证电路在一定时序条件下是否满足设计构想的过程。说完了仿真的两个概念,接下来我们在来说一说ModelSim的使用,ModelSim的使用主要分为两种情况,第一种就是通过Quartus II软件调用我们的ModelSim来进行仿真,这种情况也就是我们通常所说的自动仿真。第二种情况就是直接打开ModelSim进行仿真,不经过我们的Quaruts II软件,这种情况也就是我们通常所说的手动仿真。不管是自动仿真还是手动仿真,它们的都遵循以下5个步骤:(1)新建工程。(2)编写Verilog仿真文件。(3)编写Testbench仿真文件。(4)开始功能仿真。(5)开始时序仿真。当我们执行了仿真以后,ModelSim软件会根据我们的设计文件和仿真文件生成波形图,最后,我们观察波形并判断设计的代码功能是否正常。前仿真完成以后,接下来我们就需要进行后仿真了,后仿真与前仿真的步骤大体相同,只不过中间需要添加仿真库、网表和延时文件等步骤。这里我们要注意的是,对于时序要求不严格的小规模设计,我们一般只进行功能仿真。说完了ModelSim的使用流程,接下来我们将会对每个流程进行详细的操作演示,一步步、手把手带领大家学习使用ModelSim软件。首先我们讲解的ModelSim自动仿真,所谓自动仿真,其实是在Quartus II中调用ModelSim软件来进行仿真,在调用过程中,Quartus II会帮我们完成ModelSim中的所有操作,我们只需要分析最后的仿真结果。下面我们就以上章节中我们创建的Quartus II软件工程为例,进行仿真。首先我们打开之前的Quartus II工程,如图2.2所示。2.2 Quartus II软件界面在该页面中,我们在菜单栏中找到【Tool】→【Options】按钮并打开,在打开的页面左侧,我们找到“EDA Tool Options”点击,如图2.3所示页面。2.3 EDA Tool Options工具设置页面在该页面中,如果你安装的是ModelSim软件,那么你需要在ModelSim路径中进行设置,这里我们使用的ModelSim-Altera,所以我们将ModelSim-Altera路径设置成了C:\altera\13.1\modelsim_ase\win32aloem。这里需要大家注意的是一定要选择modelsim_ase文件夹中的win32aloem,不要选择modelsim_ae文件夹中的win32aloem。还记得我们前面说的么?ae是收费版本,我们是不能使用的,这里的ase免费版本也是可以满足我们的设计的。路径设置完成以后,我们点击【OK】返回我们的Quartus II软件界面。我们在Quartus II软件页面的菜单栏中,我们找到【Assignments】→【Settings】按钮并打开,在打开的页面左侧我们找到“EDA Tool Settings”点击,如图2.4所示页面。2.4 EDA Tool Settings选择工具页面还记得我们之前创建工程的时候,由于在QuartusII软件中我们没有用到仿真,所以我们将这里设置成了“None”,现在我们需要用到仿真工具了,我们需要在这里将Simulation设置成“ModelSim-Altera、Verilog HDL”。设置完成之后,我们点击【OK】返回Quartus II软件页面中。我们在Quartus II软件页面的菜单栏中,我们找到【Processing】→【Start】→【Start TestBench Template Writer】按钮并点击,这时Message窗口中会显示,如图2.5所示。2.5 Message窗口信息提示我们可以在该图中看到,这么一条信息:GeneratedVerilog Test Bench File E:/Zircon_Verilog/Verilog_First/simulation/modelsim/Verilog_First.vt。我们可以从这条信息中知道,Quartus II软件自动给我们生成了一个TestBench模板,我们只需要在这个模板上稍作修改就能直接使用了。我们在工程目录下找到Verilog_First.vt文件,我们可以用记事本打开进行修改,也可以使用QuartusII软件打开它进行修改,这里我们建议还在Quartus II软件中进行修改。我们在Quartus II软件的菜单栏中找到【File】→【Open】按钮并打开,在对话框中找到我们的Verilog文件,如图2.6所示。2.6打开Verilog_First.vt文件打开之后,如图2.7所示。2.7 Verilog_First.vt文件中的内容在该图中我们可以看到,Quartus II软件已经为我们完成了一些基本工作,包括端口部分的代码和接口变量的声明,我们要做的就是在这个模板里添加我们需要的测试代码(也就是我们常说的激励)。下面我们给出修改完毕的代码,如代码2.1所示。2.1TestBench源代码1`timescale1ps/1ps2moduleVerilog_First_vlg_tst();3// &constants & & & & & & & & & & & & & & & & & & & & & 4// general &purpose registers5regeachvec;6// test vector &input registers7regCLK_50M;8regRST_N;9// wires & & & & & & & & & & & & & & & & & & & & & & & &10wireLED1;1112// assign &statements (if any) & & & & & & & & & & & & & 13Verilog_Firsti1(14// port map - &connection between master ports and signals/registers & 15 & .CLK_50M(CLK_50M),16 & .LED1(LED1),17 & .RST_N(RST_N)18);1920initial21begin22 & #0CLK_50M=1'b0;23 & #10000RST_N=1'b0;24 & #10000RST_N=1'b1;25 & #$stop;26end2728always#1000029begin30 & CLK_50M=~CLK_50M;31end32endmodule为了让读者能够更好的理解,这里我们就简答介绍一下TestBench源代码:代码的第1行,表示仿真的单位时间为1ps,精度为1ps。想要进行仿真首先要规定时间单位,我们建议大家最好在Testbench里面统一规定时间单位,不要在工程代码里定义,因为不同的模块如果时间单位不同可能会为仿真带来一些问题,timescale是Verilog语法中的不可综合语法。代码的第2行就是我们熟悉的部分了,其中第5行至第10行是我们的数据类型定义,这里我们可以看到reg eachvec是一个多余的信号,没有任何作用,我们也可以将它删除,到了第7行、第8行、第10行,代码相信大家都能看的懂,不过为什么要用reg和wire类型去定义,想必大家就不一定能够理解了。大家看,如图2.8所示。2.8 TestBench模块与Verilog模块我们可以把Testbench看做一个模块,我们利用TestBench这个模块和我们的Verilog模块进行数据通信,TestBench模块中的输出信号便是我们Verilog代码中的输入信号,TestBench模块中的输入信号便是我们Verilog代码中的输出信号。因此,在Verilog模块中的reg LED1在Testbench模块中就变成了wire LED1,Verilog模块中的wire CLK_50M在Testbench中则对应为reg CLK_50M。说完了数据类型声明,接下来我们再来看第13行至第18行,这一部分就是一个模块调用,它将我们的Verilog模块中的信号连接到我们的TestBench模块中。最后,我们再来看下第20行至第32行代码,其中第20行至第26行是信号的初始化,第28行至第31行是时钟信号的生成。这里我们主要来讲讲#10000,#10000表示的是延迟10000ps(即10ns),具体的延迟单位,还是要看我们的timescale是如何设置的。至此,整个代码都介绍完了。编写完了仿真文件,接下来我们需要在QuartusII软件中配置仿真功能,我们在Quartus II软件界面的菜单栏找到【Assigement】→【Settings】按钮并打开,在打开的页面中,我们找到左侧的Simulation点击,出现如图2.9所示的页面。2.9 Setting中Simulation选项卡我们选中“Compile Test bench”,然后单击后面的【Test Benches】按钮,则出现如图2.10所示的“TestBenches”窗口(也就是图中上面的窗口),接着我们单击【New】按钮,则会出现如图2.10所示的“NewTest Bench Settings”窗口(也就是图中下面的窗口)。2.10添加仿真文件页面在该页面中,我们将TestBench模块名输入到“Test bench name”和 “Top level module in testbench”的编辑栏中。接着我们在“Test bench and simulation files”下拉列表框中添加仿真文件,如图2.11所示,点击【Open】即可。2.11选择仿真文件页面然后单击【Add】 按钮添加到最下面的列表中如图2.12所示。2.12添加仿真文件页面完成后我们单击【OK】按钮,便可看到如图2.13所示的“Testbenches”窗口的列表中出现了刚才添加的仿真文件相关信息,至此,我们仿真文件添加完成了,接着我们单击【OK】按钮,返回我们的Quartus II软件界面。2.13仿真文件添加完成后的TestBenches窗口万事俱备只欠东风,经过上面这么多的操作步骤,我们终于完成了所有设置,接下来我们就可以进行仿真了,在开始仿真之前,我们这里有一点要需要注意,我们在Quartus II软件中实现的功能是LED闪烁,它的间隔时间是1s,如果我们想要仿真这个功能,那么我们仿真软件运行时间最低就是1s。这1s钟在我们看来是很短很短的,不过在仿真软件看来是很长很长的,我们的仿真软件单位可是ps。为了便于我们仿真,这里我们需要稍微改动一下Verilog代码,我们需要将parameter SET_TIME_1S =27'd50_000_000;修改为parameter SET_TIME_1S = 27'd50;也就是将我们原来的1s钟修改成了1us。修改完毕后,我们在Quartus II软件界面中的菜单栏中找到【Tools】→【Run Simulation Tool】→【RTL Simulation】按钮并点击,则会出现如图2.14所示界面。2.14 ModelSim仿真窗口界面在该软件启动过程中,我们不需要任何操作,它会自动完成仿真,并给出我们所需要的波形,当波形图出现之后,我们就可以查看波形来判断设计功能是否正常了。为了方便大家更容易观察波形,我们这里将会对ModelSim软件中几个常用小工具进行简单的讲解,如图2.15所示。2.15查看波形常用工具前面的几个放大镜模样的工具是放大、缩小等功能,鼠标放到图标上会显示出它们的快捷键,中间的黄色图标是用来在波形图上做标记的,后面的则是用来运行仿真,暂停仿真、重新运行等功能。如图2.16所示界面,就是我们利用上述工具制作出来的。2.16分析仿真波形在该页面中,我们就配合我们的代码给大家简单的分析一下这个波形,首先我们可以看到我们在0ns时间处添加了一个黄色标记,为了不让黄色标记移动,我们将这个黄色标记给锁住了,我们还可以在它的名字处修改成我们想要表示的名称,这里我们修改为Start,也就是仿真开始。我们在回顾一下我们的激励信号是怎么编写的,代码如代码2.2所示。2.2激励信号1initial2begin3 & #0CLK_50M=1'b0;4 & #10000RST_N=1'b0;5 & #10000RST_N=1'b1;6 & #$stop;7end89always#1000010begin11 & CLK_50M=~CLK_50M; & &12end我们对照代码,对照仿真波形,我们可以看到,首先在0ns处,CLK_50M信号我们赋值为0,我们观察波形图,CLK_50M信号确实为低电平,接下来,我们等待10ns,我们又给RST_N赋值为0,这时大家要注意了,由于等待了10ns,always模块也将会执行,所以CLK_50M这时等于1。我们观察波形,果然,RST_N=0,CLK_50M=1;依次类推,直至仿真结束,看完了激励信号,我们在来看下我们的LED1信号是不是1us翻转一次呢,大家看图2.17所示。 2.17分析LED1仿真波形信号我们标出LED1信号的第一个上升沿,大家可以看到第一个上升沿的时间是1030ns,然后我们又标记出LED1信号的下降沿,大家也同样可以看到是1050ns,1050ns-1030ns=1020ns(也即使1.02us),似乎并不精准,这仿真太也不靠谱了吧!其实并不是这么回事,大家可以考虑考虑。下面就是见证奇迹的时候了:我们的时钟频率是50MHz,周期也就是20ns,我们设置翻转50次,50*20ns刚好就是我们的1us,但是这里有一个bug,什么bug呢,0-50其实是51次,51*20ns=1020ns,也就是说我们的仿真没有错,是我们搞错了。我们只要将Verilog程序中的50改成49,即可修复这个bug。这也就是我们为什么要仿真,明明感觉我们写的代码很可靠,只要一仿真就会露出马脚。下面大家在来看看这个细节图,如图2.18所示。2.18 LED1仿真信号的细节图从该图中我们可以看到,CLK发生了变化,我们的LED1信号也跟着发生了变化,它们是同时发生变化的,中间是没有任何延迟。这也就很好的说明了,为什么我们说功能仿真(即,前仿真),它是不考虑延迟的。这里我们需要注意的是:我们修改Verilog程序代码和仿真文件代码(前提是不修改端口信号),我们是可以不需要重新编译工程的,我们只要关闭ModelSim仿真软件,再一次点击开始仿真即可。如果我们修改了端口的输入和输出,那么这里最好重新全编译一次,并且我们需要重新生成仿真模板文件进行修改。至此,我们就完成了功能仿真,完成了功能仿真,接下来我们就来看看时序仿真是如何操作的,我们还是回到Quartus II软件界面中,在Quartus II软件界面中,首先,我们需要全编译一下我们的工程,这时我们打开工程下的Simulation/modelsim文件夹,如图2.19所示。2.19工程下modelsim文件夹内容页面在该页面中我们可以看到很多文件,有我们功能仿真生成的文件,还有我们时序仿真要用到的.vo文件(网表文件)和.sdo文件(时延文件),有了这些文件,我们才能进行时序仿真。(如果打开并没有找到.vo和.sdo文件,那么你需要重新创建工程,在选择EDA工具时,选择Modelsim-Altera,Verilog,创建完成后重新编译工程)。接下来我们就可以回到Quartus II软件界面中,我们在菜单栏中找到【Tools】→【Run Simulation Tool】→【Gate Level Simulation】按钮并点击,出现如图2.20所示页面。2.20 Timing model选择页面这里我们可以看到有三种模式,我们使用默认的即可,点击【Run】,则会出现如图2.21所示页面。2.21 ModelSim软件仿真页面 这时,大家在来看一看LED1和CLK_50M这两个信号,如图2.22所示。2.22LED1仿真信号的细节图我们很清楚的可以看到它们并不是同时发送变化,它们之间是有延迟的。至此,我们完成了时序仿真。在开始动手仿真之前,首先,我们需要创建一个文件夹用来放置我们的ModelSim仿真工程文件,这里我们就在之前创建的Quartus工程目录下的simulation文件夹中创建一个manual_modelsim文件夹。manual_modelsim文件夹创建好以后,我们还需要将已经编写好的Verilog仿真文件和Testbench仿真文件添加至我们的manual_modelsim文件夹中,这里我们就将自动仿真时用到的Verilog_First.v文件和Verilog_First.vt文件复制到manual_modelsim文件夹。(Verilog_First.v文件在我们的Quartus II工程目录下,Verilog_First.vt文件在我们的Quartus II工程目录下simulation文件夹下的modelsim文件夹中。)完成以上准备工作之后,我们就可以打开ModelSim-Altera10.1d (Quartus II 13.1)软件了,这里我们需要注意的是,我们打开的ModelSim软件版本是ModelSim-Altera Starter Edition免费版本,如图2.23所示。2.23ModelSim软件界面打开软件之后,我们在ModelSim软件界面的菜单栏中找到【File】→【New】→【Project】菜单并点击打开,弹出的对话框如图2.24所示。2.24创建新的仿真工程对话框我们从对话框中可以看到,ProjectName(工程名)就是用来设置我们的工程名,这里我们将它命名为Verilog_First,这里的命名方式,我们建议大家最好根据我们仿真的文件来进行命名,时间久了,当我们记不得这个仿真工程是用来仿真什么的时候,我们看到这个工程名,就能够知道它是用来做什么的了。Project Location(工程路径),可以设置工程保存的文件夹,使用者可以根据需要把工程保存到不同的位置。这里我们将路径设置在了E:/Zircon_Verilog/Verilog_First/simulation/manual_modelsim文件夹中。下面这两部分是用来设置仿真库名称和路径的,这里我们使用默认即可。设置好工程名、工程位置,我们点击【OK】按钮,弹出如图2.25所示界面。2.25在创建好的工程中添加工程文件我们可以从该图中的选择窗口中看出,它共有四种操作:Create New File(创建新文件)、Add Existing File(添加已有文件)、Create Simulation(创建仿真)和Create New Folder(创建新文件夹)。这里我们选择Add Existing File(添加已有文件),如图2.26所示。2.26在创建好的工程中添加已有文件 & & 在该页面中我们可以看到,我们将我们之前准备的好两个文件Verilog_First.v和Verilog_First.vt添加至我们的ModelSim仿真工程中。添加好以后,我们点击【OK】按钮,然后我们再关闭【Add items to the Project】对话框,如图2.27所示。2.27成功添加Verilog文件在该图中,我们可以看出,我们成功添加了Verilog_First.v文件和Verilog_First.vt。添加完文件以后,接下来我们就需要编译我们的仿真文件。编译的方式由两种:Compile Selected(编译所选)和Compile All(编译全部)。编译所选功能需要先选中一个或几个文件,执行该命令可以完成对选中文件的编译;编译全部功能不需要选中文件,该命令是按编译顺序对工程中的所有文件进行编译。我们可以在菜单栏【Compile】中找到这两个命令,也可以在快捷工具栏或者在工作区中的右键弹出的菜单中找到这两个命令。下面我们单击Compile All(编译全部),将会出现如图2.28所示。2.28代码编译完成文件编译后Status列可能会有三个不同状态。除了上述的用“√”显示的通过状态,还有两个在设计中不希望出现的状态:编译错误和包含警告的编译通过。编译错误即Modelsim无法完成文件的编译工作。通常这种情况是因为被编译文件中包含明显的语法错误,这是Modelsim会识别出这些语法错误并提示使用者,使用者可根据Modelsim的提示信息进行修改。编译错误时会在Status列中显示红色的“×”。包含警告的编译通过是一种比较特殊的状态,表示被编译的文件没有明显的语法错误,但是可能包含一些影响最终输出结果的因素。这种状态在实际使用中也较少会出现,该状态在Status栏中也会显示“√”,但是在对号的后面会出现一个黄色的三角符号,这类信息一般在功能仿真的时候不会带来明显的影响,不过可能会在后续的综合和时序仿真中造成无法估计的错误,所以出现这种状态时推荐读者也要根据警告信息修改代码,确保后续使用的安全性。我们编译完成后,接下来我们就开始配置仿真环境,我们在ModelSim菜单栏中找到【Simulate】→【Start Simulation...】菜单并点击,弹出如图2.29所示页面。2.29配置仿真功能页面从配置仿真功能页面中我们可以看出,该页面中含有6个标签,它们分别是:Design、VHDL、Verilog、Libraries、SDF和Others。对于这6个标签,我们用的最多的就属Design、Libraries和SDF,这三个标签了,下面我们就来简单的介绍一下这3个标签,其余的标签我们一般用不到,这里我们就不再进行介绍了。首先介绍Design标签,该标签内居中的部分是Modelsim中包含的全部库,可展开看到库中包含的设计单元,这些库和单元是为了仿真提供选择的,使用者可以选择需要进行仿真的设计单元开始仿真,被选中的仿真单元的名字就会出现在下方的Design Unit(s)位置。Modelsim支持同时对多个文件进行仿真,可以利用Ctrl和Shift键来选择多个文件,被选中的全部文件名都会出现在Design Unit(s)区域。在DesignUnit(s)区域的右侧是Resolution选项,这里可以选择仿真的时间刻度。时间刻度的概念类似于长度度量单位的米,在Modelsim进行仿真的时候,有一个最小的时间单位,这个单位是使用者可以指定的。如最小单位是10ns,在仿真器工作的时候都是按10ns为单位进行仿真,对10ns单位一下发生的信号变化不予考虑或不予显示,当测试文档有类似于#1 a=1'b1;的句子时,Modelsim就不会考虑句中延迟。这个选项一般都是设置在默认的状态,这时会根据仿真器中指定的最小时间刻度来进行仿真,如果设计文件中没有指定,则按1ns来进行仿真。最下方的区域是Optimization区域,可以再仿真开始的时候激活优化,由于我们是免费版本,很多功能都受限制,所以我们可以看到这里我们不能使用。第二个介绍的标签是Libraries标签,如图2.30所示。2.30 Libraries标签页面在该页面中,我们可以设置搜索库,可以指定一个库来搜索实例化的VHDL设计单元。Search Libraries和Search Libraries First的功能基本一致,唯一不同的是SearchLibraries First中指定的库会被指定在用户库之前被搜索。第三个介绍的标签是SDF,其内容如图2.31所示。2.31 SDF标签页面SDF是Standard Delay Format(标准延迟格式)的缩写,内部包含了各种延迟信息,也是用于时序仿真的重要文件。SDF Files 区域用来添加SDF文件,选择Add进行添加,选择Modify进行修改,选择Delete删除添加的文件。SDF Options设置SDF文件的warning和error信息。第一个Disable SDF warning是禁用SDF警告,第二个Reduce SDF errors to warnings 是把所有的SDF错误信息编程警告信息。Multi-Source delay可以控制多个目标对同一端口的驱动,如果有多个控制信号同时控制同一个端口或互连,且每个信号的延迟值不同,可以在此选项统一延迟。下拉菜单中可供选择的有三个选项:latest、min和max。max即选择所有信号中延迟最大的值作为统一值,min即选择所有信号中延迟最小的值作为统一值,latest则是选择最后的延迟作为统一值。至此,这三个标签我们就介绍完了,接下来我们在Design标签页面中选择work库中的Verilog_First_vlg_tst模块,然后点击【OK】就可以开始进行功能仿真了,其余标签页面中的配置我们使用默认就可以了。在仿真前,Workspace区域一般只有Project和Library两个标签。开始仿真后,在Workspace区域一般会增加sim标签、Files标签和MemoryList标签。除了Workspace区域会增加标签,在MDI窗口也会新出现一个Object窗口等,在Workspace区域中的sim标签选中一个设计单元,在Object窗口就会出现该单元包含的输入/输出端口,如图2.32所示。2.32 ModelSim波形仿真页面接下来我们在Object窗口中选中我们需要仿真的信号,然后点击右键,在弹出的菜单栏中找到【Add Wave】并单击,我们会发现,我们的信号添加到了Wave窗口中。这时,我们可以按快捷键F9,也可以在ModelSim的菜单栏中找到【Run】按钮,点击运行就会出现我们想要的波形,这里我们需要注意的是,默认的运行时间一次运行的是100ps,我们可以在菜单栏中进行修改,也可以直接在控制台中输入命令run 100ns,直接运行100ns,如图2.33所示。2.33波形仿真100ns到了这里,我们就完成了手动的功能仿真,后面的工作就是分析我们仿真出的波形,由于这部分内容和我们在自动仿真中所讲的内容完全是一样的,所以我们这里就不再进一步重复讲解了。下面我们再来看看手动如何进行时序仿真。时序仿真与功能仿真的步骤大体相同,只不过中间需要添加仿真库、网表(.vo)文件和延时(.sdo)文件。到了这里,问题来了,仿真库、网表(.vo)文件和延时(.sdo)文件怎么获得呢?网表(.vo)文件和延时(.sdo)文件,其实我们在自动仿真的配置仿真功能中已经生成了,当我们配置好仿真功能之后,我们在Quartus进行一次全编译,这时,我们打开Quartus工程目录下simulation/modelsim中就能够看到Verilog_First.vo和Verilog_First_v.sdo这两个文件。我们将这两个文件复制到我们的manual_modelsim文件夹下。仿真库,我们需要到我们Altera的安装目录下,也就是C:\altera\13.1\modelsim_ase\altera\verilog中找到cycloneive文件夹,然后我们将cycloneive文件夹也复制到我们的manual_modelsim文件夹下。万事具备,接下来我们就可以打开我们的ModelSim软件,如图2.34所示。2.34 ModelSim软件界面通过该图,我们可以看出,这个工程是我们之前做功能仿真的工程,当我们关闭ModelSim之后,我们再次打开ModelSim这个软件,它会自动记录上一个我们使用的工程并打开。我们就直接在这个工程上进行更改,首先我们右键在弹出的菜单栏中找到【Add to Project】→【ExistingFile...】按钮并点击打开,则弹出图2.35所示对话框。2.35添加Verilog_first.vo文件在该对话框中我们点击【Browse】,在弹出的对话框中我们找到manual_modelsim文件夹下的Verilog_First.vo,然后将Verilog_First.vo添加至我们的ModelSim仿真工程中。接下来我们进行代码全编译,编译完成后,我们在ModelSim的菜单栏中找到【Simulate】→【Start Simulation...】按钮并点击打开,我们打开Libraries标签,将仿真库添加至配置仿真环境中,如图2.36所示。2.36添加cycloneive仿真库这里我们需要注意的是,只添加一个cycloneive仿真库是不够的,我们还需要将我们ModeSim仿真库中的altera_ver库添加进来,如图2.37所示。2.37添加altera_ver仿真库如果不知道需要选择哪个库,我们可以先直接运行仿真,这时候ModelSim控制窗口中会提示错误信息,我们根据错误信息便能够分析出我们需要的库名,然后我们再重复上述步骤添加完了仿真库,接下来我们在SDF标签页面中添加Verilog_First_v.sdo文件,如图2.38所示。2.38添加Verilog_First_v.sdo文件这里需要我们注意的是,因为的我们的实例化名是i1,所以我们填写的是/i1。添加完成之后,最后我们在返回Design标签页面中,找到work下的Verilog_First_vlg_tst,如图2.39所示。2.39配置仿真环境页面在该页面中,我们点击【OK】就可以开始进行时序仿真了,到了这里,后面的工作就和我们的功能仿真是一样的了。至此,我们ModelSim软件的使用就讲解完了,按理说,我们下面应该进入第三章节的SignalTapII软件的使用讲解,经过我们深思熟虑之后,我们决定下面将对VWF波形仿真进行讲解。下面我们就来介绍一下VWF(Vector Waveform File)波形仿真,用过Quartus II 9.0版本或者更早版本的朋友,也许都用过,那个时候大家都比较喜欢用VWF波形仿真。虽然VWF波形仿真比较方便,但是它的功能不如ModelSim强大,VWF波形仿真只适用于一些简单的项目,对于一些复杂的项目,大家还是选择了ModelSim,ModelSim渐渐的被大家所接收,慢慢的流行起来了。随着ModelSim的日益强大,VWF曾一度被Altera给抛弃,不过现在不知道什么原因,Altera又将此功能添加了回来,下面我们就带大家一起来看一看VWF是怎么使用的。首先,我们利用Quartus II软件打开我们之前创建的工程,如图2.40所示页面。2.40 Quartus II软件界面我们在Quartus II软件菜单栏中找到【File】→【New】按钮并点击打开,如图2.41所示页面。2.41创建VWF仿真文件在该页面中,我们选中“UniversityProgram VWF”,然后我们点击【OK】,出现如图2.42所示页面。2.42 VWF仿真页面在该页面中,我们在菜单栏中找到【Edit】→【Insert】→【Insert Node or Bus...】按钮并点击,则会出现如图2.43所示页面。2.43添加仿真端口在该页面中,我们可以将我们要仿真的输入和输出端口添加进来,这里我们以时钟信号为例,将时钟信号添加至仿真页面中,首先,我们点击该页面中的【Node Finder...】,则会出现如图2.44所示页面。2.44添加时钟信号完成上面的4步操作,我们点击【OK】,如图2.45页面。2.45时钟信号添加完成的VWF仿真页面在该页面中,我们可以看到CLK_50M时钟信号已经被我们添加进来了,接下来我们利用同样的方法将RST_N和LED1信号也添加进来,这里要注意的是,在添加LED1信号的时候,我们要记得将LED1信号类型改为输出,添加完成之后,如图2.46所示。2.46所有信号都添加完成的VWF仿真页面添加完了信号,接下来我们就需要设置一下仿真时间,在VWF中,仿真时间有两项可以设置,第一个是网格之间的时间,第二个是仿真时间的总长度,默认的网格之间的时间是10ns,仿真时间的总长度是1us,这里我们就将仿真时间的总长度设置为10us。我们在VWF仿真页面的菜单栏中找到【Edit】→【Set End Time...】按钮并点击,则会出现如图2.47所示页面。2.47设置仿真时间总长度的大小在该页面中,我们将原来的1us改成10us即可,在这里我们需要注意的是,由于VWF功能并不强大,所以它所能设置的时间是有限制的,它的时间范围被限制在10ns~100us。设置好了仿真时间,接下来我们就需要给我们的输入信号赋值,我们选中CLK_50M时钟,然后我们可以在工具栏中选择Overwrite Clock,也可以在菜单栏中找到【Edit】→【Value】→【Overwrite Clock】按钮并点击打开,则弹出如图2.48所示页面。2.48产生时钟信号页面在该页面中我们设置了50MHz和占空比50%的一个时钟信号,设置完成以后,我们点击【OK】,这时,我们的CLK_50M信号便有了波形。然后我们在选中RST_N信号,利用同样的方法将RST_N设置为高电平,如图2.49所示。2.49完成输入信号赋值接下来我们就可以进行仿真了,我们找到菜单栏中的【Simulation】→【Run Functional Simulation】按钮并点击,则弹出如图2.50所示页面,2.50保存Waveform.vwf文件对话框在该对话框中,我们选择【Yes】按钮,在弹出的对话框中我们直接点击保存即可,这时,程序开始进行仿真,仿真完成之后则弹出如图2.51所示页面。2.51Waveform.vwf仿真结果至此,我们就完成了VWF波形仿真,后面的工作和ModelSim一样,根据波形图来分析我们的代码功能。当然,我们还可以使用VWF波形进行时序仿真,我们只需要在菜单栏中找到【Simulation】→【Run Timing Simulation】按钮打开即可自动实现时序仿真。至此,有关ModelSim软件的内容,我们就讲解完了,接下来我们讲解的是SignalTap系统调试软件。
上一篇: &
下一篇: &}

我要回帖

更多关于 altera ip核 modelsim 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信