EDA第5章verilogHDL語法規(guī)范2_第1頁
EDA第5章verilogHDL語法規(guī)范2_第2頁
EDA第5章verilogHDL語法規(guī)范2_第3頁
EDA第5章verilogHDL語法規(guī)范2_第4頁
EDA第5章verilogHDL語法規(guī)范2_第5頁
已閱讀5頁,還剩112頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Verilog Verilog HDLHDL數(shù)據(jù)類型包括數(shù)據(jù)類型包括:p值值的的集合集合p網(wǎng)絡網(wǎng)絡和和變量變量p向量向量p強度強度p隱含聲明隱含聲明p網(wǎng)絡類型網(wǎng)絡類型p寄存器類型寄存器類型p整數(shù)整數(shù)/ /實數(shù)實數(shù)/ /時間時間p數(shù)組數(shù)組p參數(shù)參數(shù)pVerilogVerilog名字名字空間空間Verilog Verilog HDLHDL有下列四種基本的值:有下列四種基本的值:p 0 邏輯邏輯0或或“假假”狀態(tài)。狀態(tài)。p 1 邏輯邏輯1或或“真真”狀態(tài)。狀態(tài)。p x(X) 未知未知狀態(tài),對大小寫不敏感。狀態(tài),對大小寫不敏感。p z(Z) 高高阻狀態(tài),對大小寫不敏感。阻狀態(tài),對大小寫不敏感。 在在V

2、erilog HDLVerilog HDL中,根據(jù)中,根據(jù)賦值賦值和和對值的保持方式對值的保持方式不同,不同,可將數(shù)據(jù)類型主要分為兩大類可將數(shù)據(jù)類型主要分為兩大類:p網(wǎng)絡型網(wǎng)絡型:表示表示器件之間的物理連接,需要器件之間的物理連接,需要門和模塊的驅(qū)動門和模塊的驅(qū)動。p變量型變量型:變量是對數(shù)據(jù)存儲元件的抽象。變量是對數(shù)據(jù)存儲元件的抽象。 聲明聲明網(wǎng)絡網(wǎng)絡類型類型的語法的語法格式如下格式如下:net_typenet_type range delay range delay net_namenet_name ,net_namenet_name;其中:其中:p net_type net_type 表

3、示表示網(wǎng)絡網(wǎng)絡類類型數(shù)據(jù)。型數(shù)據(jù)。p range range 用來用來表示表示數(shù)據(jù)數(shù)據(jù)為標量或矢量。若沒有聲明范圍,則表為標量或矢量。若沒有聲明范圍,則表示示數(shù)據(jù)為數(shù)據(jù)為1 1位的標量。否則,由該項指定數(shù)據(jù)的矢量形式位的標量。否則,由該項指定數(shù)據(jù)的矢量形式。p delay delay 指定仿真延遲時間。指定仿真延遲時間。p net_name net_name 網(wǎng)絡名字??梢砸痪W(wǎng)絡名字??梢砸淮味x次定義多個網(wǎng)絡多個網(wǎng)絡,多個網(wǎng)絡之間多個網(wǎng)絡之間用用逗號逗號隔隔開開。聲明聲明網(wǎng)絡網(wǎng)絡類型類型的的Verilog HDLVerilog HDL描述的描述的例子例子 wand wand w; w; /

4、/ 一個標一個標量量wandwand網(wǎng)絡網(wǎng)絡類型類型 tri tri 15: 0 bus; 15: 0 bus; / / 1616位三位三態(tài)態(tài)總線總線網(wǎng)絡類型網(wǎng)絡類型 wire 0: 31 w1, w2; / wire 0: 31 w1, w2; / 兩個兩個3232位位網(wǎng)絡網(wǎng)絡類型類型,MSBMSB為為bit0bit0變量變量是對數(shù)據(jù)存儲元件的抽象是對數(shù)據(jù)存儲元件的抽象。p從從當前當前賦值賦值到下一次賦值之前,變量應當?shù)较乱淮钨x值之前,變量應當保持保持當前的當前的值值不不變變。注注:p對于對于regreg,timetime和和integerinteger這些這些變量變量類類型數(shù)據(jù),型數(shù)據(jù),它

5、們的初始值應當它們的初始值應當是是x x。p對于對于realreal和和realtimerealtime變量變量類類型數(shù)據(jù),型數(shù)據(jù),默認的初始值是默認的初始值是0.00.0。p在在變量數(shù)據(jù)類型中,只有變量數(shù)據(jù)類型中,只有regreg和和integerinteger變量型數(shù)據(jù)類型是可綜合的,變量型數(shù)據(jù)類型是可綜合的,其它是不可綜合的。其它是不可綜合的。p驅(qū)動強度驅(qū)動強度u在在一個網(wǎng)絡型數(shù)據(jù)的聲明語句一個網(wǎng)絡型數(shù)據(jù)的聲明語句中,如果中,如果對數(shù)據(jù)對象對數(shù)據(jù)對象進行了連續(xù)賦值,就可以為聲明的數(shù)據(jù)對象指定驅(qū)進行了連續(xù)賦值,就可以為聲明的數(shù)據(jù)對象指定驅(qū)動強度動強度。u門門級元件的聲明只能指定驅(qū)動強度級元

6、件的聲明只能指定驅(qū)動強度。根據(jù)。根據(jù)驅(qū)動源的驅(qū)動源的強度,其驅(qū)動強度可以強度,其驅(qū)動強度可以是:是:SupplyStrongpull/weak 如果如果沒有顯示聲明網(wǎng)絡或者變量,則在下面的情況沒有顯示聲明網(wǎng)絡或者變量,則在下面的情況中,默中,默認認將其指定為網(wǎng)絡類型:將其指定為網(wǎng)絡類型:p在在一個端口表達式的聲明中,如果沒有對端口的數(shù)據(jù)類型進行顯式說一個端口表達式的聲明中,如果沒有對端口的數(shù)據(jù)類型進行顯式說明,則默認的端口數(shù)據(jù)類型就為明,則默認的端口數(shù)據(jù)類型就為wirewire型型。input a,b;input a,b;p模塊模塊例化的端口列表中,如果先前沒有對端口的數(shù)據(jù)類型進行顯式說例化的

7、端口列表中,如果先前沒有對端口的數(shù)據(jù)類型進行顯式說明,那么默認的端口數(shù)據(jù)類型為網(wǎng)絡型標量明,那么默認的端口數(shù)據(jù)類型為網(wǎng)絡型標量。 FADD fadd1(a,b,cout,sum) FADD fadd1(a,b,cout,sum)p如果一個標識符出現(xiàn)在如果一個標識符出現(xiàn)在連續(xù)賦值語句連續(xù)賦值語句的左側(cè),而該標識符先前未曾被的左側(cè),而該標識符先前未曾被聲明,那么該標識符的數(shù)據(jù)類型就被隱式聲明為網(wǎng)絡型標量聲明,那么該標識符的數(shù)據(jù)類型就被隱式聲明為網(wǎng)絡型標量。 assign A=B; assign A=B;下下表表給給出了這些常用的不同網(wǎng)絡類型的功能及其可綜合性。出了這些常用的不同網(wǎng)絡類型的功能及其可

8、綜合性。類型類型功能功能可可綜合性綜合性wire,tri標準標準內(nèi)部連接線內(nèi)部連接線supply1,supply0電源電源和地和地wor,trior多多驅(qū)動源線或驅(qū)動源線或wand,triand多多驅(qū)動源線與驅(qū)動源線與trireg能能保存電荷的保存電荷的nettri1,tri0無無驅(qū)動時上拉驅(qū)動時上拉/下拉下拉簡單的網(wǎng)絡類型說明格式為簡單的網(wǎng)絡類型說明格式為: net_kindmsb:lsbnet1,net2, . . . , netN;其中:其中:p net_kind 是是上述網(wǎng)絡類型的一種。上述網(wǎng)絡類型的一種。p msb和和lsb 用于用于定義網(wǎng)絡范圍的常量表達式。其范圍定義是可選的。定義

9、網(wǎng)絡范圍的常量表達式。其范圍定義是可選的。如果沒有定義范圍,默認的網(wǎng)絡類型為如果沒有定義范圍,默認的網(wǎng)絡類型為1位。位。wirewire和和tritri網(wǎng)絡類型網(wǎng)絡類型p 用于用于連接單元的連線是最常見的網(wǎng)絡類型。連線(連接單元的連線是最常見的網(wǎng)絡類型。連線(wire)網(wǎng)絡網(wǎng)絡與與 三態(tài)三態(tài)(tri)網(wǎng)絡語法和語義一致)網(wǎng)絡語法和語義一致。p 三態(tài)網(wǎng)絡可以用于描述多個驅(qū)動源驅(qū)動同一根線的網(wǎng)絡三態(tài)網(wǎng)絡可以用于描述多個驅(qū)動源驅(qū)動同一根線的網(wǎng)絡類型類型, 并且并且沒有其他特殊的意義沒有其他特殊的意義。p 如果如果多個驅(qū)動源驅(qū)動一個連線(或三態(tài)網(wǎng)絡)由多個驅(qū)動源驅(qū)動一個連線(或三態(tài)網(wǎng)絡)由下表下表確確

10、定定網(wǎng)絡網(wǎng)絡 的有效值的有效值。Wire/tri01xz00 xx01x1x1xxxxxz01xz由由關(guān)鍵詞關(guān)鍵詞wirewire定義常用的網(wǎng)絡類型。定義常用的網(wǎng)絡類型。wirewire型型網(wǎng)絡網(wǎng)絡的的語法語法格式格式如下如下:wire n-1:0 ,;其中其中: name1,namen表示表示wire型型網(wǎng)絡的網(wǎng)絡的名字。名字。wire型變量的說明型變量的說明 wire L; /將上述電路的輸出信號將上述電路的輸出信號L 聲明為聲明為網(wǎng)絡網(wǎng)絡類類型型 wire 7:0 data_bus; /聲明一個聲明一個8位寬的網(wǎng)絡位寬的網(wǎng)絡 類類型總線型總線tri0tri0和和tri1tri1網(wǎng)絡網(wǎng)絡類

11、型類型p 這這類網(wǎng)絡類型可用類網(wǎng)絡類型可用于于帶有上拉或下拉電阻網(wǎng)絡的建模。帶有上拉或下拉電阻網(wǎng)絡的建模。ptri0/tri1tri0/tri1網(wǎng)絡的特征是網(wǎng)絡的特征是:u無無驅(qū)動源驅(qū)動源驅(qū)動驅(qū)動該網(wǎng)絡時該網(wǎng)絡時,它的值為它的值為0 0(tri1tri1的值為的值為1 1)。u網(wǎng)絡網(wǎng)絡值的驅(qū)動強度都為值的驅(qū)動強度都為pullpull。p tri0 tri0相當于這樣一相當于這樣一個網(wǎng)絡個網(wǎng)絡:有一個強度為:有一個強度為pullpull的的0 0值連續(xù)驅(qū)動值連續(xù)驅(qū)動該該網(wǎng)絡網(wǎng)絡。p tri1tri1相當于這樣一相當于這樣一個網(wǎng)絡個網(wǎng)絡:有一個強度為:有一個強度為pullpull的的1 1值連續(xù)驅(qū)

12、動值連續(xù)驅(qū)動該該網(wǎng)絡網(wǎng)絡。下下表給表給出在多個驅(qū)動源情況下出在多個驅(qū)動源情況下tri0tri0或或tri1tri1網(wǎng)的有效值。網(wǎng)的有效值。Tri0/tri101xz00 xx01x1x1xxxxxz01x0/1supply0supply0和和supply1supply1網(wǎng)絡類型網(wǎng)絡類型p supply0 supply0用于對用于對“地地”建模,即低電平建模,即低電平0.0.p supply1 supply1網(wǎng)用于對電源建模,即高電平網(wǎng)用于對電源建模,即高電平1 1。supply0和和supply1網(wǎng)絡類型網(wǎng)絡類型描述描述 supply0 Gnd,ClkGnd; supply1 2:0 Vcc;

13、未未說明的網(wǎng)絡說明的網(wǎng)絡p在在Verilog HDLVerilog HDL中,有可能不必聲明某種網(wǎng)絡類型。在這樣的中,有可能不必聲明某種網(wǎng)絡類型。在這樣的情況下,網(wǎng)絡類型為情況下,網(wǎng)絡類型為1 1位網(wǎng)絡??梢允褂梦痪W(wǎng)絡。可以使用default_nettypedefault_nettype編編譯器指令改變這一隱式網(wǎng)絡說明方式。使用方法如下譯器指令改變這一隱式網(wǎng)絡說明方式。使用方法如下: default_nettype net_kind帶有帶有下列編譯器指令:下列編譯器指令:default_nettype wanddefault_nettype wand任何未被說明的網(wǎng)默認為任何未被說明的網(wǎng)默認為

14、1 1位線與網(wǎng)。位線與網(wǎng)。 通過通過過程分配語句給寄存器類型變量分配值。過程分配語句給寄存器類型變量分配值。在在每個每個分配分配的過程中間,的過程中間,寄存器寄存器保持保持上次分配的上次分配的值。值。p它用于對硬件寄存器進行建模??梢詫呇孛舾校ū热纾河|發(fā)器)它用于對硬件寄存器進行建模??梢詫呇孛舾校ū热纾河|發(fā)器)和電平敏感(比如:置位和電平敏感(比如:置位/ /復位和鎖存器)復位和鎖存器)的的存儲元件存儲元件進行進行建模。建模。注:注: 一一個寄存器變量不一定代表一個硬件保存元素,這是因為它也能個寄存器變量不一定代表一個硬件保存元素,這是因為它也能用于表示一個組合邏輯。用于表示一個組合邏輯

15、。寄存器寄存器型變量型變量與網(wǎng)絡類型的區(qū)別主要在于:與網(wǎng)絡類型的區(qū)別主要在于:p寄存器寄存器型變量保持最后一次的賦值。只能在型變量保持最后一次的賦值。只能在initial或或always內(nèi)部對內(nèi)部對寄存器型變量進行寄存器型變量進行賦值賦值操作操作。p網(wǎng)絡網(wǎng)絡型型數(shù)據(jù)需要有連續(xù)的數(shù)據(jù)需要有連續(xù)的驅(qū)動驅(qū)動源源。寄存器型變量聲明的格式如下:寄存器型變量聲明的格式如下: reg_type range reg_name, reg_name; 其中:其中:preg_type為寄存器類型。為寄存器類型。prange為矢量范圍,為矢量范圍,MSB:LSB格式,只對格式,只對reg類型有效。類型有效。preg_

16、name為為reg型變量的名字,一次可定義多個型變量的名字,一次可定義多個reg型變型變量,使用逗號分開。量,使用逗號分開。例例: : 寄存器型變量的寄存器型變量的Verilog HDLVerilog HDL描述例子描述例子module ff( input clk, input rst, input A_IN, output reg B_OUT );initialbegin B_OUT=1b0;endalways (posedge clk or posedge rst)begin if(rst) B_OUT=1b1; else B_OUT = =關(guān)系關(guān)系操作符操作符!邏輯邏輯非非&邏輯邏輯與與

17、|邏輯邏輯或或=邏輯邏輯相等相等!=邏輯邏輯不相等不相等=條件條件(case)相等相等!=條件條件(case)不相等不相等按按位取反位取反&按按位與位與|按按位或位或按按位異或位異或或者或者按按位異或非位異或非&規(guī)約規(guī)約與與&規(guī)約規(guī)約與非與非 |規(guī)約規(guī)約或或|規(guī)約規(guī)約或非或非規(guī)約規(guī)約異或異或或者或者規(guī)約規(guī)約異或非異或非 邏輯邏輯右移右移 算術(shù)算術(shù)右移右移?:條件條件實數(shù)實數(shù)支持的操作符支持的操作符一元一元+和和一元一元-一一元操作符元操作符+ - * / *算術(shù)運算算術(shù)運算符符 = =關(guān)系關(guān)系操作符操作符! & |邏輯邏輯= !=邏輯邏輯相等相等?:條件條件同同一行內(nèi)的操作符具有相同的優(yōu)先級一

18、行內(nèi)的操作符具有相同的優(yōu)先級。+ - ! & & | | (一元一元)最高最高優(yōu)先級優(yōu)先級* / %+ - (二元二元) = != = !=&(二元)(二元) (二元)(二元) |(二元)(二元)&|?:(條件操作符)(條件操作符) 最低最低優(yōu)先級優(yōu)先級算術(shù)操作符算術(shù)操作符 下下表表給給出了二元操作符的定義出了二元操作符的定義列表列表a+ba加加ba-ba減減ba*ba乘乘ba/ba除除ba%ba模模ba*ba的的b次冪乘次冪乘p 整數(shù)除法截斷任何小數(shù)部分。例如:整數(shù)除法截斷任何小數(shù)部分。例如:7/47/4結(jié)果為結(jié)果為1 1。p 對于除法和取模運算,如果第二個操作數(shù)為對于除法和取模運算,如果第

19、二個操作數(shù)為0 0,則整個,則整個結(jié)果的值為結(jié)果的值為x x。p取取模操作符求出與第一個操作符符號相同的余數(shù)。模操作符求出與第一個操作符符號相同的余數(shù)。7%47%4結(jié)果結(jié)果為為3 3,而:,而:-7%4 -7%4 結(jié)果為結(jié)果為-3-3。冪乘操作符規(guī)則冪乘操作符規(guī)則op1op2負數(shù)負數(shù)1正數(shù)正數(shù)op1*op2op2是奇數(shù)是奇數(shù)-1op2是偶數(shù)是偶數(shù)-101op1*op2零零11111負數(shù)負數(shù)0op2是奇數(shù)是奇數(shù)-1op2是偶數(shù)是偶數(shù)-1x10如果冪乘的第一個操作數(shù)為如果冪乘的第一個操作數(shù)為0 0,并且第二個操作數(shù)不是正數(shù);或者第一,并且第二個操作數(shù)不是正數(shù);或者第一個操作數(shù)實負數(shù),第二個操作數(shù)不

20、是整數(shù),則沒有個操作數(shù)實負數(shù),第二個操作數(shù)不是整數(shù),則沒有定義定義其結(jié)果。其結(jié)果。p 對于一元操作,其優(yōu)先級大于二元操作對于一元操作,其優(yōu)先級大于二元操作。 下表給出了一元下表給出了一元操作符操作符p 在在算術(shù)算術(shù)操作符操作符中中,如果,如果任任何何操作數(shù)操作數(shù)的位值的位值是是x x或或z z,那么,那么整個整個結(jié)果結(jié)果為為x x。p 算術(shù)表達式結(jié)果的長度由最長的操作數(shù)決定。在算術(shù)表達式結(jié)果的長度由最長的操作數(shù)決定。在賦值語賦值語句句中中, , 算術(shù)算術(shù)操作結(jié)果的長度由操作符左端目標操作結(jié)果的長度由操作符左端目標長度決定長度決定。+m一一元加元加m(和(和m一樣)一樣)-m一一元減元減m算術(shù)算

21、術(shù)操作的操作的Verilog HDL描述描述例子例子 10%3=1 11%3=2 12%3=0 -10%3=-1 11%-3=2 -4d12%3=1 3*2=9 2*3=8 2*0=1 0*0=1 2.0*-3sb1=0.5 2*-3sb1=0 0*-1=x 9*0.5=3.0 9.0*(1/2)=1.0 -3.0*2.0=9.0在表達式中使用整數(shù)和寄存器數(shù)據(jù)類型的在表達式中使用整數(shù)和寄存器數(shù)據(jù)類型的Verilog Verilog HDLHDL描述的例子描述的例子 integer intA; reg 15:0 regA; reg signed 15:0 regS; intA = -4d12;

22、regA = intA / 3; /表達式是表達式是-4, intA是整數(shù)數(shù)據(jù)類型是整數(shù)數(shù)據(jù)類型,regA的值的值是是65532regal = -4d12; / regA是是65524intA = regA / 3; / 表達式的值為表達式的值為21841,regA是是寄存器寄存器類型數(shù)據(jù)類型數(shù)據(jù)intA = -4d12 / 3; / 表達式的結(jié)果為表達式的結(jié)果為1431655761,是,是一一個個32位的位的 寄存器寄存器數(shù)據(jù)數(shù)據(jù)regA = -12 / 3; / 表達式結(jié)果表達式結(jié)果-4,一個整數(shù)類型,一個整數(shù)類型,regA 是是 65532regS = -12 / 3; / 表達式結(jié)果表

23、達式結(jié)果-4。regS是有符號寄存器是有符號寄存器regS = -4sd12 / 3; / 表達式結(jié)果表達式結(jié)果1。-4sd12為為4關(guān)系操作符關(guān)系操作符關(guān)系關(guān)系操作符列表操作符列表aba大于大于ba=ba大于等于大于等于b關(guān)系關(guān)系操作符有下面特點:操作符有下面特點:p 關(guān)系關(guān)系操作符的結(jié)果為真(操作符的結(jié)果為真(1)或假()或假(0)。)。p 如果如果操作數(shù)中有一位為操作數(shù)中有一位為X或或Z,那么結(jié)果為,那么結(jié)果為X。p 如果如果關(guān)系運算存在無符號關(guān)系運算存在無符號數(shù)時,將表達式看作是無符號數(shù)時,將表達式看作是無符號數(shù)。當操作數(shù)長度不數(shù)。當操作數(shù)長度不同時同時,位寬較,位寬較短的操作數(shù)將短的

24、操作數(shù)將0擴展到擴展到寬度較大的操作數(shù)寬度較大的操作數(shù)的位寬范圍。的位寬范圍。p如果如果關(guān)系運算都是有符號關(guān)系運算都是有符號數(shù)時,將表達式看作是有符號數(shù)時,將表達式看作是有符號的。當?shù)?。當操作?shù)長度不同時操作數(shù)長度不同時,位寬,位寬較短的操作數(shù)將符號擴較短的操作數(shù)將符號擴展到寬度較大的操作數(shù)的寬度范圍展到寬度較大的操作數(shù)的寬度范圍。 p 所所有關(guān)系運算符的優(yōu)先級相同,但是比算數(shù)運算符有關(guān)系運算符的優(yōu)先級相同,但是比算數(shù)運算符的優(yōu)先級的優(yōu)先級要低要低。p 如果如果操作數(shù)操作數(shù)中有實數(shù)中有實數(shù),則將所有操作數(shù)轉(zhuǎn)換則將所有操作數(shù)轉(zhuǎn)換為實數(shù)。為實數(shù)。然后進行關(guān)系運算然后進行關(guān)系運算。關(guān)系關(guān)系操作符的操

25、作符的Verilog HDL描述例子描述例子 a foo 1等價于等價于a (foo - 1) foo - (1 a)不等價于不等價于foo - 1 a 相等操作符相等操作符 下表給下表給出了相等關(guān)系操作符列表出了相等關(guān)系操作符列表a=ba等于等于b,包含,包含x和和za!=ba不等于不等于b,包含,包含x和和za=ba等于等于b,結(jié)果可能未知(比較不包括,結(jié)果可能未知(比較不包括x和和z)a!=ba不等于不等于b,結(jié)果可能未知(比較不包括,結(jié)果可能未知(比較不包括x和和z)相等關(guān)系操作符有下面相等關(guān)系操作符有下面特點:特點:p 相等相等操作符有相同的優(yōu)先級。操作符有相同的優(yōu)先級。p 如果如果

26、相等操作中存在無符號數(shù),當操作數(shù)長度不同時,相等操作中存在無符號數(shù),當操作數(shù)長度不同時,長度長度較短較短的操作數(shù)將的操作數(shù)將0擴展到擴展到寬度寬度較大較大的操作數(shù)的范圍。的操作數(shù)的范圍。p 如果如果相等操作中都是有符號數(shù),當操作數(shù)長度不同時,相等操作中都是有符號數(shù),當操作數(shù)長度不同時,長度較短長度較短的操作數(shù)將的操作數(shù)將符號符號擴展擴展到到寬度寬度較大較大的操作數(shù)的范的操作數(shù)的范圍。圍。p如果操作數(shù)中間有實數(shù),如果操作數(shù)中間有實數(shù),則則將所有操作數(shù)將所有操作數(shù)都都轉(zhuǎn)換為實數(shù)。轉(zhuǎn)換為實數(shù)。然后進行相等運算。然后進行相等運算。p 如果如果比較結(jié)果為假,則結(jié)果為比較結(jié)果為假,則結(jié)果為0;否則結(jié)果為;

27、否則結(jié)果為1。l 在在=和和!=比較中,值比較中,值x和和z嚴格按位比較。也就是說,嚴格按位比較。也就是說,不進行解釋,并且結(jié)果一定可知。不進行解釋,并且結(jié)果一定可知。這個這個比較可比較可用于用于case語語句描述中。句描述中。l 在在=和和!=比較中,值比較中,值x和和z具有通常的意義,且結(jié)果可以不具有通常的意義,且結(jié)果可以不為為x。也就是說,在邏輯比較中,如果兩個操作數(shù)之一包。也就是說,在邏輯比較中,如果兩個操作數(shù)之一包含含x或或z,結(jié)果為未知的值(,結(jié)果為未知的值(x)。)。這個用于邏輯比較中。這個用于邏輯比較中。相等相等關(guān)系操作符關(guān)系操作符Verilog HDLVerilog HDL描

28、述的例子描述的例子Data= b11x0;Addr= b11x0; 那么:那么:Data=Addr不定,也就是說值為不定,也就是說值為x;但;但Data=Addr比較結(jié)果為比較結(jié)果為真,也就是說值為真,也就是說值為1。p 如果如果操作數(shù)的長度不相等,長度較小的操作數(shù)在左側(cè)操作數(shù)的長度不相等,長度較小的操作數(shù)在左側(cè)添添0補位,例如:補位,例如:2b10 = = 4b0010,與后面的表達式相,與后面的表達式相同:同:4b0010 = = 4b0010,結(jié)果為真(,結(jié)果為真(1)。)。邏輯操作符邏輯操作符p 符號符號&(邏輯與)(邏輯與)和符號和符號|(邏輯或)(邏輯或)用于邏輯的連接。用于邏輯的

29、連接。p 邏輯比較邏輯比較的結(jié)果為的結(jié)果為1(真)或者(真)或者0(假)(假)。當結(jié)果模糊的。當結(jié)果模糊的時候,為時候,為x。&(邏輯與)(邏輯與)的優(yōu)先級大于的優(yōu)先級大于|(邏輯或)(邏輯或)。邏輯操作的優(yōu)先級低于邏輯操作的優(yōu)先級低于關(guān)系操作和關(guān)系操作和相等操作。相等操作。p符號符號!(邏輯非)是一元操作符。(邏輯非)是一元操作符。p這些操作符在邏輯值這些操作符在邏輯值0/1上操作。邏輯操作的結(jié)構(gòu)為上操作。邏輯操作的結(jié)構(gòu)為0或或1邏輯邏輯關(guān)系操作的關(guān)系操作的Verilog HDLVerilog HDL描述例子描述例子1 1 假設假設alpha=237,beta=0 regA = alpha

30、& beta; / regA設置為設置為0 regB = alpha | beta; / regB設置為設置為1邏輯邏輯關(guān)系操作的關(guān)系操作的Verilog HDLVerilog HDL描述例子描述例子2 2 a size-1 & b != c & index != lastone 為了為了便于理解和查看設計,推薦使用下面的方法描述便于理解和查看設計,推薦使用下面的方法描述上上面面給出給出的的邏輯操作邏輯操作 (a size-1) & (b != c) & (index != lastone)邏輯關(guān)系操作的邏輯關(guān)系操作的Verilog HDLVerilog HDL描述例子描述例子3 3 if (

31、!inword) 也也可以表示為可以表示為: if (inword = 0)按按位位操作符操作符下表給出對于不同操作符按位操作的結(jié)果下表給出對于不同操作符按位操作的結(jié)果&(二元按位與)(二元按位與)0 1 x z01xz0 0 0 00 1 x x0 x x x0 x x x(二元按位異或)(二元按位異或)0 1 x z01xz0 1 x x1 0 x xx x x xx x x x(一元非一元非)1 0 x x|(二元按位或)(二元按位或)0 1 x z01xz0 1 x x1 1 1 1x 1 x xx 1 x x(二元按位異或非)(二元按位異或非)0 1 x z01xz1 0 x x0

32、1 x xx x x xx x x x 如果如果操作數(shù)長度不相等操作數(shù)長度不相等, , 長度較小的操作數(shù)在最左側(cè)添長度較小的操作數(shù)在最左側(cè)添0 0補位。補位。例如:例如:b0110b10000b0110b10000,與如下式的操作相同:,與如下式的操作相同:b00110b10000b00110b10000,結(jié)果為結(jié)果為b10110b10110。歸約操作符歸約操作符p 歸約歸約操作符在單一操作數(shù)的所有位上操作,并產(chǎn)生操作符在單一操作數(shù)的所有位上操作,并產(chǎn)生1 1位結(jié)位結(jié)果。歸約操作符有:果。歸約操作符有:u & (歸約與歸約與)l 如果如果存在位值為存在位值為0, 那么結(jié)果為那么結(jié)果為0。l 否

33、則否則如果如果存在位值為存在位值為x或或z,結(jié)果為,結(jié)果為x。l 否則否則結(jié)果為結(jié)果為1。u & ( 歸約與非歸約與非)l與與歸約操作符歸約操作符&相反。相反。u | ( 歸約或歸約或)l 如果如果存在位值為存在位值為1,那么結(jié)果為,那么結(jié)果為1。l 否則否則如果如果存在位存在位x或或z,結(jié)果為,結(jié)果為x。l 否則否則結(jié)果為結(jié)果為0。u | ( 歸約或非歸約或非)l與與歸約操作符歸約操作符|相反。相反。u ( 歸約異或歸約異或)p (歸約異或非歸約異或非)l 與與歸約操作符歸約操作符正好相反。正好相反。l 如果如果存在位值為存在位值為x或或z,那么結(jié)果為,那么結(jié)果為x。l 否則否則如果操作數(shù)中

34、有偶數(shù)個如果操作數(shù)中有偶數(shù)個1, 結(jié)果為結(jié)果為0。l 否則否則結(jié)果為結(jié)果為1。歸約歸約異或操作符用于決定向量中是否有位為異或操作符用于決定向量中是否有位為x x。下表給下表給出了一元規(guī)約操作結(jié)果的列表。出了一元規(guī)約操作結(jié)果的列表。操作數(shù)操作數(shù)&|4b00000101014b11111010014b01100110014b1000011010歸約歸約異或操作符的異或操作符的Verilog HDLVerilog HDL描述的例子描述的例子 假定假定: MyReg=4b01x0; 則則: MyReg結(jié)果為結(jié)果為x 上述上述功能使用如下的功能使用如下的if語句檢測:語句檢測: if (MyReg=1b

35、x) $display(There is an unknown in the vector MyReg !)注:注: 邏輯相等邏輯相等(=)操作符不能用于比較操作,這是因為邏輯相等操作符不能用于比較操作,這是因為邏輯相等操作符比較操作將只會產(chǎn)生結(jié)果操作符比較操作將只會產(chǎn)生結(jié)果x。全等操作符期望的結(jié)果為值。全等操作符期望的結(jié)果為值1。移位操作符移位操作符 移位移位操作符包括:操作符包括:p (邏輯右移)(邏輯右移)p (算術(shù)右移)(算術(shù)右移) 移位移位操作符操作符左側(cè)左側(cè)的的操作數(shù)操作數(shù)將將移動移動右側(cè)右側(cè)操作數(shù)操作數(shù)所指定的所指定的位數(shù)位數(shù),它是一個邏輯移位??臻e它是一個邏輯移位??臻e位位補補

36、0。如果右側(cè)操作數(shù)的如果右側(cè)操作數(shù)的值為值為x或或z,則則移位移位操作的結(jié)果為操作的結(jié)果為x。移位移位操作符的操作符的Verilog HDLVerilog HDL描述描述 例例: : 假設假設start的值為的值為4b0001。 module ashift; reg 3:0 start, result; initial begin start = 1; result = (start 2); /結(jié)果是結(jié)果是1110 end endmodule條件操作符條件操作符條件條件操作符操作符將將根據(jù)根據(jù)條件表達式的條件表達式的值值來來選擇選擇表達式表達式,格式格式如下:如下: cond_expr con

37、d_expr ? expr1:expr2? expr1:expr2p 如果如果cond_expr為真為真(即值為即值為1),選擇,選擇expr1。p 如果如果cond_expr為假為假(值為值為0),選擇,選擇expr2。p 如果如果cond_expr為為x或或z,結(jié)果將是按以下邏輯,結(jié)果將是按以下邏輯expr1和和expr2按位操作的值:按位操作的值:0與與0得得0,1與與1得得1,其余情況為,其余情況為x。條件條件操作符的操作符的Verilog HDLVerilog HDL描述例子描述例子1 1 wire0:2Student=Marks18 ? Grade_A:Grade_C; 計算計算表

38、達式表達式Marks18的值:的值: (1)如果如果結(jié)果為真結(jié)果為真,則將則將Grade_A賦值賦值給給Student。 (2)如果如果結(jié)果為假結(jié)果為假,則將則將Grade_C賦值賦值給給Student。條件條件操作符的操作符的Verilog HDLVerilog HDL描述例子描述例子2 2 always#5 Ctr=(Ctr!=25)?(Ctr+1):5; 過程過程賦值中的表達式表明:賦值中的表達式表明: (1)如果如果Ctr不等于不等于25,則則將將Ctr的值的值加加1賦給賦給Ctr。 (2)如果如果Ctr等于等于為為25,則將,則將Ctr值重新置為值重新置為5連接連接和復制和復制操作操

39、作 連接連接操作是操作是將位寬較小的表達式將位寬較小的表達式合并合并形成位形成位寬較大的表達式的一種操作寬較大的表達式的一種操作。其描述格式如下:。其描述格式如下:expr1,expr2,.,exprNexpr1,expr2,.,exprN 由于由于非定長常數(shù)非定長常數(shù)的的位寬位寬未知未知, ,所以不所以不允許連接非定長允許連接非定長常數(shù)。常數(shù)。復制操作就是將一復制操作就是將一個表達式復制多次的個表達式復制多次的操作,其描操作,其描述格式述格式如下:如下: replication_constant expr replication_constant expr其中其中:p replication

40、_constant 為為非負數(shù)、非非負數(shù)、非z和非和非x的常數(shù),表示復制的次數(shù)。的常數(shù),表示復制的次數(shù)。p expr 為為需要復制的表達式需要復制的表達式。注:注: 包含有復制的連接表達式,不能出現(xiàn)在分配的左側(cè)操作數(shù),包含有復制的連接表達式,不能出現(xiàn)在分配的左側(cè)操作數(shù),也不能連接到也不能連接到output或者或者input端口上。端口上。連接連接操作的操作的Verilog HDLVerilog HDL描述的例子描述的例子 a, b3:0, w, 3b101 等效等效于于 a, b3, b2, b1, b0, w, 1b1, 1b0, 1b1復制復制操作的操作的Verilog HDLVerilo

41、g HDL描述的例子描述的例子 4w 等效等效于于 w, w, w, w復制復制和連接操作的和連接操作的Verilog HDLVerilog HDL描述描述的的例子例子 b, 3a, b 等效于等效于 b, a, b, a, b, a, b 復制復制操作可以復制值為操作可以復制值為0 0的常數(shù)的常數(shù)。在。在參數(shù)化參數(shù)化代碼時代碼時,這這是非是非常有用的常有用的。 帶有帶有0 0復制常數(shù)的復制,被認為是大小為復制常數(shù)的復制,被認為是大小為0 0,并且被忽略。這樣一個復制,并且被忽略。這樣一個復制,只能只能在在至少至少有一個有一個連接操作數(shù)是連接操作數(shù)是正數(shù)正數(shù)的連接中的連接中。復制復制和連接操作

42、分配限制的和連接操作分配限制的Verilog HDLVerilog HDL描述描述的的例例子子parameter P = 32;/ 下面對于下面對于1到到32是是合法合法的的。assign b31:0 = 32-P1b1, aP-1:0 ;/ 對于對于P=32來說,下面來說,下面是是非法非法的的。因為。因為0復制單獨出現(xiàn)在一復制單獨出現(xiàn)在一個連接中。個連接中。assign c31:0 = 32-P1b1, aP-1:0 / 對對P=32來說來說,下面下面是是非法非法的的。initial$displayb(32-P1b1, aP-1:0);復制操作復制操作Verilog Verilog HDLH

43、DL描述的例子描述的例子 result = 4func(w) ; 等效為:等效為: y = func(w) ; result = y, y, y, y ; 在在表達式中需要指定一些類型的操作數(shù)。最簡表達式中需要指定一些類型的操作數(shù)。最簡單的操作數(shù)包括:網(wǎng)絡、變量、單的操作數(shù)包括:網(wǎng)絡、變量、參數(shù),還包括參數(shù),還包括以下:以下:p如果如果要求一個向量網(wǎng)絡、向量寄存器、整數(shù)或者時間變量要求一個向量網(wǎng)絡、向量寄存器、整數(shù)或者時間變量或者參數(shù)的單個比特或者參數(shù)的單個比特位時,則位時,則需要使用位選擇操作數(shù)。需要使用位選擇操作數(shù)。p如果如果要求一個向量網(wǎng)絡、向量寄存器、整數(shù)或者時間變量要求一個向量網(wǎng)絡、

44、向量寄存器、整數(shù)或者時間變量或者參數(shù)的某些相鄰的或者參數(shù)的某些相鄰的比特比特位,則需要使用部分選擇操作位,則需要使用部分選擇操作數(shù)。數(shù)。p可以可以引用數(shù)組元素或者一個數(shù)組元素的位選擇引用數(shù)組元素或者一個數(shù)組元素的位選擇/部分,部分,作為一個操作數(shù)作為一個操作數(shù)。p其它其它操作數(shù)的一個連接也可以指定為一個操作數(shù)操作數(shù)的一個連接也可以指定為一個操作數(shù)。p一一個函數(shù)調(diào)用也是一個操作數(shù)。個函數(shù)調(diào)用也是一個操作數(shù)。向量向量位選擇和部分選擇位選擇和部分選擇尋址尋址 如果如果位選擇位選擇/ /部分選擇超出地址范圍,或者位部分選擇超出地址范圍,或者位選擇為選擇為x/zx/z,則返回的結(jié)果為,則返回的結(jié)果為x

45、x。 一一個標量,或者一個類型為實數(shù)或者實時時間個標量,或者一個類型為實數(shù)或者實時時間的變量或者參數(shù),位選擇或者部分選擇是無效的。的變量或者參數(shù),位選擇或者部分選擇是無效的。對于部分選擇,有兩種類型:對于部分選擇,有兩種類型:p 常數(shù)常數(shù)部分選擇。部分選擇。 表示表示為:為: vectmsb_expr:lsb_expr 其中其中: msb_expr和和lsb_expr為常數(shù)的整數(shù)表達式。為常數(shù)的整數(shù)表達式。p索引部分選擇。索引部分選擇。表示為:表示為: reg 15:0 big_vect; reg 0:15 little_vect; big_vectlsb_base_expr +: width

46、_expr little_vectmsb_base_expr +: width_expr big_vectmsb_base_expr -: width_expr little_vectlsb_base_expr -: width_expr 其中:其中:umsb_expr和和lsb_expr為常數(shù)的整數(shù)為常數(shù)的整數(shù)表達式,可以表達式,可以在運行在運行的時候改變。的時候改變。uwidth_expr為正常數(shù)表達式。為正常數(shù)表達式。數(shù)組數(shù)組部分選擇的部分選擇的Verilog HDLVerilog HDL描述例子描述例子reg 31: 0 big_vect;reg 0 :31 little_vect;i

47、nteger sel;big_vect 0 +: 8 / = big_vect 7 : 0big_vect15 -: 8 / = big_vect15 : 8little_vect 0 +: 8 / = little_vect0 : 7little_vect15 -: 8 / = little_vect8 :15dword8*sel +: 8 / 帶有固定寬度的變量部分選擇帶有固定寬度的變量部分選擇數(shù)組數(shù)組和存儲器和存儲器尋址尋址 對于對于 reg 7:0 mem_name0:1023; 存儲器地址表示為:存儲器地址表示為: mem_nameaddr_expr 其中其中:p addr_expr

48、為任意整數(shù)表達式為任意整數(shù)表達式。pmem_namemem_name3表示表示存儲器的間接尋址。存儲器的間接尋址。存儲器尋址存儲器尋址Verilog Verilog HDLHDL描述的例子描述的例子 reg 7:0 twod_array0:2550:255; wire threed_array0:2550:2550:7; twod_array1413:0 /訪問字的低四位訪問字的低四位 twod_array136 /訪問字的第訪問字的第6位位 twod_array13sel / 使用可變的位選擇使用可變的位選擇 threed_array1413:0 / 非法非法延遲表達式延遲表達式 Veril

49、og Verilog HDLHDL中,延遲表達式的格中,延遲表達式的格式為用圓括號括起來的三個表達式,這三個表達式為用圓括號括起來的三個表達式,這三個表達式之間用冒號分隔開式之間用冒號分隔開。 三三個表達式依次代表最小、典型、最大延遲時間個表達式依次代表最小、典型、最大延遲時間值。值。延遲延遲表達式的表達式的Verilog HDLVerilog HDL描述例子。描述例子。(a:b:c)+(d:e:f) 表示表示:p 最小最小延遲值為延遲值為a+d的和的和。p典型典型延遲值為延遲值為b+e的和的和。p 最大最大延遲值為延遲值為c+f的和。的和。分配分配min:typ:maxmin:typ:max

50、格式值的格式值的Verilog HDLVerilog HDL描述例子描述例子val - (32d 50: 32d 75: 32d 100) 為了為了對表達式求對表達式求值時得到值時得到可靠的結(jié)果,控制表達可靠的結(jié)果,控制表達式的位寬是非常重要式的位寬是非常重要。p 在某些在某些情況下采取最簡單的解決情況下采取最簡單的解決方法方法。u比如比如:如果指定了兩個:如果指定了兩個16位的寄存器矢量的位排序位的寄存器矢量的位排序方式和操作,那么結(jié)果就是一個方式和操作,那么結(jié)果就是一個16位的值位的值。 p 然而然而,在某些情況下,究竟有多少位參與表達式求值或者結(jié)果,在某些情況下,究竟有多少位參與表達式求

51、值或者結(jié)果有多少位,并不容易看出來。有多少位,并不容易看出來。u 例如例如:兩個:兩個16位操作數(shù)之間的算術(shù)加法,是應該使位操作數(shù)之間的算術(shù)加法,是應該使用用16位求值還是該使用位求值還是該使用17位(允許進位位溢出)求值位(允許進位位溢出)求值? 答案答案取決于取決于被被建模器件的類型以及那個設備是否建模器件的類型以及那個設備是否處理進位位溢出來決定處理進位位溢出來決定。 Verilog HDL利用操作數(shù)的位寬來決定有多少位參利用操作數(shù)的位寬來決定有多少位參與表達式的求值。與表達式的求值。表達式表達式長度長度Veriog HDLVeriog HDL描述的例子描述的例子 reg 15:0 a,

52、 b; / 16位寄存器類型位寄存器類型 reg 15:0 sumA; / 16位寄存器類型位寄存器類型 reg 16:0 sumB; / 17位寄存器位寄存器類型類型 sumA = a + b; / 結(jié)果結(jié)果16位位 sumB = a + b; / 結(jié)果結(jié)果17位位控制控制表達式位寬的規(guī)則已經(jīng)公式化,因此在大多數(shù)表達式位寬的規(guī)則已經(jīng)公式化,因此在大多數(shù)實際情況下,都有一個簡單的解決方法。實際情況下,都有一個簡單的解決方法。p表達式位寬是由包含在表達式內(nèi)的操作數(shù)和表達式所處的表達式位寬是由包含在表達式內(nèi)的操作數(shù)和表達式所處的環(huán)境決定的環(huán)境決定的。p自主自主表達式的位寬由它自身單獨決定,比如延遲

53、表達式表達式的位寬由它自身單獨決定,比如延遲表達式。p環(huán)境環(huán)境決定型表達式的位寬由該表達式自己的位寬和它所處決定型表達式的位寬由該表達式自己的位寬和它所處的環(huán)境來決定,的環(huán)境來決定,比如比如:一一個賦值操作中右側(cè)表達式的位寬個賦值操作中右側(cè)表達式的位寬由它自己的位寬和賦值符左側(cè)的位寬來決定。由它自己的位寬和賦值符左側(cè)的位寬來決定。 下表說下表說明了表達式的形式如何決定表達式結(jié)果的位寬。表中明了表達式的形式如何決定表達式結(jié)果的位寬。表中i i、j j、k k都表都表示單操作數(shù)的示單操作數(shù)的表達式,而表達式,而L L(i i)代表表達式)代表表達式i i的位寬,的位寬,opop代表操作符。代表操作

54、符。表達式表達式結(jié)果結(jié)果值位寬值位寬說明說明不定不定長常數(shù)長常數(shù)與與整數(shù)相同整數(shù)相同 定定長常數(shù)長常數(shù)與與給定的位寬相同給定的位寬相同 i op j,操作符,操作符op為:為:+ - * / % & | or max(L(i),L(j)) op i,操作符,操作符op為:為:+ - L(i) i op j,操作符,操作符op為:為:=!= = != & | = 1; /不能正常操作不能正常操作 自主自主表達式的表達式的Veriog HDLVeriog HDL描述的描述的例子例子 reg 3:0 a; reg 5:0 b; reg 15:0 c; initial begin a = 4hF; b = 6hA;$display(a*b=%h, a*b);c = a*b; $display(a*b=%h, c);c = a*b; $display(c=%h, c);end仿真器的輸出結(jié)果:仿真器的輸出結(jié)果: a*b=16 / 由于長度為由于長度為6,所以,所以h96被截斷到被截斷到h16。 a*b=1 / 表達式的長度為表達式的長度為4 c=ac61 / 表達式的長度為表達式

溫馨提示

  • 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

提交評論