北大數字集成電路課件--4verilogtestfixture的編寫.ppt_第1頁
北大數字集成電路課件--4verilogtestfixture的編寫.ppt_第2頁
北大數字集成電路課件--4verilogtestfixture的編寫.ppt_第3頁
北大數字集成電路課件--4verilogtestfixture的編寫.ppt_第4頁
北大數字集成電路課件--4verilogtestfixture的編寫.ppt_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數字集成電路設計入門 -從HDL到版圖 于敦山 北大微電子學系,第四章 設計舉例,進一步學習Verilog的結構描述和行為描述 Verilog混合(抽象)級仿真,學習目標:,語言的主要特點,module(模塊),module能夠表示: 物理塊,如IC或ASIC單元 邏輯塊,如一個CPU設計的ALU部分 整個系統(tǒng) 每一個模塊的描述從關鍵詞module開始,有一個名稱(如SN74LS74,DFF,ALU等等),由關鍵詞endmodule結束。,module是層次化設計的基本構件,邏輯描述放在module內部,語言的主要特點模塊端口(module ports),端口在模塊名字后的括號中列出,端口可以說明為input, output及inout,端口等價于硬件的引腳(pin),注意模塊的名稱DFF,端口列表及說明 模塊通過端口與外部通信,語言的主要特點,模塊實例化(module instances),module DFF (d, clk, clr, q, qb); endmodule module REG4( d, clk, clr, q, qb); output 3: 0 q, qb; input 3: 0 d; input clk, clr; DFF d0 (d 0, clk, clr, q 0, qb 0); DFF d1 (d 1, clk, clr, q 1, qb 1); DFF d2 (d 2, clk, clr, q 2, qb 2); DFF d3 (d 3, clk, clr, q 3, qb 3); endmodule,語言的主要特點,可以將模塊的實例通過端口連接起來構成一個大的系統(tǒng)或元件。 在上面的例子中,REG4有模塊DFF的四個實例。注意,每個實例都有自己的名字(d0, d1, d2, d3)。實例名是每個對象唯一的標記,通過這個標記可以查看每個實例的內部。 實例中端口的次序與模塊定義的次序相同。 模塊實例化與調用程序不同。每個實例都是模塊的一個完全的拷貝,相互獨立、并行。,模塊實例化(module instances),一個完整的簡單例子 test fixture,被測試器件DUT是一個二選一多路器。測試裝置(test fixture)提供測試激勵及驗證機制。 Test fixture使用行為級描述,DUT采用門級描述。下面將給出Test fixture的描述、DUT的描述及如何進行混合仿真。,DUT 被測器件 (device under test),module MUX2_1 (out, a, b, sel); / Port declarations output out; input a, b, sel; wire out, a, b, sel; wire sel_, a1, b1; / The netlist not (sel_, sel); and (a1, a, sel_); and (b1, b, sel); or (out, a1, b1); endmodule,注釋行,已定義的 Verilog基本單元的實例,a, b, sel是輸入端口,out是輸出端口。所有信號通過這些端口從模塊輸入/輸出。 另一個模塊可以通過模塊名及端口說明使用多路器。實例化多路器時不需要知道其實現(xiàn)細節(jié)。這正是自上而下設計方法的一個重要特點。模塊的實現(xiàn)可以是行為級也可以是門級,但并不影響高層次模塊對它的使用。,多路器由關鍵詞module和endmodule開始及結束。,Test Fixture template,module testfixture; / Data type declaration / Instantiate modules / Apply stimulus / Display results endmodule,為什么沒 有端口?,由于testfixture是最頂層模塊,不會被其它模塊實例化。因此不需要有端口。,Test Fixture 如何說明實例,module testfixture; / Data type declaration / Instantiate modules MUX2_1 mux (out, a, b, sel); / Apply stimulus / Display results endmodule,多路器實例化語句,MUX的實例化語句包括: 模塊名字:與引用模塊相同 實例名字:任意,但要符合標記命名規(guī)則 端口列表:與引用模塊的次序相同,Test Fixture 過程(procedural block),所有過程在時間0執(zhí)行一次 過程之間是并行執(zhí)行的,過程語句有兩種: initial :只執(zhí)行一次 always :循環(huán)執(zhí)行,Test Fixture 過程(procedural block),通常采用過程語句進行行為級描述。test fixture的激勵信號在一個過程語句中描述。 過程語句的活動與執(zhí)行是有差別的 所有過程在時間0處于活動狀態(tài),并根據用戶定義的條件等待執(zhí)行; 所有過程并行執(zhí)行,以描述硬件內在的并行性;,Test fixture 激勵描述,module testfixture; / Data type declaration reg a, b, sel; wire out; / MUX instance MUX2_1 mux (out, a, b, sel); / Apply stimulus initial begin a = 0; b = 1; sel = 0; #5 b = 0; #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end / Display results endmodule,Time Values a b sel 0 0 1 0 5 0 0 0 10 0 1 1 15 1 1 1,例子中,a, b, sel說明為reg類數據。reg類數據是寄存器類數據信號,在重新賦值前一直保持當前數據。 #5 用于指示等待5個時間單位。 $finish是結束仿真的系統(tǒng)任務。,Test Fixture 響應產生,$time 系統(tǒng)函數,給出當前仿真時間 $monitor 系統(tǒng)任務,若參數列表中的參數值發(fā)生變化,則在時間單位末顯示參數值。 $monitor (“format_specifiers”, ); 例如: $monitor($time, o, in1, in2); $monitor($time, , out, , a, , b, , sel); $monitor($time, “%b %h %d %o”, sig1, sig2, sig3, sig4);,Verilog提供了一些系統(tǒng)任務和系統(tǒng)函數,包括:,注意不能有空格,Test Fixture 響應產生,$time是一個系統(tǒng)函數,返回當前返回仿真時間。時間用64位整數表示。 $monitor 在時間單位末,若參數列表中的參數值發(fā)生變化則顯示所列參數的值。由$time引起的變化不會顯示。 $monitor系統(tǒng)任務支持不同的數基。缺省數基是十進制。支持的數基還有二進制、八進制、十進制。,完整的Test Fixture,module testfixture; / Data type declaration reg a, b, sel; wire out; / MUX instance MUX2_1 mux (out, a, b, sel); / Apply stimulus initial begin a = 0; b = 1; sel = 0; #5 b = 0; #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end / Display results initial $monitor($time,“ out=%b a=%b b=%b sel=%b“, out, a, b, sel); endmodule,0 out= 0 a= 0 b= 1 sel= 0 5 out= 0 a= 0 b= 0 sel= 0 10 out= 1 a= 0 b= 1 sel= 1 15 out= 1 a= 1 b= 1 sel= 1,結果輸出,時間單位末的概念,timescale 1ns/1ns module testfixture; / Data type declaration reg a, b, sel; wire out; / MUX instance MUX2_1 mux (out, a, b, sel); / Apply stimulus initial begin a = 0; b = 1; sel = 0; #5.7 b = 0; #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end / Display results initial $monitor($time,“ out=%b a=%b b=%b sel=%b“, out, a, b, sel); endmodule,0 out= 0 a= 0 b= 1 sel= 0 6 out= 0 a= 0 b= 0 sel= 0 11 out= 1 a= 0 b= 1 sel= 1 16 out= 1 a= 1 b= 1 sel= 1,結果輸出,VCD數據庫,Verilog提供一系列系統(tǒng)任務用于記錄信號值變化保存到標準的VCD(Value Change Dump)格式數據庫中。大多數波形顯示工具支持VCD格式。,VCD數據庫,用戶可以用$dump*系統(tǒng)任務打開一個數據庫,保存信號并控制信號的保存。除$dumpvars外,其它任務的作用都比較直觀。 $dumpvars將在后面詳細描述。 必須首先使用$dumpfile系統(tǒng)任務,并且在一次仿真中只能打開一個VCD數據庫。 在仿真前(時間0前)必須先指定要觀測的波形,這樣才能看到信號完整的變化過程。 仿真時定期的將數據保存到磁盤是一個好的習慣,萬一系統(tǒng)出現(xiàn)問題數據也不會全部丟失。 VCD數據庫不記錄仿真結束時的數據。因此如果希望看到最后一次數據變化后的波形,必須在結束仿真前使用$dumpall。,VCD數據庫是仿真過程中數據信號變化的記錄。它只記錄用戶指定的信號。,$dumpvars,$dumpvars(, *); scope可以是層次中的信號,實例或模塊。 仿真時所有信號必須在同一時間下使用$dumpvars。 就是說可以使用多條$dumpvars語句,但必須從同一時間開始。如: initial begin $dumpfile (“verilog. dump”); $dumpvars (0, testfixture.a); #1 $dumpvars (0, testfixture.b); end,$dumpvars語法:,此語句將引起一個警告信息并被忽略,$dumpvars,$dumpvars; / Dump所有層次的信號 $dumpvars (1, top); / Dump top模塊中的所有信號 $dumpvars (2, top. u1); / Dump實例top. u1及其下一層的信號 $dumpvars (0, top. u2, top. u1. u13. q); / Dump top.u2及其以下所有信號,以及信號top. u1. u13. q。 $dumpvars (3, top. u2, top. u1); / Dump top. u1和top. u2及其下兩層中的所有信號。 用下面的代碼可以代替前面test fixture的$monitor命令: initial begin $dumpfile (“verilog. dump”); $dumpvars (0, testfixture); end,要給$dumpvars提供層次(levels)及范圍(scope)參數,例如,復習,Verilog的基本構建模塊是什么?是如何構成一個系統(tǒng)的? module怎樣與其它模塊通信? 仿真時兩個性質不同的模塊是什么? 在test fixture中兩類不同的過程語句是什么?它們有什么不同? 用什么方法能以文本格式顯示仿真結果?,module是基本構建單元。在module中實例化另一個module可以構成一個復雜的層次化系統(tǒng)。 module之間通過端口的連接進行互相通信 兩個模塊是設計模塊和激勵模塊。設計模塊又稱為DUT,激勵模塊又稱為testbench或test fixture。測試模塊用于設計模塊驗證 在testbench中用到的兩類過程語句是initial和always。其不同處是initial只執(zhí)行一次,而always循環(huán)執(zhí)行。 $monitor語句以文本格式顯示仿真結果,習,Verilog中的空白符總是忽略的嗎? 在源代碼中插入注釋有

溫馨提示

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

評論

0/150

提交評論