Abstract
本文介紹使用ModelSim做前仿真,並搭配Quartus II與ModelSim作後仿真。

Introduction
使用環境:Quartus II 8.1 + ModelSim-Altera 6.3g

由於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 /* 
2 (C) OOMusou 2008 http://oomusou.cnblogs.com

4 Filename    : Counter.v
5 Compiler    : Quartus II 8.1 / ModelSim-Altera 6.3g
6 Description : simple counter
7 Release     : 01/30/2009 1.0
8 */

10 `timescale 1ns/100ps
11 
12 module Counter (
13   input        CLK,
14   input        RST_N,
15   output [3:0] CNT
16 );
17 
18 reg [3:0] cnt;
19 assign CNT = cnt;
20 
21 always@(posedge CLK, negedge RST_N) begin
22   if (!RST_N) 
23     cnt <= #5 4'h0;
24   else
25     cnt <= #5 cnt + 1'b1;  
26 end
27 
28 endmodule

一個很簡單的counter,從0數到15重複數。由於要使用ModelSim作前仿,所以在reg做了delay,不過這在Quartus II作合成時會自動忽略, 因為delay並非可合成的Verilog。

一般寫給FPGA的RTL,都不會去設定timescale,不過由於要用ModelSim作前仿,所以要加上timescale。

Counter_tb.v / Verilog

1 /* 
2 (C) OOMusou 2008 http://oomusou.cnblogs.com

4 Filename    : Counter_tb.v
5 Compiler    : Quartus II 8.1 / ModelSim-Altera 6.3g
6 Description : simple counter testbench
7 Release     : 01/30/2009 1.0
8 */

10 `timescale 1ns/100ps
11 
12 module Counter_tb;
13 
14 reg        clk;
15 reg        rst_n;
16 wire [3:0] cnt;
17 
18 parameter PERIOD = 20; 
19 
20 Counter counter (
21   .CLK(clk),
22   .RST_N(rst_n),
23   .CNT(cnt)
24 );
25 
26 initial begin
27   #0 clk   = 1'b0;
28      rst_n = 1'b0;
29   #5 rst_n = 1'b1;
30 end
31 
32 // 50MHz
33 always #(PERIOD/2) clk = ~clk;
34 
35 endmodule

一個很典型的testbench,唯一要注意的是第28行。

rst_n = 1'b0;
#5 rst_n = 1'b1;

之所以一開始要將rst_n為0,是因為ModelSim與Quartus II對reg初始值看法不一樣,Quartus II認為reg初始值為0,但ModelSim認為reg初始值為x,所以需要rst_n=1'b0將reg歸0,這樣用ModelSim前仿才會正確,但ModelSim後仿可以不這樣做,因為Quartus II會先做處理。

不過為了前仿與後仿都使用同一個testbench,建議加上rst_n = 1'b0設定reg初始值為0。

有了RTL與testbench之後,來看看如何使用ModelSim作前仿與後仿。

1.使用GUI的方式在ModelSim-Altera作前仿真
ModelSim提供了全GUI的方式,只要使用操作的方式,就能做前仿。

Step 1:
File -> New Project

Step 2:
Add Existing File

將Counter.v與Counter_tb.v加入

Step 3:
Compile All

選擇Counter.v或者Counter_tb.v,按滑鼠右鍵,選擇Compile->Compile All,編譯所有Verilog code。

編譯成功。

Step 4:
Simulate

在Library tab選擇Counter_tb,按滑鼠右鍵,選Simulate。

Simulate成功。

Step 5:
Add Signal to Wave

將欲觀察的信號從Objects加入Wave,加入clk,rst_n與cnt。

最後結果。

Step 6:
Run 300ns

最後前仿結果。

2.使用DO macro在ModelSim-Altera作前仿真
ModelSim也提供macro的方式,以上所有的GUI操作,都可以使用TCL script描述。

Step 1與Step 2與之前一樣。

Step 3:
Execute Macro

Counter_wave.do / ModelSim Macro

1 #compile
2 vlog Counter.v
3 vlog Counter_tb.v

5 #simulate
6 vsim Counter_tb

8 #probe signals
9 add wave *
10 
11 #300 ns
12 run 300 ns

最後前仿結果。

3.使用Quartus II + ModelSim-Altera作後仿真

Step 1:
設定Quartus II使用ModelSim-Altera作後仿真

Assignments -> Settings -> Category :EDA Tool Settings -> Simulation:Tool name:ModelSim-Altera
選取Run gate-level simulation automatically after compilation
Format for output netlist:Verilog
Time scale:1 ns

Step 2:
設定testbench

在同一頁的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

完整程式碼下載
Counter.7z

Conclusion
本文介紹了使用ModelSim作前仿真與後仿真,善用ModelSim,將可加快FPGA與SOPC的開發。

转自https://www.cnblogs.com/oomusou/archive/2009/01/30/modelsim_pre_post_simulate.html

(筆記) 如何使用ModelSim作前仿真與後仿真? (SOC) (Quartus II) (ModelSim)相关推荐

  1. 如何使用ModelSim作前仿真與後仿真? (真oo无双前辈)

    Abstract 本文介紹使用ModelSim做前仿真,並搭配Quartus II與ModelSim作後仿真. Introduction 使用環境:Quartus II 8.1 + ModelSim- ...

  2. 基于Quartus II+ModelSim SE的后仿真(Verilog版)

    基于Quartus II+ModelSim SE的后仿真(Verilog版) 一.Quartus 中的相关设置 在Quartus中建立名为counter的工程,设置仿真工具为ModelSim(Veri ...

  3. (筆記) 如何安裝Altera USB Blaster? (SOC) (Quartus II) (DE2)

    Abstract當將DE2的USB排線插入PC後,重新開機會找到新的硬體,這就是USB Blaster,是PC與DE2溝通的橋梁. Introduction 使用環境:Quartus II 7.2 S ...

  4. (筆記) 如何增加SignalTap II能觀察的reg與wire數量? (SOC) (Quartus II) (SignalTap II)

    Abstract 無法在SignalTap II觀察reg與wire,主要都是因為被Quartus II優化的關係,在Quartus II簡單的設定,就能增加SignalTap II能觀察的數量. I ...

  5. (原創) 如何使用ModelSim-Altera對Nios II仿真? (SOC) (Nios II) (SOPC Builder) (ModelSim) (DE2)...

    Abstract 在剛學習Nios II時,每次在Run As Nios II Hardware下方,看到Run As Nios II ModelSim就覺得很好奇,Nios II明明是嵌入式系統,怎 ...

  6. quartus ii matlab,基於Quartus II和MATLAB的FIR濾波器設計與仿真(二)

    接上文  基於Quartus II和MATLAB的FIR濾波器設計與仿真(一): 3  QuartusII 調用 IP 核生成 FIR 濾波器模塊 在 Quartus II 中, Altera 提供了 ...

  7. Modelsim下时序(功能)仿真altera IP核 程序(重要)

    原文链接:http://blog.sina.com.cn/s/blog_3f8b06cc01015h2f.html 用Modelsim对Quartus II工程进行时序仿真(在此只讨论时序仿真)可分两 ...

  8. Quartus II与 ModelSim功能仿真与后仿真扫盲(转)

    时间:2007-04-20   作者:yangyh80@21cn.com 本文主要描述了如何在QUARTUS II 中输入程序文件,生成网表及标准延时文件,然后通过MODELSIM 进行功能仿真与后仿 ...

  9. FPGA仿真--前仿真和后仿真

    初学者学习FPGA,必定会被它的各种仿真弄的晕头转向.比如,前仿真.后仿真.功能仿真.时序仿真.行为级仿真.RTL级仿真.综合后仿真.门级仿真.布局布线后仿真等. Quartus和Modelsim软件 ...

最新文章

  1. TableView的重要性
  2. 阿里云混合云Apsara Stack 2.0发布,加速政企数智创新
  3. activeMQ的三种通讯模式
  4. 与高通公司合作的Cyanogen团队,Thunderbird等等
  5. angular源码分析之platformBrowserDynamic
  6. 如何对 List集合进行排序
  7. 学习笔记——meta analysis
  8. unity 安卓接入科大讯飞 语音合成
  9. 数据可视化|用雷达图进行对比分析
  10. 跟张小龙学习做优秀产品经理的设计思路
  11. 冰峰王座完整的语音英文+中文解释!(修订版)
  12. 计算机取代人脑的英语作文,关于电脑和人脑差别的英语作文
  13. Unity+NGUI性能优化方法总结
  14. 柚墨模板PPT干货分享:幻影动画,打造科幻大片前卫PPT
  15. 2021-2027全球与中国可待因药品市场现状及未来发展趋势
  16. jquery slideToggle() 效果
  17. 合约机乱象频出,运营商利益如何才能得到保障?
  18. android多个单选按钮互斥使用,在android中使用RadioButton时,要想实现互斥
  19. 【掌控板-arduino】3.1 SH1106显示图片
  20. Unity 水、流体、波纹基础系列(三)——波浪(Waves)

热门文章

  1. (1)Deep Learning之感知器
  2. Sublime Text 2安装汉化破解、插件包安装教程
  3. js 正则练习之语法高亮
  4. SQL SERCER 控制 SERVERICE BROKER 服务
  5. Python之数据分析(Numpy的数组切片、数组变维、组合与拆分)
  6. 淮北计算机考试报名,淮北2019年12月计算机等级考试报名入口/注意事项
  7. python字符串数字比较大小_Python 2如何比较string和int?为什么列表比数字大,元组比列表大?...
  8. 04:数组逆序重放【一维数组】
  9. ie运行不了java脚本界面_IE浏览器不能运行js JS代码失效不能运行了如何解决
  10. 电脑音响怎么插_BMW宝马5系G38改原厂全套哈曼卡顿音响+无钥匙进入,厚街宝马原厂改装中心...