信息與通信第8章 仿真與Testbench設計課件_第1頁
信息與通信第8章 仿真與Testbench設計課件_第2頁
信息與通信第8章 仿真與Testbench設計課件_第3頁
信息與通信第8章 仿真與Testbench設計課件_第4頁
信息與通信第8章 仿真與Testbench設計課件_第5頁
已閱讀5頁,還剩107頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

Actel、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設計工具中的均是其OEM版本。C和Tcl/Tk接口,C調試;8.3.2功能仿真在桌面點擊Modelsim圖標,或者在開始->所有程序中選擇Modelsim,如下圖所示。圖8–3Modelsim界面8.3.2功能仿真在桌面點擊Modelsim圖標,或者在開建立仿真工程。圖8–4建立仿真工程界面建立仿真工程。彈出一個對話框,選擇”“AddExistingFile””,添加測試平臺和被測文件到仿真工程中。點擊“OPEN”,然后點擊“OK”。圖8–5添加仿真文件界面彈出一個對話框,選擇”“AddExistingFile”關掉對話框。圖8–6Modelsim仿真參數設置關掉對話框。選中測試程序,然后點擊“project->Setting”來選擇Verilog仿真器。點擊“OK”。圖8–7Modelsim仿真語言選擇選中測試程序,然后點擊“project->Setting編譯。圖8–8編譯界面編譯。選擇“”Simulation->RuntimeOptions””,可以選擇所需要的顯示,圖8–9Modelsim仿真格式選擇選擇“”Simulation->RuntimeOpti選擇“Simulation->StartSimulation”。圖8–10仿真選擇“Simulation->StartSimulat運行后的結果如下圖8–11仿真結果界面運行后的結果如下在工作區窗口選擇頂層仿真文件,點擊“Add->Wave->SelectedInstance”圖8–12添加仿真波形在工作區窗口選擇頂層仿真文件,點擊“Add->Wave-點擊“Simulate->Run-all”圖8–13仿真運行界面點擊“Simulate->Run-all”點擊wave查看仿真波形圖8–14查看仿真波形點擊wave查看仿真波形點擊“ContinueRun”工具條可以繼續仿真到下一個$stop圖8–15繼續仿真界面點擊“ContinueRun”工具條可以繼續仿真到下一個$s設置Cursor圖8–16Cursor設置設置Cursor圖8–17時延量測[信息與通信]第8章仿真與Testbench設計課件保存波形文件圖8–18保存波形文件保存波形文件8.3.3時序仿真時序仿真總體思路與功能仿真類似,只是時序仿真需要考慮邏輯單元時延和布局布線時延,因此需要借助不同公司的開發平臺生成相應的靜態時延報告,并且結合相關的器件模型來進行仿真。時序仿真比功能仿真更加精確,但是花費時間比較久。以Lattice公司的器件為開發平臺來講述怎樣進行時序仿真。生成.sdf文件。通過ispLEVER建立一個工程文件,點擊“GenerateTimingSimulationFiles”生成.vo和.sdf文件。把這兩個文件加到仿真文件夾中。關掉ispLEVER。打開Modelsim并建立一個新的仿真工程。建庫。例如設計采用xo系列的庫,在圖8-19顯示的Modelsim的界面的命令框中鍵入下面的兩個命令:Vlibmachxo8.3.3時序仿真時序仿真總體思路與功能仿真類似,只是時序Vlog–workmachxoC:/Lattice/ispLever72/cae_library/simulation/verilog/machxo/*.

v(xo系列在ispLEVER下的路徑,不同的安裝有不同的路徑)圖8–19建庫界面Vlog–workmachxoC:/Lattice/i編譯點擊“Compile->CompileAll”。點擊“Simulate->StartSimulation”,出現一個配置窗口。點擊SDF按鈕,然后點擊“Add”按鈕圖8–20添加.sdf文件界面編譯點擊“Compile->CompileAll”。選擇.sdf文件。在“ApplytoRegion”區域寫入/UUT。添加庫。圖8–21添加庫界面選擇.sdf文件。在“ApplytoRegion”區域點擊Design鍵,從工作文件夾中選擇仿真程序,點擊“OK”按鈕。后續的方式與功能仿真相同。點擊Design鍵,從工作文件夾中選擇仿真程序,點擊“OK”8.4Testbench設計Testbench的結構和RTL設計的結構相似,只是由于Testbench和所要仿真的程序構成的是一個封閉的系統,所以不存在輸入輸出列表。另外所有可以綜合的Verilog語言都可以用來進行仿真設計。Testbench并不會生成一個實實在在的電路盡量采用抽象層次比較高的語言來設計Testbench不僅可以提高設計的效率,而且可以提高仿真的效率。8.4Testbench設計Testbench的結構和RT8.4.1時鐘時鐘是設計Testbench中的一個最基本的元素。時鐘可以分為很多種,包括無限循環時鐘和有限個周期的時鐘信號,因此時鐘的生成方式也各式各樣。無限循環時鐘信號的產生請參考例8-1到例8-3有限周期的時鐘信號的產生請參考例8-4同頻異相時鐘信號的產生請參考例8-58.4.1時鐘時鐘是設計Testbench中的一個最基本的8.4.2值序列值序列是Testbench中經常使用到的一種信號形式,它可以描述有限個規則或者不規則的數據形式。時鐘信號是一種特殊的值序列。值序列有離散值序列和周期值序列之分。值序列的產生可以采用阻塞賦值和非阻塞賦值,但是結果完全不同。8.4.2值序列值序列是Testbench中經常使用到的一離散值序列圖8–22值序列波形圖離散值序列采用非阻塞賦值會出現的一種值序列圖8–23非阻塞賦值的值序列波形圖采用非阻塞賦值會出現的一種值序列重復值序列圖8–24重復值序列示意圖重復值序列8.4.3復位異步復位信號:直接通過一個值序列來產生異步復位信號,具體設計請參考例8-6同步復位信號:同步復位信號需要在時鐘的作用下才能產生。同步設計需要滿足建立時間和保持時間的要求,因此產生和釋放復位信號必須使用時鐘信號的非有效沿,具體設計請參考例8-7在有些設計中,同步復位信號的脈寬是需要嚴格與時鐘信號掛鉤,而不是絕對的脈沖寬度,這個時候可以采用repeat語句來實現,具體設計請參考實例8-88.4.3復位異步復位信號:直接通過一個值序列來產生異步復8.4.4任務任務就像一個過程,它能夠把共同的代碼段封裝起來,從而實現封裝的代碼段可以在設計中被不同的位置調用。任務中可以包含時序控制,并且可以調用其它任務和函數。基本格式:具體設計請參考例8-98.4.4任務任務就像一個過程,它能夠把共同的代碼段封裝起任務名可以有參數,也可以沒有參數。任務通過output聲明輸出任務值。調用任務:任務名可以有參數,也可以沒有參數。任務通過output聲明輸8.4.5函數函數與任務很相似,它也可以在模塊不同位置執行共同代碼,它們之間的不同之處在于函數只能返回一個值,而且不能有任何時延或者時延控制。它必須有一個輸入,但是可以沒有輸出和輸入聲明。函數可以調用其它函數,但是不可以調用任務。基本格式:具體設計請參考例8-108.4.5函數函數與任務很相似,它也可以在模塊不同位置執行8.4.6事件事件是Verilog的另外一類數據類型,它必須在使用前被聲明。基本格式:即聲明了兩個事件Start和Ready。如果要觸發這兩個事件,則采用如下格式:具體設計請參考例8-118.4.6事件事件是Verilog的另外一類數據類型,它必8.4.7并行激勵兩個或者兩個以上的任務需要同時執行時,可以采用并行激勵的方式:fork…join如需要同時啟動讀寫數據的任務:8.4.7并行激勵兩個或者兩個以上的任務需要同時執行時,可8.4.8系統任務和系統函數請參考第三章第十節8.4.8系統任務和系統函數請參考第三章第十節8.5Testbench結構化初級的Testbench往往喜歡把測試用例和測試套具寫在一起,不僅可讀性不強,而且維護性也比較麻煩,測試用例不能得到重用。圖8–25初級仿真模型示意圖8.5Testbench結構化初級的Testbench往往將Testbench結構化的好處在于能夠解決上述的這些問題,它不僅可以提高測試用例的重用率,使整個設計的結構清晰,而且可以提高代碼的抽象程度,適合復雜的設計。將Testbench結構化的好處在于能夠解決上述的這些問題,圖8–26結構化Testbench模型圖[信息與通信]第8章仿真與Testbench設計課件在這個模型里面頂層模塊對仿真模塊和設計模塊都例化,仿真模塊與設計模塊之間通過接口相互影響,仿真模塊直接調用復雜的任務和函數來進行仿真。這樣整個頂層模塊就是一個封閉的系統,仿真模塊和設計模塊之際相互影響,又相互獨立。在這個模型里面頂層模塊對仿真模塊和設計模塊都例化,仿真模塊與圖8–27BFM模型示意圖這個模型和上一個仿真模型之所以不同在于這個模型增加一級行為級模塊,這樣被測模塊與仿真模塊和行為模塊之間同時作用。[信息與通信]第8章仿真與Testbench設計課件8.6實例9:基于Modelsim的I2CSlaveTestbench設計在此設計中,RTL代碼為一個最簡單的I2C從機,里面包含一個器件識別數據。因此相應的Testbench只要模擬I2C主機讀出從機的識別數據并且認為正確就可以。為了更簡單,我們假定從機的地址和識別數據是一致的。具體設計源代碼請參考實例98.6實例9:基于Modelsim的I2CSlaveT8.7實例10:基于Modelsim的LPCSlave接口仿真設計本例我們充分使用task語句來實現測試平臺,具體源代碼請參考實例10圖8–28LPCSlave仿真波形圖8.7實例10:基于Modelsim的LPCSlave8.8實例11:基于Modelsim的信號消抖程序仿真設計采用時延實現測試信號的生成,具體源代碼設計請參考實例11圖8–29采用ModelsimPE6.3c實現信號消抖仿真波形圖8.8實例11:基于Modelsim的信號消抖程序仿真設8.9本章小結本章主要講述了怎樣采用VerilogHDL語言來進行Testbench設計,怎樣采用modelsim來實現功能和時序仿真。要設計一個優秀的仿真和測試平臺,其基本原則是:每一行、每一個語句、每一個條件都必須覆蓋到并有判斷,因此測試平臺和測試用例必須完整,需要花費大量的時間、精力并且有一定的經驗來做出判斷,盡量在仿真階段發現并解決問題,實現代碼覆蓋的最大化。8.9本章小結本章主要講述了怎樣采用VerilogHDL8.10思考與練習仿真器有哪幾種類型?它們的基本原理是什么?怎樣使用VerilogHDL產生一個有限的時鐘和一個無限的時鐘?怎樣采用VerilogHDL語言實現一個同步復位邏輯和異步復位邏輯?函數和任務各是什么意思?它們之間有什么區別?$stop與$finish有什么區別?試用for語句實現對一個存取器的初始化。功能仿真與時序仿真有什么區別與聯系?什么是Testbench結構化?為什么要采用Testbench結構化設計?begin…end與fork…join之間有什么樣的區別與聯系?什么是事件?采用什么樣的關鍵字來表示事件?一般由于什么場合?試用VerilogHDL語言實現對PCISlave的仿真。8.10思考與練習仿真器有哪幾種類型?它們的基本原理是什么第8章仿真與Testbench設計第8章仿真與Testbench設計本章主要內容仿真概述Testbench設計仿真實例Testbench結構化本章主要內容仿真概述8.1仿真概述對仿真器進行優化,一般基于兩種方式:周期驅動和事件驅動。8.1仿真概述對仿真器進行優化,一般基于兩種方式:周期驅動8.1.1周期驅動周期驅動是基于時鐘周期的仿真模型。圖8–1周期驅動模型圖8.1.1周期驅動周期驅動是基于時鐘周期的仿真模型。周期驅動的仿真器只在乎Q2的輸出,即每個時鐘有效沿到來時的輸入和輸出,時鐘周期之內的延時全部不考慮,S1和S2之間的變化和時序完全被忽略——仿真器假定所有的觸發器的建立時間和保持時間均滿足條件。這種模型只能應用于同步模型,如果設計中包含了鎖存器或者多時鐘域的情況,周期驅動的仿真器模型都不能適用。如果需要應用的話,只能使用靜態時延分析來實現。周期驅動的仿真器只在乎Q2的輸出,即每個時鐘有效沿到來時的輸8.1.2事件驅動目前邏輯仿真最普遍的形式就是事件驅動。事件驅動仿真模型有個重要特點:一是如果輸入不變化,輸出就不會變化,因為輸入不變化就不需要仿真;二是一旦輸入發生變化,不管輸出有沒有變化,仿真器都會執行仿真。8.1.2事件驅動目前邏輯仿真最普遍的形式就是事件驅動。圖8–2事件驅動模型圖[信息與通信]第8章仿真與Testbench設計課件仿真器在內部會維護一些信息用來記錄某些時刻要被激活的事件。而每個輸入都是一些離散的事件。當輸入a發生變化的時候,標記為T1,仿真器會檢查這個輸入連接到了何處,檢測到了一個5ns的與門,仿真器會在T1之后的5ns時候(T2)安排一個與門輸出的時間。接著仿真器檢查當前時刻T1是否還有其他動作需要執行。b就是下一個事件,發生在T2時刻,也就是T2的邊沿。然后仿真器檢查b連接到何處,是一個4ns的緩沖器。同樣仿真器會在T2時候后的4ns時刻(T3)安排一個緩沖器的輸出。同樣仿真器再次檢測下一個事件,直到由輸入端a的首次變化觸發所引起的所有事件都被執行完畢為止。事件驅動的優點在于它可以處理任何形式的設計,包括同步和異步邏輯、鎖存器、組合邏輯反饋回路等等,并且具有極好的設計可見性,便于調試。但是它最大的缺點就是運算量大、速度非常慢。仿真器在內部會維護一些信息用來記錄某些時刻要被激活的事件。而8.1.3混合語言仿真20世紀60年代末和170年代初出現的第一代事件驅動的仿真器是基于仿真基本元件的、采用標準的文本編輯器在門級網表級輸入設計,同樣采用文本激勵語言作為測試平臺,仿真器使用網表建立電路模型,然后將激勵加入到這個模型中,并將結果輸出到另外一個文本文件中。要解決混合語言仿真有幾種方式:一是先將其中的一種語言所寫的設計翻譯成另外一種語言,然后再進行仿真二是在仿真器中使用多核——一個用來進行VHDL仿真,另外一種進行VerilogHDL仿真。三是采用單核仿真器,同時支持多種語言8.1.3混合語言仿真20世紀60年代末和170年代初出現8.2仿真器的選擇一是選擇的仿真器必須能夠支持混合語言仿真。二是仿真器的性能需要滿足設計的要求。三是仿真器需要有一個良好的調試環境。最后還要考慮的是仿真器的代碼覆蓋能力。代碼覆蓋能力包括很多種,如:基本代碼覆蓋率分支覆蓋率條件覆蓋率表達式覆蓋率狀態覆蓋率功能覆蓋率斷言/屬性覆蓋率8.2仿真器的選擇一是選擇的仿真器必須能夠支持混合語言仿真8.3Modelsim簡介與仿真8.3.1Modelsim簡介Mentor公司是業界唯一的單內核支持VHDL和Verilog混合仿真的仿真器。Modelsim的主要特點有:RTL和門級優化,本地編譯結構,編譯仿真速度快,跨平臺跨版本仿真;單內核VHDL和Verilog混合仿真;源代碼模版和助手,項目管理;集成了性能分析、波形比較、代碼覆蓋、數據流ChaseX、SignalSpy、虛擬對象VirtualObject、Memory窗口、Assertion窗口、源碼窗口顯示信號值、信號條件斷點等眾多調試功能;8.3Modelsim簡介與仿真8.3.1ModelsiC和Tcl/Tk接口,C調試;直接支持SystemC,和HDL任意混合;支持SystemVerilog的設計功能;對系統級描述語言如SystemVerilog、SystemC、PSL的最全面支持;ASICSignoff。ModelSim分幾種不同的版本:SE、PE、DE和OEM,其中SE是最高級的版本,而集成在

Actel、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設計工具中的均是其OEM版本。C和Tcl/Tk接口,C調試;8.3.2功能仿真在桌面點擊Modelsim圖標,或者在開始->所有程序中選擇Modelsim,如下圖所示。圖8–3Modelsim界面8.3.2功能仿真在桌面點擊Modelsim圖標,或者在開建立仿真工程。圖8–4建立仿真工程界面建立仿真工程。彈出一個對話框,選擇”“AddExistingFile””,添加測試平臺和被測文件到仿真工程中。點擊“OPEN”,然后點擊“OK”。圖8–5添加仿真文件界面彈出一個對話框,選擇”“AddExistingFile”關掉對話框。圖8–6Modelsim仿真參數設置關掉對話框。選中測試程序,然后點擊“project->Setting”來選擇Verilog仿真器。點擊“OK”。圖8–7Modelsim仿真語言選擇選中測試程序,然后點擊“project->Setting編譯。圖8–8編譯界面編譯。選擇“”Simulation->RuntimeOptions””,可以選擇所需要的顯示,圖8–9Modelsim仿真格式選擇選擇“”Simulation->RuntimeOpti選擇“Simulation->StartSimulation”。圖8–10仿真選擇“Simulation->StartSimulat運行后的結果如下圖8–11仿真結果界面運行后的結果如下在工作區窗口選擇頂層仿真文件,點擊“Add->Wave->SelectedInstance”圖8–12添加仿真波形在工作區窗口選擇頂層仿真文件,點擊“Add->Wave-點擊“Simulate->Run-all”圖8–13仿真運行界面點擊“Simulate->Run-all”點擊wave查看仿真波形圖8–14查看仿真波形點擊wave查看仿真波形點擊“ContinueRun”工具條可以繼續仿真到下一個$stop圖8–15繼續仿真界面點擊“ContinueRun”工具條可以繼續仿真到下一個$s設置Cursor圖8–16Cursor設置設置Cursor圖8–17時延量測[信息與通信]第8章仿真與Testbench設計課件保存波形文件圖8–18保存波形文件保存波形文件8.3.3時序仿真時序仿真總體思路與功能仿真類似,只是時序仿真需要考慮邏輯單元時延和布局布線時延,因此需要借助不同公司的開發平臺生成相應的靜態時延報告,并且結合相關的器件模型來進行仿真。時序仿真比功能仿真更加精確,但是花費時間比較久。以Lattice公司的器件為開發平臺來講述怎樣進行時序仿真。生成.sdf文件。通過ispLEVER建立一個工程文件,點擊“GenerateTimingSimulationFiles”生成.vo和.sdf文件。把這兩個文件加到仿真文件夾中。關掉ispLEVER。打開Modelsim并建立一個新的仿真工程。建庫。例如設計采用xo系列的庫,在圖8-19顯示的Modelsim的界面的命令框中鍵入下面的兩個命令:Vlibmachxo8.3.3時序仿真時序仿真總體思路與功能仿真類似,只是時序Vlog–workmachxoC:/Lattice/ispLever72/cae_library/simulation/verilog/machxo/*.

v(xo系列在ispLEVER下的路徑,不同的安裝有不同的路徑)圖8–19建庫界面Vlog–workmachxoC:/Lattice/i編譯點擊“Compile->CompileAll”。點擊“Simulate->StartSimulation”,出現一個配置窗口。點擊SDF按鈕,然后點擊“Add”按鈕圖8–20添加.sdf文件界面編譯點擊“Compile->CompileAll”。選擇.sdf文件。在“ApplytoRegion”區域寫入/UUT。添加庫。圖8–21添加庫界面選擇.sdf文件。在“ApplytoRegion”區域點擊Design鍵,從工作文件夾中選擇仿真程序,點擊“OK”按鈕。后續的方式與功能仿真相同。點擊Design鍵,從工作文件夾中選擇仿真程序,點擊“OK”8.4Testbench設計Testbench的結構和RTL設計的結構相似,只是由于Testbench和所要仿真的程序構成的是一個封閉的系統,所以不存在輸入輸出列表。另外所有可以綜合的Verilog語言都可以用來進行仿真設計。Testbench并不會生成一個實實在在的電路盡量采用抽象層次比較高的語言來設計Testbench不僅可以提高設計的效率,而且可以提高仿真的效率。8.4Testbench設計Testbench的結構和RT8.4.1時鐘時鐘是設計Testbench中的一個最基本的元素。時鐘可以分為很多種,包括無限循環時鐘和有限個周期的時鐘信號,因此時鐘的生成方式也各式各樣。無限循環時鐘信號的產生請參考例8-1到例8-3有限周期的時鐘信號的產生請參考例8-4同頻異相時鐘信號的產生請參考例8-58.4.1時鐘時鐘是設計Testbench中的一個最基本的8.4.2值序列值序列是Testbench中經常使用到的一種信號形式,它可以描述有限個規則或者不規則的數據形式。時鐘信號是一種特殊的值序列。值序列有離散值序列和周期值序列之分。值序列的產生可以采用阻塞賦值和非阻塞賦值,但是結果完全不同。8.4.2值序列值序列是Testbench中經常使用到的一離散值序列圖8–22值序列波形圖離散值序列采用非阻塞賦值會出現的一種值序列圖8–23非阻塞賦值的值序列波形圖采用非阻塞賦值會出現的一種值序列重復值序列圖8–24重復值序列示意圖重復值序列8.4.3復位異步復位信號:直接通過一個值序列來產生異步復位信號,具體設計請參考例8-6同步復位信號:同步復位信號需要在時鐘的作用下才能產生。同步設計需要滿足建立時間和保持時間的要求,因此產生和釋放復位信號必須使用時鐘信號的非有效沿,具體設計請參考例8-7在有些設計中,同步復位信號的脈寬是需要嚴格與時鐘信號掛鉤,而不是絕對的脈沖寬度,這個時候可以采用repeat語句來實現,具體設計請參考實例8-88.4.3復位異步復位信號:直接通過一個值序列來產生異步復8.4.4任務任務就像一個過程,它能夠把共同的代碼段封裝起來,從而實現封裝的代碼段可以在設計中被不同的位置調用。任務中可以包含時序控制,并且可以調用其它任務和函數。基本格式:具體設計請參考例8-98.4.4任務任務就像一個過程,它能夠把共同的代碼段封裝起任務名可以有參數,也可以沒有參數。任務通過output聲明輸出任務值。調用任務:任務名可以有參數,也可以沒有參數。任務通過output聲明輸8.4.5函數函數與任務很相似,它也可以在模塊不同位置執行共同代碼,它們之間的不同之處在于函數只能返回一個值,而且不能有任何時延或者時延控制。它必須有一個輸入,但是可以沒有輸出和輸入聲明。函數可以調用其它函數,但是不可以調用任務。基本格式:具體設計請參考例8-108.4.5函數函數與任務很相似,它也可以在模塊不同位置執行8.4.6事件事件是Verilog的另外一類數據類型,它必須在使用前被聲明。基本格式:即聲明了兩個事件Start和Ready。如果要觸發這兩個事件,則采用如下格式:具體設計請參考例8-118.4.6事件事件是Verilog的另外一類數據類型,它必8.4.7并行激勵兩個或者兩個以上的任務需要同時執行時,可以采用并行激勵的方式:fork…join如需要同時啟動讀寫數據的任務:8.4.7并行激勵兩個或者兩個以上的任務需要同時執行時,可8.4.8系統任務和系統函數請參考第三章第十節8.4.8系統任務和系統函數請參考第三章第十節8.5Testbench結構化初級的Testbench往往喜歡把測試用例和測試套具寫在一起,不僅可讀性不強,而且維護性也比較麻煩,測試用例不能得到重用。圖8–25初級仿真模型示意圖8.5Testbench結構化初級的Testbench往往將Testbench結構化的好處在于能夠解決上述的這些問題,它不僅可

溫馨提示

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

評論

0/150

提交評論