版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第3章數(shù)據(jù)類型和表達(dá)式3.1數(shù)據(jù)類型3.2操作符和表達(dá)式
3.1數(shù)據(jù)類型
3.1.1常量
在程序運(yùn)行過程中,其值不能被改變的量稱為常量。VerilogHDL中有三類常量:整型、實(shí)數(shù)型和字符串型。
在整型或?qū)崝?shù)型常量的任何位置可以隨意插入下劃線符號“_”(但不能作為首字符),它們就數(shù)的本身來說沒有意義,但當(dāng)數(shù)很長時(shí),使用下劃線更易讀。
1.整型常量
整型常量就是整型數(shù),它可以按如下兩種方式書寫:
(1)簡單的十進(jìn)制數(shù)格式,表示為有符號數(shù),如20、-10。
(2)基數(shù)格式,通常是無符號數(shù),這種形式的格式為
<位寬>'<進(jìn)制><數(shù)字>
2.實(shí)數(shù)型常量
在VerilogHDL中,實(shí)常數(shù)的定義可以用十進(jìn)制表示也可以用科學(xué)浮點(diǎn)數(shù)表示。
(1)十進(jìn)制表示:由數(shù)字和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn))例如3.2、1158.29、25.8。
(2)指數(shù)格式:由數(shù)字和字符e(E)組成,e(E)的前面必須有數(shù)字而且后面必須為整數(shù)。例如:
3.字符串型常量
字符串常量用于表示需要顯示的信息,是由一對雙引號括起來的字符序列。顯示在雙引號內(nèi)的任何字符(包括空格和下劃線)都作為字符串的一部分。字符串不能分成多行書寫。例如:3.1.2變量
變量即在程序運(yùn)行過程中其值可以改變的量,在VerilogHDL中變量的數(shù)據(jù)類型有很多種,其中最基本的是線網(wǎng)型(NetType)和寄存器型(RegisterType)兩種,且每種類型都有其在電路中的實(shí)際意義。這兩種數(shù)據(jù)類型中最常用的是wire型、reg型和integer型。
1.線網(wǎng)型變量
線網(wǎng)表示器件之間的物理連接,稱為線網(wǎng)類型信號,其特點(diǎn)是輸出的值緊跟輸入值的變化而變化。對線網(wǎng)型變量有兩種驅(qū)動(dòng)方式,一種是在結(jié)構(gòu)描述中將其連接到邏輯門或模塊的輸出端;另一種方式是用持續(xù)賦值語句assign對其進(jìn)行賦值。該類變量不能存儲數(shù)據(jù)。
VerilogHDL提供了多種線網(wǎng)型變量,見表3.1。在為不同工藝的基本元件建立庫模型的時(shí)候,常常需要用不同的連接類型來與之對應(yīng),使其行為與實(shí)際器件一致。線網(wǎng)型變量的語法格式為:
net_kind[msb:lsb]net1,net2,…,netN;
其中,net_kind是線網(wǎng)類型;[msb:lsb]定義線網(wǎng)寬度的最高位和最低位,此項(xiàng)可選,如果沒有定義寬度,則默認(rèn)線網(wǎng)寬度是1位;net1,net2,…,netN是線網(wǎng)變量的名稱??稍谕粋€(gè)定義中聲明多個(gè)變量,例如:
wire和tri是最常用的線網(wǎng)類型,它們具有相同的語法格式和功能。wire型變量通常用來表示單個(gè)門驅(qū)動(dòng)或連續(xù)賦值語句驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù),tri型變量則用來表示多驅(qū)動(dòng)器驅(qū)動(dòng)的網(wǎng)絡(luò)型數(shù)據(jù)。如果wire型或tri型變量沒有定義邏輯強(qiáng)度(logicstrength),在多個(gè)驅(qū)動(dòng)源的情況下,邏輯值會發(fā)生沖突從而產(chǎn)生不確定值。如果多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)同一個(gè)連線(或三態(tài)線網(wǎng)),則這個(gè)線網(wǎng)的有效值可由表3.2來決定。
wire型數(shù)據(jù)常用來表示以assign關(guān)鍵字指定的組合邏輯信號。VerilogHDL程序模塊中的輸入輸出信號類型缺省時(shí)自動(dòng)定義為wire型。wire型變量可以用作任何方程式的輸入,也可以用作assign語句或?qū)嵗妮敵觥?/p>
wire型變量的語法格式如下:
wire[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,…,數(shù)據(jù)名i;
或
wire[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,…,數(shù)據(jù)名i;其中,wire是wire型數(shù)據(jù)的確認(rèn)符;[n-1:0]和[n:1]代表該數(shù)據(jù)的位寬,即該數(shù)據(jù)有幾位;數(shù)據(jù)名是變量的名字。如果一次定義多個(gè)變量,則變量名之間用逗號隔開。聲明語句的最后要用分號表示語句結(jié)束。例如:
2.寄存器型變量
寄存器是數(shù)據(jù)存儲單元的抽象,通過賦值語句可以改變寄存器內(nèi)存儲的值,其作用與改變觸發(fā)器存儲的值相當(dāng)。在設(shè)計(jì)中必須將寄存器變量放在過程語句(如initial、always)中,通過過程賦值語句賦值。在未被賦值時(shí),寄存器的缺省值為x。
寄存器型信號或變量共有五種數(shù)據(jù)類型,見表3.3。
1)?reg型變量
reg型是最常用的寄存器類型。reg類型數(shù)據(jù)的缺省初始值為不定值x。它只能存儲無符號數(shù)。
reg型變量的語法格式如下:
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;其中,reg是reg型數(shù)據(jù)的確認(rèn)標(biāo)識符;[n-1:0]和[n:1]代表該數(shù)據(jù)的位寬,即該數(shù)據(jù)有幾位(bit)。數(shù)據(jù)名是變量的名字,如果一次定義多個(gè)變量,變量名之間用逗號隔開。聲明語句的最后要用分號表示語句結(jié)束。例如:
2)?integer寄存器型變量
integer型是整數(shù)寄存器,也是VerilogHDL中常用的變量類型。這種寄存器用于存儲整數(shù)值,并且可以存儲帶符號數(shù)。integer型的定義形式如下:
integerinteger1,integer2,…integerN[msb:lsb];
其中,integer1,integer2,…integerN是整數(shù)寄存器名;msb和lsb是定義整數(shù)數(shù)組界限的常量,數(shù)組界限的定義是可選的。例如:
3)?time型變量
time類型的寄存器用于存儲和處理時(shí)間。time型變量的語法格式如下:
time
time_id1,time_id2,…,time_idN[msb:1sb];
例如:
time
Events[31:0]; //時(shí)間值數(shù)組
time
CurrTime; //CurrTime存儲一個(gè)時(shí)間值
4)?real和realtime型變量
real是實(shí)數(shù)寄存器型變量;realtime是實(shí)數(shù)型時(shí)間寄存器,一般用于在測試模塊中存儲仿真時(shí)間。它們的語法格式如下:
realreal_reg1,real_reg2,…,real_regN;
realtime
realtime_reg1,realtime_reg2,…,realtime_regN;
例如:
real
Swing,Top; //實(shí)數(shù)變量
3.2操作符和表達(dá)式
3.2.1操作符
VerilogHDL提供了豐富的操作符,按功能可分為算術(shù)操作符、位操作符、歸約操作符、邏輯操作符、關(guān)系操作符、相等與全等操作符、移位操作符、連接與復(fù)制操作符和條件操作符等9類;如果按操作符所帶操作數(shù)的個(gè)數(shù)來區(qū)分,操作符可分為3類,即單目操作符(可帶一個(gè)操作數(shù))、雙目操作符(可帶兩個(gè)操作數(shù))和三目操作符(可帶三個(gè)操作數(shù))。例如:
1.算術(shù)操作符
常用的算術(shù)操作符主要有5種:+?(加法操作符),如c+d,+4;-?(減法操作符),如a-b,-a;*?(乘法操作符),如a*5;/?(除法操作符),如c/d;%?(取模操作符),如8%3的值是2。
例如:
1)算術(shù)操作結(jié)果的長度
算術(shù)表達(dá)式結(jié)果的長度由最長的操作數(shù)決定。在賦值語句下,算術(shù)操作結(jié)果的長度由操作符左端的賦值目標(biāo)的長度決定。例如:在第一個(gè)語句賦值中,加法操作的溢出部分被丟棄;在第二個(gè)賦值語句中,任何溢出的位存儲在結(jié)果位Frx[1]中。在較長的表達(dá)式中,中間結(jié)果的長度如何確定?在VerilogHDL中定義了如下規(guī)則:表達(dá)式中的所有中間結(jié)果的長度應(yīng)取最大操作數(shù)的長度(賦值時(shí),此規(guī)則也包括左端目標(biāo))。例如:
2)無符號數(shù)和有符號數(shù)
執(zhí)行算術(shù)操作和賦值時(shí),區(qū)分無符號數(shù)和有符號數(shù)是非常重要的。無符號數(shù)存儲在線網(wǎng)、一般寄存器和基數(shù)形式表示的整數(shù)中。有符號數(shù)存儲在整數(shù)寄存器和十進(jìn)制形式表示的整數(shù)中。例如:例如:算術(shù)操作符應(yīng)用舉例。
2.位操作符
位操作符是對操作數(shù)按位進(jìn)行與、或、非等邏輯操作,分別如下:
~(一元非)——單目操作符,相當(dāng)于非門操作;
&(二元與)——雙目操作符,相當(dāng)于與門操作;
|(二元或)——雙目操作符,相當(dāng)于或門操作;
^(二元異或)——雙目操作符,相當(dāng)于異或門操作;
~^,^~?(二元異或非)——雙目操作符,相當(dāng)于同或門操作。
這些操作符在兩個(gè)操作數(shù)的對應(yīng)位上按位進(jìn)行邏輯操作,并產(chǎn)生結(jié)果。
1)?~(取反)操作符
~?是一個(gè)單目操作符,用來對一個(gè)操作數(shù)進(jìn)行按位取反運(yùn)算,其運(yùn)算規(guī)則見表3.6。
2)
&(按位與)操作符
按位與操作就是將兩個(gè)操作數(shù)的相應(yīng)位進(jìn)行與運(yùn)算,其運(yùn)算規(guī)則見表3.7。
3)?|(按位或)操作符
按位或操作就是將兩個(gè)操作數(shù)的相應(yīng)位進(jìn)行或運(yùn)算,其運(yùn)算規(guī)則見表3.8。
4)^(按位異或)操作符
按位異或操作就是將兩個(gè)操作數(shù)的相應(yīng)位進(jìn)行異或運(yùn)算,其運(yùn)算規(guī)則見表3.9。
5)?^~(按位異或非)操作符
按位異或非操作就是將兩個(gè)操作數(shù)的相應(yīng)位先進(jìn)行異或運(yùn)算再進(jìn)行非運(yùn)算,其運(yùn)算規(guī)則見表3.10。
3.歸約操作符
歸約操作符是單目操作符,對操作數(shù)逐位進(jìn)行運(yùn)算,運(yùn)算的結(jié)果是一位邏輯值。歸約操作符有6種:
&(歸約與)——如果存在位值為0,那么結(jié)果為0;如果存在位值為x或z,則結(jié)果為x;否則結(jié)果為1。
~&(歸約與非)——與歸約操作符&相反。
|(歸約或)——如果存在位值為1,那么結(jié)果為1;如果存在位值為x或z,則結(jié)果為x;否則結(jié)果為0。
~|(歸約或非)——與歸約操作符?|?相反。
^(歸約異或)——如果存在位值為x或z,那么結(jié)果為x;如果操作數(shù)中有偶數(shù)個(gè)1,則結(jié)果為0;否則結(jié)果為1。
~^(歸約異或非)——與歸約操作符?^?相反。
4.邏輯操作符
邏輯操作符是對操作數(shù)做與、或、非操作,這些操作符在邏輯值0或1上操作。操作結(jié)果為0或1,邏輯操作符有3種:&&(邏輯與)、||?(邏輯或)、!?(邏輯非)。
5.關(guān)系操作符
關(guān)系操作符是對兩個(gè)操作數(shù)進(jìn)行比較,比較結(jié)果為真,則結(jié)果為1;比較結(jié)果為假,則結(jié)果為0。關(guān)系操作符有4種:>(大于)、<(小于)、>=(不小于)和<=(不大于)。
6.相等與全等操作符
相等與全等操作符和關(guān)系操作符類似,也是對兩個(gè)操作數(shù)進(jìn)行比較,如果比較結(jié)果為假,則結(jié)果為0,否則結(jié)果為1。這類操作符有4種:==(邏輯相等)、!=(邏輯不等)、===(全等)和!==(非全等)。其中,“===”和“!==”嚴(yán)格按位進(jìn)行比較,把不定態(tài)(x)和高阻態(tài)(z)看做邏輯狀態(tài)進(jìn)行比較,比較結(jié)果不存在不定態(tài),一定是1或0。而“==”和“!=”是把兩個(gè)操作數(shù)的邏輯值做比較,值x和z具有通常的意義,如果兩個(gè)操作數(shù)之一包含x或z,則結(jié)果為未知的值(x)。
7.移位操作符
移位操作符是把操作數(shù)向左或向右移若干位。移位操作符有兩種:<<(左移)、>>(右移)。
移位操作符有兩個(gè)操作數(shù),右側(cè)操作數(shù)表示的是左側(cè)操作數(shù)所移動(dòng)的位數(shù)。它是一個(gè)邏輯移位,空閑位添0補(bǔ)位。如果右側(cè)操作數(shù)的值為x或z,則移位操作的結(jié)果為x。
8.連接和復(fù)制操作符
連接操作是將多組信號用大括號括起來,拼接成一組新信號。其表示形式如下:
{expr1,expr2,…,exprN}
其中,expr1,expr2,…,exprN是若干個(gè)小表達(dá)式。
9.條件操作符
條件操作符是VerilogHDL中唯一的三目操作符,它根據(jù)條件表達(dá)式的值選擇表達(dá)式,其表示形式如下:
cond_expr?expr1:expr2
其中,如果cond_expr為真(即值為1),則選擇expr1;如果cond_expr為假(值為0),則選擇expr2。如果cond_expr為x或z,則結(jié)果是將兩個(gè)待選擇的表達(dá)式進(jìn)行計(jì)算,然后把兩個(gè)計(jì)算結(jié)果按位進(jìn)行運(yùn)算得到最終結(jié)果,按位運(yùn)算的原則是,如果兩個(gè)表達(dá)式的某一位都為1,則這一位的最終結(jié)果是1;如果都是0,則這一位的結(jié)果是0;否則結(jié)果為x。3.2.2操作數(shù)
1.常數(shù)
前面已講述了常量的書寫方式,下面舉例說明。表達(dá)式中的整數(shù)值可解釋為有符號數(shù)或無符號數(shù)。如果表達(dá)式中是十進(jìn)制整數(shù),那么該整數(shù)就是有符號數(shù),例如,12被解釋為有符號數(shù)。如果整數(shù)是基數(shù)型整數(shù)(定長或非定長),那么該整數(shù)作為無符號數(shù)對待。例如:
2.參數(shù)
前一章中已對參數(shù)作了介紹。參數(shù)類似于常量,表達(dá)式中出現(xiàn)的參數(shù)都作為常數(shù)對待。參數(shù)就是用某標(biāo)識符代表某個(gè)數(shù)或字符串的,使用參數(shù)聲明進(jìn)行說明,在定義時(shí)給它賦值,程序中出現(xiàn)這個(gè)參數(shù)時(shí)將被替換為它所代表的常數(shù)值。例如:
3.線網(wǎng)
可在表達(dá)式中使用標(biāo)量線網(wǎng)(1位)和向量線網(wǎng)(多位)。例如:
wire[0:3]Prt; //Prt為4位向量線網(wǎng)
wireBdq; //Bbq是標(biāo)量線網(wǎng)
線網(wǎng)中的值被解釋為無符號數(shù)。在連續(xù)賦值語句中,如果賦給線網(wǎng)負(fù)值,則通常會被系統(tǒng)當(dāng)作正值對待。例如:
assignPrt=-3; //Prt被賦予位向量1101(-3的補(bǔ)碼),為十進(jìn)制的13
assignPrt=4'HA; //Prt被賦予位向量1010,即十進(jìn)制的10
4.寄存器
寄存器是在表達(dá)式中出現(xiàn)最多的操作數(shù),許多程序語句都是通過對寄存器中存儲的值進(jìn)行轉(zhuǎn)換和傳輸來實(shí)現(xiàn)其設(shè)計(jì)目的的。
一位寄存器為標(biāo)量,多位寄存器為向量;標(biāo)量和向量寄存器都可在表達(dá)式中使用。整型寄存器中的值被解釋為有符號的二進(jìn)制補(bǔ)碼,而reg型寄存器和時(shí)間寄存器中的值被解釋為無符號數(shù)。實(shí)數(shù)和實(shí)數(shù)時(shí)間類型寄存器中的值被解釋為有符號浮點(diǎn)數(shù)。例如:
5.位選擇
位選擇從向量中抽取特定的位,即表達(dá)式的操作數(shù)可以是線網(wǎng)或寄存器的某個(gè)位。其表示形式如下:
net_or_reg_vector[bit_select_expr]
其中,net_or_reg_vector是向量線網(wǎng)或寄存器名,bit_select_expr是要選擇位的編號。例如:
State[1]&&State[4] //寄存器位選擇,State[1]和State[4]進(jìn)行邏輯與操作
Prt[0]|Bbq //線網(wǎng)位選
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工會會員勞動(dòng)合同模板2篇
- 掛名股東權(quán)責(zé)合同的規(guī)范化3篇
- 新版購銷合同格式示例3篇
- 市場調(diào)研咨詢合同范本3篇
- 探究土地合同解除的合法性及合規(guī)性3篇
- 斷橋鋁合金門窗制作安裝合同3篇
- 教育導(dǎo)游服務(wù)合同模板3篇
- 安全騎行我來負(fù)責(zé)3篇
- 文藝演出攝影攝像咨詢合同3篇
- 旅店轉(zhuǎn)讓合同范本樣式3篇
- 外研社初中英語初三上教材單詞表
- JavaScript教案課程設(shè)計(jì)
- 2022年普通高中數(shù)學(xué)課程標(biāo)準(zhǔn)(2)-11
- T∕ZZB 2665-2022 免洗手消毒凝膠
- 特種設(shè)備安全知識考核試題與答案
- 教練技術(shù)一階段講義
- 班主任工作記錄手冊.doc
- 《工藝流程題的解題指導(dǎo)》教學(xué)設(shè)計(jì)(教案)
- 山東建設(shè)工程施工機(jī)械臺班單價(jià)表
- 平凡之路歌詞
- 整理富怡服裝CAD的鍵盤快捷鍵
評論
0/150
提交評論