第5講 數(shù)據(jù)類型與表達式_第1頁
第5講 數(shù)據(jù)類型與表達式_第2頁
第5講 數(shù)據(jù)類型與表達式_第3頁
第5講 數(shù)據(jù)類型與表達式_第4頁
第5講 數(shù)據(jù)類型與表達式_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5講 數(shù)據(jù)類型與表達式共四十五頁Verilog HDL提供了豐富的數(shù)據(jù)類型,本講把Verilog HDL的數(shù)據(jù)分為常量和變量兩類,并分別介紹其特點和使用方法。表達式是操作符、操作數(shù)和標點符號序列,其目的是用來說明(shumng)一個計算過程。 程序中的大部分語句是由表達式構(gòu)成的。本講將給出操作符和操作數(shù)的種類及正確用法。 主要(zhyo)內(nèi)容共四十五頁(一) 常量在程序運行過程中,其值不能被改變的量稱為常量。Verilog HDL有整型、實數(shù)型、字符串型3種常量。在整型或?qū)崝?shù)型常量的任意位置(wi zhi)可以隨意插入下劃線“_”(但是不能當作首符號),這些下劃線對數(shù)本身并沒有意義,但是當數(shù)

2、字很長時使用下劃線可以提高可讀性。一、數(shù)據(jù)類型共四十五頁Verilog HDL有4種基本的邏輯狀態(tài): 0 表示邏輯0或“假”; 1 表示邏輯1或“真”; x 表示未知; z 表示高阻。注意:x值和z值都是不分大小寫的,如: 值0 x1z與值0X1Z相同(xin tn)。Verilog HDL的常量是由以上這4種基本值組成的。共四十五頁Verilog HDL的整數(shù)有兩種書寫格式:十進制數(shù)格式;基數(shù)格式。(1)十進制數(shù)格式是一個可以帶正負號的數(shù)字序列,代表一個有符號(fho)數(shù),如下例: 32 /十進制數(shù)32-15 /十進制數(shù)-151整型常量(chngling)(整數(shù))共四十五頁(2)基數(shù)格式的數(shù)

3、通常是無符號數(shù),形式如下: sizebase valuesize定義常量的位數(shù)(長度),這是可選項;base是基數(shù),規(guī)定這個數(shù)據(jù)的進制,可以是o或O(表示八進制),b或B(表示二進制),d或D(表示十進制),h或H(表示十六進制)之一;value是一個數(shù)字序列,其形式應(yīng)與base定義的形式相符。這個數(shù)字序列中出現(xiàn)的值x和z以及(yj)十六進制中的af不區(qū)分大小寫,“?”字符可以代替值z。共四十五頁下面給出一些典型書寫方法,有正確的也有錯誤(cuw)的。5O37 /5位八進制數(shù)4D2 /4位十進制數(shù)4B1x_01 /4位二進制數(shù)7Hx /7位x(擴展的x), 即xxxxxxx4hZ /4位z(擴

4、展的z) , 即zzzz2h1? /2位十六進制數(shù),與2h1z相同8h2 A /在位數(shù)和字符之間,以及基數(shù)和數(shù)值之間允許出現(xiàn)空格4d-4 /非法:數(shù)值不能為負3b001 /非法:和基數(shù)b之間不允許出現(xiàn)空格(2+3)b10 /非法:位數(shù)不能夠為表達式共四十五頁如果沒有定義常量的位數(shù),那么這個數(shù)的長度就是相應(yīng)值的位數(shù),例如(lr):o721 /9位八進制數(shù)hAF /8位十六進制數(shù)如果定義的長度大于數(shù)字序列的實際長度,通常在數(shù)據(jù)序列的高位(左側(cè))補0。但是如果這個數(shù)字序列最左邊一位為x或z,就用x或z在左邊補位,例如:10b10 /左邊補0, 000000001010bx0 x1 /左邊補x, xx

5、xxxxx0 x1如果定義的長度小于數(shù)字序列的實際長度,這個數(shù)字序列最左邊超出的位將被截斷,例如:3b1001_0011 /與3b011相等5H0FFF /與5H1F相等共四十五頁實數(shù)(shsh)的定義方式有兩種:(1)十進制格式,由數(shù)字和小數(shù)點組成(必須有小數(shù)點),例如:2.05.67811572.120.12. / 非法:小數(shù)點右側(cè)必須有數(shù)字2實數(shù)(shsh)型常量(浮點數(shù))共四十五頁2)指數(shù)格式,由數(shù)字和字符e(E)組成例:23_5.1e2 /其值為23510.0,忽略下劃線3.6E2 /其值為360.0 ( e與E相同)5E4 /其值為0.0005e的前面(qin mian)必須要有數(shù)

6、字而且后面必須為整數(shù)共四十五頁3字符串型常量(chngling)字符串常量是由一對雙引號括起來的字符序列。例:INTERNAL ERROR“ R E A C H E D H E R E ” /空格(kn )出現(xiàn)在/雙引號內(nèi),所以是字符串的組成部分12345_6789_0 /下劃線出現(xiàn)在/雙引號內(nèi),所以是字符串的組成部分共四十五頁字符(z f)都會被轉(zhuǎn)換成二進制數(shù)(ASCII碼) 。所以字符串實際就是若干個8位ASCII碼的序列。例如: 字符串“INTERNAL ERROR”共有14個字符,存儲這個字符串的變量就需要8*14位的存儲空間,如下:reg 1:8*14 Message; /定義變量M

7、essage并分配存儲空Message = INTERNAL ERROR /給變量Message賦值為字符串常量共四十五頁參數(shù)(cnsh)在Verilog語言(yyn)中,用參數(shù)parameter來定義符號常量。參數(shù)常用來定義時延和變量的寬度。其定義格式如下:parameter 參數(shù)名1=表達式1,參數(shù)名2=表達式2,參數(shù)名3=表達式3, ;例: parameter sel=8,code=8ha3;共四十五頁Verilog HDL有線網(wǎng)net和寄存器兩種類型(lixng)的變量,每種類型(lixng)都有其在電路中的實際意義。1線網(wǎng)型變量Net型數(shù)據(jù)相當于硬件電路中的各種物理連接,其特點是輸出

8、的值緊跟輸入值的變化而變化。 對net型有兩種驅(qū)動方式: 一種方式是在結(jié)構(gòu)描述中將其連接到一個門元件或模塊的輸出端; 另一種方式是用持續(xù)賦值語句assign對其進行賦值。 wire是最常用的Net型變量。(二) 變量(binling)共四十五頁wire型變量(binling)的定義格式如下:wire 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名n;例如: wire a,b; /定義了兩個wire型變量a和bWire7:0 databus; /databus的寬度是8位共四十五頁2寄存器型變量(binling)寄存器表示一個抽象的數(shù)據(jù)存儲單元。寄存器只能在always和initial過程語句中賦值,在未被賦值時,

9、寄存器的缺省值為x。Verilog HDL共有(n yu)5種寄存器類型: reg(最常用的寄存器型),integer,time,real,realtime reg定義格式如下: reg 數(shù)據(jù)名1,數(shù)據(jù)名2,數(shù)據(jù)名n;例:reg a,b; /定義了兩個reg型變量a,b reg7:0 q; /定義q為8位寬的reg型向量共四十五頁用reg聲明(shngmng)存儲器在Verilog HDL中不能直接聲明存儲器,存儲器是通過(tnggu)寄存器數(shù)組聲明的。存儲器聲明形式如下:reg msb: lsb memory1 upper1:lower1 , memory2 upper2:lower2 ,.

10、;定義單個寄存器的位寬定義存儲器的大?。ü灿卸嗌賯€寄存器)注意:maxplus不支持此種定義方式。共四十五頁例:reg 0:3 MyMem 0:63/ /MyMem是由64個4位寄存器組成(z chn)的存儲器reg Bog 1:5/ /Bog是由5個1位寄存器組成的數(shù)組reg 1:4 Xrom 1 : 5 /Xrom是由5個4位寄存器組成的存儲器共四十五頁存儲器的賦值 reg 1:4 Xrom 1 : 5 對存儲器Xrom賦值的正確方法有兩種:對存儲器賦值方法一:Xrom1 = 4hA; /對其中(qzhng)一個寄存器賦值Xrom2 = 4h8; /對其中一個寄存器賦值Xrom3 = 4h

11、F; /對其中一個寄存器賦值Xrom4 = 4h2; /對其中一個寄存器賦值Xrom5 = 4h9; /對其中一個寄存器賦值注意:不能只用一條賦值語句就完成(wn chng)對整個存儲器的賦值,應(yīng)當對存儲器中的每個寄存器單獨賦值共四十五頁對存儲器賦值方法二: 使用$readmemb系統(tǒng)任務(wù)(rn wu)從指定的文本文件中讀取數(shù)據(jù)并加載到存儲器。例: $readmemb (ram.patt, Xrom );存儲器的賦值 reg 1:4 Xrom 1 : 5 存儲器名包含(bohn)數(shù)據(jù)的文本文件注意:ram.patt必須包含二進制值,也可以包含空白和注釋。共四十五頁注意: 這里討論的verilo

12、g存儲器設(shè)計,在綜合時都是用觸發(fā)器來實現(xiàn)的。 平時在實際設(shè)計中如果需要用到存儲器,更多的是采用設(shè)計軟件(如quartusII)所提供(tgng)的存儲器宏功能模塊來實現(xiàn)(參考教材8.1.4節(jié)),這樣在綜合時會自動采用FPGA器件中的嵌入式存儲器塊去物理實現(xiàn)。共四十五頁1 操作數(shù)操作數(shù)就是運算對象,位于操作符左右兩側(cè)。VerilogHDL操作數(shù)有如下8種類型:常數(shù)參數(shù)(parameter定義的數(shù))線網(wǎng)(wire定義的數(shù))寄存器(Reg定義的數(shù))位選擇(線網(wǎng)或寄存器的某個位)部分(b fen)選擇(線網(wǎng)或寄存器的部分連續(xù)位)存儲器單元函數(shù)調(diào)用二、表達式共四十五頁Verilog HDL的操作符有如下

13、9種類型:算術(shù)操作符關(guān)系操作符相等操作符邏輯操作符按位操作符歸約操作符(縮位操作符)移位操作符條件操作符連接和復(fù)制(fzh)操作符其中,除條件操作符從右向左關(guān)聯(lián)外,其余所有操作符均自左向右關(guān)聯(lián)。2 操作符共四十五頁(1)算術(shù)(sunsh)運算符(Arithmetic operators)常用的算術(shù)運算符包括:+加-減*乘/除%求模共四十五頁注意:整數(shù)除法將截斷所有小數(shù)部分,如7/4 結(jié)果為1;模操作符將求出與第一個操作數(shù)符號(fho)相同的余數(shù),如7%4結(jié)果為3,而-7%4結(jié)果為-3;MaxplusII不支持“/和%”運算符如果算術(shù)操作符的操作數(shù)中出現(xiàn)x或z,那么整個算術(shù)操作的運算結(jié)果為x。例

14、如:b10 x1 + b01111 的結(jié)果為不確定數(shù) bxxxxx。共四十五頁(2)關(guān)系操作符關(guān)系操作符是對兩個(lin )操作數(shù)進行比較,如果比較結(jié)果為真則結(jié)果為1,如果比較結(jié)果為假則結(jié)果為0,關(guān)系操作符多用于條件判斷。關(guān)系操作符有如下4種: (大于) =(不小于) 45 /結(jié)果為假(0) 52= b01110 等價于: b01000 = b01110 /結(jié)果為假(0)共四十五頁(3)相等操作符與關(guān)系操作符類似,相等操作符也是對兩個操作數(shù)進行比較,如果(rgu)比較結(jié)果為假,則結(jié)果為0,否則結(jié)果為1。相等操作符有如下4種: =(邏輯相等) !=(邏輯不等) =(全等) !=(非全等)共四十五

15、頁其中,“=”和“!=”是把兩個操作數(shù)的邏輯值做比較,由于操作數(shù)中某些位可能是x或z,所以比較結(jié)果也有可能是x。而 “=”和“!=”是按位進行比較,即便在兩個操作數(shù)中某些位出現(xiàn)了x或z,只要它們出現(xiàn)在相同的位,那么就認為(rnwi)二者是相同的,比較結(jié)果為1,否則為0,而不會出現(xiàn)結(jié)果為x的情況。共四十五頁(4)邏輯操作符邏輯操作(cozu)符是對操作(cozu)數(shù)做與、或、非運算,操作(cozu)結(jié)果為0或1。邏輯操作符有3種: &(邏輯與) |(邏輯或) !(邏輯非)共四十五頁邏輯操作符的操作數(shù)只能是邏輯值0或1如: Crd = b0; /Crd是邏輯0 Dgs = b1; /Dgs是邏輯1

16、 那么(n me): Crd & Dgs /結(jié)果為0 (假) Crd | Dgs /結(jié)果為1 (真) !Dgs /結(jié)果為0 (假)共四十五頁(5)位操作符位操作(cozu)符是對操作(cozu)數(shù)按位進行與、或、非等邏輯操作(cozu)。位操作(cozu)符有如下5種: (一元非,只有一個操作數(shù)位于右側(cè)) &(二元與,有兩個操作數(shù)位于左右兩側(cè)) |(二元或,有兩個操作數(shù)位于左右兩側(cè)) (二元異或,有兩個操作數(shù)位于左右兩側(cè)) 或者 (二元異或非,有兩個操作數(shù)位于左右兩側(cè))共四十五頁例如(lr): A = b0110; B = b0100; 那么: A | B /結(jié)果為0110 A & B /結(jié)果

17、為0100共四十五頁(6)縮位運算符(歸約操作符)&與&與非|或|或非異或,同或縮位運算符與位運算符的邏輯運算法則一樣,但縮位運算是對單個操作數(shù)進行(jnxng)與、或、非遞推運算的,它放在操作數(shù)的前面??s位運算符將一個矢量縮減為一個標量。例:共四十五頁A = b0110;B = b0100;那么:|B /結(jié)果為1,因為(yn wi)B中有1&B /結(jié)果為0,因為B中有0A /結(jié)果為0,因為A中有偶數(shù)個1歸約異或操作符“”可用于檢查操作數(shù)中是否包含x,例如:MyReg = 4b01x0;MyReg /結(jié)果為x,說明操作數(shù)MyReg中包含x共四十五頁(7) 移位(y wi)操作符移位操作符是把操

18、作數(shù)向左或向右移位若干位。移位操作符有2種: (右移)例:module yiwei(a,c,d); input7:0 a; output7:0 c,d; assign c=a2; endmodule若a=2h08,則程序執(zhí)行后c=2h20,d=2h02;若a=2h04,則程序執(zhí)行后c=2h10,d=2h01;共四十五頁(8) 條件(tiojin)運算符(conditional operators) ?:三目運算符,其定義方式如下: 信號=條件?表達式1:表達式2;當條件成立時,信號取表達式1的值,反之取表達式2的值。共四十五頁【例】用Verilog HDL語言(yyn)描述下圖所示的電路。ca

19、by源程序如下(rxi)module example1(out,a,b,c);inputa,b,c;outputout;assign out = a? b:c;endmodule y = a*c+a*b 共四十五頁(9) 位拼接(pn ji)運算符(concatenation operators) 該運算符將兩個或多個信號的某些位拼接起來。如:信號1的某幾位,信號2的某幾位,信號n的某幾位例:module full_add2(a, b, cin, sum, cout);input 3:0a, b; input cin;output3:0 sum; output cout;assign cout,sum=a+b+cin;endmodule共四十五頁運算符的優(yōu)先級在書寫程序(chngx)時建議用括號()來控制運算的優(yōu)先級 共四十五頁(10) 復(fù)制操作符復(fù)制操作符是通過指定重復(fù)(chngf)次數(shù)來多次執(zhí)行連接操作。例:Abus = 34b1011; /做3次連接操作

溫馨提示

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

評論

0/150

提交評論