Verilog学习--移位操作符、原码补码

原码与补码

有符号数,在代码中可以使用十进制数赋值给有符号数,在电路中,数值按照补码形式存储

  • 正数的补码:是其本身
  • 负数的补码:除符号位外,其余位取反,然后+1
reg signed [3:0] a, b;

a = 4'd6;	//原码为 0110,补码为 0110
b = -4'd6;	//原码为 1110 ->反码为 1001 ->补码为 1010 

补码的补码是原码

算术操作符

  • 将负数赋值给reg或其他无符号变量使用二进制补码
  • 如果操作数的某一位是xz,则结果为x

逻辑操作符

  • 如果操作数的任意一位为xz,则其等价于逻辑不确定x
  • 如果操作数全为0,其逻辑值为0
  • 如果操作数有一位为1,其逻辑值为1
reg a = 4'b0011;	//逻辑值为 1
reg b = 4'b10xz;	//逻辑值为 1
reg c = 4'b0z0x;	//逻辑值为 x

根据这个例子,1的优先级更高

移位操作符

在Verilog中,移位操作符有两种,逻辑操作符>>和算术操作符>>>

  • 无符号数:算术右移和逻辑右移没有区别,都是左侧补0
  • 有符号数
    • 逻辑右移,左侧补0
    • 算术右移,符号为1则补1,符号为0则补0

你可能感兴趣的:(verilog)