Совместимость с плавающей точкой Xilinx MicroBlaze
У меня есть код "c", предназначенный для процессора MicroBlaze.
Когда я отлаживаю код как программу на Eclipse + GCC или Visual Studio, я получаю результаты, которые хочу.
Тем не менее, когда я бегу по цели, результат другой.
Это происходит только для операций с плавающей запятой (умножение и деление).
Как я могу заставить его работать с полной точностью с плавающей запятой?
Существуют ли специальные флаги GCC?
PS
Конфигурация MicroBlaze выполняется со всем аппаратным обеспечением операций с плавающей запятой.
2 ответа
Аппаратное обеспечение MicroBlaze с плавающей точкой поддерживает IEEE754 с некоторыми исключениями, перечисленными в справочном руководстве по MicroBlaze.
Плавающая точка не на 100% идентична на всех машинах. Это зависит от фактической точности при выполнении операций (аппаратное обеспечение может использовать расширенную точность при выполнении операций с одинарной точностью), это также зависит от конфигурации режима округления (IEEE определяет четыре различных режима округления).
MicroBlaze не поддерживает денормализованную плавающую точку (они будут считаться нулевыми). Однако нормальное кодирование должно избегать денормализованных значений, поскольку они имеют пониженную точность.
Какую разницу вы видите?
Йоран Бильски
Я не очень опытен с MicroBlaze, но страница в Википедии гласит:
Кроме того, команды процессора ключей, которые редко используются, но являются более дорогостоящими для реализации в аппаратных средствах, могут быть выборочно добавлены / удалены (т.е. операции умножения, деления и операции с плавающей запятой).
Акцент мой.
Поэтому убедитесь, что ваш конкретный MicroBlaze действительно поддерживает операции с плавающей запятой, иначе я думаю, что ваши результаты будут очень случайными.
Также убедитесь, что ваш набор инструментов компилятора генерирует правильные инструкции, иногда наборы инструментов для встроенной поддержки разработки с программной эмулированной плавающей точкой. Это должно быть тривиально, разобрав окончательный код и увидев, как реализованы операции с плавающей точкой.