《Verilog HDL數字系統(tǒng)設計-原理、實例及仿真》課件第13章_第1頁
《Verilog HDL數字系統(tǒng)設計-原理、實例及仿真》課件第13章_第2頁
《Verilog HDL數字系統(tǒng)設計-原理、實例及仿真》課件第13章_第3頁
《Verilog HDL數字系統(tǒng)設計-原理、實例及仿真》課件第13章_第4頁
《Verilog HDL數字系統(tǒng)設計-原理、實例及仿真》課件第13章_第5頁
已閱讀5頁,還剩119頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第13章ModelSim仿真工具13.1ModelSim概述13.2設計輸入13.3設計Testbench13.4設計驗證與仿真13.5ModelSim的調試13.6相關文件介紹

13.1ModelSim概述

ModelSim仿真工具是MentorGraphics的子公司ModelTechnology公司開發(fā)的硬件描述語言的仿真軟件。該軟件是業(yè)界最優(yōu)秀的HDL語言仿真軟件之一,是單一內核支持VHDL和VerilogHDL混合仿真的仿真器。它提供了友好的調試環(huán)境,支持PC和UNIX、Linux混合平臺,并提供有完善和高性能的驗證功能,具有仿真速度快、編譯代碼與仿真平臺無關、全面支持業(yè)界廣泛的標準等優(yōu)點。

ModelSim仿真工具的主要特點如下:

(1)本地編譯結構,編譯仿真速度快,跨平臺、跨版本仿真。

(2)先進的數據流窗口,可以迅速追蹤到產生錯誤或者不穩(wěn)定狀態(tài)的原因。

(3)性能分析工具可幫助分析性能瓶頸,加速仿真。

(4)代碼覆蓋率檢測確保了測試的完備性。

(5)先進的信號檢測功能,可以方便地訪問VHDL、VerilogHDL或者兩者混合設計中的底層信號。

(6)支持加密IP。

(7)可以實現與MATLAB的Simulink的聯合仿真。13.1.1ModelSim的運行模式

ModelSim的運行模式有以下4種:

(1)用戶圖形界面(GUI)模式:在主窗口中直接輸入操作命令并執(zhí)行,這是該軟件的主要操作方式之—。

(2)交互式命令(Cmd)模式:沒有圖形化的用戶界面,僅僅通過命令控制臺輸入的命令完成相應工作。

(3)?Tcl和宏(Macro)模式:可執(zhí)行擴展名為do的宏文件或Tcl語法文件,完成與在GUI主窗口逐條輸入命令等同的功能。

(4)批處理文件(Batch)模式:在DOS、UNIX或Linux操作系統(tǒng)下執(zhí)行批處理文件,完成軟件功能。13.1.2ModelSim的仿真流程

ModelSim基本應用的仿真步驟分為如下4步:

(1)創(chuàng)建工程。包括創(chuàng)建?.mpf后綴的工程文件,建立庫并將邏輯庫映射到物理目錄。

(2)設計輸入。向工程中添加有效的設計單元,包括設計文件、ModelSim管理文件夾、仿真環(huán)境設置等??梢詫⑦@些文件拷貝到工程目錄,也可以簡單地將它們映射到本地。

(3)編譯設計文件。進行語法檢查并完成編譯。

(4)運行仿真。對指定的設計單元進行仿真。

圖13.1給出了在ModelSim工程中仿真一個設計的基本流程,該流程是基本的仿真流程。圖13.1ModelSim的基本仿真流程

13.2設計輸入

這里通過一個簡單的實例,即具有同步置數、異步復位功能的4位二進制計數器來學習如何使用ModelSim軟件進行功能仿真。

計數器是數字系統(tǒng)設計中最基本的功能模塊之一,是對時鐘信號的個數進行計數的時序邏輯器件,用來實現數字測量、狀態(tài)控制等功能。4位二進制計數器的接口如圖13.2所示。其中data[3..0]是4位數據輸入端,out[3..0]是4位數據輸出端,clk和rst是時鐘信號和復位信號,load是置數端。當load有效時,停止計數,data[3..0]的數據將被直接賦給out[3..0]。圖13.2同步置數、異步復位的4位?二進制計數器13.2.1創(chuàng)建工程

創(chuàng)建工程的操作步驟如下:

(1)啟動軟件。雙擊桌面上的ModelSim圖標,啟動ModelSimSE6.5e軟件,顯示如圖13.3的Main主窗口界面。由圖可見,Main窗口主要由菜單欄、工具欄、工作區(qū)、命令窗口和狀態(tài)欄組成。圖13.3Main主窗口界面

(2)通過File→New→Project菜單命令創(chuàng)建一個新工程,如圖13.4所示。

圖13.4創(chuàng)建工程

(3)自動彈出CreateProject對話框,如圖13.5所示。在ProjectName文本框中填寫項目名稱,這里輸入count4。ProjectLocation是工作目錄,可通過Browse按鈕來選擇或改變。ModelSim不能為一個工程自動建立一個目錄,因此最好自己定義保存路徑。本例中保存的路徑為“E:/count4”。DefaultLibraryName說明所做的設計被編譯到哪一個庫中,這里使用默認值work。單擊OK按鈕,此步驟后產生的工程文件?.mpf文件被創(chuàng)建并存儲于所選擇的目錄下。在編譯完設計文件后,在Workspace窗口的Library中就會出現work庫。

(4)設置好項目名稱及保存路徑后,點擊OK按鈕,即完成一個新工程的創(chuàng)建。

圖13.5CreateProject對話框13.2.2向工程中添加文件

在創(chuàng)建完工程后,需要向工程中添加文件。在圖13.5所示的界面中單擊OK按鈕,則自動彈出圖13.6所示的窗口。在該窗口中,可以選擇創(chuàng)建新設計的文件,添加已存在的文件,建立仿真結構或添加用于管理的文件夾。圖13.6向工程添加文件

1.創(chuàng)建新設計的文件

選擇“CreateNewFile”,啟動如圖13.7所示的CreateProjectFile界面,在FileName一欄中輸入文件名稱,在Addfileastype中選擇Verilog選項,點擊OK按鈕。圖13.7CreateProjectFile界面工程中需要添加的文件包括模塊文件和測試用的激勵文件。本例中創(chuàng)建的4位二進制計數器的模塊文件為count4.v,激勵文件為count4_tp.v。

創(chuàng)建好文件后,在圖13.8所示主窗口的Project中可以看到已建立的與工程同名的count4.v模塊文件,文件類型為Verilog。雙擊count4.v文件,出現圖13.8右側所示的編寫源代碼的Source窗口。在該Source窗口中可以編寫、修改VerilogHDL源代碼。圖13.8添加文件代碼

2.添加已存在的文件

我們也可以為當前工程count4添加已存在的文件。在如圖13.6所示的窗口中選擇“AddExistingFile”,啟動如圖13.9所示的AddfiletoProject界面,可以使用Browse按鈕選擇向工程添加需要的文件,這里的文件類型為默認,單擊OK按鈕完成文件的添加。圖13.9AddfiletoProject界面13.2.3建立庫

ModelSim軟件中庫的含義是存儲已編譯過的設計單元的目錄,Verilog設計文件中的所有模塊和信息必須被編譯到一個或多個庫中。ModelSim庫包含有以下信息:可重指定執(zhí)行的代碼、調試信息和從屬信息等。在如圖13.3所示的Main主窗口界面的工作區(qū)中展開庫,能看到庫中的文件,但未編譯過的文件在庫內是看不到的。

1.建立庫

建立庫的方法有兩種。

方法一:在用戶界面模式下,選擇File→New→Library菜單命令,出現如圖13.10所示的界面。其中,Create中各選項的含義如下:

anewlibrary:表示建立一個新庫。

amaptoanexistinglibrary:表示建立一個到已存在庫的映射。

anewlibraryandalogicalmappingtoit:表示建立一個邏輯映射的新庫。圖13.10創(chuàng)建新庫在LibraryName欄內輸入要創(chuàng)建庫的名稱,在LibraryPhysicalName處輸入存放庫的文件名稱。

方法二:在命令模式下執(zhí)行vlib命令,語法格式為

vlib<lib_name>

其中,lib_name為庫名。

例如:輸入

vlibmy_lib

表明創(chuàng)建庫my_lib,如圖13.11所示,則在目前工程所在路徑下生成my_lib庫,在下次啟動軟件后可看到my_lib庫的保存路徑為“E:/count4/my_lib”,如圖13.12所示。圖13.11執(zhí)行vlib命令圖13.12創(chuàng)建新庫如果要刪除某庫,只需在如圖13.12所示的Library中選中該庫名,點擊右鍵,在快捷菜單中選擇delete即可。例如,選擇delete刪除my_lib庫后,如圖13.13所示,my_lib庫顯示為unavailable,下次啟動軟件后my_lib庫被刪除。圖13.13刪除庫

2.映射庫到物理目錄

一般情況下,ModelSim軟件可以在當前工程所保存的路徑下查找到所需要的庫。如果需要在所創(chuàng)建的工程中使用其他庫中編譯好的文件,則需要將所建立的庫映射到含有該文件的設計單元所在的物理目錄中。映射庫到物理目錄的方法有兩種。

方法一:若選擇如圖13.14所示的amaptoanexistinglibrary項,新建一個到已存在庫的映射,則需單擊Browse按鈕選擇已經存在的庫。例如建立一個名為my_lib的庫映射到E:/count4/work,則在工作區(qū)的my_lib庫中已經包含work庫中編譯過的文件count4.v和count4_tp.v,如圖13.15所示。圖13.14映射庫到物理目錄圖13.15庫中所包含的文件方法二:在命令模式下執(zhí)行vmap命令,語法格式為

vmap<logical_name><directory_name>

其中,logical_name為邏輯庫名,directory_name為物理目錄的全路徑名。

例如,執(zhí)行vmapmy_libwork命令可以同樣實現上述功能。

13.3設計Testbench

13.3.1Testbench的基本結構

利用VerilogHDL編寫Testbench的基本結構如下:

moduletest_bench;

信號或變量定義聲明;

使用initial或always語句來產生激勵波形;

實例化設計模塊;

監(jiān)控和比較輸出響應;

endmodule激勵文件經常使用的過程塊是always塊和initial塊。所有的過程塊都是在0時刻同時啟動。它們是并行的,在模塊中不分前后。其中initial塊只執(zhí)行一次,always塊只要符合觸發(fā)條件就會立即執(zhí)行。

監(jiān)控被測模塊的輸出響應的方法為:在initial塊中,用系統(tǒng)任務$time和$monitor。$time返回當前的仿真時刻,$monitor只要在其變量列表中有某一個或某幾個變量值發(fā)生化,就在仿真單位時間結束時顯示其變量列表中所有變量的值。13.3.2時鐘信號的產生

時鐘是時序電路設計關鍵的參數,本節(jié)專門介紹產生仿真驗證過程所需要的各類時鐘信號。

1.普通時鐘信號

所謂普通時鐘信號,是指占空比為50%的時鐘信號,也是最為常用的時鐘信號,如圖13.16所示。圖13.16占空比為50%的時鐘信號普通時鐘信號可通過initial語句和always語句產生,方法如下:

(1)基于initial語句的方法(見代碼13.1)。

【代碼13.1】用initial語句產生時鐘信號。

(2)基于always語句的方法(見代碼13.2)。

【代碼13.2】用always語句產生時鐘信號。

parameterperiod=20;

regclk;

initialclk=1‘b0;

always#(period/2)clk=~clk;

2.自定義占空比的時鐘信號

自定義占空比的時鐘信號通過always模塊可以快速實現。代碼13.3是產生25%時鐘信號代碼的實例。

3.有限循環(huán)的時鐘信號

上述語句產生的時鐘信號都是無限的,可采用repeat語句來產生有限循環(huán)的時鐘信號,其實現見代碼13.4。

4.相位偏移的時鐘信號

相位偏移是兩個時鐘信號之間的相對概念,指兩個時鐘信號在時間上有延遲。產生相移時鐘信號的代碼見代碼13.5。13.3.3復位信號的產生

1.異步復位信號

異步復位是指無論時鐘沿是否到來,只要復位信號有效,就對系統(tǒng)進行復位。異步復位信號的實現見代碼13.6。

2.同步復位信號

同步復位是指復位信號只有在時鐘沿到來時才能有效,否則無法完成對系統(tǒng)的復位工作。同步復位對復位信號的脈沖寬度有要求,必須大于指定的時鐘周期,且同步復位依賴于時鐘,如果電路中的時鐘信號出現問題,則無法完成復位。其實現見代碼13.7。13.3.4Testbench設計實例

具有同步置數、異步復位功能的4位二進制計數器的模塊文件如代碼13.8所示。

count4的Testbench激勵文件如代碼13.9所示。

【代碼13.9】count4的Testbench激勵文件。通過上面的實例可知,Testbench激勵文件與源代碼模塊文件在編寫上沒有實質區(qū)別,其主要特點如下:

(1)激勵文件中定義模塊時只有模塊名,沒有輸入輸出的端口列表,如modulecount4_tp。

(2)編寫Testbench激勵文件向待測模塊施加激勵信號,激勵信號必須定義為reg類型,以保持信號值,激勵文件在激勵信號的作用下產生的輸出信號必須定義為wire類型。

(3)實例化被測模塊即調用模塊文件時,應注意端口信號的功能。

(4)一般用initial、always過程塊來定義激勵波形,其中可以使用case、if-else、for、forever、repeat、while等控制語句。

(5)使用系統(tǒng)任務和系統(tǒng)函數可以完成控制仿真過程停止、結束及定義輸出顯示格式等功能。例如$stop、$finish、$monitor等指令。

13.4設計驗證與仿真

隨著設計規(guī)模的不斷增大,驗證任務在設計工作中所占的比例越來越大,成為VerilogHDL設計流程中非常關鍵的步驟。VerilogHDL設計流程中的各個環(huán)節(jié)都離不開驗證,驗證一般分為四個階段:功能驗證、綜合后驗證、時序驗證和板級驗證。前三個階段只能在PC上借助EDA軟件,通過仿真手段完成。第四個階段則是將設計真正地運行在硬件平臺(FPGA/CPLD、ASIC等)上,通過調試工具(示波器、邏輯分析儀)及軟件調試工具(在線邏輯分析儀)直接調試硬件來完成。13.4.1仿真的概念

1.功能仿真

2.門級仿真

3.時序仿真

4.綜合后仿真13.4.2ModelSim功能仿真

1.編譯文件

在工程窗口的文件名上單擊右鍵,選擇Compile→CompileAll命令來整體編譯模塊文件及激勵文件,如圖13.17所示。若編譯成功,則Project中文件的Status(狀態(tài))欄中顯示標記“√”。編譯也可通過點擊菜單欄中的Compile→CompileAll命令來完成?;蛘咄ㄟ^點擊工具欄中的編譯命令完成單個文件的編譯,點擊進行全編譯。如圖13.18所示,在主界面下方的命令窗口中顯示的調試信息“Compileofcount4.vwassuccessful.”及“Compileofcount4_tp.vwassuccessful.”,表示模塊文件及激勵文件都編譯成功。圖13.17編譯過程圖13.18編譯成功

2.加載激勵文件

執(zhí)行菜單欄中的Simulate→StartSimulate命令或者單擊工具欄的,彈出如圖13.19所示的仿真器參數設置界面。本例中,單擊工作庫“work”前的,選定激勵文件(頂層文件)count4_tp進行加載。界面下面的最優(yōu)化使能為默認設置,選擇此項仿真后在工程所在路徑生成opt的最優(yōu)化的設計文件,如果設計代碼簡單則可以不選此項。圖13.19加載激勵文件也可以通過雙擊主窗口工作區(qū)Library中work庫的激勵文件count4_tp.v,按照默認設置自動加載激勵文件,啟動仿真。

如圖13.19所示,加載好激勵文件后點擊OK按鈕啟動仿真,在工作區(qū)中自動出現sim標簽,如圖13.20所示。圖13.20sim標簽

3.向wave窗口添加信號

如圖13.21所示,選擇要進行仿真的模塊,然后單擊右鍵選擇“Add”,執(zhí)行“ToWave→Alliteminregion”命令,向wave窗口添加信號。圖13.21添加仿真波形在自動彈出的wave窗口中,可以更改工具欄中的時間值為,表示仿真的時間長度。單擊wave窗口工具欄中的run執(zhí)行,最終得到的功能仿真波形如圖13.22所示,通過波形可以看到設計實現了同步置數、異步復位的計數功能。圖13.22功能仿真波形

wave窗口是仿真結果的波形記錄窗口。通過查看仿真波形,可以對VerilogHDL設計中的線網、寄存器變量和已命名事件的正確性進行驗證。圖形左側是工程中用到的所有信號和其仿真時刻對應的值,波形下面的橫軸上顯示的是仿真時間,圖中的黃線可以用來查看波形上任意點的仿真時間。在wave窗口,執(zhí)行File→Saveformat命令,保存成*.do文件,可供以后調用。

1)?Processes窗口

在主界面執(zhí)行View→Process命令,打開Processes(進程)窗口,如圖13.23所示。圖13.23Processes窗口

2)?Objects窗口

在主界面執(zhí)行View→Objects命令,打開Objects信號窗口,如圖13.24所示。仿真時,默認情況下波形窗口只顯示設計的端口信號,如果要查看設計內部或底層模塊的信號,只能通過將需要查看的信號由設計端口引出,需要修改代碼。而Objects窗口不僅能夠用來查看端口信號的數值、類型、模式,而且可以隨意查看設計的內部信號情況,這給調試程序帶來了極大的方便。同時也可以通過Objects窗口執(zhí)行Edit→Force命令在仿真過程中強制某一個信號值的變化,執(zhí)行Edit→Clock命令將任意信號強制轉換成時鐘信號。

圖13.24Objects窗口例如在Objects窗口中選擇load信號執(zhí)行Edit→Clock命令,并在圖13.25所示的窗口中將其強制轉換成周期為50?ns的時鐘信號,然后執(zhí)行仿真。在如圖13.26所示的仿真波形中可以看到,前200?ns為功能仿真的波形,200?ns后為將load信號強制成時鐘信號的仿真結果。圖13.25強制時鐘信號圖13.26仿真波形

3)?List窗口

List(列表)窗口中使用表格的形式顯示VerilogHDL中線網和寄存器變量的仿真結果。

在完成功能仿真后,在sim標簽中選中仿真文件并單擊右鍵選擇“Add”,執(zhí)行“ToList→Alliteminregio”命令,向List窗口添加信號,如圖13.27所示。List窗口分為兩個部分,左側為仿真運行時間(單位ns)和仿真的delta(延時)列表,右側為所有信號值的列表。從列表中可以看到在50?ns時,數據輸入端data為0111,置數端load為1使能,則數據輸出out端在clk上升沿到來后的55?+2?ns時被強行置數0111。

通過該窗口可以清楚地看到每個信號在各時刻的數值,以此來對仿真結果進行驗證。圖13.27List窗口

4)?Dataflow窗口

Dataflow(數據流)窗口是一般仿真軟件提供的通用窗口,可以使設計者通過該窗口觀測設計中的物理連接、跟蹤事件的傳遞和確定“非期望輸出”的原因。通過Dataflow窗口也可以跟蹤寄存器、線網和進程等,極大地豐富了調試方法。數據流窗口可以顯示進程、信號、線網和寄存器等,也可以顯示設計中的內部連接。窗口中有一個內置的符號表,映射了所有的VerilogHDL基本門,例如與門、非門等符號,其他的VerilogHDL基本組件可以使用模塊或用戶定義的符號在數據流窗口顯示。在完成功能仿真后,在sim標簽中選中仿真文件后單擊右鍵選擇“Add”,執(zhí)行“ToDataflow→Alliteminregion”命令向Dataflow窗口添加信號,如圖13.28所示。圖中,“/count4_tp/#INITIAL#7”是對窗口中顯示符號的說明,其中“/**/”表示源文件名,第一個“#”表示產生符號的語句,第二個“#”表示產生這個符號語句所在源文件的行號。此語句的意思是在count4_tp.v文件中第7行的INITIAL語句產生這個符號。圖13.28Dataflow窗口

(1)觀察設計的連接。圖13.28中紅色高亮的連接線表示通過雙擊可以進一步查看與之相連的單元。

選擇mycount處理單元,分別雙擊mycount的rst、load、data、clk信號端口,則進一步查看每個信號的來源。當信號查找到來源并連接好后,紅色的高亮連線變成綠色高亮連線,表示本條路徑已經被檢查過。最終的展開信號連線圖如圖13.29所示。或者直接通過Dataflow窗口的菜單欄選擇“Add→ViewallNets”命令展開所有信號連線檢查設計。圖13.29展開信號連線

(2)追蹤信號。Dataflow窗口可以嵌入波形窗口,從而追蹤信號的變化。在Dataflow窗口的菜單欄選擇“View→ShowWave”命令,嵌入波形窗口。

例如在圖13.29中選擇處理單元“/count4_tp/#INITIAL#13”,則該單元的所有輸入、輸出信號data、load、rst自動顯示在嵌入波形窗口中,設計者可以進一步追蹤和查看,如圖13.30所示。圖13.30查看信號波形13.4.3ModelSim時序仿真

下面仍然以4位計數器為例,介紹時序仿真的流程。

(1)利用ModelSim軟件建立工程,只添加激勵文件。

創(chuàng)建工程,工程名稱為count4,保存的路徑為“E:?/count4”。向當前工程中添加激勵文件count4_tp.v,具體源代碼見13.3.4節(jié)。

(2)利用QuartusⅡ軟件建立工程,只添加模塊文件。指定第三方仿真軟件并加載激勵文件,經過綜合布局布線后生成網表文件(后綴為?.vo)和具有延時信息的反標文件SDF(后綴為?.sdo)。其具體步驟如下:

①創(chuàng)建工程,工程名稱為count4,保存的路徑為“F:/count4”。工程建立時選擇器件為“Cyclone”的“EP1C3T144C6”。或者在菜單欄中執(zhí)行Assignments→Device命令選擇所需器件。

②添加模塊文件。向當前工程中添加模塊文件count4.v,具體源代碼見13.3.4節(jié)。③指定第三方仿真軟件。在菜單欄中執(zhí)行Assignments→

Settings命令,在設置界面的左側Category欄中選擇EDAToolSettings的Simulation項后顯示如圖13.31所示的對話框,在Toolname中選擇ModelSim,Formatforoutputnetlist欄選擇輸出網表的語言類型為Verilog,Timescale欄采用默認設置1?ps。Outputdirectory欄輸出網表的路徑為“E:/count4”,此路徑為ModelSim軟件創(chuàng)建工程的路徑。圖13.31第三方仿真軟件及參數設置界面在圖13.31中點擊MoreSettings按鈕,打開如圖13.32所示的仿真參數設置界面,注意“Generatenetlistforfunctionalsimulationonly”的設置為Off,否則在QuartusⅡ軟件中編譯將不會產生時序仿真所需的網表文件和延時文件,表示只能進行功能仿真。點擊OK按鈕回到圖13.31所示界面,在NativeLinksettings欄中選擇“Compiletestbench”,然后點擊“TestBenches”按鈕,自動彈出如圖13.33所示的激勵文件設置界面,在Filename中瀏覽選擇ModelSim軟件中所建立的count4工程路徑下保存的激勵文件count4_tp.v,點擊Add按鈕加載。其中Testbenchname(激勵文件的名稱)定義為count4_tp,Toplevelmoduleintestbeach(激勵文件的頂層模塊名稱)定義為count4_tp,Designinstancenameintestbench(激勵文件中實例化模塊的名稱)定義為mycount。圖13.32仿真參數設置界面圖13.33激勵文件設置界面④編譯。設置完成后,在QuartusⅡ軟件下編譯工程。編譯成功后,則會在“E:/count4”路徑下生成網表文件count4.vo和延時文件count4_v.sdo。每次修改源代碼和配置后重新編譯工程,網表文件和延時文件都會更新。

(3)在ModelSim軟件中添加元件庫。我們在用QuartusⅡ軟件建立工程時選擇的器件為“Cyclone”的“EP1C3T144C6”,因此打開ModelSim軟件后需加載相應的Cyclone元件庫。

打開ModelSim軟件主界面工作區(qū)的Project,點擊右鍵執(zhí)行AddtoProject→ExistingFile命令添加cyclone_atoms.v庫文件,如圖13.34所示。cyclone_atoms.v庫文件所在路徑為“QuartusⅡ軟件安裝目錄下\quartus\eda\sim_lib\cyclone_

atoms.v”。如果選擇其他類型器件,則添加元件庫的方法類似,庫文件為對應的以“_atoms.v”為后綴的文件。圖13.34添加庫文件

(4)在ModelSim軟件中添加?.vo文件。添加網表文件的方法與添加元件庫的方法相同,如圖13.34所示。本例中count4.vo的所在路徑為“E:?/count4/count4.vo”。

(5)編譯及仿真。將工程中的count4_tp.v、count4.vo、cyclone_atoms.v共同編譯,編譯成功后的界面如圖13.35所示。編譯后進行仿真,執(zhí)行菜單欄中的Simulate→StartSimulate命令或者單擊工具欄的,彈出如圖13.36所示的仿真器參數設置界面。在SDF選項卡中,單擊Add按鈕添加延時文件count4.sdo,其所在路徑為“E:/count4/count4_v.sdo”。在“ApplytoRegion”欄中輸入延時文件的作用區(qū)域,即“/激勵文件中定義的實例化模塊名”,本例中為mycount。可以將SDFOptions欄中的兩個選項選中,以減少時序仿真時的錯誤。在Design選項卡中,在work文件夾中選定激勵文件count4_tp.v進行加載后執(zhí)行仿真。其他步驟同功能仿真,具體見13.4.2節(jié)。圖13.35編譯成功圖13.36仿真器參數設置界面時序仿真的波形如圖13.37所示,與圖13.22中功能仿真的波形相比,仿真結果中出現了明顯延時及不穩(wěn)定狀態(tài)??梢钥吹?,光標所示位置在clk上升沿到來時,計數器的輸出端out在延時6423?ps時間單位后計數加1。圖中紅色部分為時序仿真中出現的不確定狀態(tài)。圖13.37時序仿真的波形13.4.4ModelSim仿真效率

與C/C++等軟件語言相比,VerilogHDL仿真代碼的執(zhí)行時間比較長,其主要原因就是要通過串行軟件代碼完成并行語義的轉化。隨著代碼量的增加,會使得仿真驗證過程非常漫長,從而導致仿真效率的降低,成為整體設計的瓶頸。即便如此,不同的設計代碼其仿真執(zhí)行效率也是不同的,在程序編寫過程中注意以下幾個方面可以提高VerilogHDL代碼的仿真執(zhí)行效率。

(1)減少層次結構。仿真代碼的層次越少,執(zhí)行時間就越短。這主要是由于參數在模塊端口之間傳遞需要消耗仿真器的執(zhí)行時間。

(2)減少門級代碼的使用。由于門級建模屬于結構級建模,自身參數建模已經比較復雜了,還需要通過模塊調用的方式來實現,因此建議仿真代碼盡量使用行為級語句,建模層次越抽象,執(zhí)行時間就越短。

(3)仿真精度越高,效率越低。例如包含?`timescale1ns/1ns比?`timescale1ns/1ps定義的代碼執(zhí)行時間短。

(4)進程越少,效率越高。代碼中的語句塊越少仿真越快,例如將相同的邏輯功能分布在兩個initial語句塊中,其仿真執(zhí)行時間就比執(zhí)行利用一個initial語句來實現的時間長。這是因為仿真器在不同進程之間進行切換也需要時間。

(5)減少仿真器的輸出顯示。VerilogHDL語言包含一些系統(tǒng)任務,例如$display,可以在仿真器的控制臺顯示窗口輸出信息,對于程序調試是非常有用的,但會降低仿真的執(zhí)行效率。

13.5ModelSim的調試

本節(jié)簡單介紹ModelSim仿真工具的交互式調試功能。用戶可以在源代碼窗口設置斷點,運行仿真并調試。斷點是使仿真停止的事件。斷點有四種類型:

(1)基于時間:當仿真到一個指定時間時即停止。此為缺省值。

(2)基于行:當仿真到到源代碼一個指定的行時停止。必須指定范圍、文件名和行號。這種類型只用于交互模式。

(3)基于對象:當指定信號的值發(fā)生變化或指定跳變發(fā)生時停止。

(4)基于條件:當指定的Tcl表達式值為真時停止。13.5.1斷點設置

加載激勵文件啟動仿真后,在sim標簽中雙擊mycount實例模塊打開count4.v模塊文件的源代碼窗口。在源代碼窗口單擊目標行號,出現紅色圓點圖標。如圖13.38所示,在count4.v文件的7、9、10、12行設置了斷點。圖13.38在源代碼窗口設置斷點通過單擊紅色圓形圖標可以使斷點在“禁止/使能”兩個狀態(tài)間切換;選擇斷點,單擊鼠標右鍵可以編輯斷點,實現禁止斷點、刪除斷點、編輯斷點等操作。點擊“EditBreakpoint10”可以設置斷點的條件等信息,如圖13.39所示。

在主窗口中單擊run圖標,或在主窗口的VISM>提示符下輸入命令“run”,仿真將運行,直至遇到斷點停止,同時在源代碼窗口中用箭頭指向斷點處。到達斷點后,可以查看信號的值。圖13.39設置斷點的條件13.5.2單步執(zhí)行

在仿真窗口中單擊(單步執(zhí)行)命令,或者在命令提示符中輸入命令“step”,仿真將單步執(zhí)行程序。13.5.3波形查看

1.查看波形區(qū)間的時間

圖13.40為仿真的波形窗口,在調試代碼查看波形時,常常需要查看

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論