sar*_*a8d 5 rounding system-verilog
根据以下内容,在 systemVerilog 中舍入实际类型的最佳方法是什么:
正例: if fraction >= 0.5 ---> round 返回“整数部分” + 1(例如 4.5 --->5) if fraction < 0.5 ---> round 返回“整数部分”(例如 4.2 --->4)
否定情况: if fraction >= 0.5 ---> round 返回“整数部分”-1(例如-4.5 --->-5) if fraction < 0.5 ---> round 返回“整数部分”(例如-4.2 ---> -4)
IEEE Std 1800-2012 LRM中详细描述了实数舍入为整数。
IEEE 标准 1800-2012 § 6.12.2转换
实数应通过将实数四舍五入到最接近的整数而不是截断它来转换为整数。当将实数分配给整数时,应发生隐式转换。如果实数的小数部分恰好是 0.5,则应从零舍入。
IEEE Std 1800-2012 § 20.5转换函数
$rtoi通过截断实数值将实数值转换为整数类型(例如,123.45 变为 123)。$rtoi与将实值转换为整数或其他整型类型不同,转换将执行舍入而不是截断。直接将实数值赋给整型也将进行舍入而不是截断。
根据LRM,int_val = 4.5orint_val = int'(4.5)都会变成5。and int_val = -4.5orint_val = int'(-4.5)都会变成-5。
根据模拟器的不同,直接分配与强制转换可能具有不同的性能。我认为外壳已经完善,因为它对于审查代码和模拟器的任何人来说都更加明确。另外,铸造可以更好地控制位宽度。