2014-01-24 59 views
1

我有一个名为sin_hall2的9位有符号线。为什么这个verilog关系语句返回true?

该声明返回true。 sin_hall2 [8:0]> 9'd1。

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

+1

请显示所有相关代码,包括'sin_hall2'的定义 – Morgan

回答

4

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

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

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