VerilogHDL簡明教程:第4篇表達(dá)式_第1頁
VerilogHDL簡明教程:第4篇表達(dá)式_第2頁
VerilogHDL簡明教程:第4篇表達(dá)式_第3頁
VerilogHDL簡明教程:第4篇表達(dá)式_第4頁
VerilogHDL簡明教程:第4篇表達(dá)式_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、本章講述在Verilog HDL中編寫表達(dá)式的基礎(chǔ)。表達(dá)式由操作數(shù)和操作符組成。表達(dá)式可以在出現(xiàn)數(shù)值的任何地方使用。4.1 操作數(shù)操作數(shù)可以是以下類型中的一種:1) 常數(shù)2) 參數(shù)3) 線網(wǎng)4) 寄存器5) 位選擇6) 部分選擇7) 存儲器單元8) 函數(shù)調(diào)用4.1.1 常數(shù)前面的章節(jié)已講述了如何書寫常量。下面是一些實(shí)例。256,7 /非定長的十進(jìn)制數(shù)。4b10_11, 8h0A /定長的整型常量。b1, hFBA /非定長的整數(shù)常量。90.00006 /實(shí)數(shù)型常量。BOND /串常量;每個字符作為8位ASCII值存儲。表達(dá)式中的整數(shù)值可被解釋為有符號數(shù)或無符號數(shù)。如果表達(dá)式中是十進(jìn)制整數(shù),例如

2、,12被解釋為有符號數(shù)。如果整數(shù)是基數(shù)型整數(shù)(定長或非定長),那么該整數(shù)作為無符號數(shù)對待。下面舉例說明。12是01100的5位向量形式(有符號)-12是10100的5位向量形式(有符號)5b01100是十進(jìn)制數(shù)12(無符號)5b10100是十進(jìn)制數(shù)20(無符號)4d12是十進(jìn)制數(shù)12(無符號)更為重要的是對基數(shù)表示或非基數(shù)表示的負(fù)整數(shù)處理方式不同。非基數(shù)表示形式的負(fù)整數(shù)作為有符號數(shù)處理,而基數(shù)表示形式的負(fù)整數(shù)值作為無符號數(shù)。因此-44和-6o54 (十進(jìn)制的44等于八進(jìn)制的54)在下例中處理不同。integer Cone;. . .Cone = -44/4Cone = -6o54/ 4;注意4

3、4和6o54以相同的位模式求值;但是44作為有符號數(shù)處理,而6o54作為無符號數(shù)處理。因此第一個字符中Cone的值為11,而在第二個賦值中Cone的值為1073741813。4.1.2 參數(shù)前一章中已對參數(shù)作了介紹。參數(shù)類似于常量,并且使用參數(shù)聲明進(jìn)行說明。下面是參數(shù)說明實(shí)例。parameter LOAD = 4d12, STORE = 4d10;LOAD 和STORE為參數(shù)的例子,值分別被聲明為12和10。4.1.3 線網(wǎng)可在表達(dá)式中使用標(biāo)量線網(wǎng)(1位)和向量線網(wǎng)(多位)。下面是線網(wǎng)說明實(shí)例。wire 0:3 Prt; /Prt 為4位向量線網(wǎng)。wire Bdq; /Bbq 是標(biāo)量線網(wǎng)。線網(wǎng)

4、中的值被解釋為無符號數(shù)。在連續(xù)賦值語句中,assign Prt = -3;Prt被賦于位向量1101,實(shí)際上為十進(jìn)制的13。在下面的連續(xù)賦值中,assign Prt = 4HA;Prt被賦于位向量1010,即為十進(jìn)制的10。4.1.4 寄存器標(biāo)量和向量寄存器可在表達(dá)式中使用。寄存器變量使用寄存器聲明進(jìn)行說明。例如:integer TemA, TemB;reg 1:5 State;time Que 1:5;整型寄存器中的值被解釋為有符號的二進(jìn)制補(bǔ)碼數(shù),而reg寄存器或時間寄存器中的值被解釋為無符號數(shù)。實(shí)數(shù)和實(shí)數(shù)時間類型寄存器中的值被解釋為有符號浮點(diǎn)數(shù)。TemA = -10; /TemA值為位向量

5、10110,是10的二進(jìn)制補(bǔ)碼。TemA = b1011; /TemA值為十進(jìn)制數(shù)11。State = -10; /State值為位向量10110,即十進(jìn)制數(shù)22。State = b1011; /State值為位向量01011,是十進(jìn)制值11。4.1.5 位選擇位選擇從向量中抽取特定的位。形式如下:net_or_reg_vector bit_select_expr下面是表達(dá)式中應(yīng)用位選擇的例子。State 1 & State 4 /寄存器位選擇。Prt 0 | Bbq /線網(wǎng)位選擇。如果選擇表達(dá)式的值為x、z,或越界,則位選擇的值為x。例如State x值為x。4.1.6 部分選擇在部分選擇中

6、,向量的連續(xù)序列被選擇。形式如下:net_or_reg_vector msb_const_expr:1sb_const_expr其中范圍表達(dá)式必須為常數(shù)表達(dá)式。例如。State 1:4 /寄存器部分選擇。Prt 1:3 /線網(wǎng)部分選擇。選擇范圍越界或?yàn)閤、z時,部分選擇的值為x。4.1.7 存儲器單元存儲器單元從存儲器中選擇一個字。形式如下:memory word_address例如:reg 1:8 Ack, Dram 0:63;. . .Ack = Dram 60; /存儲器的第60個單元。不允許對存儲器變量值部分選擇或位選擇。例如,Dram 60 2 不允許。Dram 60 2:4 也不允

7、許。在存儲器中讀取一個位或部分選擇一個字的方法如下:將存儲器單元賦值給寄存器變量,然后對該寄存器變量采用部分選擇或位選擇操作。例如,Ack 2 和Ack 2:4是合法的表達(dá)式。4.1.8 函數(shù)調(diào)用表達(dá)式中可使用函數(shù)調(diào)用。函數(shù)調(diào)用可以是系統(tǒng)函數(shù)調(diào)用(以$字符開始)或用戶定義的函數(shù)調(diào)用。例如:$time + SumOfEvents (A, B)/*$time是系統(tǒng)函數(shù),并且SumOfEvents是在別處定義的用戶自定義函數(shù)。*/4.2 操作符Verilog HDL中的操作符可以分為下述類型:1) 算術(shù)操作符2) 關(guān)系操作符3) 相等操作符4) 邏輯操作符5) 按位操作符6) 歸約操作符7) 移位操

8、作符8) 條件操作符9) 連接和復(fù)制操作符下表顯示了所有操作符的優(yōu)先級和名稱。操作符從最高優(yōu)先級(頂行)到最低優(yōu)先級(底行)排列。同一行中的操作符優(yōu)先級相同。除條件操作符從右向左關(guān)聯(lián)外,其余所有操作符自左向右關(guān)聯(lián)。下面的表達(dá)式:A + B - C等價于:(A + B ) - C /自左向右而表達(dá)式:A ? B : C ? D : F等價于:A ? B : (C ? D : F) /從右向左圓擴(kuò)號能夠用于改變優(yōu)先級的順序,如以下表達(dá)式:(A ? B : C) ? D : F4.2.1 算術(shù)操作符算術(shù)操作符有:* +(一元加和二元加)* (一元減和二元減)* *(乘)* /(除)* %(取模)整數(shù)

9、除法截斷任何小數(shù)部分。例如:7/4 結(jié)果為 1取模操作符求出與第一個操作符符號相同的余數(shù)。7%4 結(jié)果為 3而:- 7%4 結(jié)果為 -3如果算術(shù)操作符中的任意操作數(shù)是X或Z,那么整個結(jié)果為X。例如:b10 x1 + b01111 結(jié)果為不確定數(shù)bxxxxx1. 算術(shù)操作結(jié)果的長度算術(shù)表達(dá)式結(jié)果的長度由最長的操作數(shù)決定。在賦值語句下,算術(shù)操作結(jié)果的長度由操作符左端目標(biāo)長度決定??紤]如下實(shí)例:reg 0:3 Arc, Bar, Crt;reg 0:5 Frx;. . .Arc = Bar + Crt;Frx = Bar + Crt;第一個加的結(jié)果長度由Bar,Crt和Arc長度決定,長度為4位。第

10、二個加法操作的長度同樣由Frx的長度決定(Frx、Bat和Crt中的最長長度),長度為6位。在第一個賦值中,加法操作的溢出部分被丟棄;而在第二個賦值中,任何溢出的位存儲在結(jié)果位Frx1中。在較大的表達(dá)式中,中間結(jié)果的長度如何確定?在Verilog HDL中定義了如下規(guī)則:表達(dá)式中的所有中間結(jié)果應(yīng)取最大操作數(shù)的長度(賦值時,此規(guī)則也包括左端目標(biāo))??紤]另一個實(shí)例:wire 4:1 Box, Drt;wire 1:5 Cfg;wire 1:6 Peg;wire 1:8 Adt;. . .assign Adt = (Box + Cfg) + (Drt + Peg);表達(dá)式左端的操作數(shù)最長為6,但是將

11、左端包含在內(nèi)時,最大長度為8。所以所有的加操作使用8位進(jìn)行。例如:Box和Cfg相加的結(jié)果長度為8位。2. 無符號數(shù)和有符號數(shù)執(zhí)行算術(shù)操作和賦值時,注意哪些操作數(shù)為無符號數(shù)、哪些操作數(shù)為有符號數(shù)非常重要。無符號數(shù)存儲在:* 線網(wǎng)* 一般寄存器* 基數(shù)格式表示形式的整數(shù)有符號數(shù)存儲在:* 整數(shù)寄存器* 十進(jìn)制形式的整數(shù)下面是一些賦值語句的實(shí)例:reg 0:5 Bar;integer Tab;. . .Bar = -4d12; /寄存器變量Bar的十進(jìn)制數(shù)為52,向量值為110100。Tab = -4d12; /整數(shù)Tab的十進(jìn)制數(shù)為-12,位形式為110100。-4d12 / 4 /結(jié)果是107

12、3741821。-12 / 4 /結(jié)果是-3因?yàn)锽ar是普通寄存器類型變量,只存儲無符號數(shù)。右端表達(dá)式的值為b110100(12的二進(jìn)制補(bǔ)碼)。因此在賦值后,Bar存儲十進(jìn)制值52。在第二個賦值中,右端表達(dá)式相同,值為b110100,但此時被賦值為存儲有符號數(shù)的整數(shù)寄存器。Tab存儲十進(jìn)制值12(位向量為110100)。注意在兩種情況下,位向量存儲內(nèi)容都相同;但是在第一種情況下,向量被解釋為無符號數(shù),而在第二種情況下,向量被解釋為有符號數(shù)。下面為具體實(shí)例:Bar = - 4d12/4;Tab = - 4d12 /4;Bar = - 12/4Tab = - 12/4在第一次賦值中,Bar被賦于十

13、進(jìn)制值61(位向量為111101)。而在第二個賦值中,Tab被賦于與十進(jìn)制1073741821(位值為0011.11101)。Bar在第三個賦值中賦于與第一個賦值相同的值。這是因?yàn)锽ar只存儲無符號數(shù)。在第四個賦值中,Bar被賦于十進(jìn)制值3。下面是另一些例子:Bar = 4 - 6;Tab = 4 - 6;Bar被賦于十進(jìn)制值62(2的二進(jìn)制補(bǔ)碼),而Tab被賦于十進(jìn)制值2(位向量為111110)。下面為另一個實(shí)例:Bar = -2 + (-4);Tab = -2 + (-4);Bar被賦于十進(jìn)制值58(位向量為111010),而Tab被賦于十進(jìn)制值6(位向量為111010)。4.2.2 關(guān)系

14、操作符關(guān)系操作符有:* (大于)* =(不小于)* 45結(jié)果為假(0),而:52 = b01110等價于:b01000 = b01110結(jié)果為假(0)。4.2.3 相等關(guān)系操作符相等關(guān)系操作符有:* = =(邏輯相等)* !=(邏輯不等)* = = =(全等)* != =(非全等)如果比較結(jié)果為假,則結(jié)果為0;否則結(jié)果為1。在全等比較中,值x和z嚴(yán)格按位比較。也就是說,不進(jìn)行解釋,并且結(jié)果一定可知。而在邏輯比較中,值x和z具有通常的意義,且結(jié)果可以不為x。也就是說,在邏輯比較中,如果兩個操作數(shù)之一包含x或z,結(jié)果為未知的值(x)。如下例,假定:Data = b11x0;Addr = b11x0

15、;那么:Data = = Addr不定,也就是說值為x,但:Data = = = Addr為真,也就是說值為1。如果操作數(shù)的長度不相等,長度較小的操作數(shù)在左側(cè)添0補(bǔ)位,例如:2b10 = = 4b0010與下面的表達(dá)式相同:4b0010 = = 4b0010結(jié)果為真(1)。4.2.4 邏輯操作符邏輯操作符有:* & (邏輯與)* | (邏輯或)* !(邏輯非)這些操作符在邏輯值0或1上操作。邏輯操作的結(jié)構(gòu)為0或1。例如, 假定:Crd = b0; /0為假Dgs = b1; /1為真那么:Crd & Dgs 結(jié)果為0 (假)Crd | Dgs 結(jié)果為1 (真)! Dgs 結(jié)果為0 (假)對于向

16、量操作, 非0向量作為1處理。例如,假定:A_Bus = b0110;B_Bus = b0100;那么:A_Bus | B_Bus 結(jié)果為1A_Bus & B_Bus 結(jié)果為 1并且:! A_Bus 與! B_Bus的結(jié)果相同。結(jié)果為0。如果任意一個操作數(shù)包含x,結(jié)果也為x。!x 結(jié)果為x4.2.5 按位操作符按位操作符有:* (一元非)* &(二元與)* |(二元或)* (二元異或)* , (二元異或非)這些操作符在輸入操作數(shù)的對應(yīng)位上按位操作,并產(chǎn)生向量結(jié)果。下表顯示對于不同操作符按步操作的結(jié)果。例如,假定,A = b0110;B = b0100;那么:A | B 結(jié)果為0110A & B

17、 結(jié)果為0100如果操作數(shù)長度不相等, 長度較小的操作數(shù)在最左側(cè)添0補(bǔ)位。例如,b0110 b10000與如下式的操作相同:b00110 b10000結(jié)果為b10110。4.2.6 歸約操作符歸約操作符在單一操作數(shù)的所有位上操作,并產(chǎn)生1位結(jié)果。歸約操作符有:* & (歸約與)如果存在位值為0, 那么結(jié)果為0;若如果存在位值為x或z,結(jié)果為x;否則結(jié)果為1。* & (歸約與非)與歸約操作符&相反。* | (歸約或)如果存在位值為1,那么結(jié)果為1;如果存在位x或z,結(jié)果為x;否則結(jié)果為0。* | (歸約或非)與歸約操作符|相反。* (歸約異或)如果存在位值為x或z,那么結(jié)果為x;否則如果操作數(shù)中

18、有偶數(shù)個1, 結(jié)果為0;否則結(jié)果為1。* (歸約異或非)與歸約操作符正好相反。如下所示。假定,A = b0110;B = b0100;那么:|B 結(jié)果為1& B 結(jié)果為0 A 結(jié)果為1歸約異或操作符用于決定向量中是否有位為x。假定,MyReg = 4b01x0;那么:MyReg 結(jié)果為x上述功能使用如下的if語句檢測:if (MyReg = = = 1bx)$ display (There is an unknown in the vector MyReg !)注意邏輯相等(=)操作符不能用于比較;邏輯相等操作符比較將只會產(chǎn)生結(jié)果x。全等操作符期望的結(jié)果為值1。4.2.7 移位操作符移位操作符

19、有:* (右移)移位操作符左側(cè)操作數(shù)移動右側(cè)操作數(shù)表示的次數(shù),它是一個邏輯移位。空閑位添0補(bǔ)位。如果右側(cè)操作數(shù)的值為x或z, 移位操作的結(jié)果為x。假定:reg 0:7 Qreg;. . .Qreg = 4b0111;那么:Qreg 2 是 8b0000_0001Verilog HDL中沒有指數(shù)操作符。但是,移位操作符可用于支持部分指數(shù)操作。例如,如果要計算ZNumBits的值,可以使用移位操作實(shí)現(xiàn),例如:32b1 NumBits /NumBits必須小于32。同理,可使用移位操作為2-4解碼器建模,如wire 0:3 DecodeOut = 4b1 18 ? Grade_A : Grade_C

20、;計算表達(dá)式Marks 18; 如果真, Grade_A 賦值為Student; 如果Marks =18, Grade_C 賦值為Student。下面為另一實(shí)例:always#5 Ctr = (Ctr != 25) ? (Ctr + 1) : 5;過程賦值中的表達(dá)式表明如果Ctr不等于25, 則加1;否則如果Ctr值為25時, 將Ctr值重新置為5。4.2.9 連接和復(fù)制操作連接操作是將小表達(dá)式合并形成大表達(dá)式的操作。形式如下:expr1, expr2, . . .,exprN實(shí)例如下所示:wire 7:0 Dbus;wire 11:0 Abus;assign Dbus 7:4 = Dbus 0, Dbus 1, Dbus2, Dbus3;/以反轉(zhuǎn)的順序?qū)⒌投?位賦給高端4位。assign Dbus = Dbus 3:0, Dbus 7:4;/高4位與低4位交換。由于非定長常數(shù)的長度未知, 不允許連接非定長常數(shù)。例如, 下列式子非法:Dbus,5 /不允許連接操作非定長常數(shù)。復(fù)制通過指定重復(fù)次數(shù)來執(zhí)行操作。形式如下:repetition_number expr1, expr2, .,exprN以下是一些實(shí)例:Abus = 34b1011; /位向量12b1011_1011_1011)Abus = 4Dbus7, Dbus;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論