Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Шрифт:
21521421321221121029282726252423222120
Под двоичными числами без знака понимаются положительные числа. Диапазон их представления в процессоре в два раза больше чем у чисел со знаком, за счет самого знакового разряда. Фактически они выглядят также, как двоичная строка.
Знаковые числа можно отнести к числам в дополнительном коде. Большинство операций процессора поддерживают работу с числами в дополнительном коде. Процессоры семейства ADSP-21XX не поддерживают работу с остатками и числами в двоично-десятичном формате BCD (Binary Coded Decimal), когда каждая десятичная цифра представляется 4-битным двоичным позиционным кодом. Ниже приведены весовые значения битов для этого формата знаковых чисел.
– 2021421321221121029282726252423222120
Дробное
– 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 имеет ряд дополнительных команд. Каждая команда может быть выполнена отдельно в своем такте. Кроме того, система команд позволяет выполнять за один такт процессора многофункциональные команды.
Язык ассемблера позволяет использовать в командах арифметические или логические выражения. Список этих выражений и выполняемых с их помощью действий приведен в табл. 13.2.
Таблица 13.2 Список арифметических или логических выражений и выполняемых с их помощью действий
Выражение | Действие |
---|---|
= | Присвоение |
+ | Сложение |
– | Вычитание |
* | Умножение |
AND | Логическое «И» |
OR | Логическое «ИЛИ» |
NOT | Логическое отрицание |
XOR | Исключающее «ИЛИ» |
PASS | Пересылка |
ABS | Абсолютное значение |
Ниже приведены примеры записи некоторых команд языка ассемблера ADSP-21XX с объяснением их назначения.
Эта команда, знакомая читателям из предыдущих примеров программ, присваивает (записывает) значение регистра AX0 переменной var1, хранящейся в памяти данных.
Данная команда выполняет операцию умножения и сложения. Он умножает входные значения из регистров MX1 и MY1, складывает результат умножения с текущим содержимым регистра MR (результат предыдущего умножения), а затем записывает результат в регистр MR.