Answers:
它与==
/ 不相似===
,如果左侧操作数是带符号的,则>>>
执行符号扩展。
reg signed [9:0] b = 10'sb11_0101_0101;
reg signed [9:0] a_signed;
reg [9:0] a_unsigned;
always_comb begin
a_signed = b >>> 2;
a_unsigned = b >> 2;
end
结果:
#a_signed 1111010101
#a_unsigned 0011010101
EDA游乐场的例子。
integer
类型)和算术移位运算符仅在Verilog-2001中引入了Verilog。
>>
在1985年就已经意味着逻辑上的转变(取自1970年的Pascal)。因此,它必须>>>
用于算术移位。
根据IEEE1800-2012,>>
是二进制逻辑移位,>>>
而是二进制算术移位。
基本上,算术移位使用上下文确定填充位,因此:
>>>
)-向右移指定的位数,如果表达式是带符号的,则用符号位的值填充,否则用零填充,<<<
)-向左移指定的位数,用零填充。另一方面,逻辑移位(<<
,>>
)始终用零填充空位位置。
例如:
a = 5'b10100;
b = a <<< 2; //b == 5'b10000
c = a >>> 2; //c == 5'b11101, 'cause sign bit was `1`
d = a << 2; //d == 5'b10000
e = a >> 2; //e == 5'b00101
c
:如果使用reg [4:0] c
,将得到5'b00101
而不是5'b11101
。我认为,更新示例以阐明类型将很有用。
>>
和>>>
运算符的含义恰恰相反……邪恶。