为什么这个verilog关系语句返回true?

时间:2014-01-24 18:45:04

标签: comparison operators verilog relational

我有一个名为sin_hall2的9位有符号线。

此语句返回true。 sin_hall2 [8:0]> 9'd1

当我看模拟时,sin_hall2 = -169。我假设它是verilog处理比较负数的方式,但我做错了什么。当我做sin_hall2 [8:0]> 9'sh001时,我收到相同的结果。

1 个答案:

答案 0 :(得分:5)

签名号码使用二进制补码格式。如果解释为无符号,它们将显示为大数字,即无符号数字范围的后半部分。

如果比较的任何部分是无符号的,则比较是无符号的。 选择位宽,即使整个范围都是无符号的

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

返回:

# Comparison unsigned : 1 
# Comparison cast     : 0 
# Comparison signed   : 0
# Comparison signed [8:0]: 1 

Example on EDA Playground