Чтение онлайн

ЖАНРЫ

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

Вальпа Олег Дмитриевич

Шрифт:

При рассмотрении системы команд мы будем пользоваться условными обозначениями, приведенными в табл. 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 Список регистров допустимых к использованию в командах пересылки и многофункциональных командах

Регистр Примечание
Регистры данных <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>.

Команда сложить или сложить с переносом, записанная с применением приведенных выше условных сокращений, будет выглядеть следующим образом:

[IF cond] |AR| = xop + | yop |;

|AF| | C |

| yop + C |

| constant |

Она означает, что если условие 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

* Только для команд JUMP и CALL.

Таким образом, предыдущая запись означает, что команда сложения может быть записана в одном из следующих вариантов:

IF EQ AR=AX0+AY1;

IF EQ AR=AR+AY1+C;

IF EQ AF=AX0+AY1;

IF NE AF=AX0+AY1;

AR=AX0+AF;

и т.п.

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

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

Для завершения обзора команд сигнального процессора нам остается рассмотреть многофункциональные команды и команды, которые нельзя отнести к какой-либо конкретной группе в силу того, что они выполняют различные функции. Здесь они будут называться дополнительными командами.

Многофункциональные команды

В многофункциональных командах реализуются свойства параллелизма архитектуры процессоров ADSP2181. Благодаря чему становится возможным одновременное выполнение в одном цикле процессора пересылки данных, операций чтения/записи в память и вычислений.

Рассмотрим многофункциональную команду выполнения операций АЛУ и MAC с одновременным чтением операндов из памяти данных и памяти программ. Пример такой команды приведен ниже:

MR=MR+MX0*MY0(SS), MX0=DM(I3,M0), MY0=PM(I7,M4);

В первой части этой команды в регистр MR (регистр результата MAC), записывается сумма его предыдущего значения и произведения текущих значений входных регистров умножителя MX0 и MY0. Здесь оба слагаемых рассматриваются в знаковом формате.

Вторая и третья части данной многофункциональной команды осуществляют выбор двух новых операндов. Один операнд выбирается из памяти данных DM по адресу, указанному в индексном регистре I3, содержимое которого затем модифицируется с помощью значения регистра модификации M0. Второй операнд выбирается из памяти программы PM по адресу, указанному в регистре I7, содержимое которого затем модифицируется величиной, содержащейся в регистре модификации M4. Значения индексов берутся из регистров генераторов адреса данных. Любой индексный регистр I одного генератора адреса данных может использоваться в паре с любым регистром модификации M того же генератора адреса данных.

Поскольку считывание данных из регистров процессора производится в начале цикла, а запись в регистры - в конце цикла, операнды, находящиеся в регистрах MX0 и MY0 в начале командного цикла, перемножаются, а затем произведение добавляется к содержимому регистра результата умножителя MR. После окончания операции умножения операнды обновляются новыми значениями, которые были выбраны в конце того же командного цикла и становятся доступными для вычислений с ними в следующем цикле. Естественно, что одновременно с вычислением можно загрузить любой регистр данных, а не только регистры умножителя/накопителя, как в приведенном выше примере.

Рассмотренная команда является, пожалуй, самой распространенной в алгоритмах цифровой обработки сигналов операцией. Выполняется она следующим образом:

• осуществляется выбор двух операндов (например, коэффициента и данных);

• производится перемножение операндов и суммирование результата умножения с полученными до этого результатами.

Вычислительной частью данной многофункциональной команды может быть любая безусловно выполняемая команда АЛУ, за исключением деления, или любая команда умножителя, кроме насыщения. Имеются и некоторые другие исключения.

Поделиться с друзьями: