RISC-V浮点舍入结果Spike与RTL仿真不匹配的正确性咨询
RISC-V fsqrt.d指令RMM模式结果校验结论
合规性判定
RISC-V浮点指令遵循IEEE 754标准要求,RMM(Round to Nearest, ties to Max Magnitude)舍入规则为:优先选择距离精确结果最近的可表示浮点数;若精确值恰好落在两个相邻可表示浮点数的中点,选择绝对值更大的那一个。
针对本次测试用例的量化校验结果如下:
- 精确平方根结果:
50374.1444790876820703394273903... - RTL输出值与精确值的误差:
2.07×10^-12 - Spike输出值与精确值的误差:
2.93×10^-12
本次测试的精确结果未落在两个可表示值的中点,距离RTL输出更近,因此RTL的结果符合RISC-V规范要求,Spike的输出为错误结果。
Spike偏差原因
Spike v1.1.0及更早版本的双精度平方根实现存在已知bug,在RMM舍入模式下边界场景的舍入逻辑错误,导致输出结果不符合规范。dromajo的浮点运算逻辑早期参考了Spike实现,因此连带继承了该问题。
排查验证建议
- 升级Spike到官方主线最新版本复测,该bug在2023年之后的主线版本中已被修复
- 可使用Berkeley SoftFloat库作为第三方参考验证,该库严格遵循IEEE 754与RISC-V浮点规范,同场景下输出结果与RTL一致
内容的提问来源于stack exchange,提问作者sammy17
相关产品推荐
相关产品推荐

