ModelSim仿真入門:功能仿真
本實驗的目的就是在ModelSim環(huán)境下學習掌握該軟件的一般仿真測試流程和仿真測試方法,另外學習編寫簡單的Test Bench程序并在ModelSim下進行調試。
實驗步驟如下:
1. 打開ModelSim軟件,如圖1所示:
圖1 打開軟件
2. 軟件的啟動畫面如圖2所示,進入界面后如圖3所示:
圖2 軟件的啟動畫面
圖3 軟件進入后的畫面
注意:如果是第一次使用軟件,進入后會有一些諸如軟件的歡迎畫面等不相關的對話框,無須擔心,直接關閉即可,亦可選擇下次登陸時不顯示。
3. 進入ModelSim主窗口后,選擇File菜單下的“New→Project”,新建一個工程,在彈出的對話框中,給該工程命名并指定一個存放的路徑,如圖4所示:
圖4 新建工程
在這里,工程名和你的頂層文件名保持一致是推薦的做法。路徑的注意事項已經說過,這里不再提及。默認的庫名就是“work”,這個無需更改,點擊“OK”即可。
4. 之后會彈出如圖5的對話框,選擇是新建一個文件還是添加已存在的文件,這兩個都可以選擇,假如事先編好了文件,就選擇添加進來,假如沒有就新建。在這里使用添加已有文件,在軟件開始之前就編好所用的程序,這樣比較方便些。軟件自帶的編輯環(huán)境不是很好,使用第三方的編輯工具是推薦的方法。建議使用UltraEdit或Notepad++這些專業(yè)的代碼編輯軟件。
UltraEdit偏重于功能的強大和豐富的用戶可定制化特性,而Notepad++更加注重易用性。兩者在普通功能上差異不是特別大,根據(jù)自己的喜好選擇一款即可。
圖5 給工程中添加文件
在路徑G:FPGA_ProjectModelSimcounter8下新建兩個文件,一個是counter8.v,一個是test_counter8.v,前者是我們的原始的設計文件,后者是其相應的仿真測試文件。在這個路徑的Windows目錄下,在空白處右鍵選擇新建一個文本文檔.TXT格式,然后在這個文件上右鍵選擇UltraEdit或Edit with Notepad++就可以啟動相應的代碼編輯工具進行編輯了,保存的時候注意存成“.v”或“.vhd”格式即可。
以下給出兩個文件的代碼:
第一個文件:
//-----------------------------------------------------
// DesignName : counter8
// FileName : counter8.v
//Function : 8 bits counter with asyncclear and sync load
//Coder : Cheng xu
//-----------------------------------------------------
modulecounter8(
clk ,
aclr ,
load ,
load_din ,
dout
?。?
// Portdeclarations
input clk ;
input aclr ;
input load ;
input [7:0] load_din ;
output [7:0] dout ;
//InternalVariables
wire clk ;
wire aclr ;
wire load ;
wire [7:0] load_din ;
wire [7:0] dout ;
reg [7:0] counter = 0 ;
//CodeStarts Here
always @(posedge clk or negedge aclr)
if(!aclr)
counter 《= 0;
else if(load == 1)
counter 《= load_din;
else
counter 《= counter + 1;
assigndout = counter;
endmodule
第二個文件:
//test_counter8.v
`timescale1ns/1ns //注意最前面的符號是數(shù)字鍵“1”左邊的//那個符號,不是單引號
moduletest_counter8;
reg clk ;
reg aclr ;
reg load ;
reg [7:0] load_din ;
wire [7:0] dout ;
initial
begin
clk = 0;
aclr = 1;
load = 0;
load_din = 0;
#120 aclr = 0;
#40 aclr = 1;
#20 load = 1;
load_din = 100;
#20 load = 0;
#100 $stop; //可以不添加這個仿真結束的系統(tǒng)任務
end
always#10 clk = ~clk;
counter8U(
.clk(clk),
.aclr(aclr),
.load(load),
.load_din(load_din),
.dout(dout)
?。?
endmodule
這樣,我們就在該工程路徑下建立好了這兩個文件。當然新建這兩個文件的的工作可以是放在我們這個全部的工作開始之前進行的,無需等到第4個步驟開始的時候再進行。
5. 把剛才新建的文件添加到工程中去,點擊“AddExisting Flie”后出現(xiàn)如下畫面,如圖6所示:
圖6 添加原始的待測試程序文件
點擊“OK”后,繼續(xù)添加另外一個測試文件,如圖7所示:
圖7 添加仿真測試文件
之后點“OK”,再關閉“Add items to the Project”這個對話框。最簡單的辦法是一次同時添加兩個文件,點擊“Browse”之后,鼠標直接框選這兩個文件,這樣可以一次添加多個文件到ModelSim工程中。
6. 我們在軟件的Project區(qū)域已經能看到我們添加的這兩個文件了,如圖8所示:
圖8 Project區(qū)域狀態(tài)
我們下面就可以編譯這兩個文件了,這時候因為還沒有編譯文件,所以Status一欄顯示的是兩個問號。接著在這個Project區(qū)域單擊鼠標右鍵,選擇“Compile→Compile All”,把HDL源文件編譯到當前工程的工作庫當中去。如圖9所示:
圖9 編譯源文件和仿真測試文件
我們在軟件下方的Transcript區(qū)域中假如看到如圖10的字樣,就說明編譯通過了:
圖10 編譯成功畫面
注意中間的兩個successful說明成功了。另外,我們在Project區(qū)域中的Status一欄中能夠看見兩個綠色的勾,這也是一種編譯成功的提示。
7. 編譯通過之后,在Project區(qū)域鼠標右鍵點擊“Add to Project → Simulation Configuration”,如圖11所示:
圖11 添加Simulation Configuration
在出現(xiàn)的Add SimulationConfiguration對話框的右下角打開OptimizationOptions,打開后切換到Options選項卡頁面,在Optimization Level中選擇Disable Optimizations,如圖12所示:
圖12 關閉優(yōu)化選項
點擊OK確定之后返回Add Simulation Configuration對話框,在Optimization欄中關閉Enable Optimization,再展開work目錄,選中Test Bench文件test_counter8,之后save保存。如圖13所示:
圖13 關閉優(yōu)化選項
此時會在Project區(qū)域出現(xiàn)一個仿真配置文件:Simulation 1,雙擊它就能進入仿真了,在重啟ModelSim之后,還可以雙擊它進入仿真,比較方便。
注意:如果不關閉優(yōu)化選項的話,有時候ModelSim軟件會報錯導致不能正常進行仿真。
8. 雙擊“Simulation 1”后進入仿真波形界面,在Object區(qū)域鼠標右鍵選擇“Add → To Wave → Signals inRegion”,把待仿真的信號添加入Wave窗口。如圖14所示:
圖14 待仿真的信號添加入Wave窗口
9. 接著我們把wave窗口中的兩個信號量改成無符號數(shù)顯示,方便我們觀察,在load_din和dout上依次單擊鼠標右鍵,按照圖15的方法修改即可:
ModelSim仿真入門:時序仿真
正如前面第二講所述,時序仿真在實際應用中使用的并不多,但是為了保持仿真系列文檔的完整性,我們還是把仿真的方法寫出來。
時序仿真就要比第二講的功能仿真步驟上要多一些,本講以目前的QuartusII的12.0SP2版本和Cyclone IV的EP4CE6F17C8為例,講解下時序仿真的方法和步驟。
時序仿真需要的文件總共有以下幾種:
①綜合后生成的網表文件“ * .vo ”(假如在Setting里面設置里輸出語言為VHDL的話,則生成的網表文件為“ * .vho”)
?、诰C合后生成的具有工程延時信息的文件“ * .sdo ”(VHDL語言亦為此)
?、?Test Bench程序文件
大致的過程就是先在Quartus II中生成網表文件和時延文件,然后調用ModelSim進行仿真,具體的時序仿真步驟如下:
1. 打開Quartus II軟件,新建工程,再新建文件counter8.v,把上一講中的counter8.v這個源文件復制到Quartus II的工程目錄中,并添加該文件到工程中。接著,選擇“Settings”→“EDA Tool Settings”,選擇左欄的“Simulation”,設置情況如圖1所示。
第一欄的“Tool name”選擇ModelSim-Altera
第二欄的“Format for output netlist”選擇自己熟悉的語言,VHDL或Verilog都可以,后面的“output directory”是選擇輸出的網表文件和延時信息文件的存放路徑,一般選擇默認即可,這樣的話,將來編譯成功后,會在Quartus II的工程文件夾(本例為counter8這個文件夾)下面生成一個simulation/modelsim的文件夾,里面存有將來要用到的.vo和.sdo這兩個文件。
再往下,看到有“More EDA Netlist WritterSettings…”按鈕,點擊后進入設置畫面,設置情況如圖2所示。注意的地方就是Generatenetlist for functional simulation這一項后面是處于OFF的關閉狀態(tài),這樣才能生成我們所要的時序仿真文件。
圖1 simulation的設置
圖2 More EDA Netlist WritterSettings的設置
都設置好了以后,全部點擊“OK”后退出設置,在QII的編譯環(huán)境下執(zhí)行全編譯。編譯中的情況如圖3所示:
圖3 編譯中的情況
注意:下面比我們平時進行的全編譯時多了一項“EDANetlist Writer”,圖3的紅色箭頭指向的位置。
2. 找到新建工程目錄所在的文件夾,在里面找到simulation/modelsim這個文件夾,會發(fā)現(xiàn)文件夾內有10個文件,如圖4所示:
圖4 生成的10個文件
注意:counter8.vo和counter8_v.sdo就是時序仿真需要的兩個重要的網表文件,它們與counter8_8_1200mv_85c_slow.vo和counter8_8_1200mv_85c_v_slow.sdo只是命名不同而已,文件的內容其實是一樣的。后兩個是QuartusII目前新的網表文件的命名方法,文件名標示出了速度等級(-8)、內核電壓(1200mv)、溫度條件(85℃)以及時序模型(slow)。
之所以Altera還沒有取消舊的命名文件方法并讓QuartusII繼續(xù)生成這兩個網表文件,是因為有TclScript文件是按照舊的命名方法寫的,需要兼容它們。
以下時序仿真以counter8.vo和counter8_v.sdo為例,如果需要用fast時序模型做仿真,也是按照下面的方法進行,只是把vo和sdo文件換為fast。
另外“.xrf”和“.sft”這兩個文件,是QuartusII編譯生成的一些相關的信息文件,時序仿真用不到。
3. 打開ModelSim軟件,新建一個工程,如圖5所示:
圖5 新建工程并指定路徑
?、俳又褎偛派傻腸ounter8.vo和counter8_v.sdo兩個文件拷貝到現(xiàn)在個仿真工程的目錄下面。
②之后還要拷貝一個很重要的文件,到QuartusII的安裝目錄下: quartusedasim_lib,找到cycloneive_atoms.v這個文件,這個是Altera器件庫的庫文件,進行時序仿真就是基于這個庫文件的,把它也拷貝到仿真工程目錄。
注意:我們是以Cyclone IV的EP4CE6F17C8為例的,所以這里需要復制的就是cycloneive這個庫文件,如果是其它器件的話,需要再對應選擇。
?、郯裻est_counter8.v文件拷貝到這個仿真工程目錄下面。
?、茉赒II安裝目錄的。.altera12.0quartusedafv_libverilog,把這里面的dffeas.v和dffep.v文件拷貝到這個仿真工程目錄下面。
4. 進行完上面的步驟后,返回到ModelSim這個軟件界面,會發(fā)現(xiàn)軟件還停留在剛才新建工程,需要我們?yōu)槠涔こ烫砑游募膶υ捒颍俏覀兙吞砑游募?,把“counter8.vo”、“cycloneive_atoms.v”、“test_counter8.v”、“dffeas.v”和“dffep.v”這5個文件添加進去,如圖6所示:
圖6 添加的5個文件
注意:此時不需要添加counter8.v這個文件了,.vo文件可以替代它。
5. 之后關閉添加文件對話框,可以看見Project區(qū)域有了我們添加的5個文件了,在該區(qū)域點右鍵,“Compile”→“Compile All”執(zhí)行全部編譯。
6. 在Project區(qū)域點右鍵,“Add to Project”→“Simulation Configuration”添加一個仿真配置的設置,這時會直接彈出添加仿真配置對話框,這里,我們要進行如下的設置:
?、僭凇癉esign”選項卡下展開work前面的“+”號后點選test_counter8,這個就是Test Bench文件。如圖7所示:
圖7 Design選項卡的設置
?、谠偾袚Q到“SDF”選項卡,點擊“Add”添加“.sdo”文件,點擊瀏覽后會直接出現(xiàn)這個“.sdo”文件的,選擇即可,在下面的“Apply to Region”內輸入“U”,這個就是我們的Test Bench程序中例化頂層文件的例化名字。如圖8所示:
圖8 SDF選項卡的設置
接著把下面的兩個SDF選項的復選框都選中。如圖9所示:
圖9 選中SDF選項的兩個復選框
點擊“OK”退出配置設置界面。配置好了以后的Project區(qū)域的內容如圖10所示:
圖10 Project區(qū)域的內容
7. 雙擊Simulation執(zhí)行仿真,后面的步驟和功能仿真一樣的了,不再贅述。仿真的波形圖如圖11所示:
圖11 時序仿真的波形圖
從圖11中可以看到dout相對于主時鐘clk有明顯的延時,這個延時大小與當前使用的器件的時序模型有關。
在具體實踐過程中,可能還會遇到各種各樣的問題,ModelSim正常運行也依賴于仿真庫文件的齊備,所以碰到某些工程在仿真中遇到報錯的情況時,不妨檢查下ModelSim的提示信息,看看是否有仿真所必需的庫文件沒有添加進來。
評論
查看更多