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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第13章ModelSim仿真工具13.1ModelSim概述13.2設(shè)計(jì)輸入13.3設(shè)計(jì)Testbench13.4設(shè)計(jì)驗(yàn)證與仿真13.5ModelSim的調(diào)試13.6相關(guān)文件介紹

13.1ModelSim概述

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

ModelSim仿真工具的主要特點(diǎn)如下:

(1)本地編譯結(jié)構(gòu),編譯仿真速度快,跨平臺(tái)、跨版本仿真。

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

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

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

(5)先進(jìn)的信號(hào)檢測(cè)功能,可以方便地訪問(wèn)VHDL、VerilogHDL或者兩者混合設(shè)計(jì)中的底層信號(hào)。

(6)支持加密IP。

(7)可以實(shí)現(xiàn)與MATLAB的Simulink的聯(lián)合仿真。13.1.1ModelSim的運(yùn)行模式

ModelSim的運(yùn)行模式有以下4種:

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

(2)交互式命令(Cmd)模式:沒(méi)有圖形化的用戶界面,僅僅通過(guò)命令控制臺(tái)輸入的命令完成相應(yīng)工作。

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

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

ModelSim基本應(yīng)用的仿真步驟分為如下4步:

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

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

(3)編譯設(shè)計(jì)文件。進(jìn)行語(yǔ)法檢查并完成編譯。

(4)運(yùn)行仿真。對(duì)指定的設(shè)計(jì)單元進(jìn)行仿真。

圖13.1給出了在ModelSim工程中仿真一個(gè)設(shè)計(jì)的基本流程,該流程是基本的仿真流程。圖13.1ModelSim的基本仿真流程

13.2設(shè)計(jì)輸入

這里通過(guò)一個(gè)簡(jiǎn)單的實(shí)例,即具有同步置數(shù)、異步復(fù)位功能的4位二進(jìn)制計(jì)數(shù)器來(lái)學(xué)習(xí)如何使用ModelSim軟件進(jìn)行功能仿真。

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

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

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

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

圖13.4創(chuàng)建工程

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

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

圖13.5CreateProject對(duì)話框13.2.2向工程中添加文件

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

1.創(chuàng)建新設(shè)計(jì)的文件

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

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

2.添加已存在的文件

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

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

1.建立庫(kù)

建立庫(kù)的方法有兩種。

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

anewlibrary:表示建立一個(gè)新庫(kù)。

amaptoanexistinglibrary:表示建立一個(gè)到已存在庫(kù)的映射。

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

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

vlib<lib_name>

其中,lib_name為庫(kù)名。

例如:輸入

vlibmy_lib

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

2.映射庫(kù)到物理目錄

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

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

vmap<logical_name><directory_name>

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

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

13.3設(shè)計(jì)Testbench

13.3.1Testbench的基本結(jié)構(gòu)

利用VerilogHDL編寫(xiě)Testbench的基本結(jié)構(gòu)如下:

moduletest_bench;

信號(hào)或變量定義聲明;

使用initial或always語(yǔ)句來(lái)產(chǎn)生激勵(lì)波形;

實(shí)例化設(shè)計(jì)模塊;

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

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

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

時(shí)鐘是時(shí)序電路設(shè)計(jì)關(guān)鍵的參數(shù),本節(jié)專門(mén)介紹產(chǎn)生仿真驗(yàn)證過(guò)程所需要的各類時(shí)鐘信號(hào)。

1.普通時(shí)鐘信號(hào)

所謂普通時(shí)鐘信號(hào),是指占空比為50%的時(shí)鐘信號(hào),也是最為常用的時(shí)鐘信號(hào),如圖13.16所示。圖13.16占空比為50%的時(shí)鐘信號(hào)普通時(shí)鐘信號(hào)可通過(guò)initial語(yǔ)句和always語(yǔ)句產(chǎn)生,方法如下:

(1)基于initial語(yǔ)句的方法(見(jiàn)代碼13.1)。

【代碼13.1】用initial語(yǔ)句產(chǎn)生時(shí)鐘信號(hào)。

(2)基于always語(yǔ)句的方法(見(jiàn)代碼13.2)。

【代碼13.2】用always語(yǔ)句產(chǎn)生時(shí)鐘信號(hào)。

parameterperiod=20;

regclk;

initialclk=1‘b0;

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

2.自定義占空比的時(shí)鐘信號(hào)

自定義占空比的時(shí)鐘信號(hào)通過(guò)always模塊可以快速實(shí)現(xiàn)。代碼13.3是產(chǎn)生25%時(shí)鐘信號(hào)代碼的實(shí)例。

3.有限循環(huán)的時(shí)鐘信號(hào)

上述語(yǔ)句產(chǎn)生的時(shí)鐘信號(hào)都是無(wú)限的,可采用repeat語(yǔ)句來(lái)產(chǎn)生有限循環(huán)的時(shí)鐘信號(hào),其實(shí)現(xiàn)見(jiàn)代碼13.4。

4.相位偏移的時(shí)鐘信號(hào)

相位偏移是兩個(gè)時(shí)鐘信號(hào)之間的相對(duì)概念,指兩個(gè)時(shí)鐘信號(hào)在時(shí)間上有延遲。產(chǎn)生相移時(shí)鐘信號(hào)的代碼見(jiàn)代碼13.5。13.3.3復(fù)位信號(hào)的產(chǎn)生

1.異步復(fù)位信號(hào)

異步復(fù)位是指無(wú)論時(shí)鐘沿是否到來(lái),只要復(fù)位信號(hào)有效,就對(duì)系統(tǒng)進(jìn)行復(fù)位。異步復(fù)位信號(hào)的實(shí)現(xiàn)見(jiàn)代碼13.6。

2.同步復(fù)位信號(hào)

同步復(fù)位是指復(fù)位信號(hào)只有在時(shí)鐘沿到來(lái)時(shí)才能有效,否則無(wú)法完成對(duì)系統(tǒng)的復(fù)位工作。同步復(fù)位對(duì)復(fù)位信號(hào)的脈沖寬度有要求,必須大于指定的時(shí)鐘周期,且同步復(fù)位依賴于時(shí)鐘,如果電路中的時(shí)鐘信號(hào)出現(xiàn)問(wèn)題,則無(wú)法完成復(fù)位。其實(shí)現(xiàn)見(jiàn)代碼13.7。13.3.4Testbench設(shè)計(jì)實(shí)例

具有同步置數(shù)、異步復(fù)位功能的4位二進(jìn)制計(jì)數(shù)器的模塊文件如代碼13.8所示。

count4的Testbench激勵(lì)文件如代碼13.9所示。

【代碼13.9】count4的Testbench激勵(lì)文件。通過(guò)上面的實(shí)例可知,Testbench激勵(lì)文件與源代碼模塊文件在編寫(xiě)上沒(méi)有實(shí)質(zhì)區(qū)別,其主要特點(diǎn)如下:

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

(2)編寫(xiě)Testbench激勵(lì)文件向待測(cè)模塊施加激勵(lì)信號(hào),激勵(lì)信號(hào)必須定義為reg類型,以保持信號(hào)值,激勵(lì)文件在激勵(lì)信號(hào)的作用下產(chǎn)生的輸出信號(hào)必須定義為wire類型。

(3)實(shí)例化被測(cè)模塊即調(diào)用模塊文件時(shí),應(yīng)注意端口信號(hào)的功能。

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

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

13.4設(shè)計(jì)驗(yàn)證與仿真

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

1.功能仿真

2.門(mén)級(jí)仿真

3.時(shí)序仿真

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

1.編譯文件

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

2.加載激勵(lì)文件

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

如圖13.19所示,加載好激勵(lì)文件后點(diǎn)擊OK按鈕啟動(dòng)仿真,在工作區(qū)中自動(dòng)出現(xiàn)sim標(biāo)簽,如圖13.20所示。圖13.20sim標(biāo)簽

3.向wave窗口添加信號(hào)

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

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

1)?Processes窗口

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

2)?Objects窗口

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

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

3)?List窗口

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

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

通過(guò)該窗口可以清楚地看到每個(gè)信號(hào)在各時(shí)刻的數(shù)值,以此來(lái)對(duì)仿真結(jié)果進(jìn)行驗(yàn)證。圖13.27List窗口

4)?Dataflow窗口

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

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

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

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

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

下面仍然以4位計(jì)數(shù)器為例,介紹時(shí)序仿真的流程。

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

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

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

①創(chuàng)建工程,工程名稱為count4,保存的路徑為“F:/count4”。工程建立時(shí)選擇器件為“Cyclone”的“EP1C3T144C6”?;蛘咴诓藛螜谥袌?zhí)行Assignments→Device命令選擇所需器件。

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

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

(3)在ModelSim軟件中添加元件庫(kù)。我們?cè)谟肣uartusⅡ軟件建立工程時(shí)選擇的器件為“Cyclone”的“EP1C3T144C6”,因此打開(kāi)ModelSim軟件后需加載相應(yīng)的Cyclone元件庫(kù)。

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

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

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

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

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

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

(2)減少門(mén)級(jí)代碼的使用。由于門(mén)級(jí)建模屬于結(jié)構(gòu)級(jí)建模,自身參數(shù)建模已經(jīng)比較復(fù)雜了,還需要通過(guò)模塊調(diào)用的方式來(lái)實(shí)現(xiàn),因此建議仿真代碼盡量使用行為級(jí)語(yǔ)句,建模層次越抽象,執(zhí)行時(shí)間就越短。

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

(4)進(jìn)程越少,效率越高。代碼中的語(yǔ)句塊越少仿真越快,例如將相同的邏輯功能分布在兩個(gè)initial語(yǔ)句塊中,其仿真執(zhí)行時(shí)間就比執(zhí)行利用一個(gè)initial語(yǔ)句來(lái)實(shí)現(xiàn)的時(shí)間長(zhǎng)。這是因?yàn)榉抡嫫髟诓煌M(jìn)程之間進(jìn)行切換也需要時(shí)間。

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

13.5ModelSim的調(diào)試

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

(1)基于時(shí)間:當(dāng)仿真到一個(gè)指定時(shí)間時(shí)即停止。此為缺省值。

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

(3)基于對(duì)象:當(dāng)指定信號(hào)的值發(fā)生變化或指定跳變發(fā)生時(shí)停止。

(4)基于條件:當(dāng)指定的Tcl表達(dá)式值為真時(shí)停止。13.5.1斷點(diǎn)設(shè)置

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

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

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

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

圖13.40為仿真的波形窗口,在調(diào)試代碼查看波形時(shí),常常需要查看

溫馨提示

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

評(píng)論

0/150

提交評(píng)論