Глинченко А.С. Принципы организации и программирования сигнальных процессоров ADSP-21xx (2000) (1264223), страница 11
Текст из файла (страница 11)
Ее следующий Х-операнд всегда загружается из памяти данных,а следующий Y-операнд − из памяти инструкций (внешняя и внутренняяпамять не отличаются с точки зрения набора инструкций). Результатвычислений всегда помещается в регистр результата (MR или AR), а не врегистр обратной связи (MF или АF).Ниже приводится пример такой инструкции:MR=MR+MX0*MY0 (SS), MX0=DM (I0, M0), MY0=PM (I4, M5);Первая часть ее (до первой запятой) суммирует предыдущее содержимоерегистра MR с произведением значений регистров МХ0 и MY0 в началецикла, причем оба операнда считаются знаковыми (SS).Вторая и третья части этой многофункциональной инструкции в концетого же процессорного цикла загружают два новых операнда.
Один из нихсчитывается из памяти данных (DM), указатель на данные находится виндексном регистре I0, после загрузки происходит пост-модификацияуказателя значением, содержащемся в регистре М0. Другой операндсчитывается из памяти инструкций (РМ), указатель на данные находится виндексном регистре I4, после загрузки происходит пост-модификацияуказателя значением, содержащемся в регистре М5..Чтение памяти данных и памяти инструкцийЭта вариация многофункциональной инструкции представляетспециальный случай выше описанной инструкции с опущеннойвычислительной частью, например:AX0=DM (I2, M0), AY0=PM (I4, M6);60Как и для предыдущей инструкции, Х-операнд должен загружаться изпамяти данных, Y-операнд – из памяти инструкций.Вычисление с чтением из памятиЕсли производится одно чтение из памяти вместо двух, как впредыдущих командах, можно выполнять более широкий класс вычислений.Возможны все операции ALU, кроме деления, все операции MAC и всеоперации SHIFTER, кроме немедленного сдвига.
Вычисление должно бытьбезусловным. Пример данного типа многофункциональной инструкции:AR=AX0+AY0, AX0=DM (I0, M3);Здесь производится сложение в ALU и в то же время происходит загрузкаоперанда из памяти данных. Ограничения здесь такие же, как и дляпредыдущих инструкций. Значение регистра AX0, используемое в качествеоперанда сложения, является его содержимым в начале цикла. Операциячтения данных загружает новое значение в этот регистр в конце цикла. Поэтой причине регистр результата (AR в данном примере) не может бытьприемником для чтения из памяти.Вычисление с записью в памятьВычисление с записью в память аналогично по структуре вычислению счтением из памяти, однако порядок инструкций здесь меняется напротивоположный. Сначала записывается операция записи в память, затемвычисления, как показано ниже:DM (I0, M0)=AR, AR=AX0+AY0;Опять значение исходного регистра для записи в память (AR в данномпримере) соответствует его содержимому в начале цикла.
Вычислениеприводит к записи нового значения в этот регистр в конце цикла.Перестановка инструкций в данной записи недопустима. Инструкцияподдерживает тот же класс вычислений, что и предыдущая.Вычисление с пересылкой регистр-регистрПоследний тип многофункциональных инструкцийвычисление с пересылкой регистр-регистр, например:производитAR=AX0+AY0, AX0=MR2;Здесь происходит сложение значений AX0 и AYO в начале цикла изагрузка нового операнда в AX0 из MR2 в конце цикла. Пересылка регистррегистр может быть в/из любого регистра ALU, MAC и SHIFTER (кромерегистров обратной связи АF и МF и регистра SB).Возможен тот же класс вычислений, что и выше.6111.4.
ИНСТРУКЦИИ ALU, MAC И SHIFTERЭта группа инструкций производит вычисления. Все инструкции этойгруппы могут исполняться условно за исключением деления (ALU) инепосредственного сдвига (SHIFTER).Инструкции ALUНиже приведено обобщенное описание одной из инструкций ALU и ееконкретный пример:[IF cond] AR=xop+yop+C;IF AC AR=AX0+AY0+C;Условное выражение IF AC (которое может отсутствовать) проверяетфлаг переноса ALU (АС); если предыдущая инструкция сгенерировала флагпереноса, выполняется данная инструкция, в противном случае происходитисполнение инструкции NOP и переход к следующей инструкции.Алгебраическое выражение AR=AX0+AY0+C означает, что содержимымрегистра AR будет сумма AX0 и AY0 плюс значение флага переноса.Инструкции MACОбобщенная запись одной из инструкций МАС и ее конкретный примеримеют следующий вид:[IF cond] MR=MR+xop*yop (SS|UU|US|SU|RND);IF NOT MV MR=MR+MXO*MY0 (UU);Условное выражение IF NOT МV проверяет флаг переполнения MAC.Если флаг сброшен, исполняется инструкция NOP.
ВыражениеMR=MR+MXO*MY0 – это операция умножения с суммированием. Врегистре результата (MR) получается сумма его предыдущего значения спроизведением значений входных Х и Y регистров. Mодификатор в скобках(UU) сообщает процессору, что операнды беззнаковые. Только один такоймодификатор может быть выбран из пяти доступных: SS − оба операндазнаковые; US – первый операнд беззнаковый, а второй знаковый; SU –первый операнд знаковый, а второй беззнаковый; RND – округлениерезультата (для знаковых операндов).Инструкции SHIFTERПримером инструкций данного типа может служить инструкциянормализации, записанная ниже в обобщенной и конкретной форме:[IF cond] SR=[SR OR] NORM xop (HI | LO);IF NOT CE SR=SR OR NORM SI (HI);Условное выражение IF NOT СЕ проверяет условие «если счетчик числа62повторений ненулевой».
Если условие не выполняется, исполняетсяинструкция NOP. Приемником для всех операций SHIFTER является регистррезультата SR, кроме операции определения экспоненты (порядка), гдеприемник – это регистры SE или SB. В этом примере SI (входной регистр)является операндом. Длина и направление сдвига контролируются знаковымчислом в регистре SE для всех операций сдвига, кроме немедленного сдвига.Положительные значения приводят к сдвигу влево; отрицательные – к сдвигувправо. Модификатор «SR OR» (который может быть опущен) производитоперацию логическое ИЛИ результата с текущим содержимым регистра SR;это позволяет получить 32-битное значение в SR из 16-битных частей.«NORM» – это оператор, a (HI) - модификатор, который определяет,происходит ли сдвиг относительно верхней (НI) или нижней (LO) 16-битнойчасти SR.
Если модификатор «SR ОR» опускается, результат сразузаписывается в регистр SR.11.5. КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХДанные инструкции реализуют пересылки данных типа регистр –регистр, регистр – память, память – регистр.. Регистры условно разделены на2 группы, первая из которых обозначается reg и включает практически всепрограммно доступные регистры, а вторая, обозначаемая dreg, − толькорегистры данных (регистры вычислительных устройств), являясьподмножеством первой.
Лишь регистр PC (указатель инструкции) и регистрыобратной связи ALU и MAC (AF и MF) недоступны для инструкцийпересылки данных. Примеры таких инструкций:reg=reg; reg=<data>; reg=DM(<addr>); dreg=PM(In, Mn);AX0 = DM (I0, M0);11.6. ИНСТРУКЦИИ УПРАВЛЕНИЯ ИСПОЛНЕНИЕМ ПРОГРАММЫК командам данной группы относятся инструкции перехода JUMP,вызова подпрограмм CALL, возврата из подпрограмм RTS и прерыванийRTI, цикла DO UNTIL, а также инструкция ожидания IDLE.Вариации инструкций перехода JUMP и вызова CALL обобщенно могутбыть представлены в следующем виде:[IF cond] JUMP | CALL (In) | <addr>; n=4−7.Примеры таких инструкций:IF EQ JUMP my_label; CALL (I6);my_label здесь – это любой идентификатор или метка, определяющаяадрес перехода. Вместо метки можно использовать также индексный регистрDAG2 (I4–I7).Если используется условие проверки счетчика CNTR (NOT СЕ), ондолжен быть предварительно инициализирован инструкцией CNTR. С63инструкциями JUMP и CALL (но только с непосредственной адресацией)допускаются дополнительные условные выражения IF FLAG_IN и IF NOTFLAG_IN, зависящие от состояния линии FI.По команде IDLE процессор входит в состояние неопределенногоожидания в режиме пониженной потребляемой мощности до получениясигнала прерывания.
После обслуживания немаскируемого прерыванияпроцессор переходит в нормальный режим работы и программа выполняетсядальше, начиная с команды, следующей за командой IDLE.Усовершенствованная версия команды IDLE (n) позволяет замедлятьвнутреннюю тактовую частоту процессора в n раз, также уменьшаяпотребление энергоресурсов. Значения n могут быть16, 32, 64 или 128. Привыполненииданнойкомандыпроцессоростаетсяполностьюработоспособным, но работает с меньшей внутренней тактовой частотой. Втой же степени уменьшаются и частоты всех остальных внутренних тактовыхсигналов, например SCLK, CLKOUT, тактовых синхроимпульсов таймера.Увеличивается также время реакции (ответа) процессора на запросыпрерывания.При отсутствии значения делителя n в команде IDLE по умолчаниювыполняется ее стандартная версия.Инструкция цикла DO UNTIL обобщенно описывается выражением:DO <addr> [UNTIL term];где <addr> − метка конца цикла, term − одно из условий завершения цикла,например: DO loop UNTIL CE; Действие этой инструкции рассматривалосьпри описании программного автомата.Следует обратить внимание, что возможен также вариант безусловнойинструкции DO <addr> (без UNTIL), задающей бесконечный цикл.11.7.
ДРУГИЕ ИНСТРУКЦИИДанная группа включает такие инструкции, как NOP (пустая операция),PUSH/POP (операции со стеками), ENA, DIS (разрешить, запретить),MODIFY, SET, RESET и TOGGLE. Последние три инструкции управляютвыходами FO (Flag Out), обеспечивая внешние коммуникации процессора.За командами ENA (ENаble – разрешить) и DIS (DISable – запретить)может следовать любое количество идентификаторов режимов работыпроцессора, разделенное запятыми. Все семь режимов, которые могут бытьустановлены или сброшены в одной инструкции, находятся в регистреMSTAT.Инструкция MODIFY модифицирует адрес, находящийся в I-регистре,значением, хранящемся в М-регистре, без реального доступа к памяти.6411.8.