Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Шрифт:
В зависимости от типа решаемой задачи программист сам определяет, какой именно формат лучше использовать.
Глава 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.
При рассмотрении системы команд мы будем пользоваться условными обозначениями, приведенными в табл. 13.3. Эти обозначения позволяют сделать описание команд компактным.
Таблица 13.3 Условные обозначения системы команд
Обозначение | Описание |
---|---|
I0–I7 | Индексные регистры DAG для косвенной адресации |
M0–M7 | Регистры модификации DAG для косвенной адресации |
L0–L7 | Регистры длины DAG для циклических буферов |
<data> | Непосредственное значение данных |
<addr> | Непосредственное значение адреса (абсолютный адрес или программная метка) |
<exp> | Порядок (значение
|
cond | Код условия в условных командах |
term | Код условия выхода из цикла DO UNTIL |
dreg | Регистры данных (АЛУ, умножителя-накопителя или устройства сдвига) |
reg | Любой регистр (включая регистры данных «dreg») |
; | Точка с запятой, разделитель команд |
, | Запятая, разделитель нескольких операций в одной команде |
[] | Квадратные скобки, содержащие дополнительные, необязательные части команд |
[, …] | Запись нескольких операций или команд в любом порядке, разделенных запятыми |
|опция1| |опция2| |опция3| | Список опций (в команде выбирается одна из опций) |
xop | Операнд «x» |
yop | Операнд «y» |
constant | Операнд-константа |
В табл. 13.4 приведен список регистров, допустимых к использованию в командах пересылки и многофункциональных командах.
Таблица 13.4 Список регистров допустимых к использованию в командах пересылки и многофункциональных командах
Регистр | Примечание |
---|---|
Регистры данных <dreg> | |
AX0, АХ1, AY0, AY1 | – |
AR | – |
MX0, МХ1, MY0, MY1 | – |
MR0, MR1, MR2 | – |
SI, SE, SR0, SR1 | – |
Остальные регистры <reg> | |
I0, I1, I2, I3, I4, I5, I6, I7 | – |
M0, M1, M2, M3, M4, M5, M6, M7 | – |
L0, L1, L2, L3, L4, L5, L6, L7 | – |
TX0, TX1, RX0, RX1 | – |
SB, PX | – |
ASTAT, MSTAT | – |
SSTAT | Только чтение |
IMASK, ICNTL | – |
IFC | Только запись |
CNTR | – |
OWRCNTR | Только запись |
Следует обратить внимание на то, что регистры <dreg> являются подмножеством регистров <reg>, поэтому их можно применять в командах, где используется условное сокращение <reg>.
Команда сложить или сложить с переносом, записанная с применением приведенных выше условных сокращений, будет выглядеть следующим образом:
Она означает, что если условие cond предыдущей команды выполняется, то в регистр AR или AF будет занесен результат сложения операнда xop с операндом yop или с переносом или с константой. Разрешенные операнды xop, yop и константы constant указываются для группы команд индивидуально, поскольку они не всегда могут быть произвольными. Например, для команд АЛУ разрешено использовать в качестве операнда xop регистры; AX0, АХ1, AR, MR0, MR1, MR2, SR0, SR1. В качестве операнда yop допускается использование регистров: AY0, AY1 и AF. Причем команда DIVS не может использовать регистр AY0.
Коды условий cond с описанием их назначения приведены в табл. 13.5.
Таблица 13.5 Коды условий cond с описанием их назначения
Код условия cond оператора IF | Описание |
---|---|
EQ | Равно нулю |
NE | He равно нулю |
LT | Меньше нуля |
GE | Больше или равно нулю |
LE | Меньше или равно нулю |
GT | Больше нуля |
AC | Перенос АЛУ |
NOT AC | Нет переноса АЛУ |
AV | Переполнение АЛУ |
NOT AV | Нет переполнения АЛУ |
MV | Переполнение умножителя |
NOT MV | Нет переполнения умножителя |
NEG | Входной операнд xop отрицателен |
POS | Входной операнд xop положителен |
NOT CE | Счетчик циклов не пуст |
FLAG_IN* | Вывод FI = 1 |
NOT FLAG_IN* | Вывод FI = 0 |