30.5. FLOATING POINT UNIT




THIS SECTION IS UNDER CONSTRUCTION





FP сумматор








FP умножитель






Нормализация

Для выполнения операций выполняют процедуру нормализации сущность которой сводится к приведению мантисс к одной (большей) экспоненте. Соответсвенно бывает pre- и post- нормализация, до и после выполнения операции соответственно.

Кроме того для уменьшения потери точности как правило к мантиссе снизу добавляют еще один бит (sticky bit).


FP делитель






FP блок для квадратного корня






Вычисление сложных функций

Интерполяция


Конвертор из целых в FP. Все очень просто - шифратор Пример для конвертации положительных 11-битных целых в FP формат вида: 4 3 +----+---+ | M | E | +----+---+ 0*2^0 .... (2^4 - 1) * 2^7 library IEEE; use IEEE.std_logic_1164.all; entity xptofp is port ( B : in std_logic_vector(10 down to 0); -- Fixed point vector M : out std_logic_vector(3 downto 0); -- Mantissa E : out std_logic_vector(2 downto 0) -- Exponent ); end xptofp; architecture rtl of xptofp is begin process(B) begin if B(10) = '1' then M <= B(10 downto 7); E <= "111"; elsif B(9) = '1' then M <= B(9 downto 6); E <= "110"; elsif B(8) = '1' then M <= B(8 downto 5); E <= "101"; elsif B(7) = '1' then M <= B(7 downto 4); E <= "100"; elsif B(6) = '1' then M <= B(6 downto 3); E <= "011"; elsif B(5) = '1' then M <= B(5 downto 2); E <= "010"; elsif B(4) = '1' then M <= B(4 downto 1); E <= "001"; else M <= B(3 downto 0); E <= "000"; end if; end process; end rtl; А для реальных FP: сначала выделяем знак если число отрицательное берем его модуль с помощью приоритетного шифратора определяем старший значащий бит делаем из позиции старшего значащего бита экспоненту сдвигаем число на размер-старший значащий бит влево записываем мантиссу (помним о нормализации). ---------------------------------------------------------- Число В бинарном FP ---------------------------------------------------------- 0 00000000 0 00000000 00000000000000000000000 1 00000001 0 01111111 00000000000000000000000 2-3 0000001x 0 10000000 x0000000000000000000000 4-7 000001xx 0 10000001 xx000000000000000000000 8-15 00001xxx 0 10000010 xxx00000000000000000000 16-31 0001xxxx 0 10000011 xxxx0000000000000000000 32-63 001xxxxx 0 10000100 xxxxx000000000000000000 64-127 01xxxxxx 0 10000101 xxxxxx00000000000000000 128-255 1xxxxxxx 0 10000110 xxxxxxx0000000000000000 ----------------------------------------------------------


Блок для вычисления сложных функций Смотри секцию про числа с плавающей точкой.


LNS FP Unit




Index Prev Next