我有一条名为 sin_hall2 的 9 位签名线。
该语句返回 true。 sin_hall2[8:0]>9'd1.
当我查看模拟时,sin_hall2=-169。我假设这是 verilog 处理比较负数的方式,但我做错了什么。当我执行 sin_hall2[8:0]>9'sh001 时,我收到相同的结果。
有符号数使用二进制补码格式。也就是说,如果解释为无符号,它们将显示为大数字,即无符号数字范围的后半部分。
如果比较的任何部分是无符号的,则该比较也是无符号的。选择位宽,即使整个范围也是无符号的
reg signed [8:0] sin_hall2;
initial begin
sin_hall2 = -9'd169 ;
$display( "Comparison unsigned : %b ", sin_hall2 > 9'd1 );
$display( "Comparison cast : %b ", sin_hall2 > $signed(9'd1) );
$display( "Comparison signed : %b ", sin_hall2 > 9'sd1 );
$display( "Comparison signed [8:0]: %b ", sin_hall2[8:0] > 9'sd1 );
end
Returns:
# Comparison unsigned : 1
# Comparison cast : 0
# Comparison signed : 0
# Comparison signed [8:0]: 1
EDA Playground 上的示例 http://www.edaplayground.com/s/405/1157.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)