集成電路EDA設(shè)計(jì)技術(shù):第三章 硬件描述語(yǔ)言verilog_hdl基礎(chǔ)_第1頁(yè)
集成電路EDA設(shè)計(jì)技術(shù):第三章 硬件描述語(yǔ)言verilog_hdl基礎(chǔ)_第2頁(yè)
集成電路EDA設(shè)計(jì)技術(shù):第三章 硬件描述語(yǔ)言verilog_hdl基礎(chǔ)_第3頁(yè)
集成電路EDA設(shè)計(jì)技術(shù):第三章 硬件描述語(yǔ)言verilog_hdl基礎(chǔ)_第4頁(yè)
集成電路EDA設(shè)計(jì)技術(shù):第三章 硬件描述語(yǔ)言verilog_hdl基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩260頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Verilog HDL 基礎(chǔ) 第一部分 初級(jí)篇 第一講 Verilog 的基本概念2022/7/202硬件描述語(yǔ)言HDL(Hardware Description Language)是硬件設(shè)計(jì)人員和電子設(shè)計(jì)自動(dòng)化(EDA)工具之間的接口,其主要目的是用來(lái)編寫設(shè)計(jì)硬件電路的程序,自動(dòng)綜合以生成符合要求且在電路結(jié)構(gòu),或建立電子系統(tǒng)行為級(jí)的仿真模型。強(qiáng)調(diào):這門課程中“硬件”指的是“芯片”,是微觀的電路(微電子)和PCB電路板宏觀電路不同。1.1 硬件描述語(yǔ)言HDL2022/7/2031.1 硬件描述語(yǔ)言HDL硬件描述語(yǔ)言利用計(jì)算機(jī)的巨大能力對(duì)用HDL建模的復(fù)雜數(shù)字邏輯進(jìn)行仿真,然后再自動(dòng)綜合以生成符

2、合要求且在電路結(jié)構(gòu)上可以實(shí)現(xiàn)的數(shù)字邏輯網(wǎng)表(Netlist),根據(jù)網(wǎng)表和某種工藝的器件自動(dòng)生成具體電路然后生成該工藝條件下這種具體電路的延時(shí)模型。仿真驗(yàn)證無(wú)誤后用于制造ASIC芯片或?qū)懭隒PLD和FPGA器件中。2022/7/204什么是硬件描述語(yǔ)言(HDL)具有特殊結(jié)構(gòu)能夠?qū)τ布壿嬰娐返墓δ苓M(jìn)行描述的一種高級(jí)編程語(yǔ)言,可以設(shè)計(jì)硬件電路(芯片)或仿真硬件電路行為HDL主要功能:描述電路的連接描述電路的功能在不同抽象級(jí)上描述電路描述電路的時(shí)序表達(dá)具有并行性仿真硬件電路HDL主要有兩種:Verilog和VHDLVerilog起源于C語(yǔ)言,因此非常類似于C語(yǔ)言,容易掌握VHDL格式嚴(yán)謹(jǐn)VHDL出現(xiàn)

3、較晚,但標(biāo)準(zhǔn)化早。IEEE 1706-1985標(biāo)準(zhǔn)。2022/7/205為什么要使用硬件描述語(yǔ)言電路的邏輯功能容易理解;便于計(jì)算機(jī)對(duì)邏輯進(jìn)行分析處理;把邏輯設(shè)計(jì)與具體電路的實(shí)現(xiàn)分成兩個(gè)獨(dú)立的階段來(lái)操作;邏輯設(shè)計(jì)與實(shí)現(xiàn)的工藝無(wú)關(guān);邏輯設(shè)計(jì)的資源積累可以重復(fù)利用;可以由多人共同更好更快地設(shè)計(jì)非常復(fù)雜的邏輯電路(幾十萬(wàn)門以上的邏輯系統(tǒng))。2022/7/2061.2 Verilog HDL 的歷史1.2.1 什么是Verilog HDL Verilog HDL是硬件描述語(yǔ)言的一種,用于數(shù)字電子系統(tǒng)設(shè)計(jì)(芯片設(shè)計(jì))。設(shè)計(jì)者可用它進(jìn)行各種級(jí)別的邏輯設(shè)計(jì),可用它進(jìn)行數(shù)字邏輯系統(tǒng)的仿真驗(yàn)證、時(shí)序分析、邏輯綜合

4、。它是目前應(yīng)用最廣泛的一種硬件描述語(yǔ)言。 2022/7/2071.2 Verilog HDL 的歷史1.2.2 Verilog HDL的產(chǎn)生及發(fā)展Verilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所創(chuàng)。Phi Moorby后來(lái)成為Verilog-XL的主要設(shè)計(jì)者和Cadence公司的第一個(gè)合伙人。在19841985年間,Moorby設(shè)計(jì)出了第一個(gè)Verilog-XL的仿真器。1986年,Moorby提出了用于快速門級(jí)仿真的XL算法。1990年,Cadence公司收購(gòu)了GDA公司1991年,Cadence公司公開發(fā)表Ve

5、rilog語(yǔ)言,成立了OVI(Open Verilog International)組織來(lái)負(fù)責(zé)Verilog HDL語(yǔ)言的發(fā)展。1995年制定了Verilog HDL的IEEE標(biāo)準(zhǔn),即IEEE1364。2022/7/2081.2 Verilog HDL 的歷史2022/7/209VHDL - 比VerilogHDL早幾年成為I EEE標(biāo)準(zhǔn); - 語(yǔ)法/結(jié)構(gòu)比較嚴(yán)格,因而編寫出的 模塊風(fēng)格比較清晰; - 比較適合由較多的設(shè)計(jì)人員合作完成 的特大型項(xiàng)目(一百萬(wàn)門以上)。1.3 Verilog HDL 和 VHDL的比較2022/7/2010Verilog HDL - 較多的第三方工具的支持 - 語(yǔ)

6、法結(jié)構(gòu)比VHDL簡(jiǎn)單 - 學(xué)習(xí)起來(lái)比VHDL容易 - 仿真工具比較好使 - 測(cè)試激勵(lì)模塊容易編寫1.3 Verilog HDL 和 VHDL的比較2022/7/20111.3 Verilog HDL 和 VHDL的比較2022/7/20121.4 Verilog 目前的應(yīng)用情況和適用的設(shè)計(jì)Verilog的主要應(yīng)用包括:ASIC和FPGA工程師編寫可綜合的RTL代碼高抽象級(jí)系統(tǒng)仿真進(jìn)行系統(tǒng)結(jié)構(gòu)開發(fā)測(cè)試工程師用于編寫各種層次的測(cè)試程序用于ASIC和FPGA單元或更高層次的模塊的模型開發(fā)其實(shí)很多時(shí)候FPGA只是電路系統(tǒng)中的一部分,也就是說(shuō)我們學(xué)習(xí)verilog不一定只是做芯片設(shè)計(jì)。2022/7/20

7、131.4 Verilog 目前的應(yīng)用情況和適用的設(shè)計(jì) Verilog 較為適合系統(tǒng)級(jí)(System)、算法級(jí)(Alogrithem)、寄存器傳輸級(jí)(RTL)、邏輯(Logic)、門級(jí)(Gate)和電路開關(guān)級(jí)(Switch)的設(shè)計(jì),而對(duì)于特大型(千萬(wàn)門級(jí)以上)的系統(tǒng)級(jí)(System)設(shè)計(jì),則VHDL更為合適。在數(shù)字電路設(shè)計(jì)中,寄存器傳輸級(jí)(英語(yǔ):register-transfer level, RTL)是一種對(duì)同步數(shù)字電路的抽象模型,這種模型是根據(jù)數(shù)字信號(hào)在硬件寄存器之間的流動(dòng),以及其邏輯代數(shù)運(yùn)作方式來(lái)確定的。一個(gè)同步電路由兩個(gè)主要元素構(gòu)成:寄存器和組合邏輯電路。寄存器通常由D觸發(fā)器組成,按照

8、給定時(shí)間脈沖來(lái)進(jìn)行同步時(shí)序操作,這個(gè)部分使得時(shí)序邏輯電路具有記憶的功能。組合邏輯電路則由邏輯門組成,提供電路的所有邏輯功能。2022/7/20151.5 采用 Verilog HDL 設(shè)計(jì)復(fù)雜數(shù)字電路的優(yōu)點(diǎn)1.5.1 傳統(tǒng)設(shè)計(jì)方法電路原理圖輸入法 采用電路原理圖輸入法進(jìn)行設(shè)計(jì),周期長(zhǎng)、需要專門的設(shè)計(jì)工具、需手工布線等。這種低水平的設(shè)計(jì)方法大大延長(zhǎng)了設(shè)計(jì)周期。2022/7/2016 采用Verilog輸入法,可以很容易地把完成的設(shè)計(jì)移植到不同廠家的不同芯片中去,并在不同規(guī)模應(yīng)用時(shí)可以較容易地作修改。 采用Verilog輸入法最大的優(yōu)點(diǎn)是其與工藝無(wú)關(guān)性。實(shí)際上這是利用了計(jì)算機(jī)的巨大能力并在EDA工

9、具幫助下,把邏輯驗(yàn)證與具體工藝庫(kù)匹配、布線即時(shí)延計(jì)算分成不同的階段來(lái)實(shí)現(xiàn),從而減輕了人們的繁瑣勞動(dòng)。1.5.2 Verilog HDL 設(shè)計(jì)法與傳統(tǒng)的電路原理圖輸入法的比較2022/7/20171.5 采用 Verilog HDL 設(shè)計(jì)復(fù)雜數(shù)字電路的優(yōu)點(diǎn)1.5.3 Verilog 的標(biāo)準(zhǔn)化與軟核的重用 Verilog 是在1983年由GDA公司首先開發(fā)成功的,經(jīng)過(guò)諸多改進(jìn),于1995年11月正式被批準(zhǔn)為Verilog IEEE13631995標(biāo)準(zhǔn),又于2001年3月在原標(biāo)準(zhǔn)的基礎(chǔ)上經(jīng)過(guò)改進(jìn)和補(bǔ)充推出Verilog IEEE13642001新標(biāo)準(zhǔn)。 由于Verilog HDL設(shè)計(jì)方法與工藝無(wú)關(guān)性

10、,因而大大提高了Verilog 模型的可重用性。我們把功能經(jīng)過(guò)驗(yàn)證的、可綜合的、實(shí)現(xiàn)后電路結(jié)構(gòu)總門數(shù)在5000門以上的Verilog HDL模型稱之為“軟核”(Softcore),而把由軟核構(gòu)成的器件成為虛擬器件。利用軟核和虛擬器件的可重復(fù)利用的特性就可大大縮短設(shè)計(jì)周期,加快了復(fù)雜電路的設(shè)計(jì)。2022/7/20181.6.3 具體模塊的設(shè)計(jì)編譯和仿真的過(guò)程1.6 Verilog HDL 的設(shè)計(jì)流程簡(jiǎn)介 從左圖可以看出,模塊設(shè)計(jì)流程主要由兩大主要功能部分組成:1)設(shè)計(jì)開發(fā):即從編寫設(shè)計(jì)文件綜合到布局布線投片生成這樣一系列步驟。2)設(shè)計(jì)驗(yàn)證:也就是進(jìn)行各種仿真的一系列步驟,如果在仿真過(guò)程中發(fā)現(xiàn)問(wèn)題

11、就返回設(shè)計(jì)輸入進(jìn)行修改。2022/7/20191.6 Verilog HDL 的設(shè)計(jì)流程簡(jiǎn)介 1.6.4 對(duì)應(yīng)具體工藝器件的優(yōu)化、映象和布局布線 由于各種ASIC和FPFA器件的工藝各不相同,因而當(dāng)用不同廠家的不同器件來(lái)實(shí)現(xiàn)已驗(yàn)證的邏輯網(wǎng)表(EDIF文件)時(shí),就需要不同的基本單元庫(kù)與布線延遲模型與之對(duì)應(yīng)才能進(jìn)行準(zhǔn)確的優(yōu)化、映象、和布局布線。基本單元庫(kù)與布線延遲模型由熟悉本廠工藝的工程師提供,再由EDA廠商的工程師編入相應(yīng)的處理程序,而邏輯電路設(shè)計(jì)師只需用一文件說(shuō)明所用的工藝器件和約束條件,EDA工具就會(huì)自動(dòng)地根據(jù)這一文件選擇相應(yīng)的庫(kù)和模型進(jìn)行準(zhǔn)確的處理從而大大提高設(shè)計(jì)效率。2022/7/202

12、01.7 小結(jié)掌握HDL設(shè)計(jì)方法應(yīng)從學(xué)習(xí)Verilog HDL設(shè)計(jì)方法開始。由于Top-Down的設(shè)計(jì)方法是首先從系統(tǒng)設(shè)計(jì)入手的,因而從頂層進(jìn)行功能劃分和結(jié)構(gòu)設(shè)計(jì)。系統(tǒng)的總體仿真是頂層進(jìn)行功能化分的重要環(huán)節(jié),這時(shí)的設(shè)計(jì)與工藝無(wú)關(guān)。從底向上的設(shè)計(jì)在某種意義上講是Top-Down設(shè)計(jì)的逆過(guò)程。第二講 初識(shí)Verilog 程序Verilog程序是用多個(gè)模塊module組成的,有點(diǎn)類似C語(yǔ)言程序是由多個(gè)函數(shù)組成的。C語(yǔ)言程序基本結(jié)構(gòu):2022/7/20242.1 Verilog 程序舉例 下面先介紹幾個(gè)簡(jiǎn)單的Verilog HDL 程序,從中了解Verilog程序的特性 【例 2.1】 module

13、muxtwo (out, a, b, sl); input a,b,sl; output out; reg out; always (sl or a or b) if (! sl) out = a; else out = b; endmoduleabslout2022/7/20252.1 Verilog 程序舉例MUX(多路選擇器)的行為可以描述為:只要信號(hào)a或b或sl發(fā)生變化,如果sl為0則選擇a輸出;否則選擇b輸出。這個(gè)行為的描述并沒有說(shuō)明如果輸入 a 或 b是三態(tài)的(高阻時(shí))輸出應(yīng)該是什么,但有具體結(jié)構(gòu)的真實(shí)電路是有一定的輸出的。沒有考慮延時(shí)問(wèn)題2022/7/20262.1 Verilo

14、g 程序舉例【例2.2】module twomux (out, a, b, sl); input a, b, sl; output out; not u1 (nsl, sl ); and #1 u2 (sela, a, nsel); and #1 u3 (selb, b, sl); or #2 u4 (out, sela, selb);endmoduleabslselbselansel MUX的結(jié)構(gòu)級(jí)描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時(shí)。Verilog程序是用多個(gè)模塊module組成的,not 、and、or都可以看做一個(gè)module。2022/7/20272.1 V

15、erilog 程序舉例【例 2.3】 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聲明語(yǔ)句之間的2022/7/20282.1 Verilog 程序舉例【例 2.4】 module compare ( equal,a,b ); output equal; /聲明輸出信號(hào)e

16、qual input 1:0 a,b; /聲明輸入信號(hào)a,b assign equal=(a=b)?1:0; /*如果兩個(gè)輸入信號(hào)相等則輸出為1。否則輸出為0*/ endmodule 這個(gè)程序描述了一個(gè)比較器.在這個(gè)程中,/*.*/和/.表示注釋部分,注釋只是為了方便程序員理解程序,對(duì)編譯是不起作用的。2022/7/2029【例2.5】module trist2(out,in,enable); output out; input in ,enable; bufil1 mybuf(out,in,enable);endmodule2.1 Verilog 程序舉例程序通過(guò)調(diào)用一個(gè)在Verilog語(yǔ)言

17、提供的原語(yǔ)庫(kù)中現(xiàn)存的三態(tài)驅(qū)動(dòng)器元件bufil1來(lái)實(shí)現(xiàn)其邏輯功能。這個(gè)調(diào)用過(guò)程也稱為庫(kù)元件bufif1的實(shí)例化,在本模塊中它被具體化為mybuf.30【例2.6】module trist1(sout,sin,ena); output sout; input sin,ena; mytri tri_inst(.out(sout),.in(sin),.enable(ena);/調(diào)用由mytri模塊定義的實(shí)例元件tri_inst,即把已定義的模塊myfri在本模塊中具體化為tri_instendmodulemodule mytri(out,in,enable); output out; input in

18、,enable; assign out=enable?in:bz;endmodule2.1 Verilog 模塊的基本概念312.2 小結(jié)通過(guò)上面的例子可以看到:(1)Verilog HDL程序是由模塊構(gòu)成的。每個(gè)模塊的內(nèi)容都是位于module和endmodule兩個(gè)語(yǔ)句之間。每個(gè)模塊實(shí)現(xiàn)特定的功能。(2)模塊是可以進(jìn)行層次嵌套的。(3)每個(gè)模塊要進(jìn)行端口定義,并說(shuō)明輸入輸出口,然后對(duì)模塊的功能進(jìn)行描述。(4)Verilog HDL程序的書寫格式自由,一行可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分寫多行。(5)除了endmodule語(yǔ)句外,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有分號(hào)。(6)可以用/*.*/和/.

19、對(duì)Verilog HDL程序的任何部分作注釋。一個(gè)好的,有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。第三講 Verilog 語(yǔ)言Verilog語(yǔ)言學(xué)習(xí)學(xué)會(huì)并記住10%20%語(yǔ)法,完成80%90%的程序設(shè)計(jì)(千萬(wàn)不要反過(guò)來(lái)?。┒嗫淳W(wǎng)絡(luò)上的例程,尤其是有講解的,如真oo無(wú)雙博客。邊進(jìn)行程序設(shè)計(jì),邊學(xué)習(xí)語(yǔ)法優(yōu)酷深入淺出玩轉(zhuǎn)FPGA淘寶上開發(fā)板二百多一塊,并且有書。3.1 Verilog模塊3.2 數(shù)據(jù)類型 賦值語(yǔ)句、塊語(yǔ)句條件語(yǔ)句、循環(huán)語(yǔ)句結(jié)構(gòu)說(shuō)明語(yǔ)句:initial、always、任務(wù)和函數(shù)系統(tǒng)任務(wù)和函數(shù)語(yǔ)句Verilog語(yǔ)言上述內(nèi)容就是verilog語(yǔ)言的基本內(nèi)容,其實(shí)

20、每一種語(yǔ)言基本都是這些內(nèi)容,只是有些細(xì)微差別,有點(diǎn)類似我們學(xué)習(xí)的語(yǔ)文,先學(xué)字母,拼音,字,詞,句,章。C語(yǔ)言,是不是基本也是上述內(nèi)容?3.3 運(yùn)算符3.4 語(yǔ)句3.5 編譯預(yù)處理 生成語(yǔ)句(元件例化語(yǔ)句)3.1 模塊的結(jié)構(gòu) Verilog的基本設(shè)計(jì)單元是“模塊”(module ) 。一個(gè)模塊是由兩部分組成的,一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。 module block1(a, b, c, d); input a, b; output c, d; assign c = a | b; assign d = a & b; endmoduleabcd Verilog 模

21、塊的結(jié)構(gòu)由在module和endmodule 關(guān)鍵詞之間的四個(gè)主要部分組成: - 端口定義: module block1(a, b, c, d ); - I/O說(shuō)明 : input a, b, c ; output d ; - 內(nèi)部信號(hào)聲明: wire x; - 功能定義: assign d = a | x ; assign x = ( b & c ); endmodule 3.1 模塊的結(jié)構(gòu)3.1 模塊的結(jié)構(gòu)3.1.1 模塊的端口定義 模塊的端口聲明了模塊的輸入輸出口。其格式如下: module 模塊名(口1,口2,口3,口4, );3.1.2 模塊內(nèi)容 模塊的內(nèi)容包括I/O說(shuō)明、內(nèi)部信號(hào)聲

22、明、功能定義。I/O說(shuō)明的格式 輸入口: input信號(hào)位寬1:0 端口名1; input信號(hào)位寬1:0 端口名2; input信號(hào)位寬1:0 端口名i; /(共有i個(gè)輸入口)3.1 模塊的結(jié)構(gòu)輸出口 output信號(hào)位寬1:0 端口名1; output信號(hào)位寬1:0 端口名2; output信號(hào)位寬1:0 端口名j; /(共有j個(gè)輸出口)輸入/輸出口: inout信號(hào)位寬1:0 端口名1; inout信號(hào)位寬1:0 端口名2; inout信號(hào)位寬1:0 端口名k; /(共有k個(gè)雙向總線端口) I/O說(shuō)明也可以寫在端口聲明語(yǔ)句里。其格式如下: module module_name(input

23、port1,input port2, output port1,output port2 );3.1 模塊的結(jié)構(gòu)內(nèi)部信號(hào)說(shuō)明 在模塊內(nèi)用到的和與端口有關(guān)的wire 和 reg 變量的聲明。 如: reg width-1 : 0 R變量1,R變量2 ; wire width-1 : 0 W變量1,W變量2 ; 3.1 模塊的結(jié)構(gòu)功能定義 模塊中最重要的部分是邏輯功能定義部分。有三種方法可在模塊中產(chǎn)生邏輯。 - 用 assign 語(yǔ)句(數(shù)據(jù)流描述): assign a = b & c ; - 用實(shí)例元件(結(jié)構(gòu)化描述): and2 and_inst ( q, a, b); - 用 “always”

24、塊(行為描述): always (posedge clk or posedge clr) begin if (clr) q= 0; else if (en) q= d; end3.1 模塊的結(jié)構(gòu)3.1.3 理解要點(diǎn)如在模塊中邏輯功能由下面三個(gè)語(yǔ)句塊組成 : assign cs = ( a0 & a1 & a2 ) ; / -1 and2 and_inst ( qout, a, b); / -2 always (posedge clk or posedge clr) /-3 begin if (clr) q= 0; else if (en) q= d; end三條語(yǔ)句是并行的,它們產(chǎn)生獨(dú)立的邏輯

25、電路;而在 always 塊中: begin 與 end 之間是順序執(zhí)行的。3.2 數(shù)據(jù)類型及其常量及變量3.2.1.常量 在程序運(yùn)行過(guò)程中,其值不能被改變的量稱為常量。一數(shù)字整數(shù)。在Verilog HDL中,整型常量即整常數(shù)有以下四種進(jìn)制表示形式:1) 二進(jìn)制整數(shù)(b或B)2) 十進(jìn)制整數(shù)(d或D)3) 十六進(jìn)制整數(shù)(h或H)4) 八進(jìn)制整數(shù)(o或O) 數(shù)字表達(dá)方式有以下三種:1) 這是一種全面的描述方式。2) 在這種描述方式中,數(shù)字的位寬采用缺省位寬(這由具體的機(jī)器系統(tǒng)決定,但至少32位)。3) 在這種描述方式中,采用缺省進(jìn)制十進(jìn)制。數(shù)值1. Verilog HDL中的數(shù)值可取下面的四類值

26、:0邏輯零、邏輯非、低電平1邏輯1、邏輯真、高電平x或X不確定的邏輯狀態(tài)z或Z高阻態(tài)Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù) 下劃線符號(hào)“_”除了不能放于數(shù)值的首位以外,可以隨意用在整型數(shù)與實(shí)型數(shù)中,他們對(duì)數(shù)值的大小沒有任何改變,只是為了提高可讀性。 1)整型數(shù)及其表示 Verilog HDL的整數(shù)可以使二進(jìn)制(b或B)、十進(jìn)制(d或D)、十六進(jìn)制(h或H)與八進(jìn)制(o或O),有下面三種書寫形式(1)簡(jiǎn)單的十進(jìn)制格式;(2)缺省位寬的基數(shù)格式;(3)指定位寬的基數(shù)格式。Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)()簡(jiǎn)單的十進(jìn)制格式:用的數(shù)字串組成的十進(jìn)制數(shù),可以用符號(hào)

27、“”或“”來(lái)表示數(shù)的正負(fù)()缺省位寬的基數(shù)格式; 表示形式為:符號(hào)“”為基數(shù)格式表示的固有字符,該字符不能省略,否則為非法表示形式;參數(shù)用于說(shuō)明數(shù)值采用的進(jìn)制格式;參數(shù)為相應(yīng)進(jìn)制格式下的一串?dāng)?shù)字這種格式未指定位寬,其缺省值至少為位()指定位寬的基數(shù)格式: 表示形式為:sizebase_formatnumber參數(shù)size用來(lái)指定所表示數(shù)字的位寬當(dāng)位寬小于數(shù)值的實(shí)際大小時(shí),相應(yīng)的高位部分被忽略;當(dāng)位寬大于數(shù)值的實(shí)際位數(shù),且數(shù)值的最高位是或時(shí),相應(yīng)的高位部分補(bǔ);而當(dāng)位寬大于數(shù)值的實(shí)際位數(shù),但數(shù)值的最高位是x或z時(shí),相應(yīng)的高位部分補(bǔ)或數(shù)制基數(shù)符號(hào)合法的表示值二進(jìn)制b or B0,1,x,X,z,Z,

28、?,_八進(jìn)制o or O07,x,X,z,Z,?,_十進(jìn)制d or D09,_十六進(jìn)制h or H09,af,AF,x,X,z,Z,?,_Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)基數(shù)符號(hào)及其合法的表示值數(shù)值表示位寬數(shù)制等效二進(jìn)制值及其解書釋10缺省十進(jìn)制00_1010(32位或以上)4ac缺省十進(jìn)制非法,十進(jìn)制表示不允許出現(xiàn)ac字樣h4ac缺省十六進(jìn)制0_0100_1010_1100(32位或以上)9o6719位八進(jìn)制0110_0111_00019o-6719位八進(jìn)制非法,符號(hào)位只能出現(xiàn)在表示的最左端6hf36位十六進(jìn)制11_0011,高位部分被舍去6hf6位十六進(jìn)制00_111

29、1,高位部分由0補(bǔ)足3b10 x3位二進(jìn)制10 x12h2x612位十六進(jìn)制0010_xxxx_10106hx6位十六進(jìn)制xx_xxxx,高位部分由x補(bǔ)足Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)例;三種格式的整數(shù)表示法15(十進(jìn)制15)簡(jiǎn)單的十進(jìn)制h15(十進(jìn)制21,十六進(jìn)制15)缺省位寬的十六進(jìn)制5b10011(十進(jìn)制19,二進(jìn)制10011)位的二進(jìn)制12h01F(十進(jìn)制31,十六進(jìn)制01F)位的十六進(jìn)制Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)Verilog HDL中的實(shí)數(shù)可以用十進(jìn)制與科學(xué)計(jì)數(shù)法兩種格式來(lái)表示,如果采用十進(jìn)制格式,小數(shù)點(diǎn)兩邊必須都有數(shù)字,否則為非

30、法的表示形式實(shí)數(shù)表示法的實(shí)例1.8 /十進(jìn)制計(jì)數(shù)法3.8e10 /科學(xué)計(jì)數(shù)法2.1E-9 /科學(xué)計(jì)數(shù)法可用e或E表示,其結(jié)果相同3_2387.3398_3047 /使用下劃線提高可讀性3. /非法表示,小數(shù)點(diǎn)兩遍都必須有數(shù).2e6 /非法表示,小數(shù)點(diǎn)兩遍都必須有數(shù).12 /非法表示,小數(shù)點(diǎn)兩遍都必須有數(shù)實(shí)型數(shù)及其表示Verilog HDL中有兩類數(shù)值常量 整型數(shù)和實(shí)型數(shù)3.2 數(shù)據(jù)類型及其常量及變量x和z值。在數(shù)字電路中,x代表不定值,z代表高阻值。一個(gè)x可以用來(lái)定義十六進(jìn)制數(shù)的4位二進(jìn)制數(shù)的狀態(tài),八進(jìn)制數(shù)的3位,二進(jìn)制數(shù)的1位。z的表示方式同x類似。z還有一種表達(dá)方式是可以寫作“?”。3.2

31、 數(shù)據(jù)類型及其常量及變量 負(fù)數(shù)。一個(gè)數(shù)字可以被定義為負(fù)數(shù),只需在位寬表達(dá)式前加一個(gè)減號(hào),減號(hào)必須寫在數(shù)字定義表達(dá)式的最前面。注意減號(hào)不可以放在位寬和進(jìn)制之間也不可以放在進(jìn)制和具體的數(shù)之間。 -8d5 /這個(gè)表達(dá)式代表5的補(bǔ)數(shù)(用八位二進(jìn)制數(shù)表示) 8d-5 /非法格式下畫線(underscore_)。下劃線可以用來(lái)分隔開數(shù)的表達(dá)以提高程序可讀性。但不可以用在位寬和進(jìn)制處,只能用在具體的數(shù)字之間。 16b1010_1011_1111_1010 /合法格式 8b_0011_1010 /非法格式 當(dāng)常量不說(shuō)明位數(shù)時(shí),默認(rèn)值是32位,每個(gè)字母用8位的ASCII值表示。3.2 數(shù)據(jù)類型及其常量及變量二參

32、數(shù)(parameter)型用參數(shù)聲明一個(gè)可變常量,常用于定義延時(shí)及寬度變量。參數(shù)定義的語(yǔ)法:parameter ;可一次定義多個(gè)參數(shù),用逗號(hào)隔開。在使用文字(literal)的地方都可以使用參數(shù)。參數(shù)的定義是局部的,只在當(dāng)前模塊中有效。參數(shù)定義可使用以前定義的整數(shù)和實(shí)數(shù)參數(shù)。module mod1( out, in1, in2); . . .parameter cycle = 20, prop_ del = 3, setup = cycle/2 - prop_del, p1 = 8, x_ word = 16bx, file = / usr1/ jdough/ design/ mem_ fil

33、e. dat; . . . wire p1: 0 w1; / A wire declaration using parameter . . .endmodule注意:參數(shù)file不是string,而是一個(gè)整數(shù),其值是所有字母的擴(kuò)展ASCII值。若file=“AB”,則file值為8h4142。用法:$fopen(file);$display(“%s”, file);3.2 數(shù)據(jù)類型及其常量及變量3.2.2 變量 變量即在程序運(yùn)行過(guò)程中其值可以改變的量。常用的網(wǎng)絡(luò)數(shù)據(jù)類型包括wire型和tri型。wire型變量通常是用來(lái)表示單個(gè)門驅(qū)動(dòng)或連續(xù)賦值語(yǔ)句驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù),tri型變量則用來(lái)表示多驅(qū)動(dòng)器

34、驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù)。 表 1.3.1 Wire/tri 變量的真值3.2 數(shù)據(jù)類型及其常量及變量一 wire型 wire型數(shù)據(jù)常用來(lái)表示用于以assign關(guān)鍵字指定的組合邏輯信號(hào)。Verilog程序模塊中輸入輸出信號(hào)類型缺省時(shí)自動(dòng)定義為wire型。其格式如下: wire n-1:0 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名i; /共有i條總線,每條總線內(nèi)有n條線路,或 wire n:1 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名i;3.2 數(shù)據(jù)類型及其常量及變量二 reg型 寄存器是數(shù)據(jù)儲(chǔ)存單元的抽象。寄存器數(shù)據(jù)類型的關(guān)鍵字是 reg。 reg類型數(shù)據(jù)的默認(rèn)初始值為不定值x。 reg型數(shù)據(jù)常用來(lái)表示用于“always”模塊內(nèi)

35、的指定信號(hào),常代表觸發(fā)器。在“always”塊內(nèi)被賦值的每一個(gè)信號(hào)都必須定義成reg型。 reg型數(shù)據(jù)的格式如下: reg n-1:0 數(shù)據(jù)名1,數(shù)據(jù)名2, 數(shù)據(jù)名i;或 reg n:1 數(shù)據(jù)名1,數(shù)據(jù)名2, 數(shù)據(jù)名i;module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule module DUT(Y, A, B_);output Y;input A,B: wire Y, A, B; and (Y, A, B);endmodule模塊DUT的邊界輸入口輸出口輸

36、出/入口netnetnet/registernetnet/registernetinout舉例說(shuō)明數(shù)據(jù)類型的選擇輸入口(input)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。輸出口 (output)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),但它本身只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。輸入/輸出口(inout)只可以由網(wǎng)絡(luò)連接驅(qū)動(dòng),它本身也只能驅(qū)動(dòng)網(wǎng)絡(luò)連接。如果信號(hào)變量是在過(guò)程塊 (initial塊 或 always塊)中被賦值的,必須把它聲明為寄存器類型變量 如何選擇正確的數(shù)據(jù)類型?如何選擇正確的數(shù)據(jù)類型module top;wire y; reg a, b;DUT u1 (y, a, b) ;initial b

37、egina = 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),但輸入端口只能是net輸出端口可以是net/register類型,輸出端口只能驅(qū)動(dòng)net在過(guò)程塊中只能給register類型賦值若Y,A,B說(shuō)明為reg則會(huì)產(chǎn)生錯(cuò)誤。in1in2OABY雙向端口輸入/輸出只能是net類型選擇數(shù)據(jù)類型時(shí)常犯的錯(cuò)誤舉例修改前:module example(o1, o2, a, b, c,

38、d); input a, b, c, d; output o1, o2; reg c, d; reg o2 and u1(o2, c, d); always (a or b) if (a) o1 = b; else o1 = 0;endmodule修改后:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2;/ reg c, d;/ reg o2 reg o1; and u1(o2, c, d); always (a or b) if (a) o1 = b; else o1 = 0;endmoduleexampl

39、e.v選擇數(shù)據(jù)類型時(shí)常犯的錯(cuò)誤舉例Compiling source file example.vError! Illegal left-hand-side assignment Verilog-ILHSA example.v, 11: o1 = b;Error! Illegal left-hand-side assignment Verilog-ILHSA example.v, 12: o1 = 0;2 errors第一次編譯信息verilog c example.v第二次編譯信息Compiling source file example.vError! Incompatible declar

40、ation, (c) defined as input at line 2 Verilog-IDDIL example.v, 5: Error! Incompatible declaration, (d) defined as input at line 2 Verilog-IDDIL example.v, 5: Error! Gate (u1) has illegal output specification Verilog-GHIOS example.v, 8: 3 errors3.2 數(shù)據(jù)類型及其常量及變量三 memory型 Verilog HDL通過(guò)對(duì)reg型變量建立數(shù)組來(lái)對(duì)存儲(chǔ)器建模

41、,可以描述RAM型存儲(chǔ)器,ROM存儲(chǔ)器和reg文件。數(shù)組中的每一個(gè)單元通過(guò)一個(gè)數(shù)組索引進(jìn)行尋址。在Verilog語(yǔ)言中沒有多維數(shù)組存在。 memory型數(shù)據(jù)是通過(guò)擴(kuò)展reg型數(shù)據(jù)的地址范圍來(lái)生成的。其格式如下: reg n-1:0 存儲(chǔ)器名m-1:0;或 reg n-1:0 存儲(chǔ)器名m:1;3.3 運(yùn)算符及表達(dá)式 Verilog HDL語(yǔ)言的運(yùn)算符范圍很廣,其運(yùn)算符按其功能可分為以下幾類:運(yùn)算符分類所含運(yùn)算符算術(shù)運(yùn)算符+,-,*,/,%邏輯運(yùn)算符!,&,|關(guān)系運(yùn)算符,=相等運(yùn)算符=,!=,=,!=位運(yùn)算符,&,|,or歸約運(yùn)算符&,&,|,|,or移位運(yùn)算符條件運(yùn)算符?:連接運(yùn)算符3.3 運(yùn)算

42、符及表達(dá)式 在Verilog HDL語(yǔ)言中運(yùn)算符所帶的操作數(shù)是不同的,按其所帶操作數(shù)的個(gè)數(shù)運(yùn)算符可分為三種:1) 單目運(yùn)算符(unary operator):可以帶一個(gè)操作數(shù),操作數(shù)放在運(yùn)算符的右邊。2) 二目運(yùn)算符(binary operator):可以帶二個(gè)操作數(shù),操作數(shù)放在運(yùn)算符的兩邊。3) 三目運(yùn)算符(ternary operator):可以帶三個(gè)操作,這三個(gè)操作數(shù)用三目運(yùn)算符分隔開。 見下例: clock = clock; / 是一個(gè)單目取反運(yùn)算符, clock是操作數(shù)。 c = a | b; / 是一個(gè)二目按位或運(yùn)算符, a 和 b是操作數(shù)。 r = s ? t : u; / ?:

43、 是一個(gè)三目條件運(yùn)算符, s,t,u是操作數(shù)。3.3 運(yùn)算符及表達(dá)式3.3.1.基本的算術(shù)運(yùn)算符 + 加 - 減 * 乘 / 除 % 模 將負(fù)數(shù)賦值給reg或其它無(wú)符號(hào)變量使用2的補(bǔ)碼算術(shù)。 如果操作數(shù)的某一位是x或z,則結(jié)果為x 在整數(shù)除法中,余數(shù)舍棄 模運(yùn)算中使用第一個(gè)操作數(shù)的符號(hào)module arithops (); parameter five = 5; integer ans, int; reg 3: 0 rega, regb; reg 3: 0 num; initial begin rega = 3; regb = 4b1010; int = -3; /int = 11111111

44、_1101 end initial fork #10 ans = five * int; / ans = -15 #20 ans = (int + 5)/ 2; / ans = 1 #30 ans = five/ int; / ans = -1 #40 num = rega + regb; / num = 1101 #50 num = rega + 1; / num = 0100 #60 num = int; / num = 1101 #70 num = regb % rega; / num = 1 #80 $finish;joinendmodule注意integer和reg類型在算術(shù)運(yùn)算時(shí)的

45、差別。integer是有符號(hào)數(shù),而reg是無(wú)符號(hào)數(shù)。3.3 運(yùn)算符及表達(dá)式3.3.2.位運(yùn)算符 not & and | or xor xnor xnor 按位操作符對(duì)矢量中相對(duì)應(yīng)位運(yùn)算。regb = 4b1 0 1 0regc = 4b1 x 1 0num = regb & regc = 1 0 1 0 ; 位值為x時(shí)不一定產(chǎn)生x結(jié)果。如#50時(shí)的or計(jì)算。module bitwise (); reg 3: 0 rega, regb, regc; reg 3: 0 num; initial begin rega = 4b1001; regb = 4b1010; regc = 4b11x0; e

46、nd initial fork #10 num = rega & 0; / num = 0000 #20 num = rega & regb; / num = 1000 #30 num = rega | regb; / num = 1011 #40 num = regb & regc; / num = 10 x0 #50 num = regb | regc; / num = 1110 #60 $finish; joinendmodule01xz結(jié)果10 xx&01xz00000101xxx0 xxxz0 xxx五類按位操作符的運(yùn)算規(guī)則|01xz001xx11111xx1xxzx1xx01xz0

47、01xx110 xxxxxxxz0 xx1or01xz010 x0101xxxxxxxzxxxx五類按位操作符的運(yùn)算規(guī)則module bitTest; reg3: 0a,b,c; initial begin a=4b1100;b=4b0011;c=4,b0101; $displayb(a); /按位非運(yùn)算符,結(jié)果為4b0011 $displayb(a&c); /按位與運(yùn)算符,結(jié)果為4b0100 $displayb(a|b); /按位或運(yùn)算符,結(jié)果為4b1111 $displayb(bc); /按位異或運(yùn)算符,結(jié)果為4b0110 $displayb(ac); /按位異或非運(yùn)算符,結(jié)果為4b011

48、0 end endmodule按位運(yùn)算的例子3.3 運(yùn)算符及表達(dá)式3.3.2.位運(yùn)算符當(dāng)兩個(gè)操作數(shù)位數(shù)不同時(shí),位數(shù)少的操作數(shù)零擴(kuò)展到相同位數(shù)。a = 4b1011;b = 8b01010011;c = a | b; / a零擴(kuò)展為 8b00001011 位運(yùn)算符中除了是單目運(yùn)算符以外,均為二目運(yùn)算符,即要求運(yùn)算符兩側(cè)各有一個(gè)操作數(shù). 位運(yùn)算符中的二目運(yùn)算符要求對(duì)兩個(gè)操作數(shù)的相應(yīng)位進(jìn)行運(yùn)算操作。3.3.3 邏輯運(yùn)算符!not&and|or 邏輯操作符的結(jié)果為一位1,0或x。邏輯操作符只對(duì)邏輯值運(yùn)算。如操作數(shù)為全0,則其邏輯值為false如操作數(shù)有一位為1,則其邏輯值為true若操作數(shù)只包含0、x

49、、z,則邏輯值為x邏輯反操作符將操作數(shù)的邏輯值取反。例如,若操作數(shù)為全0,則其邏輯值為0,邏輯反操作值為1。module logical (); parameter five = 5; reg ans; reg 3: 0 rega, regb, regc; initial begin rega = 4b0011; /邏輯值為“1” regb = 4b10 xz; /邏輯值為“1” regc = 4b0z0 x; /邏輯值為“x” end initial fork #10 ans = rega & 0; / ans = 0 #20 ans = rega | 0; / ans = 1 #30 an

50、s = rega & five; / ans = 1 #40 ans = regb & rega; / ans = 1 #50 ans = regc | 0; / ans = x #60 $finish; joinendmodule3.3 運(yùn)算符及表達(dá)式Verilog HDL提供了三種邏輯運(yùn)算符:邏輯與運(yùn)算符:&邏輯或運(yùn)算符: |邏輯非運(yùn)算符:!其中邏輯與和邏輯或是雙目運(yùn)算符,邏輯非是單目運(yùn)算符mn!m!nM&nM|n001100011001100101110011邏輯運(yùn)算的真值表邏輯運(yùn)算符module logicalTest; reg3:0a,b,c; initial begin a=2;b

51、=0;c=4hx; $display(a&b); /邏輯與,結(jié)果為0 $display(a|b); /邏輯或,結(jié)果為1 $display(!a); /邏輯非,結(jié)果為0 $display(a|c); /結(jié)果為1,未知數(shù)|1(=1) $display(!c); /結(jié)果為未知數(shù) endendmodule邏輯運(yùn)算符3.3.4 關(guān)系運(yùn)算符大于=大于等于 rega ; / val = x #20 val = regb = rega ; / val = 1 #40 val = regb regc ; / val = 1 #50 $finish; joinendmodulerega和regc的關(guān)系取決于x無(wú)論

52、x為何值,regbregc 其結(jié)果是1b1、1b0或1bx。3.3 運(yùn)算符及表達(dá)式3.3.5 等式運(yùn)算符= =01xz010 xx101xxxxxxxzxxxx 賦值操作符,將等式右邊表達(dá)式的值拷貝到左邊。 邏輯等 case等=01xz0100010100 x0010z0001a = 2b1x;b = 2b1x;if (a = b) $display( a is equal to b);else $display( a is not equal to b);a = 2b1x;b = 2b1x;if (a = b) $display( a is identical to b);else $dis

53、play( a is not identical to b);注意邏輯等與case等的差別2b1x=2b0 x 值為0,因?yàn)椴幌嗟?b1x=2b1x 值為x,因?yàn)榭赡懿幌嗟?,也可能相?b1x=2b0 x 值為0,因?yàn)椴幌嗤?b1x=2b1x 值為1,因?yàn)橄嗤?.3 運(yùn)算符及表達(dá)式= 邏輯等! = 邏輯不等 其結(jié)果是1b1、1b0或1bx。 如果左邊及右邊為確定值并且相等,則結(jié)果為1。 如果左邊及右邊為確定值并且不相等,則結(jié)果為0。 如果左邊及右邊有值不能確定的位,但值確定的位相等,則結(jié)果為x。!=的結(jié)果與= =相反值確定是指所有的位為0或1。不確定值是有值為x或z的位。module equa

54、lities1(); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; end initial fork #10 val = rega = regb ; / val = 0 #20 val = rega != regc; / val = 1 #30 val = regb != regc; / val = x #40 val = regc = regc; / val = x #50 $finish; joinendmodule3.3.5 等式運(yùn)算符3.3 運(yùn)

55、算符及表達(dá)式 module equTest; reg3: 0a,b,c,d,e,f; initial begin a=4;b=7; /缺省值為十進(jìn)制數(shù) c=4b010; d=4bx10; e=4bx101; f=4bxx01; $displayb(c); /輸出0010 $displayb(d); /輸出xx10 $displayb(a=b); /相等運(yùn)算符,結(jié)果為0 $displayb(c !=d); /不相等運(yùn)算符,結(jié)果為x $displayb(c !=f); /不相等運(yùn)算符,結(jié)果為1 $displayb(d=e); /全等運(yùn)算符,結(jié)果為0 $displayb(c !=d); /非全等運(yùn)算

56、符,結(jié)果為1 endendmodule相等關(guān)系運(yùn)算符的例子= 相同(case等)! = 不相同(case不等) 其結(jié)果是1b1、1b0或1bx。 如果左邊及右邊的值相同(包括x、z),則結(jié)果為1。如果左邊及右邊的值不相同,則結(jié)果為0。!=的結(jié)果與 = 相反綜合工具不支持module equalities2(); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; end initial fork #10 val = rega = regb ; / val =

57、 0 #20 val = rega != regc; / val = 1 #30 val = regb = regc; / val = 0 #40 val = regc = regc; / val = 1 #50 $finish; joinendmodule3.3.6 移位運(yùn)算符邏輯右移邏輯左移 移位操作符對(duì)其左邊的操作數(shù)進(jìn)行向左或向右的位移位操作。第二個(gè)操作數(shù)(移位位數(shù))是無(wú)符號(hào)數(shù)若第二個(gè)操作數(shù)是x或z則結(jié)果為x 將左邊的操作數(shù)右移右邊操作數(shù)指定的位數(shù)在賦值語(yǔ)句中,如果右邊(RHS)的結(jié)果:位寬大于左邊,則把最高位截去位寬小于左邊,則零擴(kuò)展module shift (); reg 9: 0

58、num, num1; reg 7: 0 rega, regb; initial rega = 8b00001100; initial fork #10 num = rega 5 ; / num = 01_1000_0000 #10 regb = rega 5 ; / regb = 1000_0000 #20 num 3; / num = 00_0000_0001 #20 regb 3 ; / regb = 0000_0001 #30 num = 10b11_1111_0000; #40 rega = num 2; /rega = 1100_0000 #40 num1 = num 2;/num1

59、=11_1100_0000 #50 rega 2; /rega = 1111_1100 #50 num1 2;/num1=00_1111_1100 #60 $finish; joinendmodule建議:表達(dá)式左右位數(shù)一致3.3 運(yùn)算符及表達(dá)式3.3.7 位拼接運(yùn)算符 位拼接還可以用嵌套的方式來(lái)表達(dá)。 b,3a,b /這等同于b,a,b,a,b,a,b 用于表示重復(fù)的表達(dá)式如上例中的4和3,必須是常數(shù)表達(dá)式。 位拼接運(yùn)算符其使用方法如下:信號(hào)1的某幾位,信號(hào)2的某幾位,.,.,信號(hào)n的某幾位例: a,b3:0,w,3b101位拼接還可以用重復(fù)法來(lái)簡(jiǎn)化表達(dá)式。 4w /這等同于w,w,w,w3

60、.3 運(yùn)算符及表達(dá)式 module concatTest; reg a; reg 1: 0b; reg 5: 0c; initial begin a=1b1; b=2b00; c=6b101001;$displayb(a, b);/產(chǎn)生一個(gè)3位數(shù)3b100$displayb(c5: 3, a); /產(chǎn)生一個(gè)4位數(shù)4b1011 endendmodule module replicTest; reg a; reg 1: 0b; reg 5: 0c; initial begin a=1b1; b=2b00; $displayb(4a); /結(jié)果為1111 c=4a; $displayb(c); /結(jié)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論