Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Шрифт:
Глава 18. Программный автомат
В этой главе говорится о программном автомате сигнального процессора и выполняемых с его помощью командах.
Программный автомат управляет последовательностью выполнения программы. Он содержит контроллер прерываний и логическое устройство состояний. Программный автомат позволяет осуществлять последовательное выполнение команд, условные и безусловные переходы в программе, обработку прерываний и подпрограмм. Структурная схема этого устройства приведена на рис. 18.1.
Рис. 18.1. Программный автомат сигнального процессора
Основным блоком программного автомата является программный счетчик (PC-program counter). Он представляет собой 14- разрядный регистр, в котором постоянно содержится адрес текущей выполняемой команды. Это значение инкрементируется (увеличивается на 1) каждый раз при выполнении очередной последовательной команды.
Стек программного счетчика служит для временного хранения адреса очередной команды при переходе на обработку подпрограммы, цикловой операции или прерывания. Он позволяет хранить до шестнадцати 14-разрядных слов. Таким образом, уровень вложенности подпрограмм не должен превышать 16.
Контроллер прерываний формирует адрес подпрограммы обработчика прерывания. Он использует данные регистров статуса и влияет на выбор источника следующего адреса.
Блоки счетчика циклов, стека счетчика, компаратора циклов и стека циклов позволяют организовать цикловые операции в программе, не привлекая для этого другие регистры процессора.
Логика выбора формирует сигнал для выбора источника следующего адреса команды.
Ниже приводится полный список команд, выполняемых программным автоматом в соответствии с принятыми ранее условными сокращениями. Назначение команд приводится в тексте описания этих команд и комментариях для некоторых из команд.
Выполнять цикл до определенного условия:
Условный (безусловный) переход:
Вызов подпрограммы:
Переход (вызов подпрограммы) по состоянию вывода флага Flag In:
Изменение состояния вывода флагов:
Возврат из подпрограммы:
Возврат из подпрограммы прерывания:
Ожидание прерываний:
Команда переводит процессор в режим пониженного потребления на некоторое неопределенное время. Для того, чтобы перевести процессор в этот режим на продолжительное время, необходимо после этой команды вставить команду перехода на IDLE, зациклив тем самым программу. Выход из этого режима произойдет по любому прерыванию процессора.
Допустимые значения <term> и <cond> приведены в табл. 18.1 и табл. 18.2 соответственно. Запись <addr> может быть меткой или числовым значением от 0 до 0x3FFF. Примеры команд управления программой:
Таблица 18.1 Допустимые значения <term>
| Значение <term> | Пояснение |
|---|---|
| CE | Счетчик циклов пуст |
| EQ | Равно нулю |
| NE | Не равно нулю |
| LT | Меньше нуля |
| GE | Больше или равно нулю |
| LE | Меньше или равно нулю |
| GT | Больше нуля |
| АС | Перенос АЛУ |
| NOT AC | Нет переноса АЛУ |
| AV | Переполнение АЛУ |
| NOT AV | Нет переполнения АЛУ |
| MV | Переполнение умножителя |
| NOT MV | Нет переполнения умножителя |
| NEG | Входной операнд «xop» отрицателен |
| POS | Входной операнд «xop» положителен |
| FOREVER | Бесконечный цикл |
Таблица 18.2 Допустимые значения <cond>
| Значение <cond> | Пояснение |
|---|---|
| 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
Глава 19. Генераторы адресов
В этой главе говорится об устройствах генераторов адресов сигнального процессора и выполняемых с его помощью командах.
Ранее мы уже рассматривали назначение генераторов адресов (DAG). На этот раз рассмотрим их структуру и команды, которые они позволяют выполнять.
Сигнальный процессор имеет в своем составе два независимых генератора адреса данных, обеспечивающих одновременный доступ к памяти данных и памяти программ. Генераторы адреса осуществляют косвенную адресацию данных. Оба генератора могут выполнять автоматическую модификацию адреса данных. С помощью циклических буферов, они могут выполнять модификацию адреса по модулю. Отличие генераторов адреса друг от друга состоит в следующем. Первый генератор адреса (DAG1) генерирует только адреса памяти данных, но обеспечивает при этом изменение порядка разрядов в адресе на обратный (реверс разрядов). Второй генератор адреса (DAG2) генерирует как адреса памяти данных, так и адреса памяти программы, но не способен поддерживать реверсную адресацию.