Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Шрифт:
Глава 18. Программный автомат
В этой главе говорится о программном автомате сигнального процессора и выполняемых с его помощью командах.
Программный автомат управляет последовательностью выполнения программы. Он содержит контроллер прерываний и логическое устройство состояний. Программный автомат позволяет осуществлять последовательное выполнение команд, условные и безусловные переходы в программе, обработку прерываний и подпрограмм. Структурная схема этого устройства приведена на рис. 18.1.
Рис. 18.1. Программный автомат сигнального процессора
Основным блоком программного автомата является программный счетчик (PC-program counter). Он представляет собой 14- разрядный регистр, в котором постоянно
Стек программного счетчика служит для временного хранения адреса очередной команды при переходе на обработку подпрограммы, цикловой операции или прерывания. Он позволяет хранить до шестнадцати 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) генерирует как адреса памяти данных, так и адреса памяти программы, но не способен поддерживать реверсную адресацию.