2017-02-02 43 views
1

什麼是根據SystemVerilog中圓一個真正的類型的最佳方式:的SystemVerilog - 一輪的類型

案例陽性:如果 --- fraction >= 0.5>輪返回「整數部分」 + 1(例如4.5 - - > 5) 如果fraction < 0.5 --->輪返回 「整數部分」(例如4.2 ---> 4)

案例負: 如果fraction >= 0.5 --->輪返回 「整數部分」 -1(例如-4.5 ---> - 5) if fraction < 0.5 ---> round返回「整數部分」(例如-4.2 ---> -4)

回答

1

在LRM中很好地描述了將實數舍入到整數。

IEEE Std 1800-2012 § 6.12.2 轉換

實數應通過舍入實數到最接近的整數,而不是通過截斷它被轉換爲整數。當實數被分配給一個整數時,隱式轉換應該發生。如果實數的小數部分恰好爲0.5,則應該從零圓整。

IEEE Std 1800-2012 § 20.5 轉換函數

$rtoi通過截斷實際值(例如,123.45變爲123)爲一個整數型實值轉換。 $rtoi不同於將真實值轉換爲整數或其他整數類型,因爲該投射將執行舍入而不是截斷。 直接將實數值賦值給整型也將舍入而不是截斷。

按照LRM,int_val = 4.5int_val = int'(4.5)都將成爲5.與int_val = -4.5int_val = int'(-4.5)都將成爲-5。

根據模擬器的不同,直接分配和鑄造可能會有不同的性能。我認爲套管是完美的,因爲它更清晰的審查代碼和模擬器。加上鑄造獲得更多的位寬控制。