欢迎光临散文网 会员登陆 & 注册

按位逻辑运算符

2022-12-13 08:21 作者:明德扬易老师  | 我要投稿

本节的文档编号:001100000061

需要看对应的视频,请点击视频编号:001100000062

1、本节主要进行组合逻辑的介绍,包括:程序语句(assign语句、always语句),数字进制(二进制、不定态、高阻态),算数运算符(加、减、乘、除运算符),逻辑运算符(逻辑与、或、非运算符),按位逻辑运算符(单目按位与、或、非运算符,双目按位与、或、异或运算符),关系运算符,移位运算符(左移、右移运算符),条件运算符(三目运算符、if语句、case语句、选择语句等),拼接运算符;
2、ALTERA和VIVADO文档


5.5 按位逻辑运算符


注:~ ^, ^ ~(二元异或非即同或):(相当于同或门运算)。

在Verilog HDL语言中有下面几种按位运算符:

~(一元非):(相当于非门运算)

&(二元与):(相当于与门运算)

|(二元或):(相当于或门运算)

^(二元异或):(相当于异或门运算)


这些操作符在输入操作数的对应位上按位操作,并产生向量结果。

下图各真值表种显示对于不同按位逻辑运算符按位操作的结果:

5.5.1单目按位与

单目按位与运算符&,运算符后为需要进行逻辑运算的信号,表示对信号进行每位之间相与的操作。

例如

Reg[3:0] A,C;

assign C=&A;

上面代码等价于 C = A[3] &A[2] & A[1] & A[0];

如果A=4’b0110,C的结果为0。


5.5.2单目按位或

单目按位或运算符|,运算符后为需要进行逻辑运算的信号,表示对信号进行每位之间相或的操作。例如

Reg[3:0] A,C;

assign C=|A;

上面代码等价于 C = A[3] | A[2] |A[1] | A[0];

如果A=4’b0110,C的结果为1。


5.5.3单目按位非

单目按位非运算符~,运算符后为需要进行逻辑运算的信号,表示对信号进行每位取反的操作。例如

Reg[3:0] A,C;

assign C=~A;

上面代码等价于 C[3] = ~A[3],C[2] = ~A[2],C[1] = ~A[1],C[0] = ~A[0]。

如果A=4’b0110,C的结果为4’b1001。


5.5.4双目按位与

双目按位与运算符&,信号位于运算符的左右两边,表示的是对这两个信号进行对应位相与的操作。例如

Reg[3:0] A,B,C;

assign C = A & B;

上面的代码等价于:C[0] = A[0] &B[0],C[1] = A[1] & B[1],C[2] = A[2] & B[2],C[3] = A[3] &B[3]。

如果A=4’b0110,B=4’b1010,C的结果为4’b0010。

如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如,

reg[1:0] A;

reg[2:0] B;

reg[3:0] C;

assign C = A & B;

上面的代码等价于:C[0] = A[0] &B[0],C[1] = A[1] & B[1],C[2] = 0& B[2],C[3] = 0 &0。


5.5.5双目按位或

双目按位或运算符|,信号位于运算符的左右两边,表示的是对这两个信号进行对应位相或的操作。例如

reg[3:0] A,B,C;

assign C = A | B;

上面的代码等价于:C[0] = A[0] |B[0],C[1] = A[1] | B[1],C[2] = A[2] | B[2],C[3] = A[3] | B[3]。

如果A=4’b0110,B=4’b1010,C的结果为4’b1110。

如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如,

reg[1:0] A;

reg[2:0] B;

reg[3:0] C;

assign C = A | B;

上面的代码等价于:C[0] = A[0] |B[0],C[1] = A[1] | B[1],C[2] = 0 | B[2],C[3] = 0 | 0。


5.5.6双目按位异或

双目按位异或运算符^,信号位于运算符的左右两边,表示的是对这两个信号进行对应位相异或的操作。

异或是指0^0=0,1^1=0,0^1=1,即相同为0,不同为1。例如

reg[3:0] A,B,C;

assign C = A ^ B;

上面的代码等价于:C[0] = A[0] ^B[0],C[1] = A[1] ^ B[1],C[2] = A[2] ^ B[2],C[3] = A[3] ^ B[3]。

如果A=4’b0110,B=4’b1010,C的结果为4’b1100。

如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如,

reg[1:0] A;

reg[2:0] B;

reg[3:0] C;

assign C = A | B;

上面的代码等价于:C[0] = A[0] ^B[0],C[1] = A[1] ^ B[1],C[2] = 0 ^ B[2],C[3] = 0 ^ 0。

5.5.7经验总结

  • 逻辑运算符和位运算符的区别

逻辑运算符包括&&、||、!,位运算符包括&、|、~。那么逻辑运算符和位运算符有什么区别呢?

将逻辑与“&&”和按位与“&”进行对比可以看出,逻辑与运算符的运算只有逻辑真或逻辑假两种结果,

即1或0;而“&”是位运算符,用于两个多位宽数据操作。对于位运算符操作,两个数按位进行相与、相或或者非。

上面运行的结果为:a=1’b1,b=1’b1,c=1’b0,d=4’b000,e=4’b1111,f=4’b1000。

相关视频:https://www.bilibili.com/video/BV1yf4y1R7gH?p=16


按位逻辑运算符的评论 (共 条)

分享到微博请遵守国家法律