HDL第五章語法與要素_第1頁
HDL第五章語法與要素_第2頁
HDL第五章語法與要素_第3頁
HDL第五章語法與要素_第4頁
HDL第五章語法與要素_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章Verilog語法與要素

本章介紹VerilogHDL的基本要素,包括數(shù)字、字符串、標識符、運算符、數(shù)據(jù)類型和關鍵字等。5.1Verilog語言要素1、空白符

包含空格符、Tab、換行、換頁。每條Verilog語句以;結(jié)尾。教材P121中段兩個書寫格式具有相同效果。2、注釋有兩種形式的注釋

單行注釋:以//打頭,直到本行結(jié)束,不允許續(xù)行。

多行注釋:以/*開始,直到*/結(jié)束。30cout//非法:以數(shù)字為首out*//非法:

包含不允許字符*3、標識符VerilogHDL中的標識符(identifier)可以是任意一組字母、數(shù)字、$符號和_(下劃線)符號的組合,但標識符的第一個字符必須是字母或者下劃線。另外,標識符是區(qū)分大小寫的。以下是標識符的幾個例子:4、關鍵字Verilog系統(tǒng)內(nèi)部使用的詞,關鍵字用戶不可用重定義其它含義。所有的關鍵字都是小寫字母組成。例如always是關鍵字,但是ALWAYS不是關鍵字。5.2常量Verilog中常量主要有三種類型:整數(shù)、實數(shù)、字符串5.2.1整數(shù)。+/-<size>’<base><value>

+/-<二進制位寬>’<進制><數(shù)字序列>進制有以下4種形式:

二進制:b或B,不區(qū)別大寫、小寫字母;十進制:d或D或缺省,不區(qū)別大寫、小寫字母;十六進制:h或H,不區(qū)別大寫、小寫字母;

八進制:o或O,不區(qū)別大寫、小寫字母;8’b11011010//位寬為8位二進制數(shù)110110108’hd5//位寬為8位十六進制數(shù)d5(即二進制數(shù)11010101)5’o27//位寬為5位八進制數(shù)27(即二進制數(shù)10111)4’D2//位寬為4位十進制數(shù)2(即二進制數(shù)0010)4’B1x_01//位寬為4位二進制數(shù)1x015’Hx//位寬為5位十六進制數(shù)x(即二進制數(shù)xxxxx)4’hz//位寬為4位十六進制數(shù)z二進制數(shù)zzzz)8‘h2A//位寬為8位十六進制數(shù)2A即二進制數(shù)(00101010)合格的整數(shù)書寫例子。不合格的整數(shù)書寫例子。3’b001//’與基數(shù)b之間不允許出現(xiàn)空格4’d-4//數(shù)值不允許正、負符號(+或-)正、負符號只//允許出現(xiàn)在最左面(3+2)’b10//位寬為不可以是表達式在書寫數(shù)字時需要注意:1)在較長數(shù)字之間可以因_分開,用來提高可讀性,但第一個數(shù)字

之前不可以加下劃線。2)無位寬說明時,默認為為32位(二進制)。3)x或z在二進制中代表一位x或z,在八進制中代表3位x或z,在十六

位進制中代表4為x或z.

例如:8’b1001xxxx與8’h9x相同8’b1010zzzz與8’haz相同4)如果沒有定義一個整數(shù)的位寬,則其寬度為響應數(shù)所需的二進制位。

例如:’o721//9位二進制數(shù)111010001‘hAF//8位二進制數(shù)101011115)如果定義的位寬比實際的位數(shù)長,則通常左邊添0補位,但如果數(shù)的

最左邊為x或z,則左邊添x或z。

例如:10’b10//左邊添8位0,即000000001010’bx0x1//左邊添6位x,即xxxxxxx0x1

如果定義的位寬比實際的位小,則左邊(高位)的位數(shù)被截掉。

例如:3’b1001_0011同3’b0115’H0FFF同5’H1F6)?是高阻態(tài)z的另一種表示方法,在表示數(shù)字時完全等同替代。7)整數(shù)可以帶正、負符號,正、負號必須寫在最左面。負數(shù)通常用

二進制補碼表示。

例如:-8’h72//-72H的8位二進制補碼100011108)當位寬與進制缺省時表示是十進制數(shù)。

例如32//表示十進制數(shù)32-15//表示十進制數(shù)-159)在位寬與’之間,以及進制和數(shù)字之間允許出現(xiàn)空格但’與進制之間以

及數(shù)字之間不允許出現(xiàn)空格。

例如:6‘b110001//合法,表示6位二進制數(shù)1100016’b110001//不合法,在’與進制b之間出現(xiàn)空格6’b110001//不合法,在數(shù)字之間出現(xiàn)空格5.2.2實數(shù)

實數(shù)可以用下列兩種形式定義:1)十進制計數(shù)法;例如2)科學計數(shù)法;這種形式的實數(shù)舉例如下:5.2.3字符串

字符串是雙引號內(nèi)的字符序列。字符串不能分成多行書寫。例如:字符符的作用主要是在仿真時,顯示一些相關的信息,或者指定顯示格式。字符串屬于reg型變量,其寬度為此字符串中的字符個數(shù)乘以8.例如:reg[8*12:1]stringvar;/*tringvar是reg型變量,該變量可以存放包含12個字符的字符串,共96bit*/beginstringvar=“Helloword!”;//變量stringvar存放字符串(包含12個字符)end

轉(zhuǎn)義標識符(escapedidentifier)可以在一條標識符中包含任何可打印字符。轉(zhuǎn)義標識符以\(反斜線)符號開頭,以空白結(jié)尾(空白可以是一個空格、一個制表字符或換行符)。下面例舉了幾個轉(zhuǎn)義標識符:反斜線和結(jié)束空格并不是轉(zhuǎn)義標識符的一部分。特殊字符說明\n換行\(zhòng)tTab鍵\\符號\\”符號“\ddd八進制數(shù)ddd對應的ASCII字符例如:\1238進制數(shù)123對應的ASCII字符是大寫字母S5.3數(shù)據(jù)類型數(shù)據(jù)類型是用來表示數(shù)字電路中的物理連線、數(shù)據(jù)存儲和傳輸單元等物理量。VerilogHDL有下列四種邏輯值狀態(tài):1)0:低電平、邏輯0或邏輯非(“假”)2)1:高電平、邏輯1或“真”3)x或X:不確定或未知的邏輯狀態(tài)4)z或Z:高阻態(tài)VerilogHDL中的變量部分為如下兩種類數(shù)據(jù)類型:net型和variable型1、

線網(wǎng)類型。net類型表示Verilog結(jié)構(gòu)化元件間的物理連線。它的值由驅(qū)動元件的值決定,例如連續(xù)賦值或門的輸出。如果沒有驅(qū)動元件連接到線網(wǎng),線網(wǎng)的缺省值為z??删C合的net型變量有:wire型、tri型、supply1和supply0。見教材P126表5.21)wire型

是最常用的net型數(shù)據(jù)變量,,VarilogHDL模塊中的輸入/輸出信號未被明確指定數(shù)據(jù)類型時都被默認為wire型??梢匀≈?、1、X、Z,如果wire型變量沒有被連接到驅(qū)動,其值為高阻態(tài)Z。wire型變量定義格式為:wire數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i;//變量位寬為一位。例如:wirea,b;//定義兩個位寬一位的wire型變量a和b?;颍簑ire[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名Ii;//變量位寬為n位?;颍簑ire[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名Ii;//變量位寬為n位。例如:wire[7:0]databus;//定義位寬8位wire型變量databus。wire[19:0]addrbus;//定義位寬20位wire型變daddrbuswire[0:7]a;//定義位寬為8位的wire型變量2)tri型功能與使用方法與wire型相同,只是為了增加程序的可讀性,可更清楚表示該信號綜合后的電路具有三態(tài)的功能。3)supply0h和supply1型supply0用于對“地”建模,即低電平0;supply1網(wǎng)用于對電源建模,即高電平1;例如:2、variable類型。variable類型表示一個抽象的數(shù)據(jù)存儲單元,它只能在always語句和initial語句中被賦值,在always、initial等模塊內(nèi)被賦值的信號必須定義為variable型。1)reg型是最常用的variable型變量。被定義為reg型變量在綜合時,

綜合器會根據(jù)本具體情況確定將其映射成寄存器還是連線。

定義格式如下:reg數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i;//變量位寬為一位。例如:rega,b;//定義兩個位寬為一位的reg型變量a和b。或:reg[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i;//變量位寬為n位?;颍簉eg[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名i;//變量位寬為n位。例如:reg[7:0]qout;//定義位寬

為8位reg型變量qout。reg[8:1]qout;//定義位寬

為8位reg型變量qout。2)integer型多用于表示循環(huán)變量,表示循環(huán)次數(shù)。integer型變量只

能被整體使用,不能作為位向量使用。

定義格式變量同reg:integeri,j;//i、j被定為兩個integer變量。5.4參數(shù)Verilog用參數(shù)parameter來定義符號常量。參數(shù)經(jīng)常用于定義時延和變量的寬度。使用參數(shù)說明的參數(shù)只被賦值一次。參數(shù)說明形式如下:

參數(shù)名通常用大寫字母表示,而標識名、變量采用小寫字母表示。modulecompare_w(a,b,larger,equal,less);//六位數(shù)據(jù)比較器parameterSIZE=6;//參數(shù)定義,可以改變SIZE值input[SIZE-1:0]a,b;outputlarger,equal,less;wirelarger,equal,less;assignlarger=(a>b);assignequal=(a==b);assignless=(a<b);endmodulemoduleadd_w(a,b,sum);//十六位加法器parameterMSB=15;//參數(shù)定義,可以改變MSB值input[MSB:0]a,b;output[MSB+1:0]sum;assignsum=a+b;endmodulemodulecount_w(en,clk,reset,out);//八位二進制計數(shù)器inputclk,reset,,en;parameterWIDTH=8;//參數(shù)定義,可以改變SIZE值output[WIDTH-1:0]out;wire[WIDTH-1:0]out;always@(posedgeclkornegedgereset)if(!reset)out=0;elseif(en)out=out+1;endmodule ````` `modulejohnsont_w(clk,clr,qout);//八位約翰遜計數(shù)器inputclk,clr;parameterWIDTH=8;//參數(shù)定義,可以改變WIDTH值outputreg[WIDTH-1:0]qout;always@(posedgeclkorposedgeclr)beginif(clr)oqut<=0;elsebeginqout<=qout<<+1;qout[0]<=qout[WIDTH-1];endendendmodule ````` `1、向量與標量5.4向量標量:寬度為一位的變量。如果在變量聲明中沒有指定位寬,則默認

為標量。例如:wirea;//標量aregclr;//reg型標量clr向量(vector):寬度為大于一位的變量。向量的寬度定義形式為:[MSB:LSB]

方括號左邊的數(shù)字表示向量的最高位,右邊的數(shù)字表示最低位。例如:wire[3:0]bus;//

4位總線標量bus[3]bus[2]bus[1]bus[0]reg[0:7]rc;//8位寄存器rc[0]rc[1]rc[2]rc[3]…rc[7]2、位選擇和域選擇

有兩類向量:標量類向量,未加特別說明定義的向量;

向量類向量,定義時用關鍵字vectored說明。例如:

wirevectored[7:0]databus;//8位向量類標量databusreg[31:0]rega;//32位標量類向量regaVerilogHDL只允許對標量類向量進行位選擇和域選擇。位選擇:在表達式中選擇向量中的某一位。域選擇:表達式中選擇向量中相鄰幾位。

在進行位選擇、域選擇時,必須等號左右兩端的位寬一致。例如:

a=mybyte[6];//位選擇,將mybyte[6]位的值賦給變量a,a是標量。b=mybate[5:2];//將mybyte的第5、4、3、2位的值賦給b,b是//4位向量。例如:

reg[7:0]a,b;reg[3:0]c;regd;d=a[7]&b[7];//位選擇c=a[7:4]+b[3:0];//域選擇3.存儲器

存儲器可以看作是二維向量。Verilog定義存儲器時,必須指明存儲器的容量:單元數(shù)和每個存儲單元的字長。用如下方式存儲器:

reg[7:0]mymem[63:0];/*定義存儲器mymem,64個單元,字長8位*/reg[3:0]amem[63:0];//定義存儲器amen,容量64,字長4位regbmem[5:1];//定義存儲器bmen,容量5個單元,字長1位parameterWIDTH=8,MEMSISE=1024;

reg[WIDTH-1:0]mymem[MEMSISE-1:0];//定義字長8bit容量為1024個單元的存儲器mymem,

例如:reg[7:0]mymem[63:0];//定義存儲的存儲器mymem,mymem[8]=8’b10001001;//mymem第8的單元存放10001001。mymem[25]=65;//mymem第25的單元存放十進制數(shù)65(01000001)。

對存儲器賦值必須對一個單元整體賦值,不允許對

存儲器進行位選擇和域選擇。Verilog將寄存器看作向量。如果需要對存儲器進行位選擇或域選擇時,可以先將存儲單元讀入寄存器,然后對寄存器進行位選擇或域選擇。

例如:reg[7:0]rega;//定義寄存器8位的rega,reg[7:0]mymem[63:0];//定義存儲的存儲器mymem,mymem[8]=8’b10001001;//mymem第8的單元存放10001001。rega=mvmem[8];rega[3]=rega[3]&®a[2];mvmem=rega;//mymem第8單元的值是10000001

有一種存儲器賦值的方法是分別對存儲器中的每個字賦值。例如:為存儲器賦值的另一種方法是使用系統(tǒng)任務:1)$readmemb(加載二進制值)2)$readmemh(加載十六進制值)

這些系統(tǒng)任務從指定的文本文件中讀取數(shù)據(jù)并加載到存儲器。文本文件必須包含相應的二進制或者十六進制數(shù)。例如:存儲器文件中必須包含二進制值,也可以包含空白空間和注釋VerilogHDL中的操作符可以分為下述類型:1)算術操作符2)關系操作符3)相等操作符4)邏輯操作符5)按位操作符6)歸約操作符7)移位操作符8)條件操作符9)連接和復制操作符5.6運算符1算術運算符雙目運算符算術操作符有:+加雙目運算符-減雙目運算符*乘雙目運算符/除雙目運算符%求模雙目運算符2邏輯運算符

這些操作符在邏輯值0或1上操作。邏輯操作的結(jié)果為0或1。對于向量操作,將向量作整體處理,非0向量作為1處理。全0向量作0處理如果任意一個操作數(shù)包含x,結(jié)果也為x。!x結(jié)果為x&01x|01x^01x^~01x0000001x001x010X101X1111110x101Xx0xxxx1xxxxxxxxx位運算是對操作數(shù)按位對應進行邏輯運算。位運算包括:

~單目運算符,對操作數(shù)各位進行取反運算。&雙目運算符,對兩個操作數(shù)按位進行與邏輯運算。|雙目運算符,對兩個操作數(shù)按位進行或邏輯運算。^雙目運算符,對兩個操作數(shù)按位進行異或邏輯運算。^~雙目運算符,對兩個操作數(shù)按位進行同或邏輯運算。~01X10x3.位運算符

若a=5’b11001,b=5’b10101,則:~a的結(jié)果為5’b00110,a&b的結(jié)果為5’b10001,a|b的結(jié)果為5’b11101,a^b的結(jié)果為5’b01100.。兩個不同長度的數(shù)據(jù)進行位操作時,自動按右端(最低位)對齊,位少的數(shù)高位自動補0.4.關系運算符雙目運算符關系運算符有:>大于<小于>=不小于(大于等于)<=不大于(小于等于)

關系操作符的結(jié)果:關系成立為真(1);關系不成立為假(0)。如果操作數(shù)中有一位為X或Z,那么結(jié)果為X。例如:23>45結(jié)果為假(0),52<8'hxFF結(jié)果為x。

如果操作數(shù)長度不同,長度較短的操作數(shù)在高位(左方)添0補齊。例如:5.等式運算符雙目運算符相等運算符(==)與全等運算符(===)的過程是參與比較運算的兩個操作數(shù)必須逐位進行比較,如果兩個操作數(shù)各位均是確定的邏輯值(0或1),則兩個數(shù)各位對應相等,結(jié)果為1,否則為0。如果兩個操作數(shù)中如果某位是不定態(tài)(x)或高阻值(z),則相等比較(==)的結(jié)果是不定值,而全等比較(===)則對這些不定態(tài)或高阻值的位也逐位比較,只有兩個操作數(shù)完全逐位相等,其結(jié)果為1,否則為0。

如果操作數(shù)的長度不相等,長度較小的操作數(shù)在左側(cè)添0補位,例如:==等于!=不等于===全等于!==全不等于等式運算結(jié)果是邏輯值:1或0.例:adata=‘b11x0bdata=‘b11x0則adata==bdata運算結(jié)果是x

而adata===bdata

運算結(jié)果是16縮位運算符單目運算符

溫馨提示

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

評論

0/150

提交評論