本(běn)节(jié)的(de)文(wén)檔編号(hào):001100000061
需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào):001100000062
1、本(běn)节(jié)主(zhǔ)要(yào)進(jìn)行組合邏輯的(de)介紹,包(bāo)括:程序語(yǔ)句(jù)(assign語(yǔ)句(jù)、always語(yǔ)句(jù)),數字(zì)進(jìn)制(二(èr)進(jìn)制、不(bù)定(dìng)态、高(gāo)阻态),算數運算符(加、減、乘、除運算符),邏輯運算符(邏輯與(yǔ)、或(huò)、非(fēi)運算符),按位邏輯運算符(單目按位與(yǔ)、或(huò)、非(fēi)運算符,双(shuāng)目按位與(yǔ)、或(huò)、异(yì)或(huò)運算符),關(guān)系(xì)運算符,移位運算符(左(zuǒ)移、右(yòu)移運算符),条(tiáo)件(jiàn)運算符(三(sān)目運算符、if語(yǔ)句(jù)、case語(yǔ)句(jù)、選擇語(yǔ)句(jù)等),拼接運算符;
2、ALTERA和(hé)VIVADO文(wén)檔
|
5.5 按位邏輯運算符
注:~ ^, ^ ~(二(èr)元(yuán)异(yì)或(huò)非(fēi)即同(tóng)或(huò)):(相當于(yú)同(tóng)或(huò)門(mén)運算)。
在(zài)Verilog HDL語(yǔ)言中(zhōng)有(yǒu)下(xià)面(miàn)幾(jǐ)種(zhǒng)按位運算符:
~(一(yī)元(yuán)非(fēi)):(相當于(yú)非(fēi)門(mén)運算)
&(二(èr)元(yuán)與(yǔ)):(相當于(yú)與(yǔ)門(mén)運算)
|(二(èr)元(yuán)或(huò)):(相當于(yú)或(huò)門(mén)運算)
^(二(èr)元(yuán)异(yì)或(huò)):(相當于(yú)异(yì)或(huò)門(mén)運算)
这(zhè)些操作符在(zài)輸入(rù)操作數的(de)对(duì)應(yìng)位上(shàng)按位操作,并産生(shēng)向(xiàng)量(liàng)結果(guǒ)。 下(xià)图(tú)各(gè)真(zhēn)值表(biǎo)種(zhǒng)顯示对(duì)于(yú)不(bù)同(tóng)按位邏輯運算符按位操作的(de)結果(guǒ):
單目按位與(yǔ)運算符&,運算符後(hòu)为(wèi)需要(yào)進(jìn)行邏輯運算的(de)信(xìn)号(hào),表(biǎo)示对(duì)信(xìn)号(hào)進(jìn)行每位之間(jiān)相與(yǔ)的(de)操作。
例如(rú)
Reg[3:0] A,C;
assign C=&A;
上(shàng)面(miàn)代(dài)碼等價于(yú) C = A[3] &A[2] & A[1] & A[0];
如(rú)果(guǒ)A=4’b0110,C的(de)結果(guǒ)为(wèi)0。
單目按位或(huò)運算符|,運算符後(hòu)为(wèi)需要(yào)進(jìn)行邏輯運算的(de)信(xìn)号(hào),表(biǎo)示对(duì)信(xìn)号(hào)進(jìn)行每位之間(jiān)相或(huò)的(de)操作。例如(rú)
Reg[3:0] A,C;
assign C=|A;
上(shàng)面(miàn)代(dài)碼等價于(yú) C = A[3] | A[2] |A[1] | A[0];
如(rú)果(guǒ)A=4’b0110,C的(de)結果(guǒ)为(wèi)1。
單目按位非(fēi)運算符~,運算符後(hòu)为(wèi)需要(yào)進(jìn)行邏輯運算的(de)信(xìn)号(hào),表(biǎo)示对(duì)信(xìn)号(hào)進(jìn)行每位取(qǔ)反(fǎn)的(de)操作。例如(rú)
Reg[3:0] A,C;
assign C=~A;
上(shàng)面(miàn)代(dài)碼等價于(yú) C[3] = ~A[3],C[2] = ~A[2],C[1] = ~A[1],C[0] = ~A[0]。
如(rú)果(guǒ)A=4’b0110,C的(de)結果(guǒ)为(wèi)4’b1001。
双(shuāng)目按位與(yǔ)運算符&,信(xìn)号(hào)位于(yú)運算符的(de)左(zuǒ)右(yòu)两(liǎng)邊(biān),表(biǎo)示的(de)是(shì)对(duì)这(zhè)两(liǎng)个(gè)信(xìn)号(hào)進(jìn)行对(duì)應(yìng)位相與(yǔ)的(de)操作。例如(rú)
Reg[3:0] A,B,C;
assign C = A & B;
上(shàng)面(miàn)的(de)代(dài)碼等價于(yú):C[0] = A[0] &B[0],C[1] = A[1] & B[1],C[2] = A[2] & B[2],C[3] = A[3] &B[3]。 如(rú)果(guǒ)A=4’b0110,B=4’b1010,C的(de)結果(guǒ)为(wèi)4’b0010。
如(rú)果(guǒ)操作數长度(dù)不(bù)相等, 长度(dù)較小的(de)操作數在(zài)最(zuì)左(zuǒ)側添0 補位。例如(rú),
reg[1:0] A;
reg[2:0] B;
reg[3:0] C;
assign C = A & B;
上(shàng)面(miàn)的(de)代(dài)碼等價于(yú):C[0] = A[0] &B[0],C[1] = A[1] & B[1],C[2] = 0& B[2],C[3] = 0 &0。
双(shuāng)目按位或(huò)運算符|,信(xìn)号(hào)位于(yú)運算符的(de)左(zuǒ)右(yòu)两(liǎng)邊(biān),表(biǎo)示的(de)是(shì)对(duì)这(zhè)两(liǎng)个(gè)信(xìn)号(hào)進(jìn)行对(duì)應(yìng)位相或(huò)的(de)操作。例如(rú)
reg[3:0] A,B,C;
assign C = A | B;
上(shàng)面(miàn)的(de)代(dài)碼等價于(yú):C[0] = A[0] |B[0],C[1] = A[1] | B[1],C[2] = A[2] | B[2],C[3] = A[3] | B[3]。 如(rú)果(guǒ)A=4’b0110,B=4’b1010,C的(de)結果(guǒ)为(wèi)4’b1110。
如(rú)果(guǒ)操作數长度(dù)不(bù)相等, 长度(dù)較小的(de)操作數在(zài)最(zuì)左(zuǒ)側添0 補位。例如(rú),
reg[1:0] A;
reg[2:0] B;
reg[3:0] C;
assign C = A | B;
上(shàng)面(miàn)的(de)代(dài)碼等價于(yú):C[0] = A[0] |B[0],C[1] = A[1] | B[1],C[2] = 0 | B[2],C[3] = 0 | 0。
双(shuāng)目按位异(yì)或(huò)運算符^,信(xìn)号(hào)位于(yú)運算符的(de)左(zuǒ)右(yòu)两(liǎng)邊(biān),表(biǎo)示的(de)是(shì)对(duì)这(zhè)两(liǎng)个(gè)信(xìn)号(hào)進(jìn)行对(duì)應(yìng)位相异(yì)或(huò)的(de)操作。 异(yì)或(huò)是(shì)指0^0=0,1^1=0,0^1=1,即相同(tóng)为(wèi)0,不(bù)同(tóng)为(wèi)1。例如(rú)
reg[3:0] A,B,C;
assign C = A ^ B;
上(shàng)面(miàn)的(de)代(dài)碼等價于(yú):C[0] = A[0] ^B[0],C[1] = A[1] ^ B[1],C[2] = A[2] ^ B[2],C[3] = A[3] ^ B[3]。 如(rú)果(guǒ)A=4’b0110,B=4’b1010,C的(de)結果(guǒ)为(wèi)4’b1100。
如(rú)果(guǒ)操作數长度(dù)不(bù)相等, 长度(dù)較小的(de)操作數在(zài)最(zuì)左(zuǒ)側添0 補位。例如(rú),
reg[1:0] A;
reg[2:0] B;
reg[3:0] C;
assign C = A | B;
上(shàng)面(miàn)的(de)代(dài)碼等價于(yú):C[0] = A[0] ^B[0],C[1] = A[1] ^ B[1],C[2] = 0 ^ B[2],C[3] = 0 ^ 0。
邏輯運算符包(bāo)括&&、||、!,位運算符包(bāo)括&、|、~。那(nà)麼(me)邏輯運算符和(hé)位運算符有(yǒu)什麼(me)區(qū)别呢?
将邏輯與(yǔ)“&&”和(hé)按位與(yǔ)“&”進(jìn)行对(duì)比可(kě)以(yǐ)看(kàn)出(chū),邏輯與(yǔ)運算符的(de)運算只(zhī)有(yǒu)邏輯真(zhēn)或(huò)邏輯假两(liǎng)種(zhǒng)結果(guǒ), 即1或(huò)0;而(ér)“&”是(shì)位運算符,用(yòng)于(yú)两(liǎng)个(gè)多(duō)位宽(kuān)數據(jù)操作。对(duì)于(yú)位運算符操作,两(liǎng)个(gè)數按位進(jìn)行相與(yǔ)、相或(huò)或(huò)者(zhě)非(fēi)。
上(shàng)面(miàn)運行的(de)結果(guǒ)为(wèi):a=1’b1,b=1’b1,c=1’b0,d=4’b000,e=4’b1111,f=4’b1000。
相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=16
|








