Представление бесконечно вещественных чисел с конечным числом битов требует аппроксимации. Это приближение может привести к ошибкам округления в вычислениях с плавающей запятой. Для измерения ошибок округления стандарт с плавающей запятой использует относительную ошибку и ошибку ULP (Единицы измерения в последнем месте). Сведения об относительной ошибке см. в разделах Относительная точность и Соображения ULP.
Если диапазон экспоненты не ограничен верхним пределом, то единицы измерения на последнем месте (ULP) числа с плавающей запятой x - это расстояние между двумя ближайшими к x ближайшими к числу с плавающей запятой a и b. Стандарт IEEE-754 требует, чтобы результат элементарной арифметической операции, такой как сложение, умножение и деление, был правильно округлым. Правильно округленный результат означает, что округленный результат находится в пределах 0,5 ULP от точного результата.
Собственная технология с плавающей запятой в HDL Coder™ соответствует стандарту IEEE арифметики с плавающей запятой. Основные арифметические операции, такие как сложение, вычитание, умножение, деление и обратное, предписываются IEEE иметь нулевую ошибку ULP. При выполнении этих операций в собственном режиме с плавающей запятой числовые результаты, полученные из сгенерированного кода HDL, соответствуют исходной модели Simulink ®.
Некоторые расширенные математические операции, такие как экспоненциальные, логарифмические и тригонометрические операторы, имеют специфичное для машины поведение реализации, поскольку эти операторы используют реализации на основе повторяющихся рядов тейлора и выражений remez. При использовании этих операторов в собственном режиме с плавающей запятой могут быть относительно небольшие различия в числовых результатах между моделью Simulink и сгенерированным кодом HDL.
Разницу в числовых результатах можно измерить как относительную ошибку или ULP. Ненулевое значение ULP для этих операторов не означает несоответствия стандарту IEEE. ULP одного эквивалентна относительной ошибке 10^-7. Такие относительно небольшие ошибки можно игнорировать, указывая пользовательское значение допуска для ULP при создании тестового стенда HDL. Например, можно задать пользовательский допуск с плавающей запятой для одного ULP, чтобы игнорировать ошибку при проверке созданного кода. Дополнительные сведения см. в разделе Параметры допуска с плавающей точкой.
Таблица перечисляет ULP операторов с плавающей запятой, имеющих ненулевой ULP. В дополнение к этим операторам блок обратной связи ЛВП имеет ULP из пяти.
Математические функции
Для некоторых входных значений с плавающей запятой некоторые блоки могут создавать результаты моделирования, которые отличаются от результатов моделирования MATLAB ®. Чтобы увидеть разницу в результатах, перед созданием кода включите создание модели проверки. В диалоговом окне Параметры конфигурации (Configuration Parameters) на панели Создание кода HDL (HDL Code Generation) установите флажок Генерировать модель проверки (Generate validation model).
При выполнении вычислений, включающих комплексные числа и исключение, например Inf или NaNрезультат моделирования ЛПВП с собственной плавающей запятой потенциально может отличаться от результата моделирования Simulink. Например, если умножить комплексный ввод на Inf, результат моделирования Simulink Infi в то время как результат моделирования ЛПВП NaN+Infi.
Если вычислить квадратный корень или логарифм отрицательного числа, результат моделирования HDL с собственной плавающей запятой будет 0. Этот результат соответствует результату моделирования при проверке конструкции с помощью тестового стенда SystemVerilog DPI. В Simulink полученный результат NaN. Согласно стандарту IEEE-754, если вычислить квадратный корень или логарифм отрицательного числа, результатом будет само это число.
Если вход в таблицу прямого поиска (n-D) имеет тип данных с плавающей запятой, но элементы таблицы используют меньший тип данных, генерируемый код HDL может быть потенциально неверным. Например, вход имеет значение single тип и используемые элементы uint8 тип. Для получения точных результатов моделирования ЛПВП используйте один и тот же тип данных для входного сигнала и элементов таблицы поиска.
При использовании блока косинуса с входами -7.729179E28 или 7.729179E28генерируемый код HDL имеет значение ULP, равное 4. Для всех остальных входов значение ULP равно 2.
При использовании блока математической функции для вычисления mod(a,b) или rem(a,b), где a является дивидендом и b - делитель, результат моделирования в нативном режиме с плавающей запятой варьируется от результата моделирования MATLAB в следующих случаях:
Если 232, результат моделирования в собственном режиме с плавающей запятой равен нулю. Для такой значительной разницы в величине между числамиa и b, эта реализация экономит область на целевом устройстве FPGA.
Если , результат моделирования в собственном режиме с плавающей запятой может потенциально отличаться от результатов моделирования MATLAB.