笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSim.docx
- 文档编号:5405073
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:16
- 大小:348.48KB
笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSim.docx
《笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSim.docx》由会员分享,可在线阅读,更多相关《笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSim.docx(16页珍藏版)》请在冰豆网上搜索。
笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSim
(笔记)如何使用ModelSim作前仿真与后仿真?
(SOC)(QuartusII)(ModelSim)
Abstract
本文介绍使用ModelSim做前仿真,并搭配QuartusII与ModelSim作后仿真。
Introduction
使用环境:
QuartusII8.1+ModelSim-Altera6.3g
由于FPGA可重复编程,所以不少开发人员就不写testbench,直接使用QuartusII的programmer烧进开发板看结果,或者使用QuartusII自带的WaveformEditor进行仿真,这种方式虽然可行,但仅适用于小project,若project越写越大,QuartusII光做fitter就很耗时间,一整天下来都在作QuartusII编译。
比较建议的方式,还是学ASIC那招:
『写testbench先对每个module作前仿真,再对每个module作后仿真,最后再烧入FPGA测试。
』
这种方式的优点是:
1.testbench比waveformeditor可更灵活的描述电路规格。
2.testbench可使用Verilog的系统函数,如$display()、$fwrite()...等。
但要使用testbench作仿真,单独QaurtusII并无法做到,就得使用ModelSim了,这又牵涉到『前仿真』与『后仿真』。
所谓的『前仿真』,就是QuartusII的FunctionalSimulation,不考虑电路的门延迟与线延迟,重点在观察电路在理想环境下的行为与设计构想是否一致[1]。
由于没经过fitter阶段,所以仿真速度很快。
前仿真结果正确,并不表示将来结果结果正确,但若前仿真结果不正确,则将来结果一定不正确。
所谓的『后仿真』,就是QuartusII的TimingSimulation,考虑了电路的门延迟与线延迟,由于经过fitter阶段,所以模拟结果最为精准。
但fitter在QuartusII编译需耗费很多时间,所以建议『前仿真』正确后,再考虑『后仿真』。
使用QuartusII的waveformeditor作前仿真与后仿真,我就不再多谈,本文主要是谈如何使用ModelSim-Altera作前仿与后仿。
1.使用GUI的方式在ModelSim-Altera作前仿真。
2.使用DOmacro在ModelSim-Altera作前仿真。
3.使用QuartusII+ModelSim-Altera作后仿真。
Counter.v/Verilog
1 /*
2 (C)OOMusou2008:
//oomusoublogs
3
4 Filename :
Counter.v
5 Compiler :
QuartusII8.1/ModelSim-Altera6.3g
6 Description:
simplecounter
7 Release :
01/30/20091.0
8 */
9
10 `timescale1ns/100ps
11
12 moduleCounter(
13 input CLK,
14 input RST_N,
15 output[3:
0]CNT
16 );
17
18 reg[3:
0]cnt;
19 assignCNT=cnt;
20
21 always@(posedgeCLK,negedgeRST_N)begin
22 if(!
RST_N)
23 cnt<=#5 4'h0;
24 else
25 cnt<=#5cnt+ 1'b1;
26 end
27
28 endmodule
一个很简单的counter,从0数到15重复数。
由于要使用ModelSim作前仿,所以在reg做了delay,不过这在QuartusII作合成时会自动忽略,因为delay并非可合成的Verilog。
一般写给FPGA的RTL,都不会去设定timescale,不过由于要用ModelSim作前仿,所以要加上timescale。
Counter_tb.v/Verilog
1 /*
2 (C)OOMusou2008:
//oomusoublogs
3
4 Filename :
Counter_tb.v
5 Compiler :
QuartusII8.1/ModelSim-Altera6.3g
6 Description:
simplecountertestbench
7 Release :
01/30/20091.0
8 */
9
10 `timescale1ns/100ps
11
12 moduleCounter_tb;
13
14 reg clk;
15 reg rst_n;
16 wire[3:
0]cnt;
17
18 parameterPERIOD= 20;
19
20 Countercounter(
21 .CLK(clk),
22 .RST_N(rst_n),
23 T(cnt)
24 );
25
26 initial begin
27 #0clk = 1'b0;
28 rst_n= 1'b0;
29 #5rst_n= 1'b1;
30 end
31
32 //50MHz
33 always#(PERIOD/2)clk= ~clk;
34
35 endmodule
一个很典型的testbench,唯一要注意的是第28行。
rst_n= 1'b0;
#5rst_n= 1'b1;
之所以一开始要将rst_n为0,是因为ModelSim与QuartusII对reg初始值看法不一样,QuartusII认为reg初始值为0,但ModelSim认为reg初始值为x,所以需要rst_n=1'b0将reg归0,这样用ModelSim前仿才会正确,但ModelSim后仿可以不这样做,因为QuartusII会先做处理。
不过为了前仿与后仿都使用同一个testbench,建议加上rst_n=1'b0设定reg初始值为0。
有了RTL与testbench之后,来看看如何使用ModelSim作前仿与后仿。
1.使用GUI的方式在ModelSim-Altera作前仿真
ModelSim提供了全GUI的方式,只要使用操作的方式,就能做前仿。
Step1:
File->NewProject
Step2:
AddExistingFile
将Counter.v与Counter_tb.v加入
Step3:
CompileAll
选择Counter.v或者Counter_tb.v,按鼠标右键,选择Compile->CompileAll,编译所有Verilogcode。
编译成功。
Step4:
Simulate
在Librarytab选择Counter_tb,按鼠标右键,选Simulate。
Simulate成功。
Step5:
AddSignaltoWave
将欲观察的信号从Objects加入Wave,加入clk,rst_n与cnt。
最后结果。
Step6:
Run300ns
最后前仿结果。
2.使用DOmacro在ModelSim-Altera作前仿真
ModelSim也提供macro的方式,以上所有的GUI操作,都可以使用TCLscript描述。
Step1与Step2与之前一样。
Step3:
ExecuteMacro
Counter_wave.do/ModelSimMacro
1 #compile
2 vlogCounter.v
3 vlogCounter_tb.v
4
5 #simulate
6 vsimCounter_tb
7
8 #probesignals
9 addwave*
10
11 #300ns
12 run 300ns
最后前仿结果。
3.使用QuartusII+ModelSim-Altera作后仿真
Step1:
设定QuartusII使用ModelSim-Altera作后仿真
Assignments->Settings->Category:
EDAToolSettings->Simulation:
Toolname:
ModelSim-Altera
选取Rungate-levelsimulationautomaticallyaftercompilation
Formatforoutputnetlist:
Verilog
Timescale:
1ns
Step2:
设定testbench
在同一页的NativeLinksettings选择Compiletestbench,按下TestBenches..加入Counter_tb.v。
比较诡异的是,Testbenchname、Toplevelmoduleintestbench与Designinstancenameintestbench无法自己抓到,必须自己填。
Step3:
编译与模拟
Processing->StartCompilation
完整程序代码下载
Counter.7z
Conclusion
本文介绍了使用ModelSim作前仿真与后仿真,善用ModelSim,将可加快FPGA与SOPC的开发。
SeeAlso
(原创)如何使用ModelSim-Altera作电路仿真?
(SOC)(QuartusII)(ModelSim)
(原创)如何解决在QuartusII无法使用ModelSim-Altera模拟的问题?
(SOC)(QuartusII)(ModelSim)
(原创)如何做functionalsimulation?
(SOC)(QuartusII)(ModelSim)
Reference
[1]EDA先锋工作室,AlteraFPGA/CPLA设计(基础篇),人民电邮出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 笔记 如何 使用 ModelSim 仿真 SOCQuartusIIModelSim
![提示](https://static.bdocx.com/images/bang_tan.gif)