Олег Вальпа - Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Дробное представление чисел имеет формат записи 1.15. Это означает, что 16-разрядное число имеет один знаковый разряд и пятнадцать дробных битов. Ниже представлены весовые значения битов в формате 1.15.
-202-12-22-32-42-52-62-72-82-92-102-112-122-132-142-15
Для вычисления числа, записанного в этом формате, необходимо подставить вместо цифры 2 значение соответствующего разряда (0 или 1) и сложить все полученные значения. В табл. 12.1 приведены примеры соответствия чисел записанных в шестнадцатеричном виде формата 1.15 их десятичным значениям.
Таблица 12.1 Примеры соответствия чисел, записанных в шестнадцатеричном виде формата 1.15, их десятичным значениям
Число в формате 1.15 Число в HEX формате Десятичное значение 0000 0000 0000 0000 0x0000 +0 0000 0000 0000 0001 0x0001 +0,000030517578125 0000 0000 0000 0010 0x0002 +0,00006103515625 1000 0000 0000 0000 0x8000 -1,000000 0111 1111 1111 1111 0x7FFF +0,999969482421875 1111 1111 1111 1111 0xFFFF -0,000030517578125Как видно из таблицы, самый младший разряд эквивалентен десятичному значению 0,000030517578125. Это значение и определяет точность представления всех чисел в данном формате. Для достижения большей точности необходимо расширять разрядность числа, например программным образом размещая число в два или три 16-разрядных регистра. Аналогично можно увеличить и диапазон обрабатываемых чисел.
В табл. 12.2 приведены все возможные варианты форматов для 16-разрядного числа. Эта таблица дает наглядное представление о том, как изменяется, в зависимости от формата, диапазон представляемых чисел и их точность.
Таблица 12.2 Возможные варианты форматов для 16-разрядного числа
Формат Количество целых разрядов Количество дробных разрядов Максимальное положительное значение Максимальное отрицательное значение Вес младшего разряда 1.15 1 15 0,999969482421875 -1,0 0.000030517578125 2.14 2 14 1,999938964843750 -2,0 0.000061035156250 3.13 3 13 3,999877929687500 -4,0 0.000122070312500 4.12 4 12 7,999755859375000 -8,0 0.000244140625000 5.11 5 11 15,999511718750000 -16,0 0.000488281250000 6.10 6 10 31,999023437500000 -32,0 0.000976562500000 7.9 7 9 63,998046875000000 -64,0 0.001953125000000 8.8 8 8 127,996093750000000 -128,0 0.003906250000000 9.7 9 7 255,992187500000000 -256,0 0.007812500000000 10.6 10 6 511,984375000000000 -512,0 0.015625000000000 11.5 11 5 1023,968750000000000 -1024,0 0.031250000000000 12.4 12 4 2047,937500000000000 -2048 0.062500000000000 13.3 13 3 4095,875000000000000 -4096,0 0.125000000000000 14.2 14 2 8191,750000000000000 -8192,0 0.250000000000000 15.1 15 1 16383,500000000000000 -16384,0 0.500000000000000 16.0 16 0 32767,000000000000000 -32768,0 1.000000000000000Из таблицы видно, что чем больше двоичных разрядов отводится под целую часть числа, тем больший диапазон чисел можно охватить с помощью такого формата. Однако при этом снижается точность представления числа, т.е. его дробная часть сводится к нулю. И наоборот, чем больше двоичных разрядов отводится под дробную часть числа, тем меньший диапазон чисел можно охватить с помощью такого формата. Но при этом увеличивается точность представления числа, т.е. его дробная часть может быть очень малой величиной, составляющей менее одной миллиардной доли единицы.
В зависимости от типа решаемой задачи программист сам определяет, какой именно формат лучше использовать.
Глава 13. Система команд
В этой главе начинается изложение системы команд сигнального процессора.
Сигнальные процессоры семейства ADSP-21XX используют единую систему команд для совместимости с устройствами с более высокой интеграцией. Процессоры ADSP-2181 имеют ряд дополнительных команд. Каждая команда может быть выполнена в процессоре за один такт. Кроме того, система команд процессора позволяет выполнять за один такт многофункциональные команды. Как было сказано ранее, язык ассемблер семейства ADSP-21XX использует высокоуровневый алгебраический синтаксис записи команд, что облегчает их понимание и запоминание. Операнды источника и приемника команды явно присутствуют в ее записи в виде мнемоники. Мнемоника основных регистров процессора с описанием их назначения приводится в табл. 13.1.
Таблица 13.1 Мнемоника основных регистров процессора с описанием их назначения
Мнемоника Определение AX0, AX1, AY0, AY1 Входные регистры АЛУ AR Регистр результата АЛУ AF Регистр обратной связи АЛУ MX0, MX1, MY0, MY1 Входные регистры умножителя MAC MR0, MR1, MR2 Регистры результата умножителя MF Регистр обратной связи умножителя SI Входной регистр устройства сдвига Shifter SE Регистр экспоненты устройства сдвига SR0, SR1 Регистры результата устройства сдвига SB Регистр блочного сдвига (используется в блочных операциях с плавающей точкой) PX Регистр шинного обмена памяти программ PM с памятью данных DM I0–I7 Индексные регистры генераторов адреса DAG M0–M7 Регистры модификации DAG L0–L7 Регистры длины DAG (для циклических буферов) PC Программный счетчик CNTR Счетчик циклов ASTAT Регистр арифметического статуса MSTAT Регистр статуса режима SSTAT Регистр статуса стека IMASK Регистр маски прерываний ICNTL Регистр режимов управления прерываниями RX0, RX1 Регистры приема данных последовательных портов SPORT TX0, TX1 Регистры передачи данных последовательных портов SPORTНабор команд ADSP-2181 совместим вверх с набором команд ADSP-21XX, поэтому, программы, написанные для ADSP-21XX, могут выполняться на ADSP-2181 с минимальными изменениями. Процессор ADSP-2181 имеет ряд дополнительных команд. Каждая команда может быть выполнена отдельно в своем такте. Кроме того, система команд позволяет выполнять за один такт процессора многофункциональные команды.