Числовые факторы с собственным компонентом, с плавающей точкой

Нативная технология с плавающей точкой может сгенерировать HDL-код из вашего проекта с плавающей точкой. Проекты с плавающей точкой имеют лучшую точность, более высокий динамический диапазон и более короткий цикл разработки, чем проекты фиксированной точки. Если ваш проект имеет комплексную математику и тригонометрические операции, используйте нативную технологию с плавающей точкой.

HDL Coder™ генерирует код, который выполняет стандарт IEEE 754 арифметики с плавающей точкой. Собственный компонент HDL Coder поддержки с плавающей точкой:

  • Вокруг к самому близкому режиму округления

  • Нестандартные числа

  • Исключения, такие как NaN (Не Номер), Inf и Нуль

  • Индивидуальная настройка ULP (Модули в Последнем Месте) и относительная точность

Вокруг к самому близкому округлению режима

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

Этот метод округления требует по крайней мере трех запаздывающих битов после 23 битов мантиссы. MSB называется "Сторожевым" разрядом, средний бит называется Круглым битом, и LSB называется Липким битом. Таблица показывает округляющееся действие, что HDL Coder выполняет на основе различных значений трех запаздывающих битов. x обозначает, что не заботится о значении и может взять или 0 или 1.

Округление битовОкругление действия
0xx

Никакое действие не выполняется.

100Связь. Если бит мантиссы, который предшествует "Сторожевому" разряду, является 1, окружите, в противном случае никакое действие не выполняется.
101Окружить.
11xОкружить.

Нестандартные числа

Нестандартные числа являются числами, которые имеют равное нулю поле экспоненты и ненулевое поле мантиссы. Ведущий бит мантиссы является нулем.

value=(1)sign*(0+Σ23i=1b23i2i)*2126

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

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

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

Обработка исключений

Если вы выполняете операции, такие как деление на нуль или вычисляете логарифм отрицательного числа, HDL Coder обнаруживает и сообщает об исключениях. Таблица суммирует отображение от кодирования числа с плавающей запятой к значению номера для различных видов исключений. x обозначает, что не заботится о значении и может взять или 0 или 1.

ЗнакЭкспонентаМантиссаЗначениеОписание
x0xFF0x00000000

value=(1)S

Бесконечность
x0xFFНенулевое значение

значение = NaN

Не номер
x0x000x00000000

значение = 0

Нуль
x0x00Ненулевое значение

value=(1)sign*(0+Σ23i=1b23i2i)*2126

Нестандартный
x0x00 <E <0xFFx

value=(1)sign*(1+Σ23i=1b23i2i)*2(e127)

Нормальный

Относительная точность и факторы ULP

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

ULP

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

ULP каждый означает добавлять 1 в десятичное значение номера. Таблица показывает приближение пи к девяти десятичным цифрам и как ULP каждый изменяет приближенное значение.

Число с плавающей запятойЗначение в десятичном числеПредставление IEEE 754 для Одного ТиповULP
3.14159274110785300110|10000000|100100100001111110110110
3.14159297910785300120|10000000|100100100001111110111001

Разрыв между двумя последовательно представимыми числами с плавающей запятой отличается согласно значению.

Число с плавающей запятойЗначение в десятичном числеПредставление IEEE 754 для Одного ТиповULP
123456712346133040|10010011|001011010110100001110000
1234567.12512346133050|10010011|001011010110100001110011

Относительная погрешность

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

Число с плавающей запятойЗначение в десятичном числе Представление IEEE 754 для Одного ТиповULPОтносительная погрешность
838860812582912000|10010110|0000000000000000000000001
838860712582911980|10010101|1111111111111111111111012.3841858e-07
110653532160|01111111|0000000000000000000000001.1920929e-07
210737418240|10000000|0000000000000000000000012.3841858e-07

Значение относительной погрешности зависит от действительного значения числа с плавающей запятой.

В MATLAB® функция eps измеряет относительную точность числа с плавающей запятой. Для получения дополнительной информации смотрите eps.

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

Нативная поддержка с плавающей точкой в HDL Coder следует стандарту IEEE арифметики с плавающей точкой.

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

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

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

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

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

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

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

Блоки SimulinkМодули в Ласт-Плэйс (ULP) ошибка
sin2
потому что2
загар3
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, если вы вычисляете квадратный корень или логарифм отрицательного числа, результат состоит в том что сам номер.

  • Если вход к Прямой Интерполяционной таблице (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  целое число и ab>232, результат симуляции в нативном режиме с плавающей точкой является нулем. Для такой значительной разницы в значении между числами a и b, эта реализация сохраняет область на целевом устройстве FPGA.

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

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

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

Функции

Свойства

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

Больше о