ModelSim-Altera版本仿真流程
1、建立ModelSim-Altera工作環境
1.1版本說明
ModelSim-Altera(OEM)version 6.4a
QuartusII version 9.0
該ModelSim版本支持所有QuartusII支持的Altera器件。
1.2要自動從Quartus II運行EDA設計輸入、綜合、仿真或者時序分析工具,您必須指定第三方EDA工具的可執行文件位置,通過單擊Tools菜單上的Options供然后點擊EDA Tool Options選項。
2、用ModelSim-Altera建立工程
2.1 如果要執行時序仿真,需要產生Verilog(.vo)或者VHDL(.vho)輸出文件。
a. 選擇EDA Tool Settings
b. 用QuartusII編譯設計文件
注:如果已經編譯過設計,要重新產生.vo、.vho和.sdo(標准延遲輸出文件)的話,只需要運行Start EDA Netlist Writter即可。同時也可以用於產生.vcd文件。
如果要執行功耗估算,確保在Simulator Settings下的Settings對話框選擇合適的參數。
2.2 啟動Modelsim軟件,選擇工程目錄:File—>Change Directory.
注:如果要執行功能仿真,工程目錄就是包含設計文件的目錄;
如果要進行時序仿真,工程目錄務必設在包含.vo、.vho和.sdo的目錄下。
2.3 創建新的工作庫:
a. File—>New—>Library,出現創建新庫的對話框
b. 在Create選項下,選擇a new library and a logical mapping to it.
c.在Library Name中輸入庫的名稱
注:如果你想要脫離QuartusII獨立運行Modelsim,庫文件名必須是work;如果是由QuartusII自動運行Modelsim,則庫的名稱被自動名為ModelSim_work,並且位於QuartusII的過程目錄下。
3、用ModelSim-Altera執行功能仿真
3.1 編譯Verilog或者VHDL文件和Test Bench文件(如果你使用testbench的話)
a. Compile menu, 點擊Compile.
b. 在Library列表下選擇work庫
c. 選擇需要的Verilog或者VHDL文件
注:如果選擇.vo、.vho文件作為功能仿真的話,必須在下面操作前進行編譯。
d. 執行編譯
e. 重復上面操作,編譯testbench文件
f. 點擊done完成。
3.2 加載設計:
a. 在Simulate菜單中,點擊Simulate.出現Simulate對話框
b. 如果要仿真Verilog HDL設計文件,指定ModelSim預編譯庫
i. 點擊Libraries標簽
ii.在Search Libraries (-L)中,點擊Add選擇適當的庫
iii. 點擊OK完成
c. 在Name 列表中,點擊+展開work庫,選擇要仿真的頂層文件(一般是testbench)
d. 點擊OK完成
3.3 在ModelSim中執行功能仿真
4、用ModelSim-Altera執行時序仿真
重要提示:強烈建議在進行RAM仿真時,將Time scale設置為飛秒ps級別!
4.1 編譯Verilog或者VHDL輸出文件和testbench文件,方法同功能仿真。
4.2 如果你的設計包含全局復位或者全局上電信號,並且還沒這么做,可以在Verilog或者VDHL輸出文件中建立這些信號。方法如下:
對於Verilog,在仿真前,將下列代碼加到testbench文件中:
reg <device-wide reset>;
reg <device power up>;
initial
begin
<device power up> = 0;
#<time> <device power up> = 1;
對於VHDL,在仿真前運行下列命令:
force /<design>/<entity>/<device power up> 0 0 ns 
force <design>/<entity>/<device power up> 1 <time> ns 
force /<design>/<entity>/<device-wide reset> 1 0 ns 
注: <device-wide reset> 是全局復位信號名稱,<device power up> 是全局上電信號,<time> 是一個時間值,它介於0和實際開始仿真的時間之間。
4.3 在Simulate菜單中,點擊Simulate.出現Simulate對話框
4.4 如果是仿真verilog語言,點擊verilog標簽,在Pulse Options中的Error Limit 和Rejection Limit中填入0.
4.5 如果仿真的是VHDL設計,指定.sdo標准延遲文件:
a. 點擊SDF標簽,點擊ADD
b. 在Add SDF Entry對話框中,點擊Browse,出現Select SDF File對話框
c. 選擇標准延遲輸出.sdo文件
注:如果使用的是test bench文件作為設計的激勵,那么在Apply to region 框中,從頂層設計文件開始,將路徑指向test bench中的instance
4.6 如果仿真的是verilog設計,要指定預編譯庫(ModelSim precompiled libraries)
a. 點擊Library標簽,在Search Libraries (-L)中,點擊Add.
b. 指定目錄\<ModelSim-Altera install directory>\altera\verilog\<device family>\,點擊OK;
4.7 點擊Design標簽,在Name列表中,點擊+展開work庫,並選擇標准延時輸出文件對應的設計實體(entity),點擊OK完成。
4.8 如果要仿真高速電路(包括HSSI, LVDS, PLLs等),點擊Others標簽,在Other vsim options中輸入+transport_int_delays +transport_path_delays,點擊OK完成;
4.9 要直接從ModelSim中生成.vcd(Value Change Dump File)文件用於QuartusII中PowerPlay Power Analyzer分析,可以在ModelSim中輸入命令:
source <test bench or design instance name>_dump_all_vcd_nodes.tcl
4.10 Tcl腳本文件指示ModelSim-Altera監視Tcl腳本文件中的輸出信號並在仿真過程中寫入到.vcd文件中去。
4.11 在ModelSim-Altera進行時序仿真。
重要提示:強烈建議在進行RAM仿真時,將Time scale設置為飛秒ps級別!
個人使用心得
★RTL仿真
這個仿真過程最簡單,不需要綜合,也不需要經過布局布線,只需要編寫好設計文件,和testbench文件直接導入ModelSim里邊編譯仿真即可。同時對於Verilog語言,需要選擇相應的RTL仿真庫。主要的RTL仿真庫如下表:

★綜合后仿真(功能仿真)
注:此過程需要在綜合后才能進行。需要的是Verilog輸出文件,而不是設計文件!同時對於仿真庫而言,用到的是門級仿真庫,而不是RTL仿真庫(也就是器件對應系列的仿真庫)。常用的門級與編譯仿真庫如下:


1、步驟:選目錄—>建庫—>編譯—>仿真
1.1 目錄選在QuartusII產生的EDA網表目錄下,路徑:<工程目錄>\simulation\modelsim,這樣做是為了方便文件的調用;
1.2 在此目錄下建庫。為了獨立於QuartusII工作,庫名必須是work;
1.3 編譯文件。一般來說都使用testbench,因此可以使用(.vo+.vt)結合的方法進行仿真,.vo是verilog輸出文件,.vt是verilog測試文件;若是VHDL則分別是.vho和.vht。編譯順序最好是先輸出文件(.vo、.vho文件)再是測試文件(.vt、vht文件)
1.4 開始仿真。如果用到相關的LPM、MF或者IP等,要添加相應的預編譯仿真庫。在Library—>Search Libraries(-L)中點擊Add添加。然后在Design—>Name—>work下選中仿真頂層文件,有testbench的話一般就選testbench。
2、關於QuartusII自動生成的testbench文件
QuartusII自動生成的testbench文件中包含一個全局寄存器eachvec,其包含一個語句@eachvec,記得把它注釋掉,否則可能會因為它沒有觸發而導致仿真失敗。
☆在QuartusII中自動生成仿真網表:Assignments->EDA Tool Settings
☆在QuartusII中自動生成TsetBench:Processing->Start->Start Test Bench Template Write
★門級仿真(時序仿真)
ModelSim的時序仿真跟功能仿真基本一致,但要注意下面幾點區別:
1、如果包含全局復位或者全局上電信號,需做相應處理,具體看前文;
2、對Verilog程序進行仿真時,則無需添加.sdo文件,Verilog是通過添加預編譯庫自動調用.sdo文件的。同時,在Pulse Options中的Error Limit和Rejection Limit中輸入0;
3、對VHDL文件進行時序仿真時,必須要添加.sdo文件,同時在Apply to region中將其指定到testbench中對應的模塊;
關於testbench
在testbench中,每個連續的信號最好是用獨立的always語句來描述,否則可能發生沖突導致仿真出錯。
使用QuartusII自動運行ModelSim仿真
首先注意幾點:
1、切記用Modelsim仿真時路徑不能包含漢字!!!
2、要再次仿真時,確保前一次仿真的ModelSim程序已經退出,否則會報類似下面的錯誤!

3、產生上面錯誤的原因也可能是使用了不支持RTL級仿真的IP核,但是不影響時序仿真。
4、用波形文件產生testbench文件時,最好只有輸入信息,不要包含任何輸出信息;
下面是操作方法:
1、配置NativeLink
1.1 進入EDA Tool Settings,在EDA Tool Settings中選擇Simulation,如圖:



1.2 在simulation右側對話框配置如下(Verilog):

☆如果要編譯后自動運行門級仿真,可以勾選Run gate-level simulation … after complilation.
1.3 編譯testbench文件

在NativeLink settings中點擊Test Benches,出現對話框中點擊New,出現如下對話框:

Testbench name中可以隨便填一個名字,是指定當前Testbench文件的別名;
Top level module in test bench中填的是Testbench中要仿真的頂層模塊;
Design instance name in test bench:填上Testbench中頂層模塊對源程序的實例化名。
在Test bench files攔中添加對應的Testbench文件,點擊Add添加,再點擊OK完成配置。
2、運行仿真
如果要手動進行仿真,也可以在QuartusII中調用Modelsim,方法如下:

其中,RTL Simulation是寄存器傳輸級仿真,它是理想化的仿真,不包含任何延時信息,通常用作功能檢驗,也稱作前仿真或功能仿真;
Gate-Level Simulation是門級仿真,通常也稱為后仿真或時序仿真,它包含邏輯電路、布局布線等延時信息,是對真實電路情況的仿真。要仿真門級仿真,需要在Fitter之后進行。
3、產生Testbench
從QuartusII中產生Testbench,有兩種方法:
(1)從波形文件導出,方法如下:
打開波形仿真文件,編輯輸入信息,

點擊Flie—>Export,直接導出即可。
(2)也可以利用QuartusII產生Testbench模板,再自行輸入測試信息。

摘自文檔:
About Usingthe ModelSim Software with the Quartus II Software
Author: Kerwin. Xie
