笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSimWord下载.docx
《笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSimWord下载.docx》由会员分享,可在线阅读,更多相关《笔记如何使用ModelSim作前仿真与后仿真SOCQuartusIIModelSimWord下载.docx(16页珍藏版)》请在冰豆网上搜索。
但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
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
=#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
Counter_tb.v
simplecountertestbench
moduleCounter_tb;
reg
clk;
rst_n;
wire[3:
parameterPERIOD=
20;
Countercounter(
.CLK(clk),
.RST_N(rst_n),
T(cnt)
initial
begin
#0clk
=
b0;
rst_n=
29
#5rst_n=
30
31
32
//50MHz
33
always#(PERIOD/2)clk=
~clk;
34
35
一个很典型的testbench,唯一要注意的是第28行。
#5rst_n=
之所以一开始要将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与之前一样。
ExecuteMacro
Counter_wave.do/ModelSimMacro
#compile
vlogCounter.v
vlogCounter_tb.v
#simulate
vsimCounter_tb
#probesignals
addwave*
#300ns
run
300ns
3.使用QuartusII+ModelSim-Altera作后仿真
设定QuartusII使用ModelSim-Altera作后仿真
Assignments->
Settings->
Category:
EDAToolSettings->
Simulation:
Toolname:
ModelSim-Altera
选取Rungate-levelsimulationautomaticallyaftercompilation
Formatforoutputnetlist:
Verilog
Timescale:
1ns
设定testbench
在同一页的NativeLinksettings选择Compiletestbench,按下TestBenches..加入Counter_tb.v。
比较诡异的是,Testbenchname、Toplevelmoduleintestbench与Designinstancenameintestbench无法自己抓到,必须自己填。
编译与模拟
Processing->
StartCompilation
完整程序代码下载
Counter.7z
Conclusion
本文介绍了使用ModelSim作前仿真与后仿真,善用ModelSim,将可加快FPGA与SOPC的开发。
SeeAlso
(原创)如何使用ModelSim-Altera作电路仿真?
(原创)如何解决在QuartusII无法使用ModelSim-Altera模拟的问题?
(原创)如何做functionalsimulation?
(SOC)(QuartusII)(ModelSim)
Reference
[1]EDA先锋工作室,AlteraFPGA/CPLA设计(基础篇),人民电邮出版社