本實驗的目的就是在ModelSim環境下學習掌握該軟件的一般仿真測試流程和仿真測試方法,另外學習編寫簡單的Test Bench程序並在ModelSim下進行調試。
實驗步驟如下:
-
打開ModelSim軟件,如圖1所示:
-
- 軟件的啓動畫面如圖2所示,進入界面後如圖3所示:
.圖2 軟件的啓動畫面
軟件進入後的畫面
注意:如果是第一次使用軟件,進入後會有一些諸如軟件的歡迎畫面等不相關的對話框,無須擔心,直接關閉即可,亦可選擇下次登陸時不顯示。
- 進入ModelSim主窗口後,選擇File菜單下的"New→Project",新建一個工程,在彈出的對話框中,給該工程命名並指定一個存放的路徑,如圖4所示:
新建工程
在這裏,工程名和你的頂層文件名保持一致是推薦的做法。路徑的注意事項已經說過,這裏不再提及。默認的庫名就是"work",這個無需更改,點擊"OK"即可。
- 之後會彈出如圖5的對話框,選擇是新建一個文件還是添加已存在的文件,這兩個都可以選擇,假如事先編好了文件,就選擇添加進來,假如沒有就新建。在這裏使用添加已有文件,在軟件開始之前就編好所用的程序,這樣比較方便些。軟件自帶的編輯環境不是很好,使用第三方的編輯工具是推薦的方法。建議使用UltraEdit或Notepad++這些專業的代碼編輯軟件。
UltraEdit偏重於功能的強大和豐富的用戶可定製化特性,而Notepad++更加註重易用性。兩者在普通功能上差異不是特別大,根據自己的喜好選擇一款即可。
給工程中添加文件
在路徑G:\FPGA_Project\ModelSim\counter8下新建兩個文件,一個是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 //注意最前面的符號是數字鍵"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; //可以不添加這個仿真結束的系統任務
end
always#10 clk = ~clk;
counter8U(
.clk(clk),
.aclr(aclr),
.load(load),
.load_din(load_din),
.dout(dout)
);
endmodule
這樣,我們就在該工程路徑下建立好了這兩個文件。當然新建這兩個文件的的工作可以是放在我們這個全部的工作開始之前進行的,無需等到第4個步驟開始的時候再進行。
5. 把剛纔新建的文件添加到工程中去,點擊"AddExisting Flie"後出現如下畫面,如圖6所示:
添加原始的待測試程序文件
圖7 添加仿真測試文件
之後點"OK",再關閉"Add items to the Project"這個對話框。最簡單的辦法是一次同時添加兩個文件,點擊"Browse"之後,鼠標直接框選這兩個文件,這樣可以一次添加多個文件到ModelSim工程中。
- 我們在軟件的Project區域已經能看到我們添加的這兩個文件了,如圖8所示:
圖8 Project區域狀態
我們下面就可以編譯這兩個文件了,這時候因爲還沒有編譯文件,所以Status一欄顯示的是兩個問號。接着在這個Project區域單擊鼠標右鍵,選擇"Compile→Compile All",把HDL源文件編譯到當前工程的工作庫當中去。如圖9所示:
圖9 編譯源文件和仿真測試文件
我們在軟件下方的Transcript區域中假如看到如圖10的字樣,就說明編譯通過了:
圖10 編譯成功畫面
注意中間的兩個successful說明成功了。另外,我們在Project區域中的Status一欄中能夠看見兩個綠色的勾,這也是一種編譯成功的提示。
- 編譯通過之後,在Project區域鼠標右鍵點擊"Add to Project → Simulation Configuration",如圖11所示:
圖11 添加Simulation Configuration
在出現的Add SimulationConfiguration對話框的右下角打開OptimizationOptions,打開後切換到Options選項卡頁面,在Optimization Level中選擇Disable Optimizations,如圖12所示:
圖12 關閉優化選項
點擊OK確定之後返回Add Simulation Configuration對話框,在Optimization欄中關閉Enable Optimization,再展開work目錄,選中Test Bench文件test_counter8,之後save保存。如圖13所示:
圖13 關閉優化選項
此時會在Project區域出現一個仿真配置文件:Simulation 1,雙擊它就能進入仿真了,在重啓ModelSim之後,還可以雙擊它進入仿真,比較方便。
注意:如果不關閉優化選項的話,有時候ModelSim軟件會報錯導致不能正常進行仿真。
-
雙擊"Simulation 1"後進入仿真波形界面,在Object區域鼠標右鍵選擇"Add → To Wave → Signals inRegion",把待仿真的信號添加入Wave窗口。如圖14所示:
圖14 待仿真的信號添加入Wave窗口 -
接着我們把wave窗口中的兩個信號量改成無符號數顯示,方便我們觀察,在load_din和dout上依次單擊鼠標右鍵,按照圖15的方法修改即可: