Verilog-2001新增特性_第1頁(yè)
Verilog-2001新增特性_第2頁(yè)
Verilog-2001新增特性_第3頁(yè)
Verilog-2001新增特性_第4頁(yè)
Verilog-2001新增特性_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、標(biāo)簽: FPGA  Verilog  【原創(chuàng)】Verilog-2001新增特性(實(shí)例分析)       Verilog-2001標(biāo)準(zhǔn)在2001年就發(fā)布了,不過(guò)翻了一些Verilog書(shū)籍,對(duì)Verilog-2001的新增特性很少有提及,即使提到了,也只是寥寥數(shù)語(yǔ)帶過(guò),其實(shí)在Verilog-2001中做了很多有用的改進(jìn),給編程帶來(lái)很大的幫助,有必要詳細(xì)了解。       在Quartus II軟件中現(xiàn)在支持的Verilog標(biāo)準(zhǔn)有三類(lèi),即Ve

2、rilog-1995,Verilog-2001,以及SystemVerilog-2005.具體用那種標(biāo)準(zhǔn)進(jìn)行編譯綜合,需要在設(shè)置對(duì)話框中進(jìn)行設(shè)置,如下圖所示:       下面對(duì)Verilog-2001新增特性進(jìn)行詳細(xì)說(shuō)明,部分說(shuō)明用實(shí)例進(jìn)行解析。l         generate語(yǔ)句Verilog-2001添加了generate循環(huán),允許產(chǎn)生module和primitive的多個(gè)實(shí)例化,同時(shí)也可以產(chǎn)生多個(gè)variable,net,task,functi

3、on,continous assignment,initial和always。在generate語(yǔ)句中可以引入if-else和case語(yǔ)句,根據(jù)條件不同產(chǎn)生不同的實(shí)例化。為此,Verilog-2001還增加了以下關(guān)鍵字:generate,endgenerate,genvar,localparam。genvar為新增數(shù)據(jù)類(lèi)型,存儲(chǔ)正的integer。在generate語(yǔ)句中使用的index必須定義成genvar類(lèi)型。localparam與parameter有些類(lèi)似,不過(guò)其不能通過(guò)redefinition改變值。除了可以在generate語(yǔ)句中使用if-else,case外,還能使用for語(yǔ)句進(jìn)行

4、循環(huán)。下面是一個(gè)使用generate的例子,根據(jù)a_width和b_width的不同,實(shí)例化不同的multiplier。module multiplier (a, b, product);parameter a_width = 8, b_width = 8;localparam product_width = a_width+b_width;input a_width-1:0 a;input b_width-1:0 b;outputproduct_width-1:0product;generateif(a_width < 8) | (b_width < 8)CLA_multipli

5、er #(a_width, b_width)u1 (a, b, product);elseWALLACE_multiplier #(a_width, b_width)u1 (a, b, product);endgenerateendmodule在下面的例子中,在generate語(yǔ)句中使用了for語(yǔ)句。module Nbit_adder (co, sum, a, b, ci);parameter SIZE = 4;output SIZE-1:0 sum;output co;input SIZE-1:0 a, b;input ci;wire SIZE:0 c;genvar i;assign c0

6、= ci;assign co = cSIZE;generatefor(i=0; i<SIZE; i="i"+1)begin:addbitwire n1,n2,n3; /internal netsxor g1 ( n1, ai, bi);xor g2 (sumi,n1, ci);and g3 ( n2, ai, bi);and g4 ( n3, n1, ci);or g5 (ci+1,n2, n3);endendgenerateendmodulegenerate執(zhí)行過(guò)程中,每一個(gè)generated net在每次循環(huán)中有唯一的名字,比如n1在4次循環(huán)中會(huì)產(chǎn)生如下名字:ad

7、dbit0.n1addbit1.n1addbit2.n1addbit3.n1這也是為什么在begin-end塊語(yǔ)句需要名字的一個(gè)原因。同樣,實(shí)例化的module,gate等在每次循環(huán)中也有不同的名字。addbit0.g1addbit1.g1addbit2.g1addbit3.g1l         constant functionsVerilog的語(yǔ)法要求定義向量的寬度或數(shù)組大小時(shí)其值必須是一個(gè)確定的數(shù)字或一個(gè)常量表達(dá)式。比如:parameter WIDTH = 8;wire WIDTH-1:0 data;在Ve

8、rilog-1995標(biāo)準(zhǔn)中,常量表達(dá)式只能是基于一些常量的算術(shù)操作。而在Verilog-2001中增加了constant function,其定義與普通的function一樣,不過(guò)constant function只允許操作常量。下面是一個(gè)使用constant function的例子,clogb2函數(shù)返回輸入值2次方的次數(shù)。module ram (address_bus, write, select, data);parameter SIZE = 1024;input clogb2(SIZE)-1:0 address_bus;.function integer clogb2 (input in

9、teger depth);beginfor(clogb2=0; depth>0; clogb2=clogb2+1)depth = depth >> 1;endendfunction.endmodulel         Indexed vector part selects在Verilog-1995中,可以選擇向量的任一位輸出,也可以選擇向量的連續(xù)幾位輸出,不過(guò)此時(shí)連續(xù)幾位的始末數(shù)值的index需要是常量。而在Verilog-2001中,可以用變量作為index,進(jìn)行part select。bas

10、e_expr +: width_expr /positive offsetbase_expr -: width_expr /negative offset其中base_expr可以是變量,而width_expr必須是常量。+:表示由base_expr向上增長(zhǎng)width_expr位,-:表示由base_expr向上遞減width_expr位。例如:reg 63:0 word;reg 3:0 byte_num; /a value from 0 to 7wire 7:0 byteN = wordbyte_num*8 +: 8;如果byte_num的值為4,則word39:32賦值給byteN。l&#

11、160;        多維數(shù)組Verilog-1995只允許一維數(shù)組,而Verilog-2001允許多維數(shù)組。/1-dimensional array of 8-bit reg variables/(allowed in Verilog-1995 and Verilog-2001)reg 7:0 array1 0:255;wire 7:0 out1 = array1address;/3-dimensional array of 8-bit wire nets/(new for Verilog-2001)wire 7:0 a

12、rray3 0:2550:2550:15;wire 7:0 out3 = array3addr1addr2addr3;而且在Verilog-1995中不能對(duì)一維數(shù)組中取出其中的一位,比如要取出上面array175,需要將array17賦給一個(gè)reg變量比如arrayreg <= array17,再?gòu)腶rrayreg中取出bit5,即arrayreg5。而在Verilog-2001中,可以任意取出多維數(shù)組中的一位或連續(xù)幾位,比如:/select the high-order byte of one word in a/2-dimensional array of 32-bit reg va

13、riablesreg 31:0 array2 0:2550:15;wire 7:0 out2 = array2100731:24;l         符號(hào)運(yùn)算在Verilog-1995中,integer數(shù)據(jù)類(lèi)型為有符號(hào)類(lèi)型,而reg和wire類(lèi)型為無(wú)符號(hào)類(lèi)型。而且integer大小固定,即為32位數(shù)據(jù)。在Verilog-2001中對(duì)符號(hào)運(yùn)算進(jìn)行了如下擴(kuò)展。Reg和wire變量可以定義為有符號(hào)類(lèi)型:reg signed 63:0 data;wire signed 7:0 vector;input signed 31:

14、0 a;function signed 128:0 alu;函數(shù)返回類(lèi)型可以定義為有符號(hào)類(lèi)型。帶有基數(shù)的整數(shù)也可以定義為有符號(hào)數(shù),在基數(shù)符號(hào)前加入s符號(hào)。16'hC501 /an unsigned 16-bit hex value16'shC501 /a signed 16-bit hex value操作數(shù)可以在無(wú)符號(hào)和有符號(hào)之間轉(zhuǎn)變。通過(guò)系統(tǒng)函數(shù)$signed和$unsigned實(shí)現(xiàn)。reg 63:0 a; /unsigned data typealways (a) beginresult1 = a / 2; /unsigned arithmeticresult2 = $si

15、gned(a) / 2;/signed arithmeticend增加了算術(shù)移位操作,在Verilog-1995中只有邏輯移位操作。比如D的初始值為8b10100011,則:D >> 3 /logical shift yields 8'b00010100D >>> 3 /arithmetic shift yields 8'b11110100l         指數(shù)運(yùn)算Verilog-2001中增加了指數(shù)運(yùn)算操作,操作符為*。always (posedge clock)r

16、esult = base * exponent;l         遞歸函數(shù)和任務(wù)在Verilog-2001中增加了一個(gè)新的關(guān)鍵字:automatic。該關(guān)鍵字可以讓任務(wù)或函數(shù)在運(yùn)行中從新調(diào)用該任務(wù)和函數(shù)。function automatic 63:0 factorial;input 31:0 n;if (n = 1)factorial = 1;elsefactorial = n * factorial(n-1);endfunctionl      

17、60;  組合邏輯敏感信號(hào)通配符在組合邏輯設(shè)計(jì)中,需要在敏感信號(hào)列表中包含所有組合邏輯輸入信號(hào),以免產(chǎn)生鎖存器。在大型的組合邏輯中比較容易遺忘一些敏感信號(hào),因此在Verilog-2001中可以使用*包含所有的輸入信號(hào)作為敏感信號(hào)。always * /combinational logic sensitivityif (sel)y = a;elsey = b;l         使用逗號(hào)隔開(kāi)敏感信號(hào)Verilog-2001中可以用逗號(hào)來(lái)代替or隔開(kāi)敏感信號(hào)。always (a or b or c or d

18、or sel)always (a, b, c, d, sel)l         Automatic width extension beyond 32 bits在Verilog-1995中,在不指定基數(shù)的情況下為大于32位的變量賦高阻值,只能使其低32位為高阻值,其他高位會(huì)被設(shè)置為0,此時(shí)需要指定基數(shù)值才能將高位賦值為高阻。Verilog-1995:parameter WIDTH = 64;reg WIDTH-1:0 data;data = 'bz; /fills with 'h00000000zzzzzzzzdata = 64'bz; /fills with 'hzzzzzzzzzzzzzzzz而在Verilog-2001中并沒(méi)有這一限制。Verilog-2001:parameter WIDTH = 64;reg WIDTH-1:0 data;data = 'bz; /fills with

溫馨提示

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

評(píng)論

0/150

提交評(píng)論