Представление бесконечно вещественных чисел с конечным числом битов требует приближения. Это приближение может привести к погрешностям округления в расчете с плавающей точкой. Чтобы измерить погрешности округления, стандарт с плавающей точкой использует относительную погрешность и ULP (Модули в Последнем Месте) ошибка. Чтобы узнать об относительной погрешности, смотрите Факторы ULP и Относительная точность.
Если область значений экспоненты не верхне ограничена, Модули в Ласт-Плэйс (ULP) числа с плавающей запятой x расстояние между двумя самыми близкими ведущими двойственную политику числами с плавающей запятой a и b самый близкий к x. Стандарт IEEE 754 требует, чтобы результат элементарной арифметической операции, такой как сложение, умножение и деление был правильно кругл. Правильно округленный результат означает, что округленный результат в 0,5 ULP точного результата.
Нативная технология с плавающей точкой в HDL Coder™ следует стандарту IEEE арифметики с плавающей точкой. Основные арифметические операции, такие как сложение, вычитание, умножение, деление и обратная величина получают мандат IEEE иметь нулевую ошибку ULP. Когда вы выполняете эти операции в нативном режиме с плавающей точкой, числовые результаты, полученные из сгенерированного HDL-кода, совпадают с исходной моделью Simulink®.
Определенные операции высшей математики, такие как экспоненциал, логарифм и тригонометрические операторы имеют специфичные для машины поведения реализации потому что эти операторы использование, повторяющееся ряд Тейлора и remez основанные на выражении реализации. Когда вы используете эти операторы в нативном режиме с плавающей точкой, могут быть относительно небольшие различия в числовых результатах между моделью Simulink и сгенерированным HDL-кодом.
Можно измерить различие в числовых результатах как относительная погрешность или ULP. Ненулевой ULP для этих операторов не означает несоблюдение стандарта IEEE. ULP каждый эквивалентен относительной погрешности 10^-7
. Можно проигнорировать такие относительно небольшие ошибки путем определения пользовательского значения допуска для ULP при генерации испытательного стенда HDL. Например, можно задать пользовательский допуск с плавающей точкой одного ULP, чтобы проигнорировать ошибку при проверке сгенерированного кода. Для получения дополнительной информации смотрите FPToleranceStrategy
и FPToleranceValue
.
Таблица перечисляет ULP операторов с плавающей точкой, которые имеют ненулевой ULP. В дополнение к этим операторам блок HDL Reciprocal имеет ULP пять.
Математические функции
Для определенных входных значений с плавающей точкой некоторые блоки могут произвести результаты симуляции, которые варьируются от результатов симуляции 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 по этим случаям:
Если , результат симуляции в нативном режиме с плавающей точкой является нулем. Для такой значительной разницы в величине между числами a
и b
, эта реализация сохраняет область на целевом устройстве FPGA.
Если , результат симуляции в нативном режиме с плавающей точкой может потенциально варьироваться от результатов симуляции MATLAB.