我正在调试 RISC-V FCVT.W.D(IEEE 754 格式下的双精度到有符号整型转换)指令的 RTL 实现与其在参考模型 (Spike) 中的行为之间的差异。 具体来说,对于双精度浮点输入 0xC1E0000000000000(次正规、负、幅度很小),模型返回 0x80000000,而 RTL 输出 0x00000000。 观察:
assign int_result_is_special = info_q.is_nan | info_q.is_inf |
of_before_round | ~info_q.is_boxed |
(input_sign_q & op_mod_q2 & ~rounded_int_res_zero);
目标: 我正在寻找:
深入了解如何使 RTL 行为与模型保持一致。 澄清 IEEE 754 标准如何处理此类情况。 改进 RTL 逻辑以正确处理这种情况和类似边缘情况的建议。
您可以使用 float-toy 来可视化浮点值,这根本不是一个极端情况。
0xC1E0000000000000 简单地等于饱和整数上的 -2147483648 或 80000000,因此尖峰是正确的。
因此,在这种情况下,如果您认为 0x8000_0000 不为 0(即您已饱和),则 float 只是 sint 中可表示的最大值