FPGA教學(xué)課件:第8章 仿真與Testbench設(shè)計(jì)_第1頁
FPGA教學(xué)課件:第8章 仿真與Testbench設(shè)計(jì)_第2頁
FPGA教學(xué)課件:第8章 仿真與Testbench設(shè)計(jì)_第3頁
FPGA教學(xué)課件:第8章 仿真與Testbench設(shè)計(jì)_第4頁
FPGA教學(xué)課件:第8章 仿真與Testbench設(shè)計(jì)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章仿真與Testbench設(shè)計(jì)本章主要內(nèi)容仿真概述Testbench設(shè)計(jì)仿真實(shí)例Testbench結(jié)構(gòu)化8.1仿真概述對(duì)仿真器進(jìn)行優(yōu)化,一般基于兩種方式:周期驅(qū)動(dòng)和事件驅(qū)動(dòng)。8.1.1周期驅(qū)動(dòng)周期驅(qū)動(dòng)是基于時(shí)鐘周期的仿真模型。圖8–1周期驅(qū)動(dòng)模型圖周期驅(qū)動(dòng)的仿真器只在乎Q2的輸出,即每個(gè)時(shí)鐘有效沿到來時(shí)的輸入和輸出,時(shí)鐘周期之內(nèi)的延時(shí)全部不考慮,S1和S2之間的變化和時(shí)序完全被忽略——仿真器假定所有的觸發(fā)器的建立時(shí)間和保持時(shí)間均滿足條件。這種模型只能應(yīng)用于同步模型,如果設(shè)計(jì)中包含了鎖存器或者多時(shí)鐘域的情況,周期驅(qū)動(dòng)的仿真器模型都不能適用。如果需要應(yīng)用的話,只能使用靜態(tài)時(shí)延分析來實(shí)現(xiàn)。8.1.2事件驅(qū)動(dòng)目前邏輯仿真最普遍的形式就是事件驅(qū)動(dòng)。事件驅(qū)動(dòng)仿真模型有個(gè)重要特點(diǎn):一是如果輸入不變化,輸出就不會(huì)變化,因?yàn)檩斎氩蛔兓筒恍枰抡?;二是一旦輸入發(fā)生變化,不管輸出有沒有變化,仿真器都會(huì)執(zhí)行仿真。圖8–2事件驅(qū)動(dòng)模型圖仿真器在內(nèi)部會(huì)維護(hù)一些信息用來記錄某些時(shí)刻要被激活的事件。而每個(gè)輸入都是一些離散的事件。當(dāng)輸入a發(fā)生變化的時(shí)候,標(biāo)記為T1,仿真器會(huì)檢查這個(gè)輸入連接到了何處,檢測(cè)到了一個(gè)5ns的與門,仿真器會(huì)在T1之后的5ns時(shí)候(T2)安排一個(gè)與門輸出的時(shí)間。接著仿真器檢查當(dāng)前時(shí)刻T1是否還有其他動(dòng)作需要執(zhí)行。b就是下一個(gè)事件,發(fā)生在T2時(shí)刻,也就是T2的邊沿。然后仿真器檢查b連接到何處,是一個(gè)4ns的緩沖器。同樣仿真器會(huì)在T2時(shí)候后的4ns時(shí)刻(T3)安排一個(gè)緩沖器的輸出。同樣仿真器再次檢測(cè)下一個(gè)事件,直到由輸入端a的首次變化觸發(fā)所引起的所有事件都被執(zhí)行完畢為止。事件驅(qū)動(dòng)的優(yōu)點(diǎn)在于它可以處理任何形式的設(shè)計(jì),包括同步和異步邏輯、鎖存器、組合邏輯反饋回路等等,并且具有極好的設(shè)計(jì)可見性,便于調(diào)試。但是它最大的缺點(diǎn)就是運(yùn)算量大、速度非常慢。8.1.3混合語言仿真20世紀(jì)60年代末和170年代初出現(xiàn)的第一代事件驅(qū)動(dòng)的仿真器是基于仿真基本元件的、采用標(biāo)準(zhǔn)的文本編輯器在門級(jí)網(wǎng)表級(jí)輸入設(shè)計(jì),同樣采用文本激勵(lì)語言作為測(cè)試平臺(tái),仿真器使用網(wǎng)表建立電路模型,然后將激勵(lì)加入到這個(gè)模型中,并將結(jié)果輸出到另外一個(gè)文本文件中。要解決混合語言仿真有幾種方式:一是先將其中的一種語言所寫的設(shè)計(jì)翻譯成另外一種語言,然后再進(jìn)行仿真二是在仿真器中使用多核——一個(gè)用來進(jìn)行VHDL仿真,另外一種進(jìn)行VerilogHDL仿真。三是采用單核仿真器,同時(shí)支持多種語言8.2仿真器的選擇一是選擇的仿真器必須能夠支持混合語言仿真。二是仿真器的性能需要滿足設(shè)計(jì)的要求。三是仿真器需要有一個(gè)良好的調(diào)試環(huán)境。最后還要考慮的是仿真器的代碼覆蓋能力。代碼覆蓋能力包括很多種,如:基本代碼覆蓋率分支覆蓋率條件覆蓋率表達(dá)式覆蓋率狀態(tài)覆蓋率功能覆蓋率斷言/屬性覆蓋率8.3Modelsim簡(jiǎn)介與仿真8.3.1Modelsim簡(jiǎn)介Mentor公司是業(yè)界唯一的單內(nèi)核支持VHDL和Verilog混合仿真的仿真器。Modelsim的主要特點(diǎn)有:RTL和門級(jí)優(yōu)化,本地編譯結(jié)構(gòu),編譯仿真速度快,跨平臺(tái)跨版本仿真;單內(nèi)核VHDL和Verilog混合仿真;源代碼模版和助手,項(xiàng)目管理;集成了性能分析、波形比較、代碼覆蓋、數(shù)據(jù)流ChaseX、SignalSpy、虛擬對(duì)象VirtualObject、Memory窗口、Assertion窗口、源碼窗口顯示信號(hào)值、信號(hào)條件斷點(diǎn)等眾多調(diào)試功能;C和Tcl/Tk接口,C調(diào)試;直接支持SystemC,和HDL任意混合;支持SystemVerilog的設(shè)計(jì)功能;對(duì)系統(tǒng)級(jí)描述語言如SystemVerilog、SystemC、PSL的最全面支持;ASICSignoff。ModelSim分幾種不同的版本:SE、PE、DE和OEM,其中SE是最高級(jí)的版本,而集成在

Actel、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設(shè)計(jì)工具中的均是其OEM版本。8.3.2功能仿真在桌面點(diǎn)擊Modelsim圖標(biāo),或者在開始->所有程序中選擇Modelsim,如下圖所示。圖8–3Modelsim界面建立仿真工程。圖8–4建立仿真工程界面彈出一個(gè)對(duì)話框,選擇”“AddExistingFile””,添加測(cè)試平臺(tái)和被測(cè)文件到仿真工程中。點(diǎn)擊“OPEN”,然后點(diǎn)擊“OK”。圖8–5添加仿真文件界面關(guān)掉對(duì)話框。圖8–6Modelsim仿真參數(shù)設(shè)置選中測(cè)試程序,然后點(diǎn)擊“project->Setting”來選擇Verilog仿真器。點(diǎn)擊“OK”。圖8–7Modelsim仿真語言選擇編譯。圖8–8編譯界面選擇“”Simulation->RuntimeOptions””,可以選擇所需要的顯示,圖8–9Modelsim仿真格式選擇選擇“Simulation->StartSimulation”。圖8–10仿真運(yùn)行后的結(jié)果如下圖8–11仿真結(jié)果界面在工作區(qū)窗口選擇頂層仿真文件,點(diǎn)擊“Add->Wave->SelectedInstance”圖8–12添加仿真波形點(diǎn)擊“Simulate->Run-all”圖8–13仿真運(yùn)行界面點(diǎn)擊wave查看仿真波形圖8–14查看仿真波形點(diǎn)擊“ContinueRun”工具條可以繼續(xù)仿真到下一個(gè)$stop圖8–15繼續(xù)仿真界面設(shè)置Cursor圖8–16Cursor設(shè)置圖8–17時(shí)延量測(cè)保存波形文件圖8–18保存波形文件8.3.3時(shí)序仿真

時(shí)序仿真總體思路與功能仿真類似,只是時(shí)序仿真需要考慮邏輯單元時(shí)延和布局布線時(shí)延,因此需要借助不同公司的開發(fā)平臺(tái)生成相應(yīng)的靜態(tài)時(shí)延報(bào)告,并且結(jié)合相關(guān)的器件模型來進(jìn)行仿真。時(shí)序仿真比功能仿真更加精確,但是花費(fèi)時(shí)間比較久。以Lattice公司的器件為開發(fā)平臺(tái)來講述怎樣進(jìn)行時(shí)序仿真。生成.sdf文件。通過ispLEVER建立一個(gè)工程文件,點(diǎn)擊“GenerateTimingSimulationFiles”生成.vo和.sdf文件。把這兩個(gè)文件加到仿真文件夾中。

關(guān)掉ispLEVER。打開Modelsim并建立一個(gè)新的仿真工程。建庫。例如設(shè)計(jì)采用xo系列的庫,在圖8-19顯示的Modelsim的界面的命令框中鍵入下面的兩個(gè)命令:VlibmachxoVlog–workmachxoC:/Lattice/ispLever72/cae_library/simulation/verilog/machxo/*.

v(xo系列在ispLEVER下的路徑,不同的安裝有不同的路徑)圖8–19建庫界面編譯點(diǎn)擊“Compile->CompileAll”。點(diǎn)擊“Simulate->StartSimulation”,出現(xiàn)一個(gè)配置窗口。點(diǎn)擊SDF按鈕,然后點(diǎn)擊“Add”按鈕圖8–20添加.sdf文件界面選擇.sdf文件。在

“ApplytoRegion”區(qū)域?qū)懭?UUT。添加庫。圖8–21添加庫界面點(diǎn)擊Design鍵,從工作文件夾中選擇仿真程序,點(diǎn)擊“OK”按鈕。后續(xù)的方式與功能仿真相同。8.4Testbench設(shè)計(jì)Testbench的結(jié)構(gòu)和RTL設(shè)計(jì)的結(jié)構(gòu)相似,只是由于Testbench和所要仿真的程序構(gòu)成的是一個(gè)封閉的系統(tǒng),所以不存在輸入輸出列表。另外所有可以綜合的Verilog語言都可以用來進(jìn)行仿真設(shè)計(jì)。Testbench并不會(huì)生成一個(gè)實(shí)實(shí)在在的電路盡量采用抽象層次比較高的語言來設(shè)計(jì)Testbench不僅可以提高設(shè)計(jì)的效率,而且可以提高仿真的效率。8.4.1時(shí)鐘時(shí)鐘是設(shè)計(jì)Testbench中的一個(gè)最基本的元素。時(shí)鐘可以分為很多種,包括無限循環(huán)時(shí)鐘和有限個(gè)周期的時(shí)鐘信號(hào),因此時(shí)鐘的生成方式也各式各樣。無限循環(huán)時(shí)鐘信號(hào)的產(chǎn)生請(qǐng)參考例8-1到例8-3有限周期的時(shí)鐘信號(hào)的產(chǎn)生請(qǐng)參考例8-4同頻異相時(shí)鐘信號(hào)的產(chǎn)生請(qǐng)參考例8-58.4.2值序列值序列是Testbench中經(jīng)常使用到的一種信號(hào)形式,它可以描述有限個(gè)規(guī)則或者不規(guī)則的數(shù)據(jù)形式。時(shí)鐘信號(hào)是一種特殊的值序列。值序列有離散值序列和周期值序列之分。值序列的產(chǎn)生可以采用阻塞賦值和非阻塞賦值,但是結(jié)果完全不同。離散值序列

圖8–22值序列波形圖采用非阻塞賦值會(huì)出現(xiàn)的一種值序列圖8–23非阻塞賦值的值序列波形圖重復(fù)值序列圖8–24重復(fù)值序列示意圖8.4.3復(fù)位異步復(fù)位信號(hào):直接通過一個(gè)值序列來產(chǎn)生異步復(fù)位信號(hào),具體設(shè)計(jì)請(qǐng)參考例8-6同步復(fù)位信號(hào):同步復(fù)位信號(hào)需要在時(shí)鐘的作用下才能產(chǎn)生。同步設(shè)計(jì)需要滿足建立時(shí)間和保持時(shí)間的要求,因此產(chǎn)生和釋放復(fù)位信號(hào)必須使用時(shí)鐘信號(hào)的非有效沿,具體設(shè)計(jì)請(qǐng)參考例8-7在有些設(shè)計(jì)中,同步復(fù)位信號(hào)的脈寬是需要嚴(yán)格與時(shí)鐘信號(hào)掛鉤,而不是絕對(duì)的脈沖寬度,這個(gè)時(shí)候可以采用repeat語句來實(shí)現(xiàn),具體設(shè)計(jì)請(qǐng)參考實(shí)例8-88.4.4任務(wù)任務(wù)就像一個(gè)過程,它能夠把共同的代碼段封裝起來,從而實(shí)現(xiàn)封裝的代碼段可以在設(shè)計(jì)中被不同的位置調(diào)用。任務(wù)中可以包含時(shí)序控制,并且可以調(diào)用其它任務(wù)和函數(shù)。基本格式:具體設(shè)計(jì)請(qǐng)參考例8-9任務(wù)名可以有參數(shù),也可以沒有參數(shù)。任務(wù)通過output聲明輸出任務(wù)值。調(diào)用任務(wù):8.4.5函數(shù)函數(shù)與任務(wù)很相似,它也可以在模塊不同位置執(zhí)行共同代碼,它們之間的不同之處在于函數(shù)只能返回一個(gè)值,而且不能有任何時(shí)延或者時(shí)延控制。它必須有一個(gè)輸入,但是可以沒有輸出和輸入聲明。函數(shù)可以調(diào)用其它函數(shù),但是不可以調(diào)用任務(wù)。基本格式:具體設(shè)計(jì)請(qǐng)參考例8-108.4.6事件事件是Verilog的另外一類數(shù)據(jù)類型,它必須在使用前被聲明?;靖袷剑杭绰暶髁藘蓚€(gè)事件Start和Ready。如果要觸發(fā)這兩個(gè)事件,則采用如下格式:具體設(shè)計(jì)請(qǐng)參考例8-118.4.7并行激勵(lì)兩個(gè)或者兩個(gè)以上的任務(wù)需要同時(shí)執(zhí)行時(shí),可以采用并行激勵(lì)的方式:fork…join如需要同時(shí)啟動(dòng)讀寫數(shù)據(jù)的任務(wù):8.4.8系統(tǒng)任務(wù)和系統(tǒng)函數(shù)請(qǐng)參考第三章第十節(jié)8.5Testbench結(jié)構(gòu)化初級(jí)的Testbench往往喜歡把測(cè)試用例和測(cè)試套具寫在一起,不僅可讀性不強(qiáng),而且維護(hù)性也比較麻煩,測(cè)試用例不能得到重用。圖8–25初級(jí)仿真模型示意圖將Testbench結(jié)構(gòu)化的好處在于能夠解決上述的這些問題,它不僅可以提高測(cè)試用例的重用率,使整個(gè)設(shè)計(jì)的結(jié)構(gòu)清晰,而且可以提高代碼的抽象程度,適合復(fù)雜的設(shè)計(jì)。圖8–26結(jié)構(gòu)化Testbench模型圖在這個(gè)模型里面頂層模塊對(duì)仿真模塊和設(shè)計(jì)模塊都例化,仿真模塊與設(shè)計(jì)模塊之間通過接口相互影響,仿真模塊直接調(diào)用復(fù)雜的任務(wù)和函數(shù)來進(jìn)行仿真。這樣整個(gè)頂層模塊就是一個(gè)封閉的系統(tǒng),仿真模塊和設(shè)計(jì)模塊之際相互影響,又相互獨(dú)立。圖8–27BFM模型示意圖這個(gè)模型和上一個(gè)仿真模型之所以不同在于這個(gè)模型增加一級(jí)行為級(jí)模塊,這樣被測(cè)模塊與仿真模塊和行為模塊之間同時(shí)作用。8.6實(shí)例9:基于Modelsim的I2CSlaveTestbench設(shè)計(jì)在此設(shè)計(jì)中,RTL代碼為一個(gè)最簡(jiǎn)單的I2C從機(jī),里面包含一個(gè)器件識(shí)別數(shù)據(jù)。因此相應(yīng)的Testbench只要模擬I2C主機(jī)讀出從機(jī)的識(shí)別數(shù)據(jù)并且認(rèn)為正確就可以。為了更簡(jiǎn)單,我們假定從機(jī)的地址和識(shí)別數(shù)據(jù)是一致的。具體設(shè)計(jì)源代碼請(qǐng)參考實(shí)例98.7實(shí)例10:基于Modelsim的LPCSlave接口仿真設(shè)計(jì)本例我們充分使用task語句來實(shí)現(xiàn)測(cè)試平臺(tái),具體源代碼請(qǐng)參考實(shí)例10圖8–28LPCSlave仿真波形圖8.8實(shí)例11:基于Modelsim的信號(hào)消抖程序仿真設(shè)計(jì)采用時(shí)延實(shí)現(xiàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論