《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第3章_第1頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第3章_第2頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第3章_第3頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第3章_第4頁
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)-原理、實(shí)例及仿真》課件第3章_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論