一、按位逻辑运算符
1.单目按位与(&)
单目按位与运算符 &,运算符后为需要进行逻辑运算的信号,表示对信号进行每位之间相与的操作。例如:
reg [3:0] A,C ;
assign C = &A ;
上面代码等价于 C = A[3] & A[2] & A[1] & A[0] ;
如果A = 4’b0110,C的结果为0
2.单目按位或(|)
单目按位或运算符 |,运算符后为需要进行逻辑运算的信号,表示对信号进行每位之间相或的操作。例如:
reg [3:0] A,C ;
assign C = |A ;
上面代码等价于C = A[3] | A[2] | A[1] | A[0] ;
如果A = 4’b0110,C的结果为1
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
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.双目按位或(|)
双目按位或运算符 |,信号位于运算符的左右两边,表示的是对这两个信号进行对应位相或的操作。
例如:
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
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
二、逻辑运算符和位运算符区别
逻辑运算符包括&&,||,!,位运算符包括&,|,~。(作者这里解释一下,没有讲述逻辑运算符是因为逻辑运算符和在例如C语言当中用法完全一样,学习Verilog的小伙伴们一定有其他语言的基础,所以不再过多赘述逻辑运算符)文章来源:https://www.toymoban.com/news/detail-601046.html
二者区别我们不妨举例,将逻辑与“&&”和按位与“&”进行对比,逻辑与运算符的运算只有逻辑真或逻辑假两种结果,即1或0;而“&”是位运算符,多用于两个多位宽数据操作。
对比示例:
assign a = 4’b0111 && 4’b1000;
assign b = 4’b0111 || 4’b1000;
assign c = !4’b0111;
assign d = 4’b0111 & 4’b1000;
assign e = 4’b0111 | 4’b1000;
assign f = ~4’b0111;
示例运行结果为:
a = 1’b1
b = 1’b1
c = 1’b0
d = 4’b0000
e = 4’b1111
f = 4’b1000文章来源地址https://www.toymoban.com/news/detail-601046.html
到了这里,关于Verilog HDL按位逻辑运算符及逻辑运算符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!