Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Шрифт:
При рассмотрении системы команд мы будем пользоваться условными обозначениями, приведенными в табл. 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 |
* Только для команд JUMP и CALL.
Таким образом, предыдущая запись означает, что команда сложения может быть записана в одном из следующих вариантов:
и т.п.
Обратите внимание на то, что оператор IF с кодом условия заключен в квадратные скобки, т.е. является не обязательным в команде и может быть исключен из нее.
При изучении системы команд мы подробнее познакомимся с вычислительными блоками процессора и форматом представления данных при выполнении различных арифметических и логических операций над ними. Это позволит лучше понять, каким образом выполняются те или иные действия в процессоре, и избежать тем самым неправильного применения команд при написании программы.
Для завершения обзора команд сигнального процессора нам остается рассмотреть многофункциональные команды и команды, которые нельзя отнести к какой-либо конкретной группе в силу того, что они выполняют различные функции. Здесь они будут называться дополнительными командами.
В многофункциональных командах реализуются свойства параллелизма архитектуры процессоров ADSP2181. Благодаря чему становится возможным одновременное выполнение в одном цикле процессора пересылки данных, операций чтения/записи в память и вычислений.
Рассмотрим многофункциональную команду выполнения операций АЛУ и MAC с одновременным чтением операндов из памяти данных и памяти программ. Пример такой команды приведен ниже:
В первой части этой команды в регистр MR (регистр результата MAC), записывается сумма его предыдущего значения и произведения текущих значений входных регистров умножителя MX0 и MY0. Здесь оба слагаемых рассматриваются в знаковом формате.
Вторая и третья части данной многофункциональной команды осуществляют выбор двух новых операндов. Один операнд выбирается из памяти данных DM по адресу, указанному в индексном регистре I3, содержимое которого затем модифицируется с помощью значения регистра модификации M0. Второй операнд выбирается из памяти программы PM по адресу, указанному в регистре I7, содержимое которого затем модифицируется величиной, содержащейся в регистре модификации M4. Значения индексов берутся из регистров генераторов адреса данных. Любой индексный регистр I одного генератора адреса данных может использоваться в паре с любым регистром модификации M того же генератора адреса данных.
Поскольку считывание данных из регистров процессора производится в начале цикла, а запись в регистры - в конце цикла, операнды, находящиеся в регистрах MX0 и MY0 в начале командного цикла, перемножаются, а затем произведение добавляется к содержимому регистра результата умножителя MR. После окончания операции умножения операнды обновляются новыми значениями, которые были выбраны в конце того же командного цикла и становятся доступными для вычислений с ними в следующем цикле. Естественно, что одновременно с вычислением можно загрузить любой регистр данных, а не только регистры умножителя/накопителя, как в приведенном выше примере.
Рассмотренная команда является, пожалуй, самой распространенной в алгоритмах цифровой обработки сигналов операцией. Выполняется она следующим образом:
• осуществляется выбор двух операндов (например, коэффициента и данных);
• производится перемножение операндов и суммирование результата умножения с полученными до этого результатами.
Вычислительной частью данной многофункциональной команды может быть любая безусловно выполняемая команда АЛУ, за исключением деления, или любая команда умножителя, кроме насыщения. Имеются и некоторые другие исключения.