系列文章目录
Verilog学习1——三目运算符
Verilog学习2——与门(按位与和逻辑与)
Verilog学习3——向量
Verilog学习4——取反与移位运算
一、取反运算
1、按位取反 ~
~ 是一个单目运算符,用来对一个操作数进行按位取反运算。例如:
assign a = 4'b1010;
assign b = ~a //b=4'b0101;
2、逻辑取反 !
当操作数位宽为一位时,按位取反 ~ 与逻辑取反 ! 效果相同。当操作数位宽大于一位时,逻辑取反使所有位都为0的操作数变为ture,其余为false。例如:
assign a = 4'b1010;
assign b = 4'b0000;
assign c = !a //c = 0;
assign d = !b //d = 1;
二、移位运算
1、逻辑左移<<和逻辑右移>>
两者都是双目运算符,不考虑符号位,移动数字之后用0补上空位。使用方法如下:
assign a = 4'b1010;
assign b = a<<2 // b = 6'b101000;
assign c = a>>2 // c = 4'b0010;
2、算术左移<<<和算术右移>>>
双目运算符,考虑符号位,算术右移时符号位一起移动并用符号位补上空位,算术左移时规则与逻辑左移相同。使用方法如下:
assign a = 4'b1010;
assign b = a<<<2 // b = 6'b101000;
assign c = a>>>2 // c = 4'b1010;
3、循环移动
利用逻辑运算符可以实现循环移动的效果,例如:
assign a = 4'b1010;
reg [3:0] b, c;
always @(posedge clk)
b = {a[0], a[3:1]}; //循环右移
c = {a[2:0], a[3]}; //循环左移