verilog/system verilog>>
和in有什么区别?>>>
我知道==
只测试 1 和 0,而===
测试 1、0、X、Z。那么这与移位运算符有何相似之处?
在verilog中>>和>>>之间的区别?
电器工程
验证日志
系统verilog
数据操作员
2022-01-16 18:24:21
2个回答
它与==
/不同===
,如果左侧操作数有符号则>>>
执行符号扩展。
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 Playground上的示例。
根据 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
其它你可能感兴趣的问题