2014-01-24 89 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

相關問題