第10章 集成電路系統(tǒng)設(shè)計(jì)簡介(1)_第1頁
第10章 集成電路系統(tǒng)設(shè)計(jì)簡介(1)_第2頁
第10章 集成電路系統(tǒng)設(shè)計(jì)簡介(1)_第3頁
第10章 集成電路系統(tǒng)設(shè)計(jì)簡介(1)_第4頁
第10章 集成電路系統(tǒng)設(shè)計(jì)簡介(1)_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、集成電路設(shè)計(jì)技術(shù)與工具集成電路設(shè)計(jì)技術(shù)與工具 第十章第十章 集成電路系統(tǒng)設(shè)計(jì)簡介集成電路系統(tǒng)設(shè)計(jì)簡介內(nèi)容提要內(nèi)容提要v10.1 引言引言v10.2 數(shù)字系統(tǒng)硬件描述語言數(shù)字系統(tǒng)硬件描述語言v10.3 數(shù)字系統(tǒng)的數(shù)字系統(tǒng)的CPLD/FPGA硬件驗(yàn)證硬件驗(yàn)證v10.4 VLSI數(shù)字系統(tǒng)邏輯綜合與物理實(shí)現(xiàn)數(shù)字系統(tǒng)邏輯綜合與物理實(shí)現(xiàn)v10.5 混合信號(hào)系統(tǒng)硬件描述語言混合信號(hào)系統(tǒng)硬件描述語言v10.6 本章小結(jié)本章小結(jié)10.1 引言引言v數(shù)字系統(tǒng)實(shí)現(xiàn)模擬信號(hào)處理結(jié)構(gòu)示意圖數(shù)字系統(tǒng)實(shí)現(xiàn)模擬信號(hào)處理結(jié)構(gòu)示意圖 電路圖電路圖硬件描述語言(硬件描述語言(HDL: Hardware Description La

2、nguage)怎樣設(shè)計(jì)復(fù)雜的數(shù)字系統(tǒng)?怎樣設(shè)計(jì)復(fù)雜的數(shù)字系統(tǒng)?怎樣設(shè)計(jì)復(fù)雜的數(shù)字系統(tǒng)?怎樣設(shè)計(jì)復(fù)雜的數(shù)字系統(tǒng)? v基于基于HDL語言的數(shù)字集語言的數(shù)字集成電路設(shè)計(jì)參考流程成電路設(shè)計(jì)參考流程 10.2 數(shù)字系統(tǒng)硬件描述語言數(shù)字系統(tǒng)硬件描述語言v編程語言: 程序員利用一種由專家設(shè)計(jì)的既可以被人理程序員利用一種由專家設(shè)計(jì)的既可以被人理解,也可以被計(jì)算機(jī)解釋的語言來表示算法解,也可以被計(jì)算機(jī)解釋的語言來表示算法問題的求解過程。這種語言就是問題的求解過程。這種語言就是編程語言編程語言。v程序:由編程語言所表達(dá)的算法問題的求解由編程語言所表達(dá)的算法問題的求解過程就是。過程就是。 v常用的編程語言:C、Pa

3、scal、Fortran、Basic或匯編語言或匯編語言。 什么是硬件描述語言HDLv具有特殊結(jié)構(gòu)能夠?qū)τ布壿嬰娐返墓δ苓M(jìn)行描述的一種高級(jí)編程語言v這種特殊結(jié)構(gòu)能夠:描述電路的連接描述電路的功能在不同抽象級(jí)上描述電路描述電路的時(shí)序表達(dá)具有并行性vHDL主要有兩種:Verilog和VHDLVerilog起源于C語言,因此非常類似于C語言,容易掌握VHDL起源于ADA語言,格式嚴(yán)謹(jǐn),不易學(xué)習(xí)。VHDL出現(xiàn)較晚,但標(biāo)準(zhǔn)化早。IEEE 1706-1985標(biāo)準(zhǔn)。?v使用HDL描述設(shè)計(jì)具有下列優(yōu)點(diǎn):設(shè)計(jì)在高層次進(jìn)行,與具體實(shí)現(xiàn)無關(guān)設(shè)計(jì)開發(fā)更加容易早在設(shè)計(jì)期間就能發(fā)現(xiàn)問題能夠自動(dòng)的將高級(jí)描述映射到具體工藝

4、實(shí)現(xiàn)在具體實(shí)現(xiàn)時(shí)才做出某些決定vHDL具有更大的靈活性可重用可以選擇工具及生產(chǎn)廠vHDL能夠利用先進(jìn)的軟件更快的輸入易于管理Verilog HDL - 較多的第三方工具的支持 - 語法結(jié)構(gòu)比VHDL簡單 - 學(xué)習(xí)起來比VHDL容易 - 仿真工具比較好使 - 測試激勵(lì)模塊容易編寫VHDL - 比VerilogHDL早幾年成為IEEE標(biāo)準(zhǔn); - 語法/結(jié)構(gòu)比較嚴(yán)格,因而編寫出的 模塊風(fēng)格比較清晰; - 比較適合由較多的設(shè)計(jì)人員合作完成 的特大型項(xiàng)目(一百萬門以上)。Verilog HDL vs. VHDL VHDL VITAL 系統(tǒng)級(jí)系統(tǒng)級(jí) 算法級(jí)算法級(jí) 寄存器傳輸級(jí)寄存器傳輸級(jí) 邏輯門級(jí)邏輯門級(jí)

5、 開關(guān)電路級(jí)開關(guān)電路級(jí) 行為級(jí)行為級(jí) 的抽象的抽象 Verilog HDL 與與 VHDL 建建 模模 能能 力力 的的 比比 較較 VerilogVerilog的歷史vVerilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所創(chuàng)。Phi Moorby后來成為Verilog-XL的主要設(shè)計(jì)者和Cadence公司的第一個(gè)合伙人。v在19841985年間,Moorby設(shè)計(jì)出了第一個(gè)Verilog-XL的仿真器。v1986年,Moorby提出了用于快速門級(jí)仿真的XL算法。v1990年,Cadence公司收購了GDA公司v1991年

6、,Cadence公司公開發(fā)表Verilog語言,成立了OVI(Open Verilog International)組織來負(fù)責(zé)Verilog HDL語言的發(fā)展。v1995年制定了Verilog HDL的IEEE標(biāo)準(zhǔn),即IEEE1364。 Verilog HDL 公開發(fā)表 CADENCE 公司購買 Verilog 版權(quán) 1990 1989 1980s Verilog-XL 誕生 模擬和數(shù)字都適用的 Verilog 標(biāo)準(zhǔn) 公開發(fā)表 1998 ? VerilogHDLIEEE1364 標(biāo)準(zhǔn) 公開發(fā)表 有關(guān) VerilogHDL 的全部權(quán)利都移交給 OVI(Open Verilog Internati

7、onal) 1995 1990Verilog HDL 的發(fā)展歷史Verilog的用途vVerilog的主要應(yīng)用包括:ASIC和FPGA工程師編寫可綜合的RTL代碼高抽象級(jí)系統(tǒng)仿真進(jìn)行系統(tǒng)結(jié)構(gòu)開發(fā)測試工程師用于編寫各種層次的測試程序用于ASIC和FPGA單元或更高層次的模塊的模型開發(fā)Verilog HDL 的抽象級(jí)別行為綜合邏輯綜合綜合前仿真綜合后仿真布局布線技術(shù)說明: -設(shè)計(jì)文檔設(shè)計(jì)文檔/算法描述算法描述用高級(jí)行為的用高級(jí)行為的VerilogVerilog模塊表示模塊表示RTL/功能級(jí):用可綜合的用可綜合的VerilogVerilog模塊表示模塊表示門級(jí)/結(jié)構(gòu)級(jí):用實(shí)例引用的用實(shí)例引用的Ver

8、ilogVerilog模塊表示模塊表示版圖布局/物理級(jí):用幾何形狀來表示用幾何形狀來表示Verilog HDL 的抽象級(jí)別vVerilog既是一種行為描述的語言也是一種結(jié)構(gòu)描述語言。Verilog模型可以是實(shí)際電路的不同級(jí)別的抽象。這些抽象的級(jí)別包括:抽象級(jí)(Levels of Abstraction)v在抽象級(jí)上需要進(jìn)行折衷系統(tǒng)說明系統(tǒng)說明-設(shè)計(jì)文檔設(shè)計(jì)文檔/算術(shù)描述算術(shù)描述RTL/功能級(jí)功能級(jí)-Verilog門級(jí)門級(jí)/結(jié)構(gòu)級(jí)結(jié)構(gòu)級(jí)-Verilog版圖版圖/物理級(jí)物理級(jí)-幾何圖形幾何圖形詳細(xì)程度詳細(xì)程度 低低 高高輸入輸入/仿真速度仿真速度 高高 低低抽象級(jí)(Levels of Abstra

9、ction)Verilog可以在三種抽象級(jí)上進(jìn)行描述行為級(jí)行為級(jí) 用功能塊之間的數(shù)據(jù)流對(duì)系統(tǒng)進(jìn)行描述用功能塊之間的數(shù)據(jù)流對(duì)系統(tǒng)進(jìn)行描述 在需要時(shí)在函數(shù)塊之間進(jìn)行調(diào)度賦值。在需要時(shí)在函數(shù)塊之間進(jìn)行調(diào)度賦值。RTL級(jí)級(jí)/功能級(jí)功能級(jí)用功能塊內(nèi)部或功能塊之間的數(shù)據(jù)流和控制信號(hào)描述系統(tǒng)用功能塊內(nèi)部或功能塊之間的數(shù)據(jù)流和控制信號(hào)描述系統(tǒng)基于一個(gè)已定義的時(shí)鐘的周期來定義系統(tǒng)模型基于一個(gè)已定義的時(shí)鐘的周期來定義系統(tǒng)模型結(jié)構(gòu)級(jí)結(jié)構(gòu)級(jí)/門級(jí)門級(jí)用基本單元用基本單元(primitive)或低層元件或低層元件(component)的連接來描述系的連接來描述系統(tǒng)以得到更高的精確性,特別是時(shí)序方面。統(tǒng)以得到更高的精確性

10、,特別是時(shí)序方面。在綜合時(shí)用特定工藝和低層元件將在綜合時(shí)用特定工藝和低層元件將RTL描述映射到門級(jí)網(wǎng)表描述映射到門級(jí)網(wǎng)表抽象級(jí)(Levels of Abstraction)v設(shè)計(jì)工程師在不同的設(shè)計(jì)階段采用不同的抽象級(jí)首先在行為級(jí)描述各功能塊,以降低描述難度,提高仿真速度。在綜合前將各功能模塊進(jìn)行RTL級(jí)描述。用于綜合的庫中的大多數(shù)單元采用結(jié)構(gòu)級(jí)描述。在本教程中的結(jié)構(gòu)級(jí)描述部分將對(duì)結(jié)構(gòu)級(jí)(門級(jí))描述進(jìn)行更詳細(xì)的說明。vVerilog還有一定的晶體管級(jí)描述能力及算法級(jí)描述能力行為級(jí)和RTL級(jí)vMUX的行為可以描述為:只要信號(hào)a或b或sel發(fā)生變化,如果sel為0則選擇a輸出;否則選擇b輸出。mod

11、ule muxtwo (out, a, b, sel); input a, b, sel; output out; reg out;always ( sel or a or b) if (! sel) out = a; else out = b;endmodule這個(gè)行為級(jí)這個(gè)行為級(jí)RTL描述不處理描述不處理X和和Z狀態(tài)輸入,并且沒有延時(shí)。狀態(tài)輸入,并且沒有延時(shí)。在行為級(jí)模型中,邏輯功能描述采用高級(jí)語言結(jié)構(gòu),如在行為級(jí)模型中,邏輯功能描述采用高級(jí)語言結(jié)構(gòu),如, while,wait,if, case。Testbench(test fixture)通常采用行為級(jí)描述。所有行為級(jí)結(jié)構(gòu)在通常采用行為

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

13、)邏輯。v下面是MUX的結(jié)構(gòu)級(jí)描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時(shí)。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, selb);endmodule綜合不綜合不支持支持!簡單的簡單的 Verilog HDL 模塊示例模塊示例目的:通過簡單的例子了解Verilog模塊的基本構(gòu)成了解Verilog模塊的層次結(jié)構(gòu)和行為模塊了解V

14、erilog模塊的測試 下面先介紹幾個(gè)簡單的Verilog HDL程序,然后從中分析Verilog HDL程序的特性。例 1 module adder ( count,sum,a,b,cin ); input 2:0 a,b; input cin; output count; output 2:0 sum; assign count, sum=a+b+cin; endmodule 這個(gè)例子描述了一個(gè)三位的加法器。從例子中可以看出整個(gè)Verilog HDL程序是嵌套在module和endmodule聲明語句里的。簡單的簡單的 Verilog HDL 模塊模塊例2:module compare (

15、 equal,a,b ); output equal; /聲明輸出信號(hào)聲明輸出信號(hào)equal input 1:0 a,b; /聲明輸入信號(hào)聲明輸入信號(hào)a,b assign equal=(a=b)?)?1:0; /*如果兩個(gè)輸入信號(hào)相等如果兩個(gè)輸入信號(hào)相等,輸出為輸出為1。否則為。否則為0*/endmodule這個(gè)程序描述了一個(gè)比較器.在這個(gè)程序中,/*.*/和/.表示注釋部分,注釋只是為了方便程序員理解程序,對(duì)編譯是不起作用的。簡單的 Verilog HDL 模塊例3:module trist2(out,in,enable); output out; input in, enable; buf

16、if1 mybuf(out,in,enable);endmodule這個(gè)程序描述了一個(gè)三態(tài)驅(qū)動(dòng)器。程序通過調(diào)用一個(gè)實(shí)例元件bufif1來實(shí)現(xiàn)其功能。簡單的 Verilog HDL 模塊 module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable); endmodule module mytri(out,in,enable); output out; input in, enable; assign out = enable? In : bz; endmodule簡單的簡單的 V

17、erilog HDL 模塊模塊例4:上述程序例子通過另一種方法描述了一個(gè)三態(tài)門。在這個(gè)例子中存在著兩個(gè)模塊:模塊trist1 調(diào)用模塊 mytri 的實(shí)例元件 tri_inst。模塊 trist1 是上層模塊。模塊 mytri 則被稱為子模塊。通過這種結(jié)構(gòu)性模塊構(gòu)造可構(gòu)成特大型模塊。簡單的 Verilog HDL 模塊通過上面的例子可以看到通過上面的例子可以看到: Verilog HDL程序是由模塊構(gòu)成的。模塊是可以進(jìn)行層次嵌套的。正因?yàn)槌绦蚴怯赡K構(gòu)成的。模塊是可以進(jìn)行層次嵌套的。正因?yàn)槿绱巳绱?才可以將大型的數(shù)字電路設(shè)計(jì)分割成不同的小模塊來實(shí)現(xiàn)特定的功能才可以將大型的數(shù)字電路設(shè)計(jì)分割成不同

18、的小模塊來實(shí)現(xiàn)特定的功能,最后通過頂層模塊調(diào)用子模塊來實(shí)現(xiàn)整體功能。最后通過頂層模塊調(diào)用子模塊來實(shí)現(xiàn)整體功能。 每個(gè)模塊要進(jìn)行端口定義每個(gè)模塊要進(jìn)行端口定義,并說明輸入輸出口并說明輸入輸出口,然后對(duì)模塊的功能進(jìn)行行為然后對(duì)模塊的功能進(jìn)行行為邏輯描述。邏輯描述。 Verilog HDL程序的書寫格式自由程序的書寫格式自由,一行可以寫幾個(gè)語句一行可以寫幾個(gè)語句,一個(gè)語句也可以一個(gè)語句也可以分寫多行。分寫多行。 除了除了endmodule語句外語句外,每個(gè)語句和數(shù)據(jù)定義的最后必須有分號(hào)每個(gè)語句和數(shù)據(jù)定義的最后必須有分號(hào) 可以用可以用/*.*/和和/.對(duì)對(duì)Verilog HDL程序的任何部分作注釋。一

19、個(gè)好的程序的任何部分作注釋。一個(gè)好的,有使有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。以增強(qiáng)程序的可讀性和可維護(hù)性。模塊的結(jié)構(gòu)模塊的結(jié)構(gòu) Verilog的基本設(shè)計(jì)單元是的基本設(shè)計(jì)單元是“模塊模塊”(block)。一個(gè)模。一個(gè)模塊是由兩部分組成的:一)塊是由兩部分組成的:一)描述接口描述接口;二);二)描述邏輯功描述邏輯功能能,即定義輸入是如何影響輸出的。下面舉例說明:,即定義輸入是如何影響輸出的。下面舉例說明:模塊的結(jié)構(gòu)模塊的結(jié)構(gòu)從上面的例子可以看出:從上面的例子可以看出:- Verilog模塊結(jié)構(gòu)完全嵌在模塊結(jié)構(gòu)完全嵌在module

20、和和endmodule聲明語句之間;聲明語句之間;-每個(gè)每個(gè)Verilog程序包括四個(gè)主要部分:程序包括四個(gè)主要部分:端口定義、端口定義、I/O說明、說明、內(nèi)部信號(hào)聲明、內(nèi)部信號(hào)聲明、功能定義功能定義。模塊的測試模塊的測試如何檢查上述例子其功能是否正確?如何檢查上述例子其功能是否正確? 需要有測試激勵(lì)信號(hào)輸入到被測模塊需要有測試激勵(lì)信號(hào)輸入到被測模塊 需要記錄被測模塊的輸出信號(hào)需要記錄被測模塊的輸出信號(hào) 需要把用功能和行為描述的需要把用功能和行為描述的Verilog模塊模塊 轉(zhuǎn)換為門級(jí)電路互連的電路結(jié)構(gòu)(綜合)。轉(zhuǎn)換為門級(jí)電路互連的電路結(jié)構(gòu)(綜合)。 需要對(duì)已經(jīng)轉(zhuǎn)換為門級(jí)電路結(jié)構(gòu)的邏輯需要對(duì)已

21、經(jīng)轉(zhuǎn)換為門級(jí)電路結(jié)構(gòu)的邏輯 進(jìn)行測試(門級(jí)電路仿真)。進(jìn)行測試(門級(jí)電路仿真)。 需要對(duì)布局布線后的電路結(jié)構(gòu)進(jìn)行測試。需要對(duì)布局布線后的電路結(jié)構(gòu)進(jìn)行測試。 (布局布線后仿真)。(布局布線后仿真)。模塊的測試被測模塊被測模塊激 勵(lì) 和 控激 勵(lì) 和 控制信號(hào)制信號(hào)輸出響應(yīng)輸出響應(yīng)和驗(yàn)證和驗(yàn)證模塊的測試測試模塊常見的形式:測試模塊常見的形式:module t;reg ; /被測模塊輸入被測模塊輸入/輸出變量類型定義輸出變量類型定義wire; /被測模塊輸入被測模塊輸入/輸出變量類型定義輸出變量類型定義initial begin ; ; ; end /產(chǎn)生測試信號(hào)產(chǎn)生測試信號(hào)always #dela

22、y begin ; end /產(chǎn)生測試信號(hào)產(chǎn)生測試信號(hào)Testedmd m(.in1(ina), .in2(inb), .out1(outa), .out2(outb) );/被測模塊的實(shí)例引用被測模塊的實(shí)例引用initial begin .; .; . end /記錄輸出和響應(yīng)記錄輸出和響應(yīng)endmoduleinitial initial always所有的過程塊都在所有的過程塊都在0 0時(shí)時(shí)刻同時(shí)啟動(dòng);它們是刻同時(shí)啟動(dòng);它們是并行的,在模塊中不并行的,在模塊中不分前后。分前后。 initialinitial塊塊 只執(zhí)行只執(zhí)行一次。一次。 alwaysalways塊塊 只要符合只要符合觸發(fā)條

23、件可以循環(huán)執(zhí)觸發(fā)條件可以循環(huán)執(zhí)行。行。測試模塊中常用的過程塊:測試模塊中常用的過程塊:模塊的測試模塊的測試如何描述激勵(lì)信號(hào):module t;reg a, b, sel;wire out;/引用多路器實(shí)例引用多路器實(shí)例 mux2_m (out, a, b, sel);/加入激勵(lì)信號(hào)加入激勵(lì)信號(hào)initial begin a=0; b=1; sel=0; #10 b=0; #10 b=1; sel=1; #10 a=1; #10 $stop; end模塊的測試如何觀察被測模塊的響應(yīng): 在在initial 塊中,用系統(tǒng)任務(wù)塊中,用系統(tǒng)任務(wù)$time 和和 $monitor $time 返回當(dāng)前的仿

24、真時(shí)刻返回當(dāng)前的仿真時(shí)刻 $monitor 只要在其變量列表中有某一個(gè)或某幾個(gè)變只要在其變量列表中有某一個(gè)或某幾個(gè)變 量值發(fā)生變化,便在仿真單位時(shí)間結(jié)束時(shí)顯示其變量值發(fā)生變化,便在仿真單位時(shí)間結(jié)束時(shí)顯示其變 量列表中所有變量的值。量列表中所有變量的值。例: initial begin $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); end如何把被測模塊的輸出變化記錄到數(shù)據(jù)庫文件中?(文件格式為(文件格式為VCD,大多數(shù)的波形顯示工具都能讀取該格式)大多數(shù)的波形顯示工具都能讀取該格式)可用以下七個(gè)系統(tǒng)任務(wù):$dumpfile(“fil

25、e.dump”); /打開記錄數(shù)據(jù)變化的數(shù)據(jù)文件打開記錄數(shù)據(jù)變化的數(shù)據(jù)文件$dumpvars(); /選擇需要記錄的變量選擇需要記錄的變量$dumpflush; /把記錄在數(shù)據(jù)文件中的資料轉(zhuǎn)送到硬盤保把記錄在數(shù)據(jù)文件中的資料轉(zhuǎn)送到硬盤保存存$dumpoff; /停止記錄數(shù)據(jù)變化停止記錄數(shù)據(jù)變化$dumpon; /重新開始記錄數(shù)據(jù)變化重新開始記錄數(shù)據(jù)變化$dumplimit(); /規(guī)定數(shù)據(jù)文件的大?。ㄗ止?jié))規(guī)定數(shù)據(jù)文件的大?。ㄗ止?jié))$dumpall; /記錄所有指定信號(hào)的變化值到數(shù)據(jù)文件中記錄所有指定信號(hào)的變化值到數(shù)據(jù)文件中模塊的測試模塊的測試如何把被測模塊的響應(yīng)變化記錄到數(shù)據(jù)庫文件中?舉例說

26、明:$dumpvars; /記錄各層次模塊中所有信號(hào)的變化記錄各層次模塊中所有信號(hào)的變化$dumpvars(1,top); /只記錄模塊只記錄模塊top中所有信號(hào)的變化中所有信號(hào)的變化$dumpvars(2,top.u1); /記錄記錄top模塊中實(shí)例模塊中實(shí)例u1和它以下一層子模塊所有信號(hào)的變化和它以下一層子模塊所有信號(hào)的變化$dumpvars(0,top.u2,top.u1.u13.q); /記錄記錄top模塊中實(shí)例模塊中實(shí)例u2和它本層所有信號(hào)的變化和它本層所有信號(hào)的變化,還有還有top.u1.u13.q信號(hào)的變化。信號(hào)的變化。$dumpvars(3,top.u2,top.u1); /記

27、錄記錄top模塊中模塊中u2和和u1所有信號(hào)的變化(包括其兩層以下子模所有信號(hào)的變化(包括其兩層以下子模塊的信號(hào)變化)。塊的信號(hào)變化)。模塊的測試模塊的測試如何把被測模塊的響應(yīng)變化記錄到數(shù)據(jù)庫文件中?舉例說明:下面的下面的 Verilog 代碼段可以代替測試文件中的系統(tǒng)代碼段可以代替測試文件中的系統(tǒng)任務(wù)任務(wù)$monitor initial begin $dumpfile(“vlog.dump”); $dumpvars(0,top); endVerilog HDL 語法要點(diǎn)語法要點(diǎn)Verilog HDL 語法要點(diǎn)語法要點(diǎn)Verilog 與與 C 的主要不同點(diǎn)的主要不同點(diǎn):Verilog 有許多語

28、法規(guī)則與有許多語法規(guī)則與 C 語言一致。語言一致。 但與但與 C 語言有根本的區(qū)別:語言有根本的區(qū)別:- 并行性并行性- 塊的含義:塊的含義: initial 塊塊 和和 always塊塊- 兩種賦值語句:兩種賦值語句: 阻塞阻塞 賦值賦值 “ = ” 非阻塞賦值非阻塞賦值 “= ”空格空格和注釋和注釋 Verilog 是一種格式很自由的語言。是一種格式很自由的語言。 空格在文本中起一個(gè)分離符的作用,空格在文本中起一個(gè)分離符的作用, 別的沒有其他用處。別的沒有其他用處。 單行注釋符用單行注釋符用 /* 與與C 語言一致語言一致 多行注釋符用多行注釋符用 /* - */ 與與C 語言一致語言一致

29、空白符和注釋空白符和注釋module MUX2_1 (out, a, b, sel); / Port declarations output out; input sel, / control input b, /* data inputs */ a;/* The netlist logic selects input ”a” when sel = 0 and it selects ”b” when sel = 1.*/ not (sel_, sel); and (a1, a, sel_), (b1, b, sel); / What does this line do? or (out, a1

30、, b1);endmodule格式自由格式自由使用空白符提高可讀性及代碼組使用空白符提高可讀性及代碼組織???。Verilog忽略空白符除非用于忽略空白符除非用于分開其它的語言標(biāo)記。分開其它的語言標(biāo)記。多行注釋,在多行注釋,在/* */內(nèi)內(nèi)單行注釋單行注釋到行末結(jié)束到行末結(jié)束整數(shù)常量和實(shí)數(shù)常量整數(shù)常量和實(shí)數(shù)常量v整數(shù)的大小可以定義也可以不定義。整數(shù)表示為: 其中 size :大小,由十進(jìn)制數(shù)表示的位數(shù)(bit)表示。缺省為32位 base:數(shù)基,可為2(b)、8(o)、10(d)、16(h)進(jìn)制。缺省為10進(jìn)制 value:是所選數(shù)基內(nèi)任意有效數(shù)字,包括X、Z。v實(shí)數(shù)常量可以用十進(jìn)制或科學(xué)表示法

31、表示。 Verilog中,常量中,常量(literals)可是整數(shù)也可以是實(shí)數(shù)可是整數(shù)也可以是實(shí)數(shù)12 unsized decimal (zero-extended to 32 bits)H83a unsized hexadecimal (zero- extended to 32 bits)8b1100_ 0001 8-bit binary64hff01 64-bit hexadecimal (zero- extended to 64 bits)9O17 9-bit octal32bz01x Z-extended to 32 bits3b1010_ 1101 3-bit number, tru

32、ncated to 3b1016.3 decimal notation32e- 4 scientific notation for 0.00324.1E3 scientific notation for 4100整數(shù)常量和實(shí)數(shù)常量整數(shù)常量和實(shí)數(shù)常量v整數(shù)的大小可以定義也可以不定義。整數(shù)表示為:整數(shù)的大小可以定義也可以不定義。整數(shù)表示為:數(shù)字中(數(shù)字中(_)忽略,便于查看)忽略,便于查看沒有定義大小沒有定義大小(size)整數(shù)缺省為整數(shù)缺省為32位位缺省數(shù)基為十進(jìn)制缺省數(shù)基為十進(jìn)制數(shù)基數(shù)基(base)和數(shù)字和數(shù)字(16進(jìn)制進(jìn)制)中的字母無大小寫之分中的字母無大小寫之分當(dāng)數(shù)值當(dāng)數(shù)值value大于指

33、定的大小時(shí),截去高位。如大于指定的大小時(shí),截去高位。如 2b1101表示的是表示的是2b01v實(shí)數(shù)常量實(shí)數(shù)常量實(shí)數(shù)可用科學(xué)表示法或十進(jìn)制表示實(shí)數(shù)可用科學(xué)表示法或十進(jìn)制表示科學(xué)表示法表示方式:科學(xué)表示法表示方式: , 表示:表示: 尾數(shù)尾數(shù)10指數(shù)指數(shù)字符串(字符串(string)v字符串要在一行中用雙引號(hào)括起來,也就是不能跨行。字符串要在一行中用雙引號(hào)括起來,也就是不能跨行。v字符串中可以使用一些字符串中可以使用一些C語言轉(zhuǎn)義語言轉(zhuǎn)義(escape)符,如符,如t nv可以使用一些可以使用一些C語言格式符語言格式符(如如%b)在仿真時(shí)產(chǎn)生格式在仿真時(shí)產(chǎn)生格式化輸出:化輸出: ”This is

34、a normal string” ”This string has a t tab and ends with a new linen” ”This string formats a value: val = %b”Verilog中,字符串大多用于顯示信息的命令中。中,字符串大多用于顯示信息的命令中。Verilog沒沒有字符串?dāng)?shù)據(jù)類型有字符串?dāng)?shù)據(jù)類型字符串(字符串(string)轉(zhuǎn)義符及格式符將在驗(yàn)證支持部分討論轉(zhuǎn)義符及格式符將在驗(yàn)證支持部分討論 格式符格式符%h%o%d%b%c%s%v%m%thexoctdecbinACSIIstringstrengthmoduletime轉(zhuǎn)義符tn”tab

35、換行換行反斜杠反斜杠雙引號(hào)雙引號(hào)ASCII representation of above格式符格式符%0d表示沒有前導(dǎo)表示沒有前導(dǎo)0的十進(jìn)制數(shù)的十進(jìn)制數(shù)標(biāo)識(shí)符標(biāo)識(shí)符(identifiers)v標(biāo)識(shí)符是用戶在描述時(shí)給標(biāo)識(shí)符是用戶在描述時(shí)給Verilog對(duì)象起的名字對(duì)象起的名字v標(biāo)識(shí)符必須以字母標(biāo)識(shí)符必須以字母(a-z, A-Z)或或( _ )開頭,后面可以是字母、數(shù)字、開頭,后面可以是字母、數(shù)字、( $ )或或( _ )。v最長可以是最長可以是1023個(gè)字符個(gè)字符v標(biāo)識(shí)符區(qū)分大小寫,標(biāo)識(shí)符區(qū)分大小寫,sel和和SEL是不同的標(biāo)識(shí)符是不同的標(biāo)識(shí)符v模塊、端口和實(shí)例的名字都是標(biāo)識(shí)符模塊、端口和實(shí)例

36、的名字都是標(biāo)識(shí)符module MUX2_1 (out, a, b, sel);output out;input a, b, sel; not not1 (sel_, sel); and and1 (a1, a, sel_); and and2 (b1, b, sel); or or1 (out, a1, b1);endmoduleVerilog標(biāo)識(shí)符標(biāo)識(shí)符標(biāo)識(shí)符標(biāo)識(shí)符(identifiers)v有效標(biāo)識(shí)符舉例:有效標(biāo)識(shí)符舉例: shift_reg_a busa_index _bus3v無效標(biāo)識(shí)符舉例:無效標(biāo)識(shí)符舉例: 34net / 開頭不是字母或開頭不是字母或“_” a*b_net / 包含

37、了非字母或數(shù)字,包含了非字母或數(shù)字, “$” “_” n238 /包含了非字母或數(shù)字,包含了非字母或數(shù)字, “$” “_”vVerilog區(qū)分大小寫,所有區(qū)分大小寫,所有Verilog關(guān)鍵詞使用小寫字母關(guān)鍵詞使用小寫字母。轉(zhuǎn)義標(biāo)識(shí)符( Escaped identifiers)v可以包含任何可打印字符可以包含任何可打印字符v反斜杠及空白符不是標(biāo)識(shí)符的一部分反斜杠及空白符不是標(biāo)識(shí)符的一部分module 2:1MUX (out, a, b, sel);output out;input a, b, sel; not not1(sel ,sel); and and1( a1, a, sel ); and

38、 and2( b1, b, sel); or or1( out, a1, b1);endmodulev使用轉(zhuǎn)義符可能會(huì)產(chǎn)生一些問題,并且不是所有工具都支持。使用轉(zhuǎn)義符可能會(huì)產(chǎn)生一些問題,并且不是所有工具都支持。有時(shí)用轉(zhuǎn)義符完成一些轉(zhuǎn)換,如產(chǎn)生邏輯圖的有時(shí)用轉(zhuǎn)義符完成一些轉(zhuǎn)換,如產(chǎn)生邏輯圖的Verilog網(wǎng)表。綜網(wǎng)表。綜合工具輸出綜合網(wǎng)表時(shí)也使用轉(zhuǎn)義符。合工具輸出綜合網(wǎng)表時(shí)也使用轉(zhuǎn)義符。不建議使用轉(zhuǎn)義符。不建議使用轉(zhuǎn)義符。轉(zhuǎn)義標(biāo)識(shí)符由反斜杠轉(zhuǎn)義標(biāo)識(shí)符由反斜杠“”開始,空白符結(jié)束開始,空白符結(jié)束Escaped Identifiers轉(zhuǎn)義標(biāo)識(shí)符轉(zhuǎn)義標(biāo)識(shí)符( Escaped identifiers)轉(zhuǎn)

39、義標(biāo)識(shí)符允許用戶在標(biāo)識(shí)符中使用非法字符。如:轉(zhuǎn)義標(biāo)識(shí)符允許用戶在標(biāo)識(shí)符中使用非法字符。如: #sel busa+ index A,B top. 3inst .net1 / 在層次化名字中轉(zhuǎn)義符在層次化名字中轉(zhuǎn)義符 轉(zhuǎn)義標(biāo)識(shí)符必須以空格結(jié)束轉(zhuǎn)義標(biāo)識(shí)符必須以空格結(jié)束語言專用標(biāo)記語言專用標(biāo)記( tokens)系統(tǒng)任務(wù)及函數(shù)系統(tǒng)任務(wù)及函數(shù) $v$符號(hào)指示這是系統(tǒng)任務(wù)和函數(shù)符號(hào)指示這是系統(tǒng)任務(wù)和函數(shù)v系統(tǒng)函數(shù)有很多,如:系統(tǒng)函數(shù)有很多,如:返回當(dāng)前仿真時(shí)間返回當(dāng)前仿真時(shí)間$time顯示顯示/監(jiān)視信號(hào)值監(jiān)視信號(hào)值($display, $monitor)停止仿真停止仿真$stop結(jié)束仿真結(jié)束仿真$finis

40、h $monitor($time, “a = %b, b = %h”, a, b); 當(dāng)信號(hào)當(dāng)信號(hào)a或或b的值發(fā)生變化時(shí),系統(tǒng)任務(wù)的值發(fā)生變化時(shí),系統(tǒng)任務(wù)$monitor顯示當(dāng)前仿真顯示當(dāng)前仿真時(shí)間,信號(hào)時(shí)間,信號(hào)a值值(二進(jìn)制格式二進(jìn)制格式), 信號(hào)信號(hào)b值(值(16進(jìn)制格式)。進(jìn)制格式)。語言專用標(biāo)記語言專用標(biāo)記( tokens)延時(shí)說明延時(shí)說明v“#”用于說明過程用于說明過程(procedural)語句和門的實(shí)例的延時(shí),但不能用語句和門的實(shí)例的延時(shí),但不能用于模塊的實(shí)例化。于模塊的實(shí)例化。module MUX2_ 1 (out, a, b, sel) ;output out ;input

41、 a, b, sel ;not #1 not1( sel_, sel);and #2 and1( a1, a, sel_);and #2 and2( b1, b, sel);or #1 or1( out, a1, b1);endmodulev門延時(shí)有很多類名字:門延時(shí)門延時(shí)有很多類名字:門延時(shí)(gate delay),傳輸延時(shí),傳輸延時(shí)(propagation delay),固有延時(shí),固有延時(shí)(intrinsic delay),對(duì)象內(nèi)在延,對(duì)象內(nèi)在延時(shí)時(shí)(intra-object delay)編譯引導(dǎo)編譯引導(dǎo)(Compiler Directives)v( )符號(hào)說明一個(gè)編譯指導(dǎo)。主鍵盤左上角小

42、寫鍵符號(hào)說明一個(gè)編譯指導(dǎo)。主鍵盤左上角小寫鍵 “ ”v這些編譯指導(dǎo)使仿真編譯器進(jìn)行一些特殊的操作這些編譯指導(dǎo)使仿真編譯器進(jìn)行一些特殊的操作v編譯指導(dǎo)一直保持有效直到被覆蓋或解除編譯指導(dǎo)一直保持有效直到被覆蓋或解除vresetall 復(fù)位所有的編譯指導(dǎo)為缺省值,應(yīng)該在其它編譯指復(fù)位所有的編譯指導(dǎo)為缺省值,應(yīng)該在其它編譯指導(dǎo)之前使用導(dǎo)之前使用v常用的編譯引導(dǎo)有:常用的編譯引導(dǎo)有:v definev includev timescalev uselibv resetall .文本替換文本替換(substitution) - define編譯指導(dǎo)編譯指導(dǎo)define提供了一種簡單的文本替換的功能提供了

43、一種簡單的文本替換的功能 define 在編譯時(shí)在編譯時(shí)替換替換。可提高描述的可讀性??商岣呙枋龅目勺x性。define not_delay #1define and_delay #2define or_delay #1module MUX2_1 (out, a, b, sel);output out;input a, b, sel;not not_delay not1( sel_, sel);and and_delay and1( a1, a, sel_);and and_delay and2( b1, b, sel);or or_delay or1( out, a1, b1);endmodu

44、le定義定義not_delay使用使用not_delay文本替換文本替換(substitution)v解除定義的宏,使用解除定義的宏,使用 undef macro_namev使用編譯指導(dǎo)使用編譯指導(dǎo)define,可以,可以提高描述的可讀性提高描述的可讀性定義全局設(shè)計(jì)參數(shù),如延時(shí)和矢量的位數(shù)。這些參數(shù)可以定定義全局設(shè)計(jì)參數(shù),如延時(shí)和矢量的位數(shù)。這些參數(shù)可以定義在同一位置。這樣,當(dāng)要修改設(shè)計(jì)配置時(shí),只需要在一個(gè)義在同一位置。這樣,當(dāng)要修改設(shè)計(jì)配置時(shí),只需要在一個(gè)地方修改。地方修改。定義定義Verilog命令的簡寫形式命令的簡寫形式 define vectors_ file /usr1/chrisz

45、/library/vectors define results_ file / usr1/chrisz/library/resultsv可以將可以將define放在一個(gè)文件中,與其它文件一起編譯放在一個(gè)文件中,與其它文件一起編譯。文本包含文本包含(inclusion) - includev編譯指導(dǎo)編譯指導(dǎo)include在當(dāng)前內(nèi)容中插入一個(gè)文件在當(dāng)前內(nèi)容中插入一個(gè)文件 格式:格式: include “”如如include global.vinclude parts/count. vinclude ././library/mux. v”vinclude可用于:可用于:include保存在文件中的全

46、局的或經(jīng)常用到的一些定義,如文本宏保存在文件中的全局的或經(jīng)常用到的一些定義,如文本宏在模塊內(nèi)部在模塊內(nèi)部include一些任務(wù)(一些任務(wù)(tasks),提高代碼的可維護(hù)性。,提高代碼的可維護(hù)性??梢允窍鄬?duì)路徑或絕對(duì)路徑Timescalevtimescale 說明時(shí)間單位及精度說明時(shí)間單位及精度格式:格式:timescale / 如:如:timescale 1 ns / 100 ps time_unit: 延時(shí)或時(shí)間的測量單位延時(shí)或時(shí)間的測量單位time_precision: 延時(shí)值超出精度要先舍入后使用延時(shí)值超出精度要先舍入后使用vtimescale必須在模塊之前出現(xiàn)必須在模塊之前出現(xiàn)time

47、scale 1 ns / 10 ps/ All time units are in multiples of 1 nanosecondmodule MUX2_1 (out, a, b, sel);output out;input a, b, sel;not #1 not1( sel_, sel);and #2 and1( a1, a, sel_);and #2 and2( b1, b, sel);or #1 or1( out, a1, b1);endmoduleTimescalevtime_precision不能大于不能大于time_unitvtime_precision和和time_unit

48、的表示方法:的表示方法:integer unit_stringinteger : 可以是可以是1, 10, 100unit_string: 可以是可以是s(second), ms(millisecond), us(microsecond), ns(nanosecond), ps(picosecond), fs(femtosecond)以上以上integer和和unit_string可任意組合可任意組合vprecision的時(shí)間單位應(yīng)盡量與設(shè)計(jì)的實(shí)際精度相同。的時(shí)間單位應(yīng)盡量與設(shè)計(jì)的實(shí)際精度相同。precision是仿真器的仿真時(shí)間步。是仿真器的仿真時(shí)間步。若若time_unit與與precis

49、ion_unit差別很大將嚴(yán)重影響仿真速度。差別很大將嚴(yán)重影響仿真速度。如說明一個(gè)如說明一個(gè)timescale 1s / 1ps,則仿真器在,則仿真器在1秒內(nèi)要掃描其秒內(nèi)要掃描其事件序列事件序列1012次;而次;而timescale 1s/1ms則只需掃描則只需掃描103次。次。v如果沒有如果沒有timescale說明將使用缺省值,一般是說明將使用缺省值,一般是ns。Timescalev所有所有timescale中的最小值決定仿真時(shí)的最小時(shí)間單位。中的最小值決定仿真時(shí)的最小時(shí)間單位。這是因?yàn)榉抡嫫鞅仨殞?duì)整個(gè)設(shè)計(jì)進(jìn)行精確仿真這是因?yàn)榉抡嫫鞅仨殞?duì)整個(gè)設(shè)計(jì)進(jìn)行精確仿真 在下面的例子中,仿真時(shí)間單位(

50、在下面的例子中,仿真時(shí)間單位(STU)為)為100fstimescale 1ns/ 10psmodule1 (. . .);not #1.23 (. . .) / 1.23ns or 12300 STUs. . .endmoduletimescale 100ns/ 1nsmodule2 (. . .);not #1.23 (. . .) / 123ns or 1230000 STUs. . .endmoduletimescale 1ps/ 100fsmodule3 (. . .);not #1.23 (. . .) / 1.23ps or 12 STUs (rounded off). . .e

51、ndmodule編譯引導(dǎo)語句編譯引導(dǎo)語句 uselib 編譯引導(dǎo)語句:編譯引導(dǎo)語句: 用于定義仿真器到哪里去找?guī)煸糜诙x仿真器到哪里去找?guī)煸?如果該引導(dǎo)語句啟動(dòng)的話,它就一直有效如果該引導(dǎo)語句啟動(dòng)的話,它就一直有效 直到遇到另外直到遇到另外一個(gè)一個(gè)uselib的定義或的定義或resetall語句語句 比其他配置庫搜索路徑的命令選項(xiàng)作用大比其他配置庫搜索路徑的命令選項(xiàng)作用大 如果仿真器在如果仿真器在uselib定義的地點(diǎn)找不到器件庫,它不會(huì)定義的地點(diǎn)找不到器件庫,它不會(huì)轉(zhuǎn)向由編譯命令行轉(zhuǎn)向由編譯命令行-v 和和-y選項(xiàng)指定的器件庫去找。選項(xiàng)指定的器件庫去找。編譯引導(dǎo)語句使用使用 useli

52、b 的語法:的語法: uselib 器件庫器件庫1的地點(diǎn)的地點(diǎn) 器件庫器件庫2的地點(diǎn)的地點(diǎn) 。上面的器件庫地點(diǎn)可用以下兩種方法表示:上面的器件庫地點(diǎn)可用以下兩種方法表示:1) file = 庫文件名的路徑庫文件名的路徑2) dir = 庫目錄名的路徑庫目錄名的路徑 libext = .文件擴(kuò)展文件擴(kuò)展例如:例如:uselib dir =/lib/FAST_lib/uselib dir =/lib/TTL_lib/ libext=.v file = /libs/TTL_U/udp.libVerilog HDL的數(shù)據(jù)類型和邏輯值0 0、低、偽、邏輯低、地、低、偽、邏輯低、地、VSS、負(fù)插入、負(fù)插入

53、01XZ0bufbufbufbufif11 1、高、真、邏輯高、電源、高、真、邏輯高、電源、VDD、正插入、正插入X X、不確定:邏輯沖突無法確定其邏輯值、不確定:邏輯沖突無法確定其邏輯值HiZHiZ、高阻抗、三態(tài)、無驅(qū)動(dòng)源、高阻抗、三態(tài)、無驅(qū)動(dòng)源 Verilog 的四種邏輯值的四種邏輯值主要的數(shù)據(jù)類型Verilog 有三種主要的數(shù)據(jù)類型:有三種主要的數(shù)據(jù)類型: Nets 表示器件之間的物理連接表示器件之間的物理連接, 稱為網(wǎng)絡(luò)連接類型稱為網(wǎng)絡(luò)連接類型Register 表示抽象的儲(chǔ)存單元,稱為寄存器表示抽象的儲(chǔ)存單元,稱為寄存器/變量類型變量類型Parameter 表示運(yùn)行時(shí)的常數(shù),稱為參數(shù)類

54、型表示運(yùn)行時(shí)的常數(shù),稱為參數(shù)類型 netsabslselbselanslout主要的數(shù)據(jù)類型Nets(網(wǎng)絡(luò)連線):網(wǎng)絡(luò)連線): net需要被持續(xù)的驅(qū)動(dòng),需要被持續(xù)的驅(qū)動(dòng),驅(qū)動(dòng)它的可以是門和模塊。驅(qū)動(dòng)它的可以是門和模塊。驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻傳遞到輸出的連線上。傳遞到輸出的連線上。例如:右圖上,例如:右圖上,selb的改的改變,會(huì)自動(dòng)地立刻影響或變,會(huì)自動(dòng)地立刻影響或門的輸出。門的輸出。連接(Nets) 類型變量的種類:在為不同工藝的基本元件建立庫模型的時(shí)候,常常需要用不同的在為不同工藝的基本元件建立庫模型的時(shí)候,常常需要用不同的連接類型來與之對(duì)應(yīng),使其行為與實(shí)際器件一致。

55、常見的有以下連接類型來與之對(duì)應(yīng),使其行為與實(shí)際器件一致。常見的有以下幾種。幾種。 類型類型 功能功能 wire, tri 對(duì)應(yīng)于標(biāo)準(zhǔn)的互連線(缺?。?duì)應(yīng)于標(biāo)準(zhǔn)的互連線(缺?。?supply1, supply2 對(duì)應(yīng)于電源線或接地線對(duì)應(yīng)于電源線或接地線 wor, trior 對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線或邏輯連接對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線或邏輯連接 wand, triand 對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線與邏輯連接對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線與邏輯連接 trireg 對(duì)應(yīng)于有電容存在能暫時(shí)存儲(chǔ)電平的連接對(duì)應(yīng)于有電容存在能暫時(shí)存儲(chǔ)電平的連接 tri1, tri0 對(duì)應(yīng)于需要上拉或下拉的連接對(duì)應(yīng)于需要上拉或下拉的連接如果不

56、明確地說明連接是何種類型,應(yīng)該是指如果不明確地說明連接是何種類型,應(yīng)該是指 wire 類型。類型。主要的數(shù)據(jù)類型abslselbselansloutreg_areg_selreg_b主要的數(shù)據(jù)類型寄存器(register)類型變量 register 型變量能保持其值,直到它被賦于新的值。型變量能保持其值,直到它被賦于新的值。register 型變量常用于行為建模,產(chǎn)生測試的激勵(lì)信號(hào)。型變量常用于行為建模,產(chǎn)生測試的激勵(lì)信號(hào)。常用行為語句結(jié)構(gòu)來給寄存器類型的變量賦值。常用行為語句結(jié)構(gòu)來給寄存器類型的變量賦值。主要的數(shù)據(jù)類型 寄存器(register)類型變量的數(shù)據(jù)類型 寄存器類型變量共有四種數(shù)據(jù)

57、類型:寄存器類型變量共有四種數(shù)據(jù)類型: 類型類型 功能功能 . reg 無符號(hào)整數(shù)變量,可以選擇不同的位寬。無符號(hào)整數(shù)變量,可以選擇不同的位寬。 integer 有符號(hào)整數(shù)變量,有符號(hào)整數(shù)變量,32位寬,算術(shù)運(yùn)算可產(chǎn)生位寬,算術(shù)運(yùn)算可產(chǎn)生2的的 補(bǔ)碼。補(bǔ)碼。 real 有符號(hào)的浮點(diǎn)數(shù),雙精度。有符號(hào)的浮點(diǎn)數(shù),雙精度。 time 無符號(hào)整數(shù)變量,無符號(hào)整數(shù)變量,64位寬(位寬(Verilog-XL仿真仿真 工具用工具用64位的正數(shù)來記錄仿真時(shí)刻)位的正數(shù)來記錄仿真時(shí)刻)Verilog中中net和和register聲明語法聲明語法vnet聲明 range delay , net_name;net_

58、type: net類型range: 矢量范圍,以MSB:LSB格式delay: 定義與net相關(guān)的延時(shí)net_name: net名稱,一次可定義多個(gè)net, 用逗號(hào)分開。v寄存器聲明 range , reg_name;reg_type:寄存器類型range: 矢量范圍,以MSB:LSB格式。只對(duì)reg類型有效reg_name :寄存器名稱,一次可定義多個(gè)寄存器,用逗號(hào)分開Verilog中中net和和register聲明語法聲明語法v舉例:reg a; /一個(gè)標(biāo)量寄存器wand w; / 一個(gè)標(biāo)量wand類型netreg 3: 0 v; / 從MSB到LSB的4位寄存器向量reg 7: 0 m,

59、 n; / 兩個(gè)8位寄存器tri 15: 0 busa; / 16位三態(tài)總線wire 0: 31 w1, w2; / 兩個(gè)32位wire,MSB為bit0舉例說明數(shù)據(jù)類型的選擇module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule 模塊DUT的邊界輸入口輸出口輸出/入口netnetnet/registernetnet/registernetinoutmodule DUT(Y, A, B_);output Y;input A,B: wire Y, A, B;

60、and (Y, A, B);endmodule主要的數(shù)據(jù)類型選擇正確的數(shù)據(jù)類型選擇正確的數(shù)據(jù)類型module top;wire y; reg a, b;DUT u1 (y, a, b) ;initial begina = 0; b = 0; #5 a = 1; endendmodulemodule DUT (Y, A, B);output Y;input A, B;wire Y, A, B;and (Y, A, B) ;endmodule輸入端口可以由輸入端口可以由net/register驅(qū)動(dòng),但驅(qū)動(dòng),但輸入端口只能是輸入端口只能是net輸出端口可以是輸出端口可以是net/register類型

溫馨提示

  • 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)論