Xilinx MicroBlaze Совместимость с плавающей запятой

У меня есть код 'c', предназначенный для процессора MicroBlaze.
Когда я отлаживаю код как программу c в Eclipse + GCC или Visual Studio, я получаю нужные результаты.
Однако когда я запускаю целевой объект, результат разные.

Это происходит только при операциях с плавающей запятой (умножение и деление).

Как я могу заставить его работать с полной точностью с плавающей запятой?

Существуют ли специальные флаги GCC?

P.S.
В конфигурации MicroBlaze включено все аппаратное обеспечение операций с плавающей запятой.


person Royi    schedule 02.07.2014    source источник
comment
Какие определения типов вы используете? В частности, какова длина поплавка? Они одинаковы в обоих тестах? (32 бита, я полагаю?)   -  person stanri    schedule 02.07.2014
comment
Я использую C-синглы. Я не использую никаких typedefs. Только простые операции над синглами.   -  person Royi    schedule 02.07.2014
comment
Какой механизм вы используете для проверки правильности результатов ublaze?   -  person stanri    schedule 02.07.2014
comment
МодельSim. Я запускаю весь VHDL на ModelSim. Я использую входные данные от ModelSim для кода в Eclipse/Visual Studio. Потом сравниваю результаты.   -  person Royi    schedule 02.07.2014


Ответы (2)


У меня нет большого опыта работы с MicroBlaze, но на странице Википедии говорится:

Кроме того, ключевые инструкции процессора, которые редко используются, но более дороги для аппаратной реализации, могут быть выборочно добавлены/удалены (например, умножение, деление и операции с плавающей запятой).

Акцент мой.

Итак, убедитесь, что ваш конкретный MicroBlaze действительно поддерживает операции с плавающей запятой, иначе я полагаю, что ваши результаты будут очень случайными.

Также убедитесь, что ваш инструментарий компилятора генерирует правильные инструкции, иногда наборы инструментов для встроенной разработки поддерживают программную эмуляцию с плавающей запятой. Это должно быть тривиально, чтобы понять, разобрав окончательный код и посмотрев, как реализованы операции с плавающей запятой.

person unwind    schedule 02.07.2014
comment
Операции с плавающей запятой разрешены. Они просто не такие точные, как на других платформах, хотя должны. Поскольку я использую систему обратной связи после достаточного количества итераций, результаты значительно расходятся. - person Royi; 02.07.2014

MicroBlaze с плавающей запятой аппаратно поддерживает IEEE754 с некоторыми исключениями, перечисленными в справочном руководстве MicroBlaze.

Плавающая точка не на всех машинах идентична на 100%. Это зависит от фактической точности при выполнении операций (аппаратное обеспечение может использовать расширенную точность при выполнении операций с одинарной точностью), а также от конфигурации режима округления (IEEE определяет четыре различных режима округления).

MicroBlaze не поддерживает денормализованные числа с плавающей запятой (они будут считаться равными нулю). Однако нормальное кодирование должно избегать денормализованных значений, поскольку они имеют пониженную точность.

Какую разницу вы видите?

Йоран Билски

person user3801719    schedule 03.07.2014