А. В. Комаров цифровые сигнальные процессоры

Вид материалаДокументы
Допустимые регистры xop см. п. 1.17.7.А.
Допустимые условия cond: EQ NE GT GE LT LE NEG POS AV NOT AV AC NOT AC MV NOT MV NOT CE
Флаги состояния
Допустимые условия cond см. п. 1.17.8.А.
Флаги состояния
Флаги состояния
Флаги состояния ASTAT
З) энергосбережение
1.17.9. Многофункциональные команды
Подобный материал:
1   ...   15   16   17   18   19   20   21   22   ...   26
Допустимые регистры xop см. п. 1.17.7.А.

Допустимое значение – любая константа от –128 до 127.


Пример: SR = LSHIFT SR1 BY –6 (HI);


Описание: Процессор производит логический сдвиг битов операнда. Направление и число сдвигов зависит от значения экспоненты, введенной непосредственным числом .

Положительное значение (перед ним нельзя ставить знак “+”) вызывает левый сдвиг, отрицательное – правый сдвиг. Сдвинутый операнд может быть размещен в старшей половине выходного поля SHIFTER (опция HI) или в младшей половине (опция LO). Сдвинутый операнд может быть также подвергнут операции логического ИЛИ с текущим содержимым регистра SR (опция SR OR).

При левом сдвиге справа от МЗР распространяется ноль, а биты сдвинутого операнда, выходящие за SR31 опускаются. При правом сдвиге слева от СРЗ распространяется ноль, а биты сдвинутого операнда, выходящие за SR0 опускаются.

При сдвиге с двойной точностью константа используется для обеих половин операнда. В первом цикле сдвигается старшая половина операнда с двойной точностью (команда LSHIFT используется с опцией HI). Для сдвига младшей половины операнда с двойной точностью команда LSHIFT использует с опциями LO и SR OR.


Флаги состояния: не изменяются.


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), то процессор производит переход на указанный а команде адрес. Метод адресации перехода может быть прямым или косвенным регистровым.

Прямой адрес (задается непосредственным операндом или меткой) располагается в 14-битном поле внутри команды. При косвенной регистровой адресации в команде задается один из I регистров. После выполнения перехода пост-модификация этого регистра не производится.

Если команда JUMP является последней командой цикла DO UNTIL, то необходимо корректировать состояния стеков цикла. Если используется условие NOT CE (как в примере), то при выполнении команды регистр CNTR декрементируется.


Флаги состояния: не изменяются.


Б) КОМАНДА ВЫЗОВА ПОДПРОГРАММЫ


[IF cond] СALL

(I4)

;




(I5)







(I6)







(I7)

















Синтаксис:


Допустимые условия cond см. п. 1.17.8.А.


Пример: IF AV CALL scale_down;


Описание: Если команда выполняется (условие отсутствует или ве­р­нуло TRUE), то процессор производит переход на указанный а команде адрес, но предварительно сохраняет в стеке РС адрес возврата. Это делает удобным вызов подпрограмм.

Метод адресации перехода может быть прямым или косвенным регистровым. Прямой адрес (задается непосредственным операндом или меткой) располагается в 14-битном поле внутри команды. При косвенной регистровой адресации в команде задается один из I регистров. После выполнения перехода пост-модификации этого регистра не производится.

Если команда 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 [UNTIL term];


Допустимые 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);