第3章 FPGA模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運算符號_第1頁
第3章 FPGA模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運算符號_第2頁
第3章 FPGA模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運算符號_第3頁
第3章 FPGA模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運算符號_第4頁
第3章 FPGA模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運算符號_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、模塊的結(jié)構(gòu)、數(shù)據(jù)類型、變量和基本運算符號 2.數(shù)據(jù)類型及其常量、變量數(shù)據(jù)類型及其常量、變量 Verilog 中總共有十九種數(shù)據(jù)類型,數(shù)據(jù)類型是用來表示數(shù)字電路硬件中的數(shù)據(jù)儲存和傳送元素的。在本課程中我們只介紹四個最基本的數(shù)據(jù)類型,它們是reg型、wire型、integer型、parameter型其它數(shù)據(jù)類型同學們可以查閱Verilog HDL語法參考書的有關(guān)章節(jié)逐步掌握。其它的類型如下: large型、medium型、scalared型、time型、small型、tri型、trio型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型。這些數(shù)據(jù)類

2、型除time型外都與基本邏輯單元建庫有關(guān),與系統(tǒng)設(shè)計沒有很大的關(guān)系。在一般電路設(shè)計自動化的環(huán)境下,仿真用的基本部件庫是由半導體廠家和EDA工具廠家共同提供的。系統(tǒng)設(shè)計工程師不必過多地關(guān)心門級和開關(guān)級的Verilog HDL語法現(xiàn)象。 1.1.常量常量 在程序運行過程中,其值不能被改變的量稱為常量。一數(shù)字一數(shù)字 整數(shù)整數(shù):在Verilog HDL中,整型常量即整常數(shù)有以下四種進制表示形式: 二進制整數(shù)(b或B) 十進制整數(shù)(d或D) 十六進制整數(shù)(h或H) 八進制整數(shù)(o或O)數(shù)字表達方式有以下三種: 這是一種全面的描述方式。 在這種描述方式中,數(shù)字的位寬采用缺省位寬(這由具體的機器系統(tǒng)決定,但

3、至少32位)。 在這種描述方式中,采用缺省進制十進制。在表達式中,位寬指明了數(shù)字的精確位數(shù)。例如:一個4位二進制數(shù)的數(shù)字的位寬為4,一個4位十六進制數(shù)的數(shù)字的位寬為16(因為每單個十六進制數(shù)就要用4位二進制數(shù)來表示)。見下例:8b10101100 /位寬為8的數(shù)的二進制表示, b表示二進制8ha2 /位寬為8的數(shù)的十六進制,h表示十六進制。 x x和和z z值值: :在數(shù)字電路中,x代表不定值,z代表高阻值。一個x可以用來定義十六進制數(shù)的四位二進制數(shù)的狀態(tài),八進制數(shù)的三位,二進制數(shù)的一位。z的表示方式同x類似。z還有一種表達方式是可以寫作?。在使用case表達式時建議使用這種寫法,以提高程序的

4、可讀性。見下例:4b10 x0/位寬為4的二進制數(shù)從低位數(shù)起第二位為不定值4b101z/位寬為4的二進制數(shù)從低位數(shù)起第一位為高阻值12dz/位寬為12的十進制數(shù)其值為高阻值(第一種表達方式)12d?/位寬為12的十進制數(shù)其值為高阻值(第二種表達方式)8h4x /位寬為8的十六進制數(shù)其低四位值為不定值負數(shù)負數(shù): :一個數(shù)字可以被定義為負數(shù),只需在位寬表達式前加一個減號,減號必須寫在數(shù)字定義表達式的最前面。注意減號不可以放在位寬和進制之間也不可以放在進制和具體的數(shù)之間。見下例:-8d5/這個表達式代表5的補數(shù)(用八位二進制數(shù)表示)8d-5/非法格式下劃線下劃線: :下劃線可以用來分隔開數(shù)的表達以提

5、高程序可讀性。但不可以用在位寬和進制處,只能用在具體的數(shù)字之間。見下例:16b1010_1011_1111_1010 /合法格式8b_0011_1010 /非法格式當常量不說明位數(shù)時,默認值是當常量不說明位數(shù)時,默認值是3232位。位。例:1032d1032b10101=32d1=32b1-1=-32d1=32hFFFFFFFFbx= 32bx=32bxxxxxxxx二參數(shù)型二參數(shù)型在Verilog HDL中用parameter來定義常量,即用parameter來定義一個標識符代表一個常量,稱為符號常量,即標識符形式的常量,采用標識符代表一個常量可提高程序的可讀性和可維護性。parameter

6、型數(shù)據(jù)是一種常數(shù)型的數(shù)據(jù),其說明格式如下: parameterparameter 參數(shù)名參數(shù)名1 1表達式,參數(shù)名表達式,參數(shù)名2 2表達表達式式, , , 參數(shù)名參數(shù)名n n表達式表達式; ; parameter是參數(shù)型數(shù)據(jù)的確認符,確認符后跟著一個用逗號分隔開的賦值語句表。在每一個賦值語句的右邊必須是一個常數(shù)表達式。也就是說,該表達式只能包含數(shù)字或先前已定義過的參數(shù)。見下列:parameter msb=7; /定義參數(shù)msb為常量7parameter e=25, f=29; /定義二個常數(shù)參數(shù)parameter r=5.7; /聲明r為一個實型參數(shù)parameter byte_size=8

7、, byte_msb=byte_size-1; /用常數(shù)表達式賦值parameter average_delay = (r+f)/2; /用常數(shù)表達式賦值 參數(shù)型常數(shù)經(jīng)常用于定義延遲時間和變量寬度。在模塊或?qū)嵗脮r可通過參數(shù)傳遞改變在被引用模塊或?qū)嵗幸讯x的參數(shù)。下面將通過一個例子說明在層次調(diào)用的電路中改變參數(shù)的用法。 例1:在引用Decode實例時,D1,D2的Width將采用不同的值4和5,且D1的Polarity將為0。可用例子中所用的方法來改變參數(shù),即用 #(4,0)向D1中傳遞 Width=4,Polarity=0; 用#(5)向D2中傳遞Width=5,Polarity仍為1。

8、module Decode(A,F);parameter Width=1, Polarity=1;endmodulemodule Top;wire3:0 A4;wire4:0 A5;wire15:0 F16;wire31:0 F32;Decode #(4,0) D1(A4,F16);Decode #(5) D2(A5,F32);endmodule2 2 變量變量 變量即在程序運行過程中其值可以改變的量。 wire wire型型: : 網(wǎng)絡數(shù)據(jù)類型表示結(jié)構(gòu)實體(例如門)之間的物理連接。網(wǎng)絡類型的變量不能儲存值,而且它必需受到驅(qū)動器(例如門或連續(xù)賦值語句,assign)的驅(qū)動。如果沒有驅(qū)動器連接到

9、網(wǎng)絡類型的變量上,則該變量就是高阻的,即其值為z。常用的網(wǎng)絡數(shù)據(jù)類型包括wire型和tri型。這兩種變量都是用于連接器件單元,它們具有相同的語法格式和功能。之所以提供這兩種名字來表達相同的概念是為了與模型中所使用的變量的實際情況相一致。wire型變量通常是用來表示單個門驅(qū)動或連續(xù)賦值語句驅(qū)動的網(wǎng)絡型數(shù)據(jù),tri型變量則用來表示多驅(qū)動器驅(qū)動的網(wǎng)絡型數(shù)據(jù)。如果wire型或tri型變量沒有定義邏輯強度,在多驅(qū)動源的情況下,邏輯值會發(fā)生沖突從而產(chǎn)生不確定值。表為wire型和tri型變量的真值表(注意:這里假設(shè)兩個驅(qū)動源的強度是一致的,關(guān)于邏輯強度建模請參閱附錄:Verilog語言參考書)wire/tr

10、i01xz00 xx01x1x1xxxxxz01xzVerilog程序模塊中輸入輸出信號類型缺省時自動定義為wire型。wire型信號可以用作任何方程式的輸入,也可以用作“assign”語句或?qū)嵗妮敵鰓ire型信號的格式如下: wire n-1:0 wire n-1:0 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2,2,數(shù)據(jù)名數(shù)據(jù)名i; i; /共有i條總線,每條總線內(nèi)有n條線路 或或 wire n:1 wire n:1 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2,2,數(shù)據(jù)名數(shù)據(jù)名i;i; wire是wire型數(shù)據(jù)的確認符,n-1:0和n:1代表該數(shù)據(jù)的位寬,即該數(shù)據(jù)有幾位。最后跟著的是數(shù)據(jù)的名字。如果一

11、次定義多個數(shù)據(jù),數(shù)據(jù)名之間用逗號隔開。聲明語句的最后要用分號表示語句結(jié)束??聪旅娴膸讉€例子: wire a; /定義了一個一位的wire型數(shù)據(jù)wire 7:0 b; /定義了一個八位的wire型數(shù)據(jù)wire 4:1 c, d; /定義了二個四位的wire型數(shù)據(jù)regreg型型: : 寄存器型是數(shù)據(jù)儲存單元的抽象。寄存器數(shù)據(jù)類型的關(guān)鍵字是reg.通過賦值語句可以改變寄存器儲存的值,其作用與改變觸發(fā)器儲存的值相當。 reg類型數(shù)據(jù)的缺省初始值為不定值,x。 reg型數(shù)據(jù)常用來表示用于“always”模塊內(nèi)的指定信號,常代表觸發(fā)器。通常,在設(shè)計中要由“always”塊通過使用行為描述語句來表達邏輯關(guān)

12、系。在在“alwaysalways”塊內(nèi)被賦塊內(nèi)被賦值的每一個信號都必須定義成值的每一個信號都必須定義成regreg型。型。reg型數(shù)據(jù)的格式如下 reg n-1:0 reg n-1:0 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2,2, 數(shù)據(jù)名數(shù)據(jù)名i; i; 或或reg n:1 reg n:1 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2,2, 數(shù)據(jù)名數(shù)據(jù)名i;i;reg是reg型數(shù)據(jù)的確認標識符,n-1:0和n:1代表該數(shù)據(jù)的位寬,即該數(shù)據(jù)有幾位(bit)。最后跟著的是數(shù)據(jù)的名字。如果一次定義多個數(shù)據(jù),數(shù)據(jù)名之間用逗號隔開。聲明語句的最后要用分號表示語句結(jié)束??聪旅娴膸讉€例子: reg rega;/定義了一

13、個一位的名為rega的reg型 /數(shù)據(jù)reg 3:0 regb;/定義了一個四位的名為regb / 的reg型數(shù)據(jù)reg 4:1 regc, regd; /定義了兩個四位的 /名為regc和regd的reg型數(shù)據(jù)memorymemory 建模Verilog HDL通過對reg型變量建立數(shù)組來對存儲器建模,可以描述RAM型存儲器,ROM存儲器和reg文件。數(shù)組中的每一個單元通過一個數(shù)組索引進行尋址。在Verilog語言中沒有多維數(shù)組存在。 memory型數(shù)據(jù)是通過擴展reg型數(shù)據(jù)的地址范圍來生成的。其格式如下: reg n-1:0 reg n-1:0 存儲器名存儲器名 m-1:0m-1:0;或或

14、reg n-1:0 reg n-1:0 存儲器名存儲器名 m:1m:1; 在這里,regn-1:0定義了存儲器中每一個存儲單元的大小,即該存儲單元是一個n位的寄存器。存儲器名后的m-1:0或m:1則定義了該存儲器中有多少個這樣的寄存器。最后用分號結(jié)束定義語句。下面舉例說明: reg 7:0 mema255:0; 這個例子定義了一個名為mema的存儲器,該存儲器有256個8位的存儲器。該存儲器的地址范圍是0到255。一個一個n位的寄存器可以在一條賦值語句里位的寄存器可以在一條賦值語句里進行賦值,而一個完整的存儲器則不行進行賦值,而一個完整的存儲器則不行。見下例 rega =0;/合法賦值語句me

15、ma =0;/非法賦值語句 如果想對memory中的存儲單元進行讀寫操作,必須指定該單元在存儲器中的地址。下面的寫法是正確的。mema3=0;/給memory中的第3個存儲單元賦值為0。 2.3 2.3 運算符及表達式運算符及表達式 Verilog HDL語言的運算符范圍很廣,其運算符按其功能可分為以下幾類: 1 算術(shù)運算符(+,,/,)2 賦值運算符(=,=,=)4 邏輯運算符(&,|,!)5 條件運算符(?:)6 位運算符(,|,&,)7 移位運算符()8 拼接運算符( )9 其它在Verilog 語言中運算符所帶的操作數(shù)是不同的,按其所帶操作數(shù)的個數(shù)運算符可分為三種:1)

16、 單目運算符(unary operator):可以帶一個操作數(shù),操作數(shù)放在運算符的右邊。2) 二目運算符(binary operator):可以帶二個操作數(shù),操作數(shù)放在運算符的兩邊。3) 三目運算符(ternary operator):可以帶三個操作,這三個操作數(shù)用三目運算符分隔開。見下例:clock = clock; / 是一個單目取反運算符, clock是操作數(shù)。c = a | b; / 是一個二目按位或運算符, a 和 b是操作數(shù)。r = s ? t : u; / ?: 是一個三目條件運算符, s,t,u是操作數(shù)。1.1.基本的算術(shù)運算符基本的算術(shù)運算符在Verilog 語言中,算術(shù)運算

17、符又稱為二進制運算符,共有下面幾種:1) + (加法運算符,或正值運算符,如 regaregb,3)2) (減法運算符,或負值運算符,如 rega3,3)3) (乘法運算符,如rega*3)4) / (除法運算符,如5/3)5) % (模運算符,或稱為求余運算符,要求兩側(cè)均為整型數(shù)據(jù)。如73的值為1)在進行整數(shù)除法運算時,結(jié)果值要略去小數(shù)部分,只取整數(shù)部分。而進行取模運算時,結(jié)果值的符號位采用模運算式里第一個操作數(shù)的符號位。見下例。模運算表達式結(jié)果說明 10%3 1 余數(shù)為1 11%3 2 余數(shù)為2 12%3 0 余數(shù)為0即無余數(shù) -10%3-1 結(jié)果取第一個操作數(shù)的 符號位,所以余數(shù)為-1 11%3 2 結(jié)果取第一個操作數(shù)的 符號位,所以余數(shù)為2.注意:在進行算術(shù)運算操作時,如果某一個操作數(shù)有不注意:在進行算術(shù)運算操作時,如果某一個操作數(shù)有不確定的值確定的值x x,

溫馨提示

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

評論

0/150

提交評論