Собственная технология с плавающей запятой может генерировать код HDL из вашего проекта с плавающей запятой. Конструкции с плавающей запятой имеют более высокую точность, более высокий динамический диапазон и более короткий цикл разработки, чем конструкции с фиксированной запятой. Если в конструкции имеются сложные математические и тригонометрические операции, используйте собственную технологию с плавающей запятой.
HDL Coder™ генерирует код, соответствующий стандарту IEEE-754 арифметики с плавающей запятой. Собственный кодер HDL поддерживает плавающую точку:
Округление до ближайшего режима округления
Денормальные числа
Исключения, такие как NaN (не число), Inf и Zero
Настройка ULP (единицы на последнем месте) и относительная точность
Собственная плавающая точка кодера HDL использует режим округления до ближайшего даже округления. Этот режим разрешает все связи путем округления до ближайшей четной цифры.
Этот способ округления требует, по меньшей мере, трех завершающих битов после 23 битов мантиссы. MSB называется bit Guard, средний бит называется битом Round, а LSB - битом Sticky. В таблице показано действие округления, выполняемое кодером HDL на основе различных значений трех завершающих битов. x обозначает значение «don 'care» и может принимать либо 0, либо 1.
| Биты округления | Действие округления |
|---|---|
0xx | Действие не выполнено. |
100 | Галстук. Если бит mantissa, предшествующий биту Guard, равен 1, округляется, в противном случае никакие действия не выполняются. |
101 | Округление. |
11x | Округление. |
Денормальные числа - это числа, которые имеют поле экспоненты, равное нулю, и ненулевое поле мантиссы. Ведущий бит мантиссы равен нулю.
i2 − i) * 2 − 126
Денормальные числа имеют величины, меньшие, чем наименьшее число с плавающей запятой, которое может быть представлено без ведущих нулей в мантиссе. Наличие денормальных чисел указывает на потерю значащих цифр, которые могут накапливаться в ходе последующих операций и в конечном итоге приводить к неожиданным значениям.
Логика обработки денормальных чисел включает в себя подсчет числа начальных нулей и выполнение операции сдвига влево для получения нормализованного представления. Добавление этой логики увеличивает занимаемую площадь на целевом устройстве и может повлиять на время проектирования.
При использовании собственной поддержки с плавающей запятой можно указать, должен ли кодер HDL обрабатывать денормальные числа в конструкции. По умолчанию генератор кода не проверяет денормальные числа, что позволяет сохранить область на целевой платформе.
При выполнении таких операций, как деление на ноль или вычисление логарифма отрицательного числа, кодер HDL обнаруживает и сообщает об исключениях. Таблица суммирует отображение от кодирования числа с плавающей запятой к значению числа для различных видов исключений. x обозначает значение «don 'care» и может принимать либо 0, либо 1.
| Знак | Экспонента | Significand | Стоимость | Описание |
|---|---|---|---|---|
| x | 0xFF | 0x00000000 |
) S∞
| Бесконечность |
| x | 0xFF | Ненулевое значение | значение = NaN | Не число |
| x | 0x00 | 0x00000000 | значение = 0 | Ноль |
| x | 0x00 | Ненулевое значение |
i2 − i) * 2 − 126
| Denormal |
| x | 0x00 < E < 0xFF | x |
− i) * 2 (e − 127)
| Нормальный |
Представление бесконечно вещественных чисел с конечным числом битов требует аппроксимации. Это приближение может привести к ошибкам округления в вычислениях с плавающей запятой. Для измерения ошибок округления стандарт с плавающей запятой использует относительную ошибку и ошибку ULP (Единицы измерения в последнем месте).
Если диапазон экспоненты не ограничен верхним пределом, то единицы измерения на последнем месте (ULP) числа с плавающей запятой x - это расстояние между двумя ближайшими к x ближайшими к числу с плавающей запятой a и b. Стандарт IEEE-754 требует, чтобы результат элементарной арифметической операции, такой как сложение, умножение и деление, был правильно округлым. Правильно округленный результат означает, что округленный результат находится в пределах 0,5 ULP от точного результата.
ULP одного означает добавление 1 к десятичному значению числа. Таблица показывает приближение pi к девяти десятичным цифрам и то, как ULP одного изменяет приблизительное значение.
| Число с плавающей запятой | Значение в десятичном выражении | IEEE-754 представление для отдельных типов | ULP |
|---|---|---|---|
| 3.141592741 | 1078530011 | 0|10000000|10010010000111111011011 | 0 |
| 3.141592979 | 1078530012 | 0|10000000|10010010000111111011100 | 1 |
Промежуток между двумя последовательно представляемыми числами с плавающей запятой изменяется в соответствии с величиной.
| Число с плавающей запятой | Значение в десятичном выражении | IEEE-754 представление для отдельных типов | ULP |
|---|---|---|---|
| 1234567 | 1234613304 | 0|10010011|00101101011010000111000 | 0 |
| 1234567.125 | 1234613305 | 0|10010011|00101101011010000111001 | 1 |
Относительная ошибка измеряет разницу между числом с плавающей запятой и аппроксимацией вещественного числа. Относительная ошибка возвращает расстояние от 1,0 до следующего большего числа. В этой таблице показано изменение действительного значения числа с относительной точностью.
| Число с плавающей запятой | Значение в десятичном выражении | IEEE-754 представление для отдельных типов | ULP | Относительная ошибка |
|---|---|---|---|---|
| 8388608 | 1258291200 | 0|10010110|00000000000000000000000 | 0 | 1 |
| 8388607 | 1258291198 | 0|10010101|11111111111111111111110 | 1 | 2.3841858e-07 |
| 1 | 1065353216 | 0|01111111|00000000000000000000000 | 0 | 1.1920929e-07 |
| 2 | 1073741824 | 0|10000000|00000000000000000000000 | 1 | 2.3841858e-07 |
Величина относительной ошибки зависит от действительного значения числа с плавающей запятой.
В MATLAB ®, eps функция измеряет относительную точность числа с плавающей запятой. Дополнительные сведения см. в разделе eps.