- •Цифровые сигнальные процессоры
- •Содержание
- •1. Архитектура adsp-2181
- •1.1. Описание выводов процессора
- •1.2. Структурная схема adsp-2181
- •Генераторы адресов данных dag1 и dag2, регистр команд instruction register и программный конвейер program sequencer.
- •1.3. Память программ
- •1.4. Память данных
- •1.5. Функциональная схема alu
- •1.6. Функциональная схема мас
- •1.7. Функциональная схема shifter
- •Значения выходного кода сдвигателя при различных значениях
- •1.8. Функциональная схема программного конвейера
- •1.9. Система прерываний
- •1.9.3. Конфигурирование прерываний.
- •1.10. Регистры состояния и стек состояния
- •1.11. Передача данных
- •1.11.1. Генераторы адресов
- •1.11.2. Узел обмена данными
- •1.12. Последовательные порты
- •1.12.1. Общие сведения
- •1.12.2. Программирование sport
- •Функциональное назначение конфигурационных регистров
- •1.12.3. Пример конфигурирования последовательных портов
- •{Программа инициализации sport0, sport1}
- •1.12.4. Сжатие данных
- •1.12.5. Автобуферизация
- •1.12.6. Пример программирования автобуферизации
- •1.12.7. Многоканальность
- •1.13. Таймер
- •1.14. Системный интерфейс
- •1.14.1. Сигналы синхронизации
- •Состояние регистров процессора после сброса и перезагрузки
- •Состояние регистров bdma после сброса и перезагрузки
- •1.14.2. Внешние прерывания
- •1.14.3. Флажковые биты
- •1.14.4. Режим энергосбережения
- •1.15. Контроллер прямого доступа к байтовой памяти (bdma)
- •1.15.1. Общие сведения
- •1.15.2. Регистры управления bdma
- •1.15.3. Функционирование bdma
- •1.15.4. Загрузка программ с помощью bdma
- •1.16. Порт idma
- •1.16.1. Сигналы idma
- •1.16.2. Функционирование idma
- •1.16.3. Загрузка программ с помощью idma
- •1.17. Система команд
- •1.17.1. Общие сведения
- •1.17.2. Методы адресации
- •1.17.3. Условные обозначения
- •1.17.4. Команды пересылки данных
- •1.17.5. Команды alu
- •Б) вычитание X-y/вычитание X-y с заемом
- •1.17.6. Команды мас
- •1.17.7. Команды shifter
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop см. П. 1.17.7.А.
- •Допустимые регистры xop см. П. 1.17.7.А.
- •1.17.8. Команды управления потоком программы
- •Допустимые условия cond:
- •Допустимые условия cond см. П. 1.17.8.А.
- •1.17.9. Многофункциональные команды
- •1.17.10. Прочие команды
- •1.18. Инструментальные средства разработки программного обеспечения
- •1.18.1. Инструментальные средства для dos
- •1.18.2. Инструментальные средства для windows
- •1.18.3. Создание проекта в VisualDsp
- •1.18.4. Загрузка программы в ez-kit Lite
- •1.19. Примеры программирования в среде VisualDsp
- •1.19.1. Формирование эхо-сигнала
- •Architecture(adsp-2181) // определение типа процессора
- •1.19.2. Эмуляция интерфейса rs-232
- •1.19.3. Эмуляция интерфейса rs-232 (смешанный вариант)
- •Architecture(adsp-2181) // определение типа процессора
- •2. Архитектура системы на основе adsp-2181
- •2.1. Структурная схема вычислительной (управляющей)
- •2.2. Цепи синхронизации и запуска процессора
1.17.9. Многофункциональные команды
А) ВЫЧИСЛЕНИЯ С ЧТЕНИЕМ ПАМЯТИ
<ALU>
, dreg =
DM(
I0
,
M0
)
;
<MAC>
I1
M1
<SHIFT>
I2
M2
I3
M3
I4
M4
I5
M5
I6
M6
I7
M7
PM(
I4
,
M4
)
I5
M5
I6
M6
I7
M7
Синтаксис:
Допустимые dreg:
AX0 MX0 SI
AX1 MX1 SE
AY0 MY0 SR0
AY1 MY1 SR1
AR MR0
MR1
MR2
Описание: Команда выполняет означенную арифметическую операцию одновременно с пересылкой данного. Операция чтения пересылает содержимое источника в регистр назначения. Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.
Операция вычисления должна быть безусловной. Допустимы все команды ALU, MAC и SHIFTER кроме команд непосредственных сдвигов, а также команд DIVS и DIVQ.
Фундаментальным принципом выполнения многофункциональных команд является то, что регистры (и память) считываются в начале цикла выполнения команда, а записываются в конце. Для реализации этого принят обычный (слева направо) порядок записи составляющих элементов команды: сначала арифметическая операция, а затем операция чтения. Программист может нарушить этот порядок записи, но ассемблер, выдав предупреждение, сгенерирует одинаковый машинный код. Выдачу предупреждения можно подавить, отключив проверку семантики с помощью ключа s.
Принятый порядок доступа к регистрам данных вычислительных устройств (сначала считывание, потом запись) позволяет использовать один и тот же регистр в качестве источника для одной операции и приемника для другой. Например, команда
AR = AX0 + AY0, AX0 = DM(I0, M0);
является правильной, причем содержимое АХ0 сначала считывается для выполнения арифметической операции, а затем записывается операцией пересылки. Можно эту команду записать в обратном порядке
AX0 = DM(I0, M0), AR = AX0 + AY0;
но ассемблер, выдав предупреждение, сформирует такой же машинный код команды как в первом примере.
Запрещается использовать один и тот же регистр как назначение для обеих операций, поскольку это приводит к непредсказуемому результату, например, следующая команда неверна, хотя ассемблер выдаст только предупреждение
AR = AX0 + AY0, AR = DM(I0, M0);
Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).
Б) ВЫЧИСЛЕНИЯ С ПЕРЕСЫЛКОЙ РЕГИСТР-РЕГИСТР
<ALU>
, dreg = dreg
;
<MAC>
<SHIFT>
Синтаксис:
Допустимые регистры dreg см. п. 1.17.9.А.
Пример: AR = AX0 + AY0, AX0 = MR1;
Описание: Процессор выполняет означенную арифметическую операцию одновременно с пересылкой данного. Содержимое источника записывается в регистр назначения всегда с правым выравниванием. Справедливы все положения п. 1.17.9.А.
Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).
В) ВЫЧИСЛЕНИЯ С ЗАПИСЬЮ В ПАМЯТЬ
DM(
I0
,
M0
)
= dreg,
<ALU>
;
I1
M1
<MAC>
I2
M2
<SHIFT>
I3
M3
I4
M4
I5
M5
I6
M6
I7
M7
PM(
I4
,
M4
)
I5
M5
I6
M6
I7
M7
Синтаксис:
Допустимые dreg см. п. 1.17.9.А.
Описание: Команда выполняет означенную арифметическую операцию одновременно с пересылкой данного. Операция записи пересылает содержимое регистра источника в память назначения. Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.
Операция вычисления должна быть безусловной. Допустимы все команды ALU, MAC и SHIFTER кроме команд непосредственных сдвигов, а также команд DIVS и DIVQ.
Фундаментальным принципом выполнения многофункциональных команд является то, что регистры (и память) считываются в начале цикла выполнения команда, а записываются в конце. Для реализации этого принят обычный (слева направо) порядок записи составляющих элементов команды: сначала операция записи памяти, а затем арифметическая операция. Программист может нарушить этот порядок записи, но ассемблер, выдав предупреждение, сгенерирует одинаковый машинный код. Выдачу предупреждения можно подавить, отключив проверку семантики с помощью ключа s.
Принятый порядок доступа к регистрам данных вычислительных устройств (сначала считывание, потом запись) позволяет использовать один и тот же регистр в качестве источника для одной операции и приемника для другой. Например, команда
DM(I0, M0) = AR, AR = AX0 + AY0;
является правильной, причем содержимое АR сначала считывается для записи в память, а затем записывается (загружается) в ходе выполнения арифметической операции. Можно эту команду записать в обратном порядке
AR = AX0 + AY0, DM(I0, M0) = AR;
но ассемблер, выдав предупреждение, сформирует такой же машинный код команды как в первом примере.
Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).
Г) ЧТЕНИЕ ПД И ПП
Синтаксис:
AX0 |
= DM ( |
I0 |
, |
M0 |
), |
AY0 |
= PM ( |
I4 |
, |
M4 |
); |
AX1 |
|
I1 |
|
M1 |
|
AY1 |
|
I5 |
|
M5 |
|
MX0 |
|
I2 |
|
M2 |
|
MY0 |
|
I6 |
|
M6 |
|
MX1 |
|
I3 |
|
M3 |
|
MY1 |
|
I7 |
|
M7 |
|
Описание: Команда производит одновременно две операции чтения памяти: чтение ПД и чтение ПП. Каждая из этих операций пересылает содержимое ячеек памяти ПД и ПП в регистры назначения, заданные в команде. При этом содержимое ПД пересылается в Х регистры ALU и МАС, а содержимое ПП – в Y регистры ALU и МАС.
Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.
На самом деле необходимо считать три слова: два операнда и саму команду. Если не используется внешняя память, то такое считывание происходит за один машинный цикл.
Если из внешней памяти необходимо считать два слова, например, команду и данное или два слова данных из ПД и ПП, то для выполнения команды необходим еще один дополнительный цикл. Если из внешней памяти необходимо считать три слова (команда и два слова данных), то требуется два дополнительных цикла.
Флаги состояния: не изменяются.
Д) ВЫЧИСЛЕНИЯ С ЧТЕНИЕМ ПД И ПП
Синтаксис:
<ALU> |
, |
AX0 |
= DM ( |
I0 |
, |
M0 |
), |
AY0 |
= PM ( |
I4 |
, |
M4 |
); |
<MAC> |
|
AX1 |
|
I1 |
|
M1 |
|
AY1 |
|
I5 |
|
M5 |
|
|
|
MX0 |
|
I2 |
|
M2 |
|
MY0 |
|
I6 |
|
M6 |
|
|
|
MX1 |
|
I3 |
|
M3 |
|
MY1 |
|
I7 |
|
M7 |
|
Описание: Команда одновременно производит операцию вычисления в ALU или MAC и две операции чтения памяти: чтение ПД и чтение ПП. Каждая из пересылочных операций пересылает содержимое ячеек памяти ПД и ПП в регистры назначения, заданные в команде. При этом содержимое ПД пересылается в Х регистры ALU и МАС, а содержимое ПП – в Y регистры ALU и МАС.
Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.
На самом деле необходимо считать три слова: два операнда и саму команду. Если не используется внешняя память, то такое считывание происходит за один машинный цикл.
Если из внешней памяти необходимо считать два слова, например, команду и данное или два слова данных из ПД и ПП, то для выполнения команды необходим еще один дополнительный цикл. Если из внешней памяти необходимо считать три слова (команда и два слова данных), то требуется два дополнительных цикла.
Операция вычисления должна быть безусловной. Допустимы все команды ALU, MAC кроме команд непосредственных сдвигов, а также команд DIVS и DIVQ. Результаты вычислений должны быть записаны в регистры результатов вычислительных блоков: результаты ALU в AR, результаты МАС в MR.
Фундаментальным принципом выполнения многофункциональных команд является то, что регистры (и память) считываются в начале цикла выполнения команда, а записываются в конце. Для реализации этого принят обычный (слева направо) порядок записи составляющих элементов команды: сначала арифметическая операция, а затем операции чтения. Программист может нарушить этот порядок записи, но ассемблер, выдав предупреждение, сгенерирует одинаковый машинный код. Выдачу предупреждения можно подавить, отключив проверку семантики с помощью ключа s.
Принятый порядок доступа к регистрам данных вычислительных устройств (сначала считывание, потом запись) позволяет использовать один и тот же регистр в качестве источника для одной операции и приемника для другой. Например, команда
MR=MR+MX0*MY0(UU), MX0 = DM(I0, M0), MY0 = DM(I4, M4);
является правильной, причем содержимое регистров MХ0 и MY0 сначала считывается для выполнения арифметической операции, а затем записывается операциями пересылки. Можно эту команду записать в обратном порядке
MX0 = DM(I0, M0), MY0 = DM(I4, M4), MR=MR+MX0*MY0(UU);
но ассемблер, выдав предупреждение, сформирует такой же машинный код команды как в первом примере.
Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).
