(转贴) 如何使用ModelSim作前仿真与后仿真? (SOC) (Quartus II) (ModelSim)
来源:http://hi.baidu.com/davinzhan/blog/item/5ad9e21660aa4659f2de3278.html
类似的,还有http://wenku.baidu.com/view/d1d6da2de2bd960590c6773e.html
这里面的方法,我在写《Sobel边缘检测的 FPGA应用.doc》中用到.讲得比较详细。
可以解决问题“为什么quartusII调用modelsim怎么每次都要编译库”
Abstract Introduction 由于FPGA可重复编程,所以不少开发人员就不写testbench,直接使用Quartus II的programmer烧进开发板看结果,或者使用Quartus II自带的Waveform Editor进行仿真,这种方式虽然可行,但仅适用于小project,若project越写越大,Quartus II光做fitter就很耗时间,一整天下来都在作Quartus II编译。 比较建议的方式,还是学ASIC那招:『写testbench先对每个module作前仿真,再对每个module作后仿真,最后再烧入FPGA测试。』 这种方式的优点是: 1.testbench比waveform editor可更灵活的描述电路规格。 2.testbench可使用Verilog的系统函数,如$display()、$fwrite()...等。 但要使用testbench作仿真,单独Qaurtus II并无法做到,就得使用ModelSim了,这又牵涉到『前仿真』与『后仿真』。 所谓的『前仿真』,就是Quartus II的Functional Simulation,不考虑电路的门延迟与线延迟,重点在观察电路在理想环境下的行为与设计构想是否一致[1]。由于没经过fitter阶段,所以仿真速度很快。前仿真结果正确,并不表示将来结果结果正确,但若前仿真结果不正确,则将来结果一定不正确。 所谓的『后仿真』,就是Quartus II的Timing Simulation,考虑了电路的门延迟与线延迟,由于经过fitter阶段,所以模拟结果最为精准。但fitter在Quartus II编译需耗费很多时间,所以建议『前仿真』正确后,再考虑『后仿真』。 使用Quartus II的waveform editor作前仿真与后仿真,我就不再多谈,本文主要是谈如何使用ModelSim-Altera作前仿与后仿。 1.使用GUI的方式在ModelSim-Altera作前仿真。 2.使用DO macro在ModelSim-Altera作前仿真。 3.使用Quartus II + ModelSim-Altera作后仿真。 Counter.v / Verilog 1 /*
一般写给FPGA的RTL,都不会去设定timescale,不过由于要用ModelSim作前仿,所以要加上timescale。 Counter_tb.v / Verilog 1 /*
rst_n = 1'b0;
不过为了前仿与后仿都使用同一个testbench,建议加上rst_n = 1'b0设定reg初始值为0。 有了RTL与testbench之后,来看看如何使用ModelSim作前仿与后仿。 1.使用GUI的方式在ModelSim-Altera作前仿真 Step 1:
Step 2:
将Counter.v与Counter_tb.v加入
Step 3: 选择Counter.v或者Counter_tb.v,按鼠标右键,选择Compile->Compile All,编译所有Verilog code。
编译成功。
Step 4: 在Library tab选择Counter_tb,按鼠标右键,选Simulate。
Simulate成功。
Step 5: 将欲观察的信号从Objects加入Wave,加入clk,rst_n与cnt。
最后结果。
Step 6:
最后前仿结果。
2.使用DO macro在ModelSim-Altera作前仿真 Step 1与Step 2与之前一样。 Step 3:
Counter_wave.do / ModelSim Macro 1 #compile
3.使用Quartus II + ModelSim-Altera作后仿真 Step 1: Assignments -> Settings -> Category :EDA Tool Settings -> Simulation:Tool name:ModelSim-Altera
Step 2: 在同一页的NativeLink settings选择Compile test bench,按下TestBenches..加入Counter_tb.v。比较诡异的是,Test bench name、Top level module in test bench与Design instance name in test bench无法自己抓到,必须自己填。
Step 3: Processing -> Start Compilation
完整程序代码下载 Conclusion |