Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ - Олег Вальпа 13 стр.


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

С помощью n бит в дополнительном коде можно представлять диапазон чисел от -2 до 2-1, где n-1 разрядов отводится под величину, а 1 разряд под знак числа. Например, с помощью 16-разрядной шины данных в дополнительном коде можно представить числа в диапазоне от -32768 до 32767.

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

Двоичная запись числа 5:0000 0000 0000 0101

Инверсия бит: 1111 1111 1111 1010

Добавление 1: 0000 0000 0000 0001

---------------------------------

Результат=-5: 1111 1111 1111 1011

Пример перевода отрицательного числа -5 по второму способу:

Двоичная запись числа 5:0000 0000 0000 0101

Инверсия бит: 1111 1111 1111 1011

---------------------------------

Результат=-5: 1111 1111 1111 1011

Если сложить число -5 в дополнительном коде с числом 6, получим:

Число -5: 1111 1111 1111 1011

Число 6: 0000 0000 0000 0110

----------------------------

Число 1: 0000 0000 0000 0001

Как видим, результат получился верным.

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

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

Формат с плавающей точкой состоит из двух частей, которые представляют значение мантиссы и экспоненты числа. Экспонента указывает местоположение запятой. Она может храниться вместе с мантиссой или в отдельном регистре.

Семейство процессоров ADSP-21XX поддерживают операции с числами в формате с фиксированной точкой. В настоящем изложении при указании формата числа используется запись L.R, где L - число двоичных разрядов слева от запятой, a R - число разрядов справа от запятой. Например, формат записи 1.15 указывает на то, что дробное число имеет один знаковый разряд и 15 разрядов для представления величины дробной части. Целое число имеет для такого представления формат записи 16.0. Для большинства приложений обработки сигналов предполагается использование дробных чисел в формате 1.15, поскольку умножитель и делитель процессора ADSP-2181 оптимизированы для операций с числами именно в таком формате.

Ассемблер ADSP-21XX поддерживает четыре формата представления данных при вычислениях. Формат представления данных имеет следующие условные названия: двоичная строка, двоичные числа без знака, знаковые числа в дополнительном коде и дробное представление.

Двоичная строка является самым простым форматом представления чисел в процессорах семейства ADSP-21XX. Этот формат используется при выполнении элементарных логических операций типа NOT, OR, AND и XOR. Ниже приведены весовые значения битов для этого формата записи.

2222222222222222

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

Знаковые числа можно отнести к числам в дополнительном коде. Большинство операций процессора поддерживают работу с числами в дополнительном коде. Процессоры семейства ADSP-21XX не поддерживают работу с остатками и числами в двоично-десятичном формате BCD (Binary Coded Decimal), когда каждая десятичная цифра представляется 4-битным двоичным позиционным кодом. Ниже приведены весовые значения битов для этого формата знаковых чисел.

-2222222222222222

Дробное представление чисел имеет формат записи 1.15. Это означает, что 16-разрядное число имеет один знаковый разряд и пятнадцать дробных битов. Ниже представлены весовые значения битов в формате 1.15.

-2222222222222222

Для вычисления числа, записанного в этом формате, необходимо подставить вместо цифры 2 значение соответствующего разряда (0 или 1) и сложить все полученные значения. В табл. 12.1 приведены примеры соответствия чисел записанных в шестнадцатеричном виде формата 1.15 их десятичным значениям.

Таблица 12.1 Примеры соответствия чисел, записанных в шестнадцатеричном виде формата 1.15, их десятичным значениям

Число в формате 1.15Число в HEX форматеДесятичное значение
0000 0000 0000 00000x0000+0
0000 0000 0000 00010x0001+0,000030517578125
0000 0000 0000 00100x0002+0,00006103515625
1000 0000 0000 00000x8000-1,000000
0111 1111 1111 11110x7FFF+0,999969482421875
1111 1111 1111 11110xFFFF-0,000030517578125

Как видно из таблицы, самый младший разряд эквивалентен десятичному значению 0,000030517578125. Это значение и определяет точность представления всех чисел в данном формате. Для достижения большей точности необходимо расширять разрядность числа, например программным образом размещая число в два или три 16-разрядных регистра. Аналогично можно увеличить и диапазон обрабатываемых чисел.

В табл. 12.2 приведены все возможные варианты форматов для 16-разрядного числа. Эта таблица дает наглядное представление о том, как изменяется, в зависимости от формата, диапазон представляемых чисел и их точность.

Таблица 12.2 Возможные варианты форматов для 16-разрядного числа

ФорматКоличество целых разрядовКоличество дробных разрядовМаксимальное положительное значениеМаксимальное отрицательное значениеВес младшего разряда
1.151150,999969482421875-1,00.000030517578125
2.142141,999938964843750-2,00.000061035156250
3.133133,999877929687500-4,00.000122070312500
4.124127,999755859375000-8,00.000244140625000
5.1151115,999511718750000-16,00.000488281250000
6.1061031,999023437500000-32,00.000976562500000
7.97963,998046875000000-64,00.001953125000000
8.888127,996093750000000-128,00.003906250000000
9.797255,992187500000000-256,00.007812500000000
10.6106511,984375000000000-512,00.015625000000000
11.51151023,968750000000000-1024,00.031250000000000
12.41242047,937500000000000-20480.062500000000000
13.31334095,875000000000000-4096,00.125000000000000
14.21428191,750000000000000-8192,00.250000000000000
15.115116383,500000000000000-16384,00.500000000000000
16.016032767,000000000000000-32768,01.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 с объяснением их назначения.

DM(var1) = AX0;

Эта команда, знакомая читателям из предыдущих примеров программ, присваивает (записывает) значение регистра AX0 переменной var1, хранящейся в памяти данных.

MR = MR + MX1*MY1;

Данная команда выполняет операцию умножения и сложения. Он умножает входные значения из регистров MX1 и MY1, складывает результат умножения с текущим содержимым регистра MR (результат предыдущего умножения), а затем записывает результат в регистр MR.

При рассмотрении системы команд мы будем пользоваться условными обозначениями, приведенными в табл. 13.3. Эти обозначения позволяют сделать описание команд компактным.

Таблица 13.3 Условные обозначения системы команд

ОбозначениеОписание
I0–I7Индексные регистры DAG для косвенной адресации
M0–M7Регистры модификации DAG для косвенной адресации
L0–L7Регистры длины DAG для циклических буферов
<data>Непосредственное значение данных
<addr>Непосредственное значение адреса (абсолютный адрес или программная метка)
<exp>Порядок (значение сдвига) в командах непосредственного сдвига (8-разрядное знаковое число)
condКод условия в условных командах
termКод условия выхода из цикла DO UNTIL
dregРегистры данных (АЛУ, умножителя-накопителя или устройства сдвига)
regЛюбой регистр (включая регистры данных "dreg")
;Точка с запятой, разделитель команд
,Запятая, разделитель нескольких операций в одной команде
[]Квадратные скобки, содержащие дополнительные, необязательные части команд
[, …]Запись нескольких операций или команд в любом порядке, разделенных запятыми
|опция1| |опция2| |опция3|Список опций (в команде выбирается одна из опций)
xopОперанд "x"
yopОперанд "y"
constantОперанд-константа

В табл. 13.4 приведен список регистров, допустимых к использованию в командах пересылки и многофункциональных командах.

Таблица 13.4 Список регистров допустимых к использованию в командах пересылки и многофункциональных командах

Назад Дальше