Xilinx MicroBlaze 浮点兼容性

问题描述 投票:0回答:3

我有一个针对 MicroBlaze CPU 的“c”代码。
当我在 Eclipse + GCC 或 Visual Studio 中将代码调试为 c 程序时,我得到了我想要的结果。
然而,当我在目标上运行时,结果却不同了。

它仅发生在浮点运算(乘法和除法)上。

我怎样才能让它以全浮点精度工作?

有特殊的 GCC 标志吗?

附注
MicroBlaze 的配置是启用所有浮点运算的硬件。

c gcc floating-point fpga xilinx
3个回答
1
投票

我对 MicroBlaze 不太有经验,但是维基百科页面指出:

此外,可以有选择地添加/删除很少使用但在硬件中实现成本更高的关键处理器指令(即乘法、除法和浮点运算。)

强调我的。

因此,请确保您的特定 MicroBlaze 实际上支持浮点运算,否则我想您的结果将非常随机。

还要确保您的编译器工具链生成正确的指令,有时嵌入式开发工具链支持软件模拟浮点。通过反汇编最终代码并查看浮点运算是如何实现的,应该很容易弄清楚这一点。


1
投票

硬件中的 MicroBlaze 浮点支持 IEEE754,但 MicroBlaze 参考指南中列出了一些例外情况。

浮点并非在所有机器上 100% 相同。 这取决于执行运算时的实际精度(硬件在执行单精度运算时可以使用扩展精度),还取决于舍入模式的配置(IEEE定义了四种不同的舍入模式)。

MicroBlaze 不支持非规范化浮点(它们将被视为零)。 然而,正常编码应避免非规范化值,因为它们的准确性会降低。

你看到什么不同?

马跃然·比尔斯基


0
投票

嘿有同样的问题。是的,有特殊的 gcc 标志,但从 Vivado 导出硬件时应自动设置它们。您可以在

查看此(Vivado SDK 2019.1)
Project > Properties > C/C++ Build > Settings > Microblaze gcc compiler > Inferred Options > Processor Options

Project > Properties > C/C++ Build > Settings > Microblaze gcc linker > Inferred Options > Processor Options

无论这些设置如何,结果都应该以某种形式代表您想要的结果。即使没有可用的 FPU,标准库也应该模拟浮点算术。

您链接了数学库(-lm)吗? 因为我也有同样的问题,奇怪的结果和 0 作为目标机器上标准数学函数的输出,没有编译时错误。在我链接“m”后,行为符合预期。 您可以在 Vivado SDK 中执行此操作

Project > Properties > C/C++ Build > Settings > Microblaze gcc linker > Libraries > -l > "m"

.

© www.soinside.com 2019 - 2024. All rights reserved.