А. В. Комаров цифровые сигнальные процессоры
Вид материала | Документы |
- Архитектура процессов и ее оптимизация, 98.67kb.
- Обзор аппаратных и программных средств реализации параллельной обработки, 211.84kb.
- Темы Лекции Практика, 13.65kb.
- Лекция: графические процессоры и редакторы, 204.53kb.
- Реферат по дисциплине «Аппаратные средства» на тему: «Процессоры эвм», 333.09kb.
- ru/computers/classes html, 11.94kb.
- Методические указания му 2568 09 Издание официальное Москва 2009 Контроль численности, 527.33kb.
- Первая помощь при укусах насекомых и змей помощь при укусах комаров, 30.72kb.
- Фестиваль «Цифровые каникулы» – музей, образование, бизнес, 48.15kb.
- Неоднородный полупроводниковый носитель информации в переменном магнитном поле, 107.68kb.
Допустимые регистры xop см. п. 1.17.7.А.
Допустимое значение
Пример: SR = LSHIFT SR1 BY –6 (HI);
Описание: Процессор производит логический сдвиг битов операнда. Направление и число сдвигов зависит от значения экспоненты, введенной непосредственным числом
Положительное значение
При левом сдвиге справа от МЗР распространяется ноль, а биты сдвинутого операнда, выходящие за SR31 опускаются. При правом сдвиге слева от СРЗ распространяется ноль, а биты сдвинутого операнда, выходящие за SR0 опускаются.
При сдвиге с двойной точностью константа
Флаги состояния: не изменяются.
1.17.8. Команды управления потоком программы
А) КОМАНДА ПЕРЕХОДА
[IF cond] JUMP | (I4) | ; |
| (I5) | |
| (I6) | |
| (I7) | |
| | |
Синтаксис:
Допустимые условия cond:
EQ NE GT GE LT LE NEG
POS AV NOT AV AC NOT AC MV NOT MV
NOT CE
Пример: IF NOT CE JUMP top_loop; {CNTR декрементируется}
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит переход на указанный а команде адрес. Метод адресации перехода может быть прямым или косвенным регистровым.
Прямой адрес
Если команда JUMP является последней командой цикла DO UNTIL, то необходимо корректировать состояния стеков цикла. Если используется условие NOT CE (как в примере), то при выполнении команды регистр CNTR декрементируется.
Флаги состояния: не изменяются.
Б) КОМАНДА ВЫЗОВА ПОДПРОГРАММЫ
[IF cond] СALL | (I4) | ; |
| (I5) | |
| (I6) | |
| (I7) | |
| | |
Синтаксис:
Допустимые условия cond см. п. 1.17.8.А.
Пример: IF AV CALL scale_down;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит переход на указанный а команде адрес, но предварительно сохраняет в стеке РС адрес возврата. Это делает удобным вызов подпрограмм.
Метод адресации перехода может быть прямым или косвенным регистровым. Прямой адрес
Если команда CALL является последней командой цикла DO UNTIL, то необходимо корректировать состояния стеков цикла.
Флаги состояния: не изменяются.
В) КОМАНДЫ JUMP И CALL С ФЛАГОМ FLAG_IN
IF | FLAG_IN | | JUMP | | | |
| NOT FLAG_IN | | CALL | | | |
Синтаксис:
Пример: IF FLAG_IN JUMP service_proc_three;
Описание: Процессор проверяет состояние своего входа FI и, если оно соответствует заявленному в команде условию, то выполняются обычные JUMP или CALL (см. пп. 1.17.8.А, 1.17.8.Б) с прямым методом адресации переходов.
Флаги состояния: не изменяются.
Г) МОДИФИКАЦИЯ ВЫХОДНЫХ ФЛАГОВ ПРОЦЕССОРА
[IF cond] | SET | | FLAG_OUT | [, …]; | | |
| RESET | | FL0 | | | |
| TOGGLE | | FL1 | | | |
| | | FL2 | | | |
Синтаксис:
Допустимые условия cond см. п. 1.17.8.А.
Пример: IF MV SET FLAF_OUT, RESET FL1;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит модификацию сигналов на своих выходах FO, FL0-FL2 (см. п. 1.1). Упомянутый в команде сигнал, может быть установлен (SET), сброшен (RESET) или инвертирован (TOGGLE).
В одной команде можно модифицировать множество флагов, которые записываются через запятые (см. пример).
Флаги состояния: не изменяются.
Д) ВОЗВРАТ ИЗ ПОДПРОГРАММ
Синтаксис: [IF cond] RTS;
Допустимые условия cond см. п. 1.17.8.А.
Пример: IF LE RTS;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит считывание с вершины стека РС адреса возврата из подпрограммы, который он пересылает в РС. Указатель стека РС при этом соответственно корректируется.
Если RTS является последней командой внутри цикла DO UNTIL, то необходимо корректировать состояния стеков цикла.
Флаги состояния: не изменяются.
Е) ВОЗВРАТ ИЗ ПРЕРЫВАНИЙ
Синтаксис: [IF cond] RTI;
Допустимые условия cond см. п. 1.17.8.А.
Пример: IF MV RTI;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит считывание с вершины стека РС адреса возврата из обработчика прерываний, который он пересылает в РС. Указатель стека РС при этом соответственно корректируется. Происходит также считывание с вершин стеков арифметического состояния (код пересылается в ASTAT), состояния режима (код пересылается в MSTAT) и маски прерывания (код пересылается в IMASK). Указатели этих стеков при этом соответственно корректируются.
Если RTI является последней командой внутри цикла DO UNTIL, то необходимо корректировать состояния стеков цикла.
Флаги состояния: не изменяются.
Ж) ЦИКЛ DO UNTIL
Синтаксис: DO
Допустимые term см. табл. 1.7
Пример: DO loop_label UNTIL CE; {CNTR декрементируется при каждом прохождении цикла}
Описание: Цикл DO UNTIL организует повторное (циклическое) выполнение фрагмента программы, который называется телом цикла. Тело цикла начинается командой, которая непосредственно следует за командой цикла. Концом тела цикла является команда, которая отмечена прямым адресом
Выполнение тела цикла повторяется до тех пор, пока выполняется, записанное в команде цикла условие выхода из цикла. Если условие отсутствует, то цикл становится бесконечным. Условие (сформированное предыдущими командами) проверяется при выполнении последней команды. Если условием является СЕ, то содержимое регистра CNTR декрементируется при каждом прохождении тела цикла.
Во время выполнения цикла DO адрес последней команды тела цикла (совместно с кодом условия выхода из цикла) хранится в вершине LOOP стека (см. п. 1.8), а адрес первой команды тела цикла – в вершине РС стека.
Любое вложение DO циклов продолжает запись в LOOP и РС стеки до их предельных уровней (4 уровня для LOOP стека и 16 уровней для РС стека). Попытка нового вложения цикла DO (записи в любой из перечисленных стеков) за пределами указанных уровней вызовет установку битов переполнения соответствующих стеков и выполнение команды NOP.
Флаги состояния ASTAT: не изменяются.
Флаги состояния SSTAT:
SSTAT: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| LSO | LSE | SSO | SSE | CSO | CSE | PSO | PSE |
| * | 0 | - | - | - | - | * | 0 |
LSO – переполнение LOOP стека: устанавливается при переполнении LOOP стека, а противном случае не изменяется.
LSE – LOOP стек пуст: всегда очищается, что говорит о заполнении LOOP стека.
PSO – переполнение РС стека: устанавливается при переполнении РС стека, а противном случае не изменяется.
PSE – РС стек пуст: всегда очищается, что говорит о заполнении РС стека.
З) ЭНЕРГОСБЕРЕЖЕНИЕ
Синтаксис: IDLE;
IDLE(n);
Описание: Команда IDLE вызывает переход процессора в режим энергосбережения. Только прерывания могут вывести его из этого режима. Если прерывание случилось, то оно обрабатывается (осуществляется переход на соответствующий обработчик) и выполнение программы продолжается с команды, которая следует за командой IDLE. Обычно такой командой является команда перехода на IDLE, чтобы опять перевести процессор в режим энергосбережения. Если команда IDLE является последней внутри тела цикла DO UNTIL, то необходимо предусмотреть предосторожности, которые описаны в п. 1.8.
IDLE(n) является специальной версией команды IDLE, которая уменьшает частоту внутренней синхронизации процессора для уменьшения энергопотребления. Коэффициент деления частоты синхронизации задается параметром n = 16, 32, 64 или 128. После выполнения команды IDLE(n) процессор остается в рабочем состоянии, но с уменьшенной частотой синхронизации. Пока процессор находится в таком состоянии частота всех внутренних и внешних синхросигналов уменьшается в n раз.
Прерывания также выводят процессор из состояния IDLE(n), но восстановление нормальной частоты происходит по прошествии промежутка времени не менее n тактов.
Если процессор находится в состоянии IDLE(n) и использует внешнюю синхронизацию последовательного порта, то частота внутренней синхронизации процессора может быть меньше частоты внешней синхронизации. Это может создать проблемы, поскольку запросы на прерывания от последовательного порта с прежней интенсивностью процессор обрабатывать не в состоянии по причине сниженной частоты внутренней синхронизации.
Флаги состояния: не изменяются.
1.17.9. Многофункциональные команды
А) ВЫЧИСЛЕНИЯ С ЧТЕНИЕМ ПАМЯТИ
| , dreg = | DM( | | I0 | , | M0 | | ) | ; |
| | | | I1 | | M1 | | | |
| | | | 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);