verilog初学者,要求用quartus modelsimII编写代码,modelsim写测试码仿真,我找到了源码,但不会写仿真程序

基于Quartus II + ModelSim SE的后仿真Verilog版_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于Quartus II + ModelSim SE的后仿真Verilog版
上传于||文档简介
&&后​仿​真​V​e​r​i​l​o​g​版
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢&&&&Quartus II + ModelSim SE + 后仿真 + 库文件 + verilog
&Quartus II + ModelSim SE + 后仿真 + 库文件 + verilog
Quartus II + ModelSim SE + 后仿真 + 库文件 + verilog.rar本文件是一个Quartus和Modelsim联合仿真的例子,其中介绍了后仿真的库文件的添加,适合初学者
若举报审核通过,可奖励20下载分
被举报人:
qiaozhilei521
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
课程资源下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
Quartus II + ModelSim SE + 后仿真 + 库文件 + verilog
所需积分:2
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
Quartus II + ModelSim SE + 后仿真 + 库文件 + verilog
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ Modelsim仿真方法 前仿真和后仿真的区别
10.1a 特别版
类型:行业软件大小:315.4M语言:英文 评分:6.8
仿真的目的是在软件环境下,验证电路的行为和设想中的是否一致。使用Modelsim仿真工具进行操作,Modelsim需要和Quartus II建好关联!建立 Quartus II 和 modelsim 的联系①&&完成上述工作之后需要在 Quartus II 中设置 modelsim 路径,Quartus II 菜单Tools ――&General――&EDA Tool Options,进行相关设置,如modelsim:C:\Modeltech_6.3g\win32&&如图2所示。modelsim功能仿真步骤&一、启动软件建立文件夹,在modelsim中选file下的change directory,在其中的choose folder对话框中设置目录路径。二、建立工程选file 的new下面的project,在project name中填写项目名字。项目名最好与顶层文件名一致。project location 是工作目录,可自己选择。default library name可直接采用默认的work,如此,workspace窗口中的library中就会出现work库。三、为工程添加文件选择add exsiting file后,根据相应提示将文件添加打牌projcet中,包括设计顶层文件.v以及测试向量文件.v/.vt。四、编译文件compile中的compile all。五、装载文件选择library中的work里面的测试向量文件,点击simulate下的start simulation。六、开始仿真在workspace下的sim中,选择测试向量,右击,选add中的add to wave,然后在simulate中选择run all。七、退出仿真simulate中的end simulation。注:1 亦可不添加bench,开始的步骤均同上,在装载文件时,选中设计文件,在sim中点add 里面的add to wave。直接对输入信号编辑测试波形(右击要编辑的信号,选中create wave),然后点击run里面的run all。2 在modelsim中直接写testbench。先在file中选中new里面的source,则在菜单栏里面会出现一个source栏目,在source底下勾选show language templates,则会出现该加载项,双击其中的create testbench,会出现一个create testbench wizard,在work中选中设计文件,再点击next,可以指定testbench名及要编译到的库等,默认即可,点击finish后自己添加内容就ok了。保存文件后缀为.v.完了之后同前步骤将testbench文件编译到工作库里面即可。Modelsim的仿真分为前仿真和后仿真,下面先具体介绍一下两者的区别。1 前仿真前仿真也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与Testbench.2 后仿真后仿真也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、Testbench和扩展名为SDO或SDF的标准时延文件。SDO或SDF的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。一般来说后仿真是必选的,检查设计时序与实际的FPGA运行情况是否一致,确保设计的可靠性和稳定性。选定了器件分配引脚后在做后仿真。3 Modelsim仿真的基本步骤Modelsim的仿真主要有以下几个步骤:(1)建立库并映射库到物理目录;(2)编译原代码(包括 Testbench);(3)执行仿真。上述3个步骤是大的框架,前仿真和后仿真均是按照这个框架进行的,建立modelsim工程对前后仿真来说都不是必须的。3.1建立库在执行一个仿真前先建立一个单独的文件夹,后面的操作都在此文件下进行,以防止文件间的误操作。然后启动Modelsim将当前路径修改到该文件夹下,修改的方法是点File-&Change Directory选择刚刚新建的文件夹见下图。图3 新建文件夹做前仿真的时候,推荐按上述建立新的文件夹。做后仿真的时候,在 Quartus II 工程文件夹下会出现一个文件夹:工程文件夹\simulation\modelsim,前提是正确编译 Quartus II 工程;因此,不必再建立新的文件夹了。仿真库是存储已编译设计单元的目录,modelsim 中有两类仿真库,一种是工作库,默认的库名为work,另一种是资源库。Work库下包含当前工程下所有已经编译过的文件。所以编译前一定要建一个work库,而且只能建一个work库。资源库存放work库中已经编译文件所要调用的资源,这样的资源可能有很多,它们被放在不同的资源库内。例如想要对综合在cyclone芯片中的设计做后仿真,就需要有一个名为cyclone_ver的资源库。映射库用于将已经预编译好的文件所在的目录映射为一个modelsim可识别的库,库内的文件应该是已经编译过的,在Workspace窗口内展开该库应该能看见这些文件,如果是没有编译过的文件在库内是看不见的。建立仿真库的方法有两种。一种是在用户界面模式下,点File-&New-&Library出现下面的对话框,选择a new library and a logical mapping to it,在Library Name内输入要创建库的名称,然后OK,即可生成一个已经映射的新库。另一种方法是在Transcript窗口输入以下命令:vlib workvmap work work图4 建立仿真库如果要删除某库,只需选中该库名,点右键选择Delete即可。需要注意的是不要在modelsim外部的系统盘内手动创建库或者添加文件到库里;也不要modelsim用到的路径名或文件名中使用汉字,因为modelsim可能无法识别汉字而导致莫名其妙的错误。3.2编写与编译测试文件&&&&在编写Testbench之前,最好先将要仿真的目标文件编译到工作库中,点Compile-&Compile或 ,将出现下面的对话框,&图5 编译目标文件在Library中选择工作库,在查找范围内找到要仿真的目标文件(Library选择刚才建立的库,查找范围选择目标文件所在的文件夹),然后点Compile和Done;或在命令行输入vlog Counter.v。此时目标文件已经编译到工作库中,在Library中展开work工作库会发现该文件。&&&&&&当对要仿真的目标文件进行仿真时需要给文件中的各个输入变量提供激励源,并对输入波形进行的严格定义,这种对激励源定义的文件称为Testbench,即测试台文件。下面先讲一下Testbench的产生方法。&&&&方法一:我们可以在modelsim内直接编写Testbench,而且modelsim还提供了常用的各种模板。具体步骤如下:&&&&⑴ 执行File-&New-&Source-&verilog,或者直接点击工具栏上的新建图标,会出现一个verilog文档编辑页面,在此文档内设计者即可编辑测试台文件。需要说明的是在Quartus中许多不可综合的语句在此处都可以使用,而且testbench只是一个激励源产生文件,只要对输入波形进行定义以及显示一些必要信息即可,切记不要编的过于复杂,以免喧宾夺主。&&&&⑵ Modelsim提供了很多Testbench模板,我们直接拿过来用可以减少工作量。在verilog文档编辑页面的空白处右键点Show Language Templates然后会出现一个加载工程,接着你会发现在刚才的文档编辑窗口左边出现了一个Language Templates窗口,见下图。图6 应用模板生成 Testbench文件双击Creat Testbench会出现一个创建向导,见下图。&图7 创建向导选择Specify Design Unit工作库下,work工作库下的目标文件,点Next,出现下面对话框:&图8 设置Testbench向导可以指定Testbench的名称以及要编译到的库等,此处我们使用默认设置直接点Finish。这时在Testbench内会出现对目标文件的各个端口的定义还有调用函数接下来,设计者可以自己往Testbench内添加内容了(有注释的为添加的内容),然后保存为.v格式即可。按照前面的方法把Testbench文件也编译到工作库中。图9 生成及修改后的Testbench文件方法二:在 Quartus II 内编写并编译 Testbench ,之后将 Testbench 和目标文件放在同一个文件夹下,按照前面的方法把 Testbench 文件和目标文件都编译到工作库中之后。:如果在工作库中没有该文件(在Testbench文件没有端口的情况下),则在Simulate――&Start Simulate卡片中去掉优化选项,如下图所示。之后再重新编译,即可在工作库中找到该文件。&图10 去掉优化选项3.3执行仿真&&&&因为仿真分为前仿真和后仿真,下面分别说明如何操作。⑴ 前仿真&&&&前仿真,相对来说是比较简单的。在上一步我们已经把需要的文件编译到工作库内了,现在我们只需点simulate-&Start Simulation或快捷按钮 会出现start simulate对话框。点击Design标签选择Work库下的 Testbench 文件,然后点 OK 即可,也可以直接双击 Testbench文件Counter_tb.v,此时会出现下面的界面。图11 start simulate在主界面中会多出来一个Objects窗口,里面显示 Testbench 里定义的所有信号引脚,在Workspace里也会多出来一个Sim标签。右键点击Counter_tb.v,选择Add-&Add to Wave,如下图所示。然后将出现Wave窗口,现在就可以仿真了,见下图。图12 Wave窗口&&&&窗口里面已经出现了待仿真的各个信号,点 将开始执行仿真到100ns,继续点仿真波形也将继续延伸,见下图。&图13 仿真波形若点 ,则仿真一直执行,直到点 才停止仿真。也可以在命令行输入命令: run @1000则执行仿真到1000ns,后面的1000也可以是别的数值,设计者可以修改。在下一次运行该命令时将接着当前的波形继续往后仿真。 至此,前仿真步骤完成。⑵ 后仿真这里是采用的Cyclone ii做的一个counter的例子。后仿真与前仿真的步骤大体相同,只不过中间需要添加仿真库(和所选器件及所有IP Core相关)、网表和延时文件的步骤。后仿真的前提是quartus已经对要仿真的目标文件进行编译,并生成modelsim仿真所需要的.vo文件(网表文件)和.sdo文件(时延文件),具体操作过程又有两种方法,一种是通过Quartus调用Modelsim,Quartus在编译之后自动把仿真需要的.vo文件以及需要的仿真库加到modelsim中,操作简单;一种是手动将需要的文件和库加入modelsim进行仿真,这种方法可以增加主观能动性,充分发挥modelsim的强大仿真功能。① 通过Quartus调用Modelsim使用这种方法时首先要对Quartus进行设置。 先运行Quartus,打开要仿真的工程,点菜单栏的Assignments,点EDA Tool settings,选中左边Category中的Simulation.,在右边的Tool name中选ModelSim(Verilog),选中下面的Run Gate Level Simulation automatically after complication.见下图。图14 对Quartus进行设置Quartus中的工程准备好之后点击start complication按钮,此时modelsim会自动启动,而quartus处于等待状态(前提是系统环境变量中用户变量中PATH要设置好modelsim安装路径,如:D:\Modeltech_6.3\win32)。在打开的modelsim的Workspace窗口中你会发现多了工作库和资源库,而且work库中出现了需要仿真的文件。Modelsim自动将quartus生成的.vo文件编译到work库,并建立相应的资源库。如图所示。图15 Quartus II 编译之后自启动modelsim观察库,可以发现,多了verilog_libs库、gate_work库和work库,但是在&工程文件夹\simulation\modelsim&下,只有verilog_libs和gate_work文件夹,为什么库里面却多了一个work库呢?而且gate_work库和work库文件内容相同!gate_work 库是Quartus II 编译之后自动生成的,而work库是modelsim默认库。仔细观察二者路径,二者路径相同,均为gate_work文件夹,可知 modelsim 将 gate_work 库映射到 work 库。因此,在后续的工作中操作gate_work 库或者 work 库都能得到正确结果。编写测试台程序Counter_tb.v ,最好放在生成的.vo文件所在的目录,以方便在需要手动仿真时使用。点Compile在出现的对话框中选中Counter_tb.v文件,然后点Compile按钮,编译结束后点Done,这时在Work库中会出现测试台文件。如下图所示。图16 编译测试文件点击simulate-&Start Simulation或快捷按钮 会出现start simulate对话框。点击Design标签选择Work库下的Counter_tb.v文件,然后点击Libraries标签在Search Library中点击Add按钮,选择仿真所需要的资源库(如果不知道需要选择哪个库,可以先直接点Compile看出现的错误提示中说需要的库名,然后再重复上述步骤)见下图。&图17 选择仿真所需要的资源库再点start simulate对话框的SDF标签。在出现的对话框的SDF File框内加入.sdo时延文件路径。在Apply To Region框内有一个“/”, 在“/”的前面输入测试台文件名,即“Counter_tb”,在它的后面输入测试台程序中调用被测试程序时给被测试程序起的名称,本例中为“DUT”,见下图。然后点OK。后面观察波形与前仿真步骤相同。&图18 添加.sdo文件自动仿真和手动仿真的区别:这种方法比较简单,因为Quartus II调用Modelsim ,所以除了生成自动生成了modelsim仿真所需要的.vo文件(网表文件)和.sdo文件(时延文件)外,还生成了gate_work文件夹、verilog_libs文件夹;gate_work文件夹(可以叫工作库,也可以叫编译库)下存放了已编译的文件,verilog_libs文件夹下存放了仿真所需要的资源库,上例是cycloneii_ver库(文件夹)。而手动仿真则需要自己添加这些文件和库。具体如下。② 手动仿真手动仿真需要自己添加文件和编译库,但可以充分发挥modelsim强大的仿真功能。操作时也要先对quartus进行设置,设置与前面相同只是不要选中Run Gate Level Simulation automatically after complication。然后启动modelsim,将当前路径改到&工程文件夹\simulation\modelsim&下。如下图所示。图19 启动modelsim相比①中,这里少了一些库(实际是verilog_libs库、gate_work库和work库),因此下面要添加一个库。新建一个库,此处默认库名为work,此时,&工程文件夹\simulation\modelsim&文件夹下出现了一个work文件夹,work库下面没有目标文件和测试文件,即work文件夹下没有任何文件,建库的目的就是将编译的文件都放在该库里,即放在该文件夹下。编译之前,还需要添加仿真所需要的资源库cycloneii_atoms(用到EP2C8),将D:\altera\90\quartus\eda\sim_lib目录下的cycloneii_atoms文件复制到.vo所在的目录,即&工程文件夹\simulation\modelsim&下。如果按照①中的方法编写testbench并同样放在.vo所在的目录,这时点Compile下的Compile或点 将会出现下面的对话框,将所选文件进行编译。&图20 编译所需文件和资源库编译完成之后,work工作库下多了很多文件,同样work文件夹下也多了很多文件(夹),建库的目的可见一斑,其中有Counter_tb测试文件和counter目标文件。点击simulate-&Start Simulation或快捷按钮 会出现start simulate对话框。这里和①相比只有Libraries标签在Search Library时不一样,其余2项都一样。Libraries标签在Search Library的设置如下图。图21 选择仿真所需要的资源库后面的观察波形步骤跟前面一样。四、观察波形的一些方法和技巧。4.1 手动创建输入波形(待定)对于复杂的设计文件,最好是自己编写testbench文件,这样可以精确定义各信号以及各个信号之间的依赖关系等,提高仿真效率。对于一些简单的设计文件,也可以在波形窗口自己创建输入波形进行仿真。具体方法是鼠标右击work库里的目标仿真文件counter.v,然后点create wave,弹出wave default窗口。如下图所示。图22 Add to Wave在wave窗口中选中要创建波形的信号,如此例中的CLK,然后右键点击,选择Create/Modify/Wave项出现下面的窗口:图23 设置输入波形在Patterns中选择输入波形的类型,然后分别在右边的窗口中设定起始时间、终止时间以及单位,再点Next出现下面的窗口,我们把初始值的HiZ改为0,然后修改时钟周期和占空比,然后点Finish。图24 设置输入波形接着继续添加其他输入波形,出现下面的结果。前面出现的红点表示该波形是可编辑的。后面的操作与用testbench文本仿真的方法相同 。图25 仿真波形4.2 观察特定信号波形如果设计者只想查看指定信号的波形,可以先选中objects窗口中要观察的信号,然后点右键选择Add to Wave-&Selected signals,见下图,那么在Wave窗口中只添加选中的信号。&图26 查看特定信号波形4.3 保存和导入波形文件(待定)如果要保存波形窗口当前信号的分配,可以点File-&Save,在出现的对话框中设置保存路径及文件名,保存的格式为.do文件。如果是想导出自己创建的波形(在文章最后有详细的解释)可以选择File-&Export Waveform在出现的对话框中选择EVCD File并进行相关设置即可。如果导入设计的波形选择File-&Import ECVD即可。4.4 Dataflow窗口观察信号波形在主界面中点View-&Dataflow可以看到会出现dataflow窗口,在objects窗口中拖一个信号到该窗口中,你会发现在dataflow窗口中出现你刚才选中信号所在的模块,如果双击模块的某一引脚,会出现与该引脚相连的别的模块或者引线,见下图。图27 Dataflow窗口在dataflow窗口中点View-&Show Wave,会在dataflow窗口中出现一个wave窗口,双击上面窗口中的某一模块,则在下面的wave窗口中出现与该模块相连的所有信号,如果已经执行过仿真,在wave窗口中还会出现对应的波形,见下图。图28 Dataflow窗口观察仿真波形在波形窗口中拖动游标,上面模块的引脚信号的值也会随着游标当前位置的改变而改变。如果要在modelsim中修改原设计文件,在文档页面点击右键,取消Read Only,即可修改,修改后继续仿真。如果想结束仿真可以点Simulate-&End Simulation,或直接在命令行输入quit -sim,此时quartus也会显示结束所有编译过程。五、 一些说明关于在testbench里使用`timescale的问题`timescale 是编译器指令,用来定义时延精度和时延单位,命令格式为&&&`timescale time_unit/time_precision&&&&其中time_unit定义时延单位,即后面模块中出现的时延数值的单位,time_precision定义时延精度。例如&&&`timescale 1ns/100ps &表示时延单位为1ns,时延精度为100ps。&&&&如果后面有语句 #5.22 a=1;&&&&此时时延值5.22ns应该对应为5.2ns,因为精度为0.1ns。如果设计中多个模块带有自身的`timescale,编译时模拟器总是定义在所有模块的最小时延精度上,并且所有模块中的时延都自动地换算为到最小试验精度上。附录:Counter源代码:&`timescale 1ns/100ps&module Counter (&input&&&&&&&&CLK,&input&&&&&&&&RST_N,&output [3:0] CNT&);&reg [3:0]&assign CNT =&always@(posedge CLK, negedge RST_N) begin&if (!RST_N)&&&&&cnt &= #5 4'h0;&else&&&&&cnt &= #0 cnt + 1'b1;&end&endmodule&Counter_tb源代码:`timescale 1ns/100psmodule Counter_tb&&;&&wire&&[3:0]&&CNT&&&;&&reg&&&&RST_N&&&;&&reg&&&&CLK&&&;&&Counter&&&&DUT&&(&&&&&&&.CNT (CNT ) ,&&&&&&.RST_N (RST_N ) ,&&&&&&.CLK (CLK ) );///view/cd93f34ecf84b9d528ea7a95.html &&&&&initial begin&#0 CLK&&&= 1'b0;&&&&RST_N = 1'b0;&#5 RST_N = 1'b1;&end&// 50MHz&always #10 CLK = ~CLK;
11-0602-0902-0602-0502-0202-0202-0101-2701-2401-13
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载FPGA学习手记(四)ModelSim入门及Testbench编写——合理利用仿真才是王道
在入职之前曾自学了一段时间的Verilog,后来因为工作的缘故鲜有接触,就搁置下来了。后来因偶然的机会需要参与一个CPLD的小项目,又开始从零学起,有些讽刺的是,不知道如何入手工具的我又回到EDN上翻之前自己写的博文,才重新熟悉了Quartus的使用流程。现在得了些空闲,最重要的是有了些许想法,终于重新打起精神来料理一个博客。
重温了基本的Quartus操作和语法后,需要对手头的工作进行仿真验证,这时候抖去尘土才发现世界已变,Quartus
9.x自带的Vector
Waveform已经淘汰掉了,所以又硬着头皮来学ModelSim。预备工作在上篇文章中介绍了,不再累述。
现在就开始一步步入手ModelSim,并通过与Quartus无缝衔接实现仿真。本文使用了ModelSim10.0c +
QuartusII 10.0,其他版本基本雷同,请自行研究。
看不清图的点开看大图!
1.设置第三方EDA工具
在Tools -&
Options中设置ModelSim的安装路径,注意要设置到win32文件夹(64位软件对应的就是win64)。
建立一个工程(依然以加法器为例)。在Assignments -&
Settings中设置仿真工具为ModelSim。这样Quartus就能无缝调用ModelSim了。
当然也可以在建立工程的时候就设置仿真工具。
2.编写Testbench
说到Testbench,你可以叫它Testbench,或者Testbenches,但不是Test
Bench。说起来,就连Quartus也没注意这个问题,至于原因嘛参见Common Mistakes In
Technical Texts一文。文章中还列举了些别的错误用语,包括Flip-flop不能写成Flipflop,等等。文章链接:
我们可以通过Quartus自动生成一个Testbench的模板,选择Processing
-& Start -& Start Test Bench Template
Writer,等待完成后打开刚才生成的Testbench,默认是保存在simulation\modelsim文件夹下的.vt格式文件。&
打开vt文件后可以看到Quartus已经为我们完成了一些基本工作,包括端口部分的代码和接口变量的声明,我们要做的就是在这个做好的模具里添加我们需要的测试代码。
一个最基本的Testbench包含三个部分,信号定义、模块接口和功能代码。
‘timescale 1ns/ 1ps表示仿真的单位时间为1ns,精度为1ps。想要进行仿真首先要规定时间单位,而且最好在Testbench里面统一规定时间单位,而不要在工程代码里定义,因为不同的模块如果时间单位不同可能会为仿真带来一些问题,而timescale本身对综合也就是实际电路没有影响。
其实Testbench本身可以看做一个模块或者设备(本例中的模块名为add_vlg_tst),和你自己编写的模块进行通信。通过Testbench模块向待测模块输出信号作为激励,同时接收从待测模块输出的信号来查看结果。因此,在待测模块中的reg型信号在Testbench中就变成了wire,待测模块中的wire型信号在Testbench中则对应为reg型。那么inout怎么办呢,inout型信号也要设成wire,同时要用一个reg型信号作为输出寄存器,同时设置一个三态门,由一个使能信号控制,如:assign&inout_sig = out_en ? out_reg
处理完接口和声明之后,需要自己设置一些激励信号,激励信号的内容就是肯能会输入到待测模块中的波形。下面我们就来写一个简单的测试程序。
首先需要一个复位信号:
&& rst_n = 0;
&& #100 rst_n =
initial开头的这个过程在Testbench中只执行一次,#100表示延时了100个时间单位,我们之前已经通过timescale进行了设置,这里延时了100ns。这就有点类似于C语言了,代码通过延时被顺序执行,rst_n在0时刻为低电平(也就是逻辑0),100ns后变成高电平,从而形成了一个上电复位。
其次是时钟,使用always模块来完成:
&& mclk = 0;
always模块中的代码会不断重复执行,利用这个特点,每10ns翻转一次mclk,只是这样还不行,还要给mclk一个初值,就是上面的initial语句。如此便可以生成一个周期为20ns,频率50MHz的方波信号,作为本例的系统时钟。
当然,这个时钟也可以通过initial模块实现。只需添加一个while(1),即死循环。
&&&while(1)
Testbench中的很多操作都是不可综合的,同时它的风格也可以比较随意。
设置完时钟和复位,就需要设置输入信号:
&& a_in = 1;
&& b_in = 3;
&& #200 a_in =
&& b_in = 0;
&& #200 a_in =
&& b_in = 3;
注意这里a_in =
3是同时发生的,也就是并行的,之后延时200ns,a_in =
2同时b_in =
0,如前面所说,想要实现顺序操作,就需要使用延时,如果两个语句间没有延时,就表示同时执行。还有一点,这个initial语句块和负责复位的initial语句块也是并行的,并且都是从0时刻开始。也就是说,0时刻后经过100ns
rst_n复位,再经过100ns(从0时刻起),a_in =
至此,测试程序也完成了,让我们开始仿真吧
3.设置Quartus并调用仿真工具
运行仿真之前,还要设置一下。在Simulation选项卡中配置仿真选项,可以配置仿真语言、仿真时间的格式以及输出目录。选中mpile test
bench,点击Test
Benches打开Test
Benches对话框。
点击New新建一个Test
BenchSetting,填入Testbench模块的名称(这里是add_vlg_tst),酌情设置仿真运行的时间(这里设为800ns,只是进入ModelSim后仿真自动执行的时间,不设或随意设置也行),并将刚才编写的Testbench添加进来。
一路OK后,选择Tools -&
Run EDA Simulation Tools,有两个选项,RTL
Simulation是RTL行为级仿真,只验证功能是否正确,与在哪个芯片上运行无关,仿真前至少需要执行一次Analysis&Synthesis;Gate Level
Simulation是门级仿真,涉及到具体的芯片,并且仿真前需要编译工程,在门级仿真中ModelSim会将布局布线后的门级延时体现在波形中,在测试一个具体的工程模块时,应当先进行RTL仿真,之后还要进行门级仿真。
4.ModelSim工具的基本操作
Simulation进入ModelSim界面。在这里介绍几个比较重要的部分。
在view菜单中,可以显示和隐藏各种工具窗口。其中Structure窗口显示了测试模块和待测模块的结构:
点击不同的模块,在Objects窗口中可以查看选中模块中的信号,因为除了端口(port)以外,还有很多内部信号默认是不显示波形的,通过将需要的信号拖到Wave窗口中,就能够显示。
工具栏中的&&部分是用来控制仿真运行的,左侧红框中的是复位,在文本框里设置要执行的时间,点击右侧红框中的按钮就可以执行了。其他的请自行摸索或参看Help文件。
如果面对一大堆0101感觉很晕,可以在信号列表里选中信号,右键选择要显示的数据格式。
而Wave窗口的左下角有几个小按钮,是用来设置游标的,通过添加游标,可以测量相应的时间,也可以在这里配置时间刻度的格式。
在Wave波形图中,使用滚轮和鼠标右键可以很方便的缩放或选择波形区域,下图就是这个全加器工程的波形图,在复位之后,c_out的值等于a_in与b_in的和,并在时钟上升沿输出。
完整的工程文件(含Testbench)传上:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 modelsim verilog 的文章

 

随机推荐