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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論