Разработка устройств на основе цифровых сигнальных процессоров фирмы 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>.
Команда сложить или сложить с переносом, записанная с применением приведенных выше условных сокращений, будет выглядеть следующим образом:
Она означает, что если условие 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. После окончания операции умножения операнды обновляются новыми значениями, которые были выбраны в конце того же командного цикла и становятся доступными для вычислений с ними в следующем цикле. Естественно, что одновременно с вычислением можно загрузить любой регистр данных, а не только регистры умножителя/накопителя, как в приведенном выше примере.
Рассмотренная команда является, пожалуй, самой распространенной в алгоритмах цифровой обработки сигналов операцией. Выполняется она следующим образом:
• осуществляется выбор двух операндов (например, коэффициента и данных);
• производится перемножение операндов и суммирование результата умножения с полученными до этого результатами.
Вычислительной частью данной многофункциональной команды может быть любая безусловно выполняемая команда АЛУ, за исключением деления, или любая команда умножителя, кроме насыщения. Имеются и некоторые другие исключения.