Verilog HDL基礎(chǔ)教程之:數(shù)據(jù)類型和運(yùn)算符
6.移位運(yùn)算符
:(左移位運(yùn)算符)
>>:(右移位運(yùn)算符)
其使用方法如下:
a >> n;
a n;
a代表要進(jìn)行移位的操作數(shù),n代表要移幾位。這兩種移位運(yùn)算都用0來(lái)填補(bǔ)移出的空位。下面舉例說(shuō)明:
module shift;
reg [3:0] start, result;
initial begin
start = 1; //start在初始時(shí)刻設(shè)為值0001
result = (start2); //移位后,start的值0100,然后賦給result
end
endmodule
從上面的例子可以看出,start在移過(guò)兩位以后,用0來(lái)填補(bǔ)空出的位。進(jìn)行移位運(yùn)算時(shí)應(yīng)注意移位前后變量的位數(shù),下面舉例說(shuō)明。
4’b10011 = 5’b10010; //左移1位后用0填補(bǔ)低位
4’b10012 = 6’b100100; //左移2位后用00填補(bǔ)低位
16 = 32’b1000000; //左移6位后用000000填補(bǔ)低位
4’b1001>>1 = 4’b0100; //右移1位后,低1位丟失,高1位用0填補(bǔ)
4’b1001>>4 = 4’b0000; //右移4位后,低4位丟失,高4位用0填補(bǔ)
7.位拼接運(yùn)算符(Concatation)
在Verilog HDL語(yǔ)言有一個(gè)特殊的運(yùn)算符:位拼接運(yùn)算符{}。用這個(gè)運(yùn)算符可以把兩個(gè)或多個(gè)信號(hào)的某些位拼接起來(lái)進(jìn)行運(yùn)算操作。其使用方法如下:
{信號(hào)1的某幾位,信號(hào)2的某幾位,..,..,信號(hào)n的某幾位}
即把某些信號(hào)的某些位詳細(xì)地列出來(lái),中間用逗號(hào)分開(kāi),最后用大括號(hào)括起來(lái)表示一個(gè)整體信號(hào),例如:
{a,b[3:0],w,3’b101}
也可以寫(xiě)成為:
{a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}
在位拼接表達(dá)式中不允許存在沒(méi)有指明位數(shù)的信號(hào)。這是因?yàn)樵谟?jì)算拼接信號(hào)的位寬的大小時(shí)必需知道其中每個(gè)信號(hào)的位寬。
位拼接也可以用重復(fù)法來(lái)簡(jiǎn)化表達(dá)式,如下所示:
{4{w}} //等同于{w,w,w,w}
位拼接還可以用嵌套的方式來(lái)表達(dá),如下所示:
{b,{3{a,b}}} //等同于{b,a,b,a,b,a,b}
用于表示重復(fù)的表達(dá)式必須是常數(shù)表達(dá)式,如上例中的4和3。
8.縮減運(yùn)算符(reduction operator)
縮減運(yùn)算符是單目運(yùn)算符,也有與、或、非運(yùn)算。其與、或、非運(yùn)算規(guī)則類似于位運(yùn)算符的與、或、非運(yùn)算規(guī)則,但其運(yùn)算過(guò)程不同。位運(yùn)算是對(duì)操作數(shù)的相應(yīng)位進(jìn)行與、或、非運(yùn)算,操作數(shù)是幾位數(shù),則運(yùn)算結(jié)果也是幾位數(shù)。而縮減運(yùn)算則不同,縮減運(yùn)算是對(duì)單個(gè)操作數(shù)進(jìn)行與、或、非遞推運(yùn)算,最后的運(yùn)算結(jié)果是一位的二進(jìn)制數(shù)。
縮減運(yùn)算的具體運(yùn)算過(guò)程如下。
(1)先將操作數(shù)的第一位與第二位進(jìn)行與、或、非運(yùn)算。
(2)將運(yùn)算結(jié)果與第三位進(jìn)行與、或、非運(yùn)算,依次類推,直至最后一位。
例如:
reg [3:0] B;
reg C;
C = B;
相當(dāng)于:
C =( ( B[0]B[1] ) B[2] ) B[3];
由于縮減運(yùn)算的與、或、非運(yùn)算規(guī)則類似于位運(yùn)算符與、或、非運(yùn)算規(guī)則,這里不再詳細(xì)講述,可參照位運(yùn)算符的運(yùn)算規(guī)則介紹。
9.優(yōu)先級(jí)別
各種運(yùn)算符的優(yōu)先級(jí)別關(guān)系如表9所示。
表9 運(yùn)算符優(yōu)先級(jí)別表
運(yùn) 算 符 | 優(yōu) 先 級(jí) 別 |
! ~ * / % + - >> = > >= == != === !== ^ ^~ | || ? : | 高 低 |
評(píng)論