modelsim se10.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功能仿真步骤
1、启动软件
打造文件夹,在modelsim中选file下的change directory,在其中的choose folder对话框中设置目录路径。
2、打造工程
选file 的new下面的project,在project name中填写项目名字。
项目名最好与顶层文件名一致。
project location 是工作目录,可自己选择。
default library name可直接使用默认的work,这样,workspace窗口中的library中就会出现work库。
3、为工程添加文件
选择add exsiting file后,依据相应提示将文件添加打麻将projcet中,包含设计顶层文件.v与测试向量文件.v/.vt。
4、编译文件
compile中的compile all。
5、装载文件
选择library中的work里面的测试向量文件,点击simulate下的start simulation。
6、开始仿真
在workspace下的sim中,选择测试向量,右击,选add中的add to wave,然后在simulate中选择run all。
7、退出仿真
simulate中的end simulation。
注:
1 亦可不添加testbench,开始的步骤均同上,在装载文件时,选中设计文件,在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的仿真主要有以下几个步骤:
打造库并映射库到物理目录;
编译原代码(包含 Testbench);
实行仿真。
上述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 work
vmap work work

图4 打造仿真库
假如要删除某库,仅需选中该库名,点右键选择Delete即可。
应该注意的是不要在modelsim外部的系统盘内手工创建库或者添加文件到库里;也不要modelsim用到的路径名或文件名中用汉字,由于modelsim可能没办法辨别汉字而致使莫名其妙的错误。
3.2撰写与编译测试文件
在撰写Testbench之前,最好先将要仿真的目的文件编译到工作库中,点Compile-Compile或 ,将出现下面的对话框,

图5 编译目的文件
在Library中选择工作库,在查找范围内找到要仿真的目的文件,然后点Compile和Done;或在命令行输入vlog Counter.v。此时目的文件已经编译到工作库中,在Library中展开work工作库会发现该文件。
当对要仿真的目的文件进行仿真时需要给文件中的每个输入变量提供勉励源,并对输入波形进行的严格概念,这种对勉励源概念的文件称为Testbench,即测试台文件。下面先讲一下Testbench的产生办法。
办法1、大家可以在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文件
办法2、在 Quartus II 内撰写并编译 Testbench ,之后将 Testbench 和目的文件放在同一个文件夹下,根据前面的办法把 Testbench 文件和目的文件都编译到工作库中之后。
PS:假如在工作库中没该文件,则在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的例子。
后仿真与前仿真的步骤大体相同,只是中间需要添加仿真库、网表和延时文件的步骤。
后仿真的首要条件是quartus已经对要仿真的目的文件进行编译,并生成modelsim仿真所需要的.vo文件和.sdo文件(时延文件),具体操作过程又有两种办法,一种是通过Quartus调用Modelsim,Quartus在编译之后自动把仿真需要的.vo文件与需要的仿真库加到modelsim中,操作简单;一种是手工将需要的文件和库加入modelsim进行仿真,这种办法可以增加主观能动性,充分发挥modelsim的强大仿真功能。
① 通过Quartus调用Modelsim
用这种办法时第一要对Quartus进行设置。 先运行Quartus,打开要仿真的工程,点餐单栏的Assignments,点EDA Tool settings,选中左侧Category中的Simulation.,在右侧的Tool name中选ModelSim,选中下面的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
相比①中,这里少了一些库,因此下面要添加一个库。新建一个库,此处默认库名为work,此时,工程文件夹\simulation\modelsim文件夹下出现了一个work文件夹,work库下面没目的文件和测试文件,即work文件夹下没任何文件,建库的目的就是将编译的文件都放在该库里,即放在该文件夹下。编译之前,还需要添加仿真所需要的资源库cycloneii_atoms,将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、察看波形的一些办法和方法。
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也会显示结束所有编译过程。
5、 一些说明
关于在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 ;
reg [3:0] cnt;
assign CNT = cnt;
always@ begin
if
cnt = #5 4h0;
else
cnt = #0 cnt + 1b1;
end
endmodule
Counter_tb源码:
`timescale 1ns/100ps
module Counter_tb;
wire[3:0]CNT;
regRST_N;
regCLK;
Counter
DUT ,
.RST_N ,
.CLK );
//http://wenku.baidu.com/view/cd93f34ecf84b9d528ea7a95.html
initial begin
#0 CLK= 1b0;
RST_N = 1b0;
#5 RST_N = 1b1;
end
// 50MHz
always #10 CLK = ~CLK;
TAG标签:Modelsim(1)
转载请说明来源于当下软件园(https://www.gpsdan.com)
本文地址:https://www.gpsdan.com/news/6467.html
郑重声明:文章来源于网络作为参考,本站仅用于分享不存储任何下载资源,如果网站中图片和文字侵犯了您的版权,请联系我们处理!邮箱3450399331@qq.com

赣公网安备 36010602000087号
相关文章