數(shù)字集成電路設計入門--從hdl到版圖于敦山北大微電子學系_第1頁
已閱讀1頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)字集成電路設計入門--從HDL到版圖于敦山 北大微電子學系,,課程內(nèi)容(一),介紹Verilog HDL, 內(nèi)容包括:Verilog應用Verilog語言的構成元素結(jié)構級描述及仿真行為級描述及仿真延時的特點及說明介紹Verilog testbench激勵和控制和描述結(jié)果的產(chǎn)生及驗證任務task及函數(shù)function用戶定義的基本單元(p

2、rimitive)可綜合的Verilog描述風格,,課程內(nèi)容(二),介紹Cadence Verilog仿真器, 內(nèi)容包括:設計的編譯及仿真源庫(source libraries)的使用用Verilog-XL命令行界面進行調(diào)試用NC Verilog Tcl界面進行調(diào)試圖形用戶界面(GUI)調(diào)試延時的計算及反標注(annotation)性能仿真描述如何使用NC Verilog仿真器進行編譯及仿真如何將設計環(huán)境傳送給NC

3、Verilog周期(cycle)仿真,,課程內(nèi)容(三),,邏輯綜合的介紹 簡介 設計對象 靜態(tài)時序分析 (STA) design analyzer環(huán)境 可綜合的HDL編碼風格可綜合的Verilog HDLVerilog HDL中的一些竅門 Designware庫 綜合劃分 實驗 (1),課程內(nèi)容(四),,設計約束( Constraint) 設置設計環(huán)境 設置設計約束 設計優(yōu)化 設計編譯 FSM的優(yōu)化 產(chǎn)

4、生并分析報告 實驗 (2),課程內(nèi)容(五),自動布局布線工具(Silicon Ensemble)簡介,,課程安排,共54學時 (18)講課,27學時Verilog (5) Synthesis (3)Place &Route (1)實驗,24學時Verilog (5)Synthesis (2)Pl

5、ace &Route (1)考試,3學時,,參考書目,Cadence Verilog Language and SimulationVerilog-XL Simulation with SynthesisEnvisia Ambit Synthesis《硬件描述語言Verilog》 清華大學出版社,Thomas &Moorby,劉明業(yè)等譯,2001.8,,第二章 Verilog 應用,學習內(nèi)容使用HDL

6、設計的先進性Verilog的主要用途Verilog的歷史如何從抽象級(levels of abstraction)理解電路設計Verilog描述,,術語定義(terms and definitions),硬件描述語言HDL:描述電路硬件及時序的一種編程語言仿真器:讀入HDL并進行解釋及執(zhí)行的一種軟件抽象級:描述風格的詳細程度,如行為級和門級ASIC:專用集成電路(Application Specific Integrat

7、ed Circuit)ASIC Vender:芯片制造商,開發(fā)并提供單元庫自下而上的設計流程:一種先構建底層單元,然后由底層單元構造更大的系統(tǒng)的設計方法 。自頂向下的設計流程:一種設計方法,先用高抽象級構造系統(tǒng),然后再設計下層單元RTL級:寄存器傳輸級(Register Transfer Level),用于設計的可綜合的一種抽象級Tcl:Tool command Language, 向交互程序輸入命令的描述語言,,什么是硬件描

8、述語言HDL,具有特殊結(jié)構能夠?qū)τ布壿嬰娐返墓δ苓M行描述的一種高級編程語言這種特殊結(jié)構能夠:描述電路的連接描述電路的功能在不同抽象級上描述電路描述電路的時序表達具有并行性HDL主要有兩種:Verilog和VHDLVerilog起源于C語言,因此非常類似于C語言,容易掌握VHDL起源于ADA語言,格式嚴謹,不易學習。VHDL出現(xiàn)較晚,但標準化早。IEEE 1706-1985標準。,,為什么使用HDL,使用HDL描述設

9、計具有下列優(yōu)點:設計在高層次進行,與具體實現(xiàn)無關設計開發(fā)更加容易早在設計期間就能發(fā)現(xiàn)問題能夠自動的將高級描述映射到具體工藝實現(xiàn)在具體實現(xiàn)時才做出某些決定HDL具有更大的靈活性可重用可以選擇工具及生產(chǎn)廠HDL能夠利用先進的軟件更快的輸入易于管理,,Verilog的歷史,Verilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所創(chuàng)。Phi Moorb

10、y后來成為Verilog-XL的主要設計者和Cadence公司的第一個合伙人。在1984~1985年間,Moorby設計出了第一個Verilog-XL的仿真器。1986年,Moorby提出了用于快速門級仿真的XL算法。1990年,Cadence公司收購了GDA公司1991年,Cadence公司公開發(fā)表Verilog語言,成立了OVI(Open Verilog International)組織來負責Verilog HDL語

11、言的發(fā)展。1995年制定了Verilog HDL的IEEE標準,即IEEE1364。,,Verilog的用途,Verilog的主要應用包括:ASIC和FPGA工程師編寫可綜合的RTL代碼高抽象級系統(tǒng)仿真進行系統(tǒng)結(jié)構開發(fā)測試工程師用于編寫各種層次的測試程序用于ASIC和FPGA單元或更高層次的模塊的模型開發(fā),,抽象級(Levels of Abstraction),Verilog既是一種行為描述的語言也是一種結(jié)構描述語言。Ver

12、ilog模型可以是實際電路的不同級別的抽象。這些抽象的級別包括:,,系統(tǒng)說明-設計文檔/算法描述RTL/功能級-Verilog門級/結(jié)構級-Verilog版圖/物理級-幾何圖形,行為綜合綜合前仿真邏輯綜合綜合后仿真版圖,,,,,,,,,抽象級(Levels of Abstraction),在抽象級上需要進行折衷,,系統(tǒng)說明-設計文檔/算術描述RTL/功能級-Verilog門級/結(jié)構級-

13、Verilog版圖/物理級-幾何圖形,詳細程度 低 高,,輸入/仿真速度 高 低,,抽象級(Levels of Abstraction),Verilog可以在三種抽象級上進行描述,,行為級 用功能塊之間的數(shù)據(jù)流對系統(tǒng)進行描述 在需要時在函數(shù)塊之間進行調(diào)度賦值。RTL級/功能級用功能塊內(nèi)部或功能塊之間的數(shù)據(jù)流和控制信號描述系統(tǒng)基于一個已定

14、義的時鐘的周期來定義系統(tǒng)模型結(jié)構級/門級用基本單元(primitive)或低層元件(component)的連接來描述系統(tǒng)以得到更高的精確性,特別是時序方面。在綜合時用特定工藝和低層元件將RTL描述映射到門級網(wǎng)表,抽象級(Levels of Abstraction),設計工程師在不同的設計階段采用不同的抽象級首先在行為級描述各功能塊,以降低描述難度,提高仿真速度。在綜合前將各功能模塊進行RTL級描述。用于綜合的庫中的大多數(shù)單

15、元采用結(jié)構級描述。在本教程中的結(jié)構級描述部分將對結(jié)構級(門級)描述進行更詳細的說明。Verilog還有一定的晶體管級描述能力及算法級描述能力,,行為級和RTL級,MUX的行為可以描述為:只要信號a或b或sel發(fā)生變化,如果sel為0則選擇a輸出;否則選擇b輸出。,,module muxtwo (out, a, b, sel); input a, b, sel; output out; reg out;always @(

16、sel or a or b) if (! sel) out = a; else out = b;endmodule,這個行為級RTL描述不處理X和Z狀態(tài)輸入,并且沒有延時。在行為級模型中,邏輯功能描述采用高級語言結(jié)構,如@, while,wait,if, case。Testbench(test fixture)通常采用行為級描述。所有行為級結(jié)構在testbench描述中都可以采用。RTL模型中數(shù)據(jù)流都是

17、基于時鐘的。任何時鐘元件在時鐘沿處的行為都要精確描述。RTL級描述是行為級Verilog的子集。,結(jié)構級描述,結(jié)構級Verilog適合開發(fā)小規(guī)模元件,如ASIC和FPGA的單元Verilog內(nèi)部帶有描述基本邏輯功能的基本單元(primitive),如and門。用戶可以定義自己的基本單元UDP(User Defined Privitives)綜合產(chǎn)生的結(jié)果網(wǎng)表通常是結(jié)構級的。用戶可以用結(jié)構級描述粘接(glue)邏輯。下面是MUX的

18、結(jié)構級描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時。,,module twomux (out, a, b, sl); input a, b, sl; output out; not u1 (nsl, sl ); and #1 u2 (sela, a, nsl); and #1 u3 (selb, b, sl); or #2 u4 (out, sela, se

19、lb);endmodule,綜合不支持!,僅需一種語言,Verilog的一個主要特點是可應用于各種抽象級。建模時可采用門級和RTL級混合描述,在開發(fā)testfixture時可以采用行為級描述。,,復習,什么是Verilog ?Verilog是公開的嗎?設計時什么時候采用Verilog RTL級描述?Verilog適合做什么樣的設計?,,解答:Verilog是用于硬件描述的具有時間概念的并行編程語言Verilog是一種公開語言

20、, 由OVI負責組織,有IEEE1394標準RTL描述用于綜合,或用于必須精確到每個時鐘周期的模型的建模。Verilog適用于各種抽象級模型的開發(fā)及驗證,第三章 Cadence仿真器,學習內(nèi)容邏輯仿真算法如何啟動Verilog-XL和NC Verilog仿真器如何顯示波形,,仿真算法,主要有三種仿真算法基于時間的(SPICE仿真器)基于事件的(Verilog-XL和NC Verilog仿真器)基于周期的(cycle),

21、,仿真算法,基于時間的算法用于處理連續(xù)的時間及變量在每一個時間點對所有電路元件進行計算效率低。在一個時間點只有約2~10%的電路活動基于事件的算法處理離散的時間、狀態(tài)和變量只有電路狀態(tài)發(fā)生變化時才進行處理,只模擬哪些可能引起電路狀態(tài)改變的元件。仿真器響應輸入引腳上的事件,并將值在電路中向前傳播。是應用最為廣泛的仿真算法效率高?!癳valuate when necessary”基于周期的仿真以時鐘周期為處理單位(與時間無關)

22、只在時鐘邊沿進行計算,不管時鐘周期內(nèi)的時序使用兩值邏輯 (1, 0) 只關心電路功能而不關心時序,對于大型設計,效率高僅適用于同步電路。,,基于事件仿真的時輪(time wheel),仿真器在編譯數(shù)據(jù)結(jié)構時建立一個事件隊列。只有當前時間片中所有事件都處理完成后,時間才能向前。仿真從時間0開始,而且時輪只能向前推進。只有時間0的事件處理完后才能進入下一時片。在同一個時間片內(nèi)發(fā)生的事件在硬件上是并行的理論上時間片可以無限。但

23、實際上受硬件及軟件的限制。,,一個時間片的事件可引起新的事件,在當前時片或以后,時間片timeslice,,Cadence Verilog仿真器,Verilog-XL和NC Verilog仿真器都是基于事件算法的仿真器。仿真器讀入Verilog HDL描述并進行仿真以反映實際硬件的行為。Verilog-XL和NC Verilog仿真器遵循IEEE 1364 Verilog規(guī)范制定的基于事件的調(diào)度語義仿真器可用于確定想法的可行

24、性用不同的方法解決設計問題功能驗證確定設計錯誤,,仿真過程,Verilog仿真分下列步驟:編譯讀入設計描述,處理編譯指導(compiler directive),建立一個數(shù)據(jù)結(jié)構定義設計的層次結(jié)構這一步有時分為兩步:compilation,elaboration初始化參數(shù)初始化;沒有驅(qū)動的Net缺省值為Z;其它節(jié)點初始值為X。這些值延著設計層次傳播。仿真剛開始時間為0時,仿真器將initial和always中的語句執(zhí)

25、行一次,遇到有時序控制時停止。這些賦值可產(chǎn)生在時間0或其后時間的事件。隨著時間推進,被調(diào)度事件的執(zhí)行引起更多的調(diào)度事件,直至仿真結(jié)束。,,Versus 交互式編譯仿真器,Verilog-XL是一個交互式仿真器,過程如下:讀入Verilog描述,進行語義語法檢查,處理編譯指導(compiler directive)在內(nèi)存中將設計編譯為中間格式,將所有模塊和實例組裝成層次結(jié)構(設計數(shù)據(jù)結(jié)構)。源代碼中的每個元件都被重新表示并能在產(chǎn)生的

26、數(shù)據(jù)結(jié)構 找到。決定仿真的時間精度,在內(nèi)存中構造一個事件隊列的時間數(shù)據(jù)結(jié)構(時輪) 。讀入、調(diào)度并根據(jù)事件執(zhí)行每一個語句,,Verilog-XL采用多種加速算法提高各種抽象級的仿真速度。每次重新啟動Verilog-XL,將重復上述步驟。當進入交互模式時,可以輸入Verilog HDL語句并加到設計的數(shù)據(jù)結(jié)構中。,Versus 交互式編譯仿真,Verilog-XL仿真器是與Verilog HDL同時開發(fā)的,因此它成為Verilog

27、 HDL仿真器的事實上的標準。Verilog-XL采用了多種加速算法,對每種抽象級描述都能很好的仿真。這些加速算法包括Turbo算法,XL算法及Switch-XL算法。在后面的教程中將對這些算法進行更為詳盡的介紹。,,NC Verilog-全編譯仿真,NC Verilog是全編譯仿真器,它直接將Verilog代碼編譯為機器碼執(zhí)行。其過程為:ncvlog編譯Verilog源文件,按照編譯指導(compile directive)檢查

28、語義及語法,產(chǎn)生中間數(shù)據(jù)。ncelab按照設計指示構造設計的數(shù)據(jù)結(jié)構,產(chǎn)生可執(zhí)行代碼。除非對優(yōu)化進行限制,否則源代碼中的元件(element)可能被優(yōu)化丟失。產(chǎn)生中間數(shù)據(jù)。ncsim啟動仿真核。核調(diào)入設計的數(shù)據(jù)結(jié)構,構造事件序列(時輪),調(diào)度并執(zhí)行事件的機器碼。有些事件可能消失(從不執(zhí)行)除非限制優(yōu)化過程。,,編譯后的所有代碼的執(zhí)行使用同一個核。當重新啟動仿真時,要對修改過的模塊重新編譯。省略這個手工過程的方法是直接對設計進行仿真

29、,這將自動地對修改過的模塊進行重新編譯。當采用交互模式時,可以使用Tcl命令和針對NC Verilog的Tcl擴展命令。,NC Verilog全編譯仿真,NC Verilog是最近才開發(fā)的,但其對描述的仿真與Verilog-XL完全相同NC Verilog仿真器用同一個核(kernel)對所有抽象級進行混合仿真,也就是說用戶可以采用各種不同抽象級混合設計。但在門級仿真的效率差一些。NC Verilog仿真器對源代碼采用增量編譯方式

30、,減少了編譯時間。在交互模式下,可以使用Tcl命令及其針對NC Verilog的擴展命令來修改設計和控制仿真。這將在后面進行詳細描述。,,對Verilog語言的支持,Verilog-XL和NC Verilog計劃支持Verilog語言全集。用戶可依據(jù)下列標準進行設計:IEEE1364-1995 Verilog語言參考手冊OVI 2.0 Verilog語言參考手冊,但不支持:Attributes: Verilog描述中對象的屬性。

31、函數(shù)中output或inout變元(argument):OVI2.0允許函數(shù)中output和inout變元值能夠返回。,,啟動Verilog-XL,在命令窗口啟動Verilog-XL: verilog [verilog-xl_options] design_files沒有option啟動的例子 verilog mux.v test.v使用 – c選項只對設計進行語法和連接檢查

32、 verilog – c mux.v test.v使用-f選項指定一個包含命令行參數(shù)的文件 verilog –f run.f run.f文件的內(nèi)容Verilog-XL將所有終端輸出保存到名為verilog.log的文件,,mux.vtest.v-c,,啟動NC Verilog,雖然NC Verilog仿真過程包括三個分立的步驟(ncvlog,

33、ncelab, ncsim),但仿真時不需要三個命令,可以用帶有命令行參數(shù)的ncverilog命令啟動NC Verilog: ncverilog [ncverilog_options] verilog-xl_argumentsExamples:ncverilog mux.v test.vncverilog –c mux.v test.vncverilog –f run.f

34、 run.f文件的內(nèi)容NC Verilog將所有終端輸出保存到名為ncverilog.log的文件,,mux.vtest.v-c,,NC Verilog有什么不同?,除+gui、-q和-s這些只影響運行時間的參數(shù)外,其它任何命令行參數(shù)的改變將使設計重新編譯、elaborate及仿真。如果更新了源文件及仿真時用到的SDF文件,則與它們相關的文件將重新編譯,設計也將重新elaborate和仿真。,,NC Verilo

35、g為編譯的元件及其它文件建立一個庫結(jié)構。增量編譯依賴于源文件、SDF文件和命令行參數(shù)。,ncverilog還有其它一些命令行參數(shù),如,在調(diào)試時有完全的讀、寫及連接操作,用 +access + argument ncverilog –f run.f + access+RWC要得到源文件行操作能力,用+linedebug ncverilog -f run.f +lined

36、ebug強制重編譯所有設計單元,使用+noupdate,NC Verilog有什么不同?,,使用+access選項可以設置對所有對象的缺省操作。對象的缺省設置是無操作。用+access+打開操作,+access-關掉操作。args可以是R、W、C的任何組合。使用+linedebug可以打開R、W、C,同時可對源文件行進行操作,如在行上設置一斷點。 使用+noupdate強制重編譯整個設計。缺省時只重新編譯修改過的文件。

37、只有當庫可能被破壞時才這樣做。 +gui選項啟動圖形界面;-q選項抑制標識信息;-s選項使仿真器在時間0時停止,進入交互模式。,波形顯示工具—SignalScan,,> signalscan & 或 signalscan 數(shù)據(jù)庫文件名 &,波形顯示工具—SignalScan,,Title Bar:顯示這是SignalScan窗口并以數(shù)字編號。若啟動幾個SignalScan窗口它們將順序編號。

38、Menu Bar:通過菜單可以執(zhí)行所有基本命令。Tool Bar中的按鈕有:copy, cut, paste, undo, delete, zoom, create marker, expand buses, launch the Design Brower等等。用戶可以自定義。,,在命令行輸入signalscan啟動。SignalScan窗口包括:,注:必須用Design Brower在波形窗口中添加信號。,Groups Pane列

39、出用戶建立的波形組Waveforms Region顯示加入信號的波形Names Pane在波形的左邊顯示信號名。這些信號名可以拖拽,在pane中雙擊右鍵可以移動插入的markerTime-Display Region顯示兩個指針的時間值及其時間差,SHM:波形數(shù)據(jù)庫,,,波形顯示工具從數(shù)據(jù)庫,如SHM數(shù)據(jù)庫中讀取數(shù)據(jù)。使用下面的系統(tǒng)任務可以對SHM數(shù)據(jù)庫進行操作:,例子:initialbegin $shm_open(“

40、lab.shm”); $shm_probe();end,SHM:波形數(shù)據(jù)庫,,,仿真歷史管理器(Simulation History Manager,SHM)數(shù)據(jù)庫記錄用戶的設計在仿真時數(shù)據(jù)信號的變化。只記錄用戶要觀察(probe)的信號。 用戶可以用$shm_系統(tǒng)任務打開一個SHM數(shù)據(jù)庫,設置信號探針并將結(jié)果保存到數(shù)據(jù)庫中。這些系統(tǒng)任務的功能除$shm_probe外都非常直觀。對$shm_probe將在下面詳

41、細討論。 用戶必須在仿真前(時間0前)設置探針信號才能看到信號在仿真過程中全部變化。,用$shm_probe設置信號探針,,,在$shm_probe中使用scope/node對作為參數(shù)。參數(shù)可以使用缺省值或兩個參數(shù)都設置。例如: $shm_probe( ); 觀測當前范圍(scope)所有端口 $shm_probe(“A”); 觀測當前范圍所有節(jié)點 $shm_probe(alu, adder); 觀測實例alu和a

42、dder的所有端口 $shm_probe(“S”, top.alu, “AC”); 觀測: (1): 當前范圍及其以下所有端口,除庫單元 (2):top.alu模塊及其以下所有節(jié)點,包括庫單元,用$shm_probe設置信號探針,,,$shm_probe的語法: $shm_probe(scope0, node0, scope1, node1, ...); 每個node都是基于前面scope的說明(層

43、次化的) scope參數(shù)缺省值為當前范圍(scope)。node參數(shù)缺省值為指定范圍的所有輸入、輸出及輸入輸出。,相關工具,,Affirma NC VHDL仿真器Envisia Ambit綜合工具Verilog-XL故障仿真器, 用于評價用戶測試向量的有效性SignalScan-TX圖形界面調(diào)試工具包Affirma equivalence checker完成門級設計之間或門級與RTL級之間的靜態(tài)功能驗證Affirma m

44、odel checker形式驗證工具,將Verilog或VHDL描述與設計說明進行驗證Affirma model packager,用戶的Verilog, VHDL或C語言可執(zhí)行模型分發(fā)時進行編譯及分發(fā)許可證Affirma Advanced Analysis Environment includes CoverScan, a code profiler, and HAL, a lint checker,,與Cadence Veril

45、og仿真器相關的工具有:,總結(jié),,邏輯仿真運行Verilog-XL和NC Verilog仿真器探測及顯示波形,,本章學習內(nèi)容,復習,,基于事件的仿真器是如何做到并行的?時間t的事件能否調(diào)度同一時間t的事件?NC Verilog仿真器不支持IEEE 1364 Verilog LRM的什么元件?,,通過調(diào)度在一個給定的時間片內(nèi)發(fā)生的所有事件來得到并行性。實際上仿真器串行處理給定時間片內(nèi)的事件,但理論上它們都是在同一時間片內(nèi)發(fā)生的。

46、任何時間片的事件能夠調(diào)度在同一時間片或其以后產(chǎn)生的事件。NC Verilog希望支持IEEE 1364 LRM規(guī)范全集。目前主要還不支持實例陣列(array of instances)。請參見產(chǎn)品發(fā)布手冊。,第四章 設計舉例,,進一步學習Verilog的結(jié)構描述和行為描述Verilog混合(抽象)級仿真,,學習目標:,語言的主要特點,,,module(模塊),module能夠表示:物理塊,如IC或ASIC單元邏輯塊,如一個CP

47、U設計的ALU部分整個系統(tǒng)每一個模塊的描述從關鍵詞module開始,有一個名稱(如SN74LS74,DFF,ALU等等),由關鍵詞endmodule結(jié)束。,module是層次化設計的基本構件,邏輯描述放在module內(nèi)部,語言的主要特點—模塊端口(module ports),,,端口在模塊名字后的括號中列出,端口可以說明為input, output及inout,端口等價于硬件的引腳(pin),,,注意模塊的名稱DFF,端口列表及說明

48、模塊通過端口與外部通信,,語言的主要特點,,,模塊實例化(module instances),module DFF (d, clk, clr, q, qb); ....endmodulemodule REG4( d, clk, clr, q, qb); output [3: 0] q, qb; input [3: 0] d; input clk, clr; DFF d0 (d[ 0], c

49、lk, 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)或元件。在上面的例子中,RE

50、G4有模塊DFF的四個實例。注意,每個實例都有自己的名字(d0, d1, d2, d3)。實例名是每個對象唯一的標記,通過這個標記可以查看每個實例的內(nèi)部。實例中端口的次序與模塊定義的次序相同。模塊實例化與調(diào)用程序不同。每個實例都是模塊的一個完全的拷貝,相互獨立、并行。,,模塊實例化(module instances),一個完整的簡單例子 test fixture,,,被測試器件DUT是一個二選一多路器。測試裝置(test fixt

51、ure)提供測試激勵及驗證機制。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

52、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是輸出端口。

53、所有信號通過這些端口從模塊輸入/輸出。另一個模塊可以通過模塊名及端口說明使用多路器。實例化多路器時不需要知道其實現(xiàn)細節(jié)。這正是自上而下設計方法的一個重要特點。模塊的實現(xiàn)可以是行為級也可以是門級,但并不影響高層次模塊對它的使用。,多路器由關鍵詞module和endmodule開始及結(jié)束。,,,Test Fixture template,,,module testfixture; // Data type declaration

54、 // Instantiate modules // Apply stimulus // Display resultsendmodule,為什么沒有端口?,由于testfixture是最頂層模塊,不會被其它模塊實例化。因此不需要有端口。,,Test Fixture — 如何說明實例,,,module testfixture; // Data type declaration // I

55、nstantiate modules MUX2_1 mux (out, a, b, sel); // Apply stimulus // Display resultsendmodule,多路器實例化語句,MUX的實例化語句包括: 模塊名字:與引用模塊相同 實例名字:任意,但要符合標記命名規(guī)則 端口列表:與引用模塊的次序相同,Test Fixture —過程(procedural block)

56、,,,所有過程在時間0執(zhí)行一次過程之間是并行執(zhí)行的,過程語句有兩種: initial :只執(zhí)行一次 always :循環(huán)執(zhí)行,Test Fixture —過程(procedural block),,,通常采用過程語句進行行為級描述。test fixture的激勵信號在一個過程語句中描述。過程語句的活動與執(zhí)行是有差別的所有過程在時間0處于活動狀態(tài),并根據(jù)用戶定義的條件等待執(zhí)行;所有過程并行執(zhí)行,以描述硬件內(nèi)在的并行性;,T

57、est 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; s

58、el = 0; #5 b = 0; #5 b = 1; sel = 1; #5 a = 1; #5 $finish; end // Display resultsendmodule,Time Values a b sel0 0 1 05 0 0 01

59、0 0 1 115 1 1 1,例子中,a, b, sel說明為reg類數(shù)據(jù)。reg類數(shù)據(jù)是寄存器類數(shù)據(jù)信號,在重新賦值前一直保持當前數(shù)據(jù)。#5 用于指示等待5個時間單位。$finish是結(jié)束仿真的系統(tǒng)任務。,Test Fixture 響應產(chǎn)生,,,$time 系統(tǒng)函數(shù),給出當前仿真時間$monitor 系統(tǒng)任務,若參數(shù)列表中的參數(shù)值發(fā)生變化,則在時間單位末顯

60、示參數(shù)值。 $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)函數(shù),包括:,注

61、意不能有空格,Test Fixture 響應產(chǎn)生,,,$time是一個系統(tǒng)函數(shù),返回當前返回仿真時間。時間用64位整數(shù)表示。$monitor 在時間單位末,若參數(shù)列表中的參數(shù)值發(fā)生變化則顯示所列參數(shù)的值。由$time引起的變化不會顯示。$monitor系統(tǒng)任務支持不同的數(shù)基。缺省數(shù)基是十進制。支持的數(shù)基還有二進制、八進制、十進制。,,,,完整的Test Fixture,,,module testfixture; // Data

62、 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;

63、#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= 05 out= 0 a= 0 b= 0 sel= 010

64、 out= 1 a= 0 b= 1 sel= 115 out= 1 a= 1 b= 1 sel= 1,結(jié)果輸出,時間單位末的概念,,,`timescale 1ns/1ns module testfixture; // Data type declaration reg a, b, sel; wire out; // MUX instance MUX2_1 mux (out, a, b

65、, 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

66、=%b a=%b b=%b sel=%b", out, a, b, sel);endmodule,0 out= 0 a= 0 b= 1 sel= 06 out= 0 a= 0 b= 0 sel= 011 out= 1 a= 0 b= 1 sel= 116 out= 1 a= 1 b= 1 sel= 1,結(jié)果輸出,VCD數(shù)據(jù)庫,,,Verilog提供一系列系統(tǒng)任務用于記錄信

67、號值變化保存到標準的VCD(Value Change Dump)格式數(shù)據(jù)庫中。大多數(shù)波形顯示工具支持VCD格式。,VCD數(shù)據(jù)庫,,,用戶可以用$dump*系統(tǒng)任務打開一個數(shù)據(jù)庫,保存信號并控制信號的保存。除$dumpvars外,其它任務的作用都比較直觀。 $dumpvars將在后面詳細描述。必須首先使用$dumpfile系統(tǒng)任務,并且在一次仿真中只能打開一個VCD數(shù)據(jù)庫。在仿真前(時間0前)必須先指定要觀測的波形,這樣才能看到信號完

68、整的變化過程。仿真時定期的將數(shù)據(jù)保存到磁盤是一個好的習慣,萬一系統(tǒng)出現(xiàn)問題數(shù)據(jù)也不會全部丟失。VCD數(shù)據(jù)庫不記錄仿真結(jié)束時的數(shù)據(jù)。因此如果希望看到最后一次數(shù)據(jù)變化后的波形,必須在結(jié)束仿真前使用$dumpall。,VCD數(shù)據(jù)庫是仿真過程中數(shù)據(jù)信號變化的記錄。它只記錄用戶指定的信號。,$dumpvars,,,$dumpvars[(, *)];scope可以是層次中的信號,實例或模塊。仿真時所有信號必須在同一時間下使用$dumpva

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論