Факторы ULP нативных операторов с плавающей точкой

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

Если область значений экспоненты не верхне ограничена, Модули в Ласт-Плэйс (ULP) числа с плавающей запятой x расстояние между двумя самыми близкими ведущими двойственную политику числами с плавающей запятой a и b самый близкий к x. Стандарт IEEE 754 требует, чтобы результат элементарной арифметической операции, такой как сложение, умножение и деление был правильно кругл. Правильно округленный результат означает, что округленный результат в 0,5 ULP точного результата.

Соблюдение нативных операторов с плавающей точкой к стандарту IEEE 754

Нативная технология с плавающей точкой в HDL Coder™ следует стандарту IEEE арифметики с плавающей точкой. Основные арифметические операции, такие как сложение, вычитание, умножение, деление и обратная величина получают мандат IEEE иметь нулевую ошибку ULP. Когда вы выполняете эти операции в нативном режиме с плавающей точкой, числовые результаты, полученные из сгенерированного HDL-кода, совпадают с исходной моделью Simulink®.

Определенные операции высшей математики, такие как экспоненциал, логарифм и тригонометрические операторы имеют специфичные для машины поведения реализации потому что эти операторы использование, повторяющееся ряд Тейлора и remez основанные на выражении реализации. Когда вы используете эти операторы в нативном режиме с плавающей точкой, могут быть относительно небольшие различия в числовых результатах между моделью Simulink и сгенерированным HDL-кодом.

Можно измерить различие в числовых результатах как относительная погрешность или ULP. Ненулевой ULP для этих операторов не означает несоблюдение стандарта IEEE. ULP каждый эквивалентен относительной погрешности 10^-7. Можно проигнорировать такие относительно небольшие ошибки путем определения пользовательского значения допуска для ULP при генерации испытательного стенда HDL. Например, можно задать пользовательский допуск с плавающей точкой одного ULP, чтобы проигнорировать ошибку при проверке сгенерированного кода. Для получения дополнительной информации смотрите FPToleranceStrategy и FPToleranceValue.

Значения ULP операторов с плавающей точкой

Таблица перечисляет ULP операторов с плавающей точкой, которые имеют ненулевой ULP. В дополнение к этим операторам блок HDL Reciprocal имеет ULP пять.

Математические функции

Блоки SimulinkМодули в Ласт-Плэйс (ULP) ошибка
exp1
журнал1
log101
10^u1
голова1
hypot1

Тригонометрические функции

Блоки SimulinkМодули в Ласт-Плэйс (ULP) ошибка
sin2
потому что2
tan3
asin2
acos2
atan2
atan25
sinh1
дубинка1
tanh1
asinh2
acosh2
atanh3
sincos2

Факторы

Для определенных входных значений с плавающей точкой некоторые блоки могут произвести результаты симуляции, которые варьируются от результатов симуляции MATLAB®. Чтобы видеть различие в результатах, прежде чем вы сгенерируете код, включают генерацию модели валидации. В диалоговом окне Configuration Parameters, на панели HDL Code Generation, устанавливают флажок Generate validation model.

  • Если вы выполняете расчеты, которые включают комплексные числа и исключение, такие как Inf или NaN, результат симуляции HDL с нативной плавающей точкой может потенциально варьироваться от результата симуляции Simulink. Например, если вы умножаете комплексный вход с Inf, результатом симуляции Simulink является Infi тогда как результатом симуляции HDL является NaN+Infi.

  • Если вы вычисляете квадратный корень или логарифм отрицательного числа, результатом симуляции HDL с нативной плавающей точкой является 0. Этот результат совпадает с результатом симуляции, когда вы проверяете проект с испытательным стендом SystemVerilog DPI. В Simulink полученным результатом является NaN. Согласно стандарту IEEE 754, если вы вычисляете квадратный корень или логарифм отрицательного числа, результат состоит в том что сам номер.

  • Если вход к Direct Lookup Table (n-D) имеет тип данных с плавающей точкой, но элементы таблицы используют меньший тип данных, сгенерированный HDL-код может быть потенциально неправильным. Например, вход имеет single введите и элементы используют uint8 ввод. Чтобы получить точные результаты симуляции HDL, используйте совпадающий тип данных во входном сигнале и элементах интерполяционной таблицы.

  • Если вы используете блок Cosine с входными параметрами -7.729179E28 или 7.729179E28, сгенерированный HDL-код имеет ULP 4. Для всех других входных параметров ULP равняется 2.

  • Когда вы используете блок Math Function, чтобы вычислить mod(a,b) или rem(a,b), где a дивиденд и b делитель, результат симуляции в нативном режиме точки с плавающей точкой варьируется от результата симуляции MATLAB по этим случаям:

    • Если b is integer and ab>232, результат симуляции в нативном режиме с плавающей точкой является нулем. Для такой значительной разницы в величине между числами a и b, эта реализация сохраняет область на целевом устройстве FPGA.

    • Если ab   близко к 223, результат симуляции в нативном режиме с плавающей точкой может потенциально варьироваться от результатов симуляции MATLAB.

Смотрите также

Руководства по моделированию

Функции

Свойства

Связанные примеры

Больше о