RISC-V 浮点舍入结果 Spike Vs。 RTL 仿真
RISC-V floating-point rounding results Spike Vs. RTL simulation
我是 运行 一个带有浮点和双精度指令的程序,在比较我的 RTL 模拟和 Spike 时,我观察到这些指令的回写值不匹配。
例如:
fsqrt.d fa3, fa3
Instruction in hex: 0x5a06c6d3
指令的输入参数值为
0x41e2e80040000000 = 2537554432.0
sqrt(2537554432.0) = 50374.1444790876820703394273903...
根据RISC-V规范和解码指令,该指令的舍入模式是Round to Nearest,与Max Magnitude (RMM)相关。
我从 Spike 和 RTL sim 中得到以下回写值。
Spike = 0x40e898c49f929b92 (in hex) = 50374.144479087685 (in decimal)
RTL sim = 0x40e898c49f929b91 (in hex) = 50374.144479087680 (in decimal)
看实际的十进制值,似乎RTL结果更接近实际值,因此给出了正确的结果,但Spike和dromajo给出的值相同,略有不同。
我想确认哪个结果是正确的,以及这种不匹配是否可以被视为浮点运算中的错误行为。
请让我知道任何有助于解决我的疑问的信息。
it seems like RTL result is closer to the actual value
不,斯派克更近了。由于 double rounding 和劣质 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
和 50374.144479087680
中的错误可能是由于它的库 double
到文本代码 运行 不正确,而 舍入到最近,与最大震级 (RMM) 相关。
我是 运行 一个带有浮点和双精度指令的程序,在比较我的 RTL 模拟和 Spike 时,我观察到这些指令的回写值不匹配。
例如:
fsqrt.d fa3, fa3
Instruction in hex: 0x5a06c6d3
指令的输入参数值为
0x41e2e80040000000 = 2537554432.0
sqrt(2537554432.0) = 50374.1444790876820703394273903...
根据RISC-V规范和解码指令,该指令的舍入模式是Round to Nearest,与Max Magnitude (RMM)相关。 我从 Spike 和 RTL sim 中得到以下回写值。
Spike = 0x40e898c49f929b92 (in hex) = 50374.144479087685 (in decimal)
RTL sim = 0x40e898c49f929b91 (in hex) = 50374.144479087680 (in decimal)
看实际的十进制值,似乎RTL结果更接近实际值,因此给出了正确的结果,但Spike和dromajo给出的值相同,略有不同。
我想确认哪个结果是正确的,以及这种不匹配是否可以被视为浮点运算中的错误行为。
请让我知道任何有助于解决我的疑问的信息。
it seems like RTL result is closer to the actual value
不,斯派克更近了。由于 double rounding 和劣质 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
和 50374.144479087680
中的错误可能是由于它的库 double
到文本代码 运行 不正确,而 舍入到最近,与最大震级 (RMM) 相关。