Verilog數(shù)據(jù)類型與表達(dá)式.ppt
《Verilog數(shù)據(jù)類型與表達(dá)式.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《Verilog數(shù)據(jù)類型與表達(dá)式.ppt(43頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第4講數(shù)據(jù)類型與表達(dá)式,VerilogHDL提供了豐富的數(shù)據(jù)類型,本講把VerilogHDL的數(shù)據(jù)分為常量和變量?jī)深?,并分別介紹其特點(diǎn)和使用方法。表達(dá)式是操作符、操作數(shù)和標(biāo)點(diǎn)符號(hào)序列,其目的是用來(lái)說(shuō)明一個(gè)計(jì)算過(guò)程。程序中的大部分語(yǔ)句是由表達(dá)式構(gòu)成的。本講將給出操作符和操作數(shù)的種類及正確用法。,主要內(nèi)容,(一)常量在程序運(yùn)行過(guò)程中,其值不能被改變的量稱為常量。VerilogHDL有整型、實(shí)數(shù)型、字符串型3種常量。在整型或?qū)崝?shù)型常量的任意位置可以隨意插入下劃線“_”(但是不能當(dāng)作首符號(hào)),這些下劃線對(duì)數(shù)本身并沒(méi)有意義,但是當(dāng)數(shù)字很長(zhǎng)時(shí)使用下劃線可以提高可讀性。,一、數(shù)據(jù)類型,VerilogHDL有4種基本的邏輯狀態(tài):0表示邏輯0或“假”;1表示邏輯1或“真”;x表示未知;z表示高阻。注意:x值和z值都是不分大小寫的,如:值0 x1z與值0X1Z相同。VerilogHDL的常量是由以上這4種基本值組成的。,VerilogHDL的整數(shù)有兩種書寫格式:十進(jìn)制數(shù)格式;基數(shù)格式。(1)十進(jìn)制數(shù)格式是一個(gè)可以帶正負(fù)號(hào)的數(shù)字序列,代表一個(gè)有符號(hào)數(shù),如下例:32//十進(jìn)制數(shù)32-15//十進(jìn)制數(shù)-15,1.整型常量(整數(shù)),(2)基數(shù)格式的數(shù)通常是無(wú)符號(hào)數(shù),形式如下:[size]basevaluesize定義常量的位數(shù)(長(zhǎng)度),這是可選項(xiàng);base是基數(shù),規(guī)定這個(gè)數(shù)據(jù)的進(jìn)制,可以是o或O(表示八進(jìn)制),b或B(表示二進(jìn)制),d或D(表示十進(jìn)制),h或H(表示十六進(jìn)制)之一;value是一個(gè)數(shù)字序列,其形式應(yīng)與base定義的形式相符。這個(gè)數(shù)字序列中出現(xiàn)的值x和z以及十六進(jìn)制中的a~f不區(qū)分大小寫,“?”字符可以代替值z(mì)。,下面給出一些典型書寫方法,有正確的也有錯(cuò)誤的。5O37//5位八進(jìn)制數(shù)4D2//4位十進(jìn)制數(shù)4B1x_01//4位二進(jìn)制數(shù)7Hx//7位x(擴(kuò)展的x),即xxxxxxx4hZ//4位z(擴(kuò)展的z),即zzzz2h1?//2位十六進(jìn)制數(shù),與2h1z相同8h2A//在位數(shù)和字符之間,以及基數(shù)和數(shù)值之間允許出現(xiàn)空格4d-4//非法:數(shù)值不能為負(fù)3b001//非法:和基數(shù)b之間不允許出現(xiàn)空格(2+3)b10//非法:位數(shù)不能夠?yàn)楸磉_(dá)式,如果沒(méi)有定義常量的位數(shù),那么這個(gè)數(shù)的長(zhǎng)度就是相應(yīng)值的位數(shù),例如:o721//9位八進(jìn)制數(shù)hAF//8位十六進(jìn)制數(shù)如果定義的長(zhǎng)度大于數(shù)字序列的實(shí)際長(zhǎng)度,通常在數(shù)據(jù)序列的高位(左側(cè))補(bǔ)0。但是如果這個(gè)數(shù)字序列最左邊一位為x或z,就用x或z在左邊補(bǔ)位,例如:10b10//左邊補(bǔ)0,000000001010bx0 x1//左邊補(bǔ)x,xxxxxxx0 x1如果定義的長(zhǎng)度小于數(shù)字序列的實(shí)際長(zhǎng)度,這個(gè)數(shù)字序列最左邊超出的位將被截?cái)啵纾?b1001_0011//與3b011相等5H0FFF//與5H1F相等,實(shí)數(shù)的定義方式有兩種:(1)十進(jìn)制格式,由數(shù)字和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn)),例如:2.05.67811572.120.12.//非法:小數(shù)點(diǎn)右側(cè)必須有數(shù)字,2.實(shí)數(shù)型常量(浮點(diǎn)數(shù)),,2)指數(shù)格式,由數(shù)字和字符e(E)組成例:23_5.1e2//其值為23510.0,忽略下劃線3.6E2//其值為360.0(e與E相同)5E-4//其值為0.0005e的前面必須要有數(shù)字而且后面必須為整數(shù),3.字符串型常量,字符串常量是由一對(duì)雙引號(hào)括起來(lái)的字符序列。例:"INTERNALERROR"“REACHED->HERE”//空格出現(xiàn)在//雙引號(hào)內(nèi),所以是字符串的組成部分"12345_6789_0"http://下劃線出現(xiàn)在//雙引號(hào)內(nèi),所以是字符串的組成部分,,實(shí)際上,字符都會(huì)被轉(zhuǎn)換成二進(jìn)制數(shù),而且這種二進(jìn)制數(shù)是按特定規(guī)則編碼的?,F(xiàn)在普遍都采用ASCII碼,這種代碼把每個(gè)字符用一個(gè)字節(jié)(8位)的二進(jìn)制數(shù)表示。所以字符串實(shí)際就是若干個(gè)8位ASCII碼的序列。例如字符串“INTERNALERROR”共有14個(gè)字符,存儲(chǔ)這個(gè)字符串的變量就需要8*14位的存儲(chǔ)空間,如下:reg[1:8*14]Message;//定義變量Message并分配存儲(chǔ)空Message="INTERNALERROR"http://給變量Message賦值為字符串常量,參數(shù),在Verilog語(yǔ)言中,用參數(shù)parameter來(lái)定義符號(hào)常量。參數(shù)常用來(lái)定義時(shí)延和變量的寬度。其定義格式如下:parameter參數(shù)名1=表達(dá)式1,參數(shù)名2=表達(dá)式2,參數(shù)名3=表達(dá)式3,……;例:parametersel=8,code=8ha3;,VerilogHDL有線網(wǎng)net和寄存器兩種類型的變量,每種類型都有其在電路中的實(shí)際意義。1.線網(wǎng)型變量Net型數(shù)據(jù)相當(dāng)于硬件電路中的各種物理連接,其特點(diǎn)是輸出的值緊跟輸入值的變化而變化。對(duì)net型有兩種驅(qū)動(dòng)方式,一種方式是在結(jié)構(gòu)描述中將其連接到一個(gè)門元件或模塊的輸出端;另一種方式是用持續(xù)賦值語(yǔ)句assign對(duì)其進(jìn)行賦值。wire是最常用的Net型變量。,(二)變量,wire型變量的定義格式如下:wire數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名n;例如:wirea,b;//定義了兩個(gè)wire型變量a和b,2.寄存器型變量,寄存器表示一個(gè)抽象的數(shù)據(jù)存儲(chǔ)單元,可以通過(guò)賦值語(yǔ)句改變寄存器內(nèi)存儲(chǔ)的值。寄存器只能在always和initial過(guò)程語(yǔ)句中賦值,在未被賦值時(shí),寄存器的缺省值為x。VerilogHDL共有5種寄存器類型:Reg(最常用的寄存器型),integer,time,real,realtimeReg定義格式如下:reg數(shù)據(jù)名1,數(shù)據(jù)名2,……數(shù)據(jù)名n;例:rega,b;//定義了兩個(gè)reg型變量a,breg[7:0]q;//定義q為8位寬的reg型向量,用reg聲明存儲(chǔ)器,在VerilogHDL中不能直接聲明存儲(chǔ)器,存儲(chǔ)器是通過(guò)寄存器數(shù)組聲明的,即用reg聲明。存儲(chǔ)器聲明形式如下:reg[msb:lsb]memory1[upper1:lower1],memory2[upper2:lower2],...;其中msb、lsb定義了存儲(chǔ)器中單個(gè)寄存器的位寬;memory1和memory2是存儲(chǔ)器名;upper1、lower1和upper2、lower2分別定義了這兩個(gè)存儲(chǔ)器的大?。ㄓ卸嗌賯€(gè)寄存器)。下面是兩個(gè)存儲(chǔ)器聲明實(shí)例:,,reg[0:3]MyMem[0:63]//MyMem是由64個(gè)4位寄存器組成的存儲(chǔ)器regBog[1:5]//Bog是由5個(gè)1位寄存器組成的數(shù)組,注意:可以只用一條賦值語(yǔ)句就完成對(duì)一個(gè)寄存器的賦值,但是不能只用一條賦值語(yǔ)句就完成對(duì)整個(gè)存儲(chǔ)器的賦值,應(yīng)當(dāng)對(duì)存儲(chǔ)器中的每個(gè)寄存器單獨(dú)賦值。,,對(duì)存儲(chǔ)器賦值的正確方法如下:reg[0:3]Xrom[1:4]//Xrom是由4個(gè)4位寄存器組成的存儲(chǔ)器對(duì)存儲(chǔ)器賦值方法一:Xrom[1]=4hA;//對(duì)其中一個(gè)寄存器賦值Xrom[2]=4h8;//對(duì)其中一個(gè)寄存器賦值Xrom[3]=4hF;//對(duì)其中一個(gè)寄存器賦值Xrom[4]=4h2;//對(duì)其中一個(gè)寄存器賦值,對(duì)存儲(chǔ)器賦值方法二:使用$readmemb系統(tǒng)任務(wù)從指定的文本文件中讀取數(shù)據(jù)并加載到存儲(chǔ)器。例:reg[1:4]RomB[1:7];$readmemb("ram.patt",RomB);RomB是存儲(chǔ)器名,ram.patt是包含數(shù)據(jù)的文本文件,ram.patt必須包含二進(jìn)制值,也可以包含空白和注釋。,1操作數(shù)操作數(shù)就是運(yùn)算對(duì)象,位于操作符左右兩側(cè)。操作數(shù)有如下8種類型:常數(shù)參數(shù)(parameter定義的數(shù))線網(wǎng)(wire定義的數(shù))寄存器(Reg定義的數(shù))位選擇(線網(wǎng)或寄存器的某個(gè)位)部分選擇(線網(wǎng)或寄存器的部分連續(xù)位)存儲(chǔ)器單元函數(shù)調(diào)用,二、表達(dá)式,VerilogHDL的操作符有如下9種類型:算術(shù)操作符關(guān)系操作符相等操作符邏輯操作符按位操作符歸約操作符(縮位操作符)移位操作符條件操作符連接和復(fù)制操作符其中,除條件操作符從右向左關(guān)聯(lián)外,其余所有操作符均自左向右關(guān)聯(lián)。,2操作符,(1)算術(shù)運(yùn)算符(Arithmeticoperators)常用的算術(shù)運(yùn)算符包括:+加-減*乘/除%求模,,,注意:整數(shù)除法將截?cái)嗨行?shù)部分,如7/4結(jié)果為1;模操作符將求出與第一個(gè)操作數(shù)符號(hào)相同的余數(shù),如7%4結(jié)果為3,而-7%4結(jié)果為-3;如果算術(shù)操作符的操作數(shù)中出現(xiàn)x或z,那么整個(gè)算術(shù)操作的運(yùn)算結(jié)果為x。例如:b10 x1+b01111的結(jié)果為不確定數(shù)bxxxxx。,,(2)關(guān)系操作符關(guān)系操作符是對(duì)兩個(gè)操作數(shù)進(jìn)行比較,如果比較結(jié)果為真則結(jié)果為1,如果比較結(jié)果為假則結(jié)果為0,關(guān)系操作符多用于條件判斷。關(guān)系操作符有如下4種:>(大于)=(不小于)45//結(jié)果為假(0)52=b01110等價(jià)于:b01000>=b01110//結(jié)果為假(0),,(3)相等操作符與關(guān)系操作符類似,相等操作符也是對(duì)兩個(gè)操作數(shù)進(jìn)行比較,如果比較結(jié)果為假,則結(jié)果為0,否則結(jié)果為1。相等操作符有如下4種:==(邏輯相等)!=(邏輯不等)===(全等)!==(非全等),,其中,“==”和“!=”是把兩個(gè)操作數(shù)的邏輯值做比較,由于操作數(shù)中某些位可能是x或z,所以比較結(jié)果也有可能是x。而“===”和“!==”是按位進(jìn)行比較,即便在兩個(gè)操作數(shù)中某些位出現(xiàn)了x或z,只要它們出現(xiàn)在相同的位,那么就認(rèn)為二者是相同的,比較結(jié)果為1,否則為0,而不會(huì)出現(xiàn)結(jié)果為x的情況。,,(4)邏輯操作符邏輯操作符是對(duì)操作數(shù)做與、或、非運(yùn)算,操作結(jié)果為0或1。邏輯操作符有3種://Crd是邏輯0Dgs=b1;//Dgs是邏輯1那么:CrdB=b0100;那么:A|B//結(jié)果為0110AB=b0100;那么:|B//結(jié)果為1,因?yàn)锽中有1^MyReg//結(jié)果為x,說(shuō)明操作數(shù)MyReg中包含x,,(7)移位操作符移位操作符是把操作數(shù)向左或向右移位若干位。移位操作符有2種:>(右移),(8)條件運(yùn)算符(conditionaloperators)?:三目運(yùn)算符,其定義方式如下:信號(hào)=條件?表達(dá)式1:表達(dá)式2;當(dāng)條件成立時(shí),信號(hào)取表達(dá)式1的值,反之取表達(dá)式2的值。,(9)位拼接運(yùn)算符(concatenationoperators){}該運(yùn)算符將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來(lái)。如:{信號(hào)1的某幾位,信號(hào)2的某幾位,……,信號(hào)n的某幾位},運(yùn)算符的優(yōu)先級(jí),在書寫程序時(shí)建議用括號(hào)()來(lái)控制運(yùn)算的優(yōu)先級(jí),,(10)復(fù)制操作符復(fù)制操作符是通過(guò)指定重復(fù)次數(shù)來(lái)多次執(zhí)行連接操作。例:Abus={3{4b1011}};//做3次連接操作,Abus的值是12b1011_1011_1011,,Abus={{4{Dbus[7]}},Dbus};//結(jié)果與{Dbus[7],Dbus[7],Dbus[7],Dbus[7],Dbus}相同{3{1b1}}//結(jié)果為111{3{Ack}}//結(jié)果與{Ack,Ack,Ack}相同。,習(xí)題,5-5下列數(shù)字的表示是否正確?6d18,Bx0,5b0 x110,da30,10d2,hzF,習(xí)題,5-6定義如下的變量和常量:(1)定義一個(gè)名為count的整數(shù);(2)定義一個(gè)名為ABUS的8位wire總線;(3)定義一個(gè)名為address的16位reg型變量,并將該變量的值賦為十進(jìn)制數(shù)128;(4)定義參數(shù)Delay_time,參數(shù)值為8;(5)定義一個(gè)名為DELAY的時(shí)間變量;(6)定義一個(gè)32位的寄存器MYREG;(7)定義一個(gè)容量為128,字長(zhǎng)為32位的存儲(chǔ)器MYMEM;,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Verilog 數(shù)據(jù)類型 表達(dá)式
鏈接地址:http://m.jqnhouse.com/p-11497947.html