Modelsim仿真
一、Modelsim的簡介
ModelSim是Model Technology(Mentor Graphics的子公司)的HDL硬件描述語言的仿真軟件,該軟件可以用來實現對設計的VHDL、Verilog HDL 或是兩種語言混合的程序進行仿真,同時也支持IEEE常見的各種硬件描述語言標准。在工程創建完成之后,通常需要使用專用的仿真工具,對設計進行功能仿真(也稱之為前仿真),驗證電路功能是否符合設計要求。通過功能仿真可以及時發現設計中的錯誤,在系統設計前期即可完成修改,提高設計的可靠性。
無論是從使用界面和調試環境,還是從仿真速度和效果上看,ModelSim都可以算的上是業界比較優秀的HDL語言仿真軟件。它是唯一的單內核支持VHDL和Verilog HDL混合仿真的仿真器,是做FPGA/ASIC設計的RTL級和門級電路仿真的好選擇,它采用直接優化的編譯技術,Tcl/Tk技術和單一內核仿真技術,具有仿真速度快,編譯的代碼與仿真平台無關,便於IP核的保護和加快錯誤程序定位等優點。
ModelSim分幾種不同的版本:ModelSim SE、ModelSim PE、ModelSim LE和ModelSim OEM,其中的SE、PE、LE是其最高版本,編譯速度是所有版本中最快的,而OEM版本就是集成在FPGA廠家設計工具中的版本,它們專門和某個廠家的FPGA配套來使用,如后面使用到的ModelSim AE就是專門針對Intel公司Quartus Prime的配套的OEM產品 。
二、Modelsim軟件的安裝
- 軟件下載
ModelSim軟件的下載鏈接可以從MyFPGA論壇獲取,然后按圖2.1所示下載軟件。本教程中所用到的ModelSim版本是Intel FPGA Starter Edition 10.5b。
- 軟件安裝
- 雙擊下載的ModelSimSetup-18.1.0.625-windows.exe應用程序,出現如圖2.2所示的ModelSim安裝界面,點擊Next。
- 在出現的“Select the ModelSim edition you like to install 界面, 選擇ModelSim-Intel FPGA Starter Edition(該版本是不需要License的),如圖2.3所示,之后點擊Next。
- 在License Agreement界面選擇“I accept the agreement”,並點擊Next。
- 將ModelSim軟件的安裝路徑選擇到Quartus的安裝路徑下,如圖2.5所示,點擊兩次Next,便可以開始安裝軟件。
- 等待軟件安裝,如圖2.6所示。
- 軟件安裝完成后,點擊Finish,退出安裝界面。到此,ModelSim仿真軟件安裝成功。
三、Test Bench測試平台的結構
Test Bench主要是為測試或仿真Verilog程序搭建了一個平台,給被測試的模塊施加激勵信號,通過觀察被測試模塊的輸出響應,來判斷其邏輯功能和時序關系是否正確。
測試模塊與一般的Verilog代碼書寫方式類似,其主要特點如下:
- 時間單位和時間精度一般是1、10和100這三種整數,單位有s、ms、us、ns、ps和fs;
- 測試模塊只有模塊名字,沒有端口列表;
- 輸入信號(激勵信號)必須定義為reg類型,用來保持信號值;
- 輸出信號(顯示信號)必須定義為wire類型;
- 例化測試模塊時,需要注意端口排列的順序與模塊定義時的順序要一致;
- 一般使用initial 、always來定義激勵信號波形;
- 在激勵信號的定義中還可以使用一些控制語句,比如if-else、case、while、repeat、wait、begin-end等;
四、Modelsim仿真應用實例
這部分將以單口ram工程為例,介紹如何編寫仿真腳本文件(即test bench文件),以及使用ModelSim工具對創建的工程進行仿真測試。
1. ModelSim軟件調用設置
在第一次用Quartus Prime調用ModelSim-Altera之前,需要指定EDA工具來為支持的模擬器生成仿真文件。首先,打開full_adder.qpf工程。然后,點擊Tools --> Options --> EDA Tool Options,在ModelSim-Altera欄選擇對應的ModleSim-Altera的安裝路徑,如圖5.1所示。點擊OK即可在Quartus Prime中調用ModelSim-Altera軟件。
2. 新建Test Bench文件
- 選擇 File --> New --> Verilog HDL,如圖4.2所示,新建空白.v文檔。
- 點擊File --> Save as... ,這里將該.v文件命名為ram_tb.v,點擊保存,如圖4.3所示。
- 在名為ram_tb.v的Verilog空白文檔中輸入如下代碼,並保存。
`timescale 1ns/1ns
module ram_tb;
reg clk;
reg rst_n;
wire [7:0]q;
initial
begin
clk=0;
rst_n=0;
#20 rst_n=1;
end
always #10 clk=~clk;
ram u_ram(
.clk(clk),
.rst_n(rst_n),
.q(q)
);
endmodule
3. 添加測試文件
- 點擊Assignments --> Settings,如圖4.4;然后選中Simulation欄,Tool name選擇ModelSim-Altera,然后選擇新建Test Bench文件,如圖4.5所示的步驟。
- 按照圖4.6所示的步驟選擇ram_tb.v文件,點擊Add進行添加,然后點擊OK,如圖4.6所示。
- 這樣就可以在Test Bench看到添加的 ram_tb.v文件,點擊OK ,如圖4.7所示。添加完成后,在Settings窗口點擊OK,然后將其關閉。
4. 開始仿真
- 在Quartus Prime中選擇菜單項Tools --> Run Simulation Tool --> RTL Simulation,即可調用ModelSim工具進行仿真,如圖4.8所示。
- 運仿真結果如圖4.9所示,注意,如果wave窗口沒有顯示波形,可以在右下角點擊一下Wave選項進行切換。
sim窗口顯示的是需要仿真的激勵模塊;Objects(對象)窗口顯示的是仿真中的激勵信號和顯示信號;Transcript窗口(命令行窗口)會按照系統任務 $monitor 規定的格式打印輸出結果。
wave(波形)窗口顯示的是仿真波形,如果發現波形顯示的不夠完整,可以在波形窗口右鍵–>Range,按自己的需要調整顯示范圍。
從4.9中的波形圖可以看出:
wren為1時,數據寫入到ram, wren為0時,ram的數據讀出到q。
結果與預期一致,說明我們的ram控制功能已實現。