我正在运行一个程序与浮点和双指令,我是观察这些指令的写回值不匹配,当比较我的RTL模拟和Spike。
例如:
fsqrt.d fa3, fa3
Instruction in hex: 0x5a06c6d3指令的输入参数的值为
0x41e2e80040000000 = 2537554432.0
sqrt(2537554432.0) = 50374.1444790876820703394273903...根据RISC规范和解码指令,该指令的舍入方式是圆到最近,与最大震级()相关。我正在从Spike和RTL获得以下的回写值.
Spike = 0x40e898c49f929b92 (in hex) = 50374.144479087685 (in decimal)
RTL sim = 0x40e898c49f929b91 (in hex) = 50374.144479087680 (in decimal)从实际的十进制值来看,RTL的结果似乎更接近实际值,因此给出了正确的结果,但是Spike和dromajo都给出了相同的值,这略有不同。
I想确认哪个结果是正确的,这种不匹配在浮点算法中是否可以被认为是一种错误行为。
请告诉我任何有助于解决我的疑问的信息。
发布于 2021-09-28 18:21:08
似乎RTL的结果更接近实际值。
不斯派克更近了。您的观察是倾斜的,因为双四舍五入和低级OP的RTL sim double的文本。使用更好的库和更高的十进制精度来查看。
Spike (OP) = 0x40e898c49f929b92 50374.144479087 685 (in decimal)
Spike = 0x1.898c49f929b92p+15 50374.144479087 684886 +0028
sqrt(2537554432.0) 50374.144479087 6820703394273903...
RTL sim = 0x1.898c49f929b91p+15 50374.144479087 677610 -0044
RTL sim (OP) = 0x40e898c49f929b91 50374.144479087 680 (in decimal)我怀疑RTL sim with 50374.144479087680中的错误可能是由于它的库double不正确地运行文本代码,而在圆到最近的时候,可能与最大震级(double)有关。
https://stackoverflow.com/questions/69365191
复制相似问题