Мысловский Э.В. Цифровые сигнальные процесссоры (2003) (1264219), страница 13
Текст из файла (страница 13)
Регистр инструкции буферизует исполнение программы. Чтобы минимизироватьциклы ожидания, счетчик команд выполняет условные переходы, вызовы и возвраты изподпрограмм за один цикл. Он имеет внутренний счетчик вложенности циклов и стекциклов, что позволяет исполнять вложенные циклы без потерь времени.Во время исполнения инструкции процессором генератор адресов инструкцийзагружает из памяти следующую инструкцию. Следующий адрес может выбираться изследующих источников:•Счетчик инструкций PC•Стек счетчика инструкций•Регистр инструкций•Контроллер прерыванийИз счетчика инструкций команда выбирается, если выполнение программыпоследовательное.
Значение из стека счетчика инструкций выбирается в случае возвратаиз подпрограммы, возврата из обработчика прерывания, перехода к следующей итерациицикла. На самом деле адрес следующей инструкции всегда содержится в счетчикеинструкций. Просто при переходе к подпрограмме, входе в цикл, в стек засылается адресвозврата, и при выполнении команды возврата происходит выталкивание из стеказначения счетчика инструкций.Значение из регистра инструкций загружается в счетчик инструкций привыполнении команды безусловного перехода.Контроллер прерываний загружает в PC значение адреса обработчика прерыванийв случае распознавания корректного прерывания.85Со счетчиком инструкций связан стек.
В стек заталкиваются значения PC привыполнении подпрограмм, обработчиков прерываний, циклов (DO UNTIL). Стекрассчитан на 16 14-и битных элемента (так как PC имеет размер 14 бит). Поскольку длястека PC не существует команд PUSH PC, POP PC введены следующие инструкции:srg-TOPSTACK; /* Выталкивается верхний элемент стека */NOP;/* с задержкой на 1 цикл, так что NOP нужно ставить обязательно */TOPSTACK=srg; /* Засылаем в стек значение srg */ srg - может быть любымрегистром..Однако не рекомендуется вручную модифицировать счетчик инструкций, так какэто может привести к трудно находимым ошибкам.Для более полного понимания рассмотрим пример:Пример: Вызов подпрограммыИнструкции DO UNTIL обеспечивают выполнение циклов без тактов ожидания,используя цикловый компаратор и стек PC.
Каждый процессорный цикл компараторсравнивает следующий адрес, получаемый генератором адресов инструкций с адресомпоследней инструкции цикла (адрес последней инструкции устанавливается в инструкции86DO UNTIL, адрес первой инструкции загружается в стек PC при первом входе в цикл).Если эти адреса совпадают, то происходит извлечение из стека в счетчик инструкцийадреса первой инструкции цикла. Условия завершения цикла указаны в таблице 5.5.Таблица 5.5. Условия завершения циклаПример: Условный циклCNTR=6;DO bops UNTIL СЕ;Loops: MR=MR+MX0*MY0(SS), MX0=DM(I0,M0), MY0=PM(I6,M6);При работе со счетчиком циклов его значение загружается в стек, который можетсодержать до 4-х значений, что позволяет организовывать до 4-х вложенных циклов. Привыполнении инструкций JUMP и CALL загрузка адреса происходит непосредственно вPC.
Например, инструкция JUMP start загружает в PC адрес метки start. Логика условныхпереходов реализуется командой IF условие THEN действие, где условие одно из условийтаблицы 5.5.Пример: Использование команды условного переходаAR = АХО, AF = АХО AND A Y0;IF NE АХО = - АХО;875.2.2 Генераторы адресов данныхВ процессорах семейства ADSP-21xx имеется два генератора адресов данныхDAG1 и DAG2. Оба генератора обеспечивают косвенную адресацию, и производятавтоматическую модификацию адресов.
Отличие генератора DAG1 от DAG2 состоит втом, что DAG1 может осуществлять выборку только из памяти данных (DM), а генераторDAG2 как из памяти данных (DM) так и из памяти программ (РМ) при этомфункционирование двух генераторов осуществляется параллельно. Каждый генераторимеет в своем составе три блока регистров: блок регистров адреса или индексныхрегистров (I-блок) 4x14, блок регистров длины (L-блок) 4x14, и блок регистровмодификации (М-блок) 4x14. Распределение регистров между блоками приведено втаблице 5.6.Таблица 5.6 Регистры генераторов адресовDAG1DAG2Блок I-регистровI0-I3I4-I7Блок L-регистровL0-L3L4-L7Блок М-регистровМО-МЗМ4-М7Генераторы адресов данных имеют два режима адресации: линейную икольцевую. Индексные регистры содержат реальные адреса памяти, по которымосуществляется доступ к памяти.
Регистры длины содержат информацию о длине буферав режиме кольцевой адресации, в режиме линейной адресации значение в регистре длиныдолжно быть нулевым. Именно так осуществляется выбор метода адресации. В регистрымодификации записывается число-модификатор, которое добавляется к значению адреса,хранящегося в индексном регистре. Генераторы адреса данных используют схему постмодификации, то есть после каждой косвенной адресации к значению регистра Iдобавляется значение из регистра М. Для индексных регистров и регистров длинысуществует взаимооднозначное соответствие, это означает, что при установке значенияадреса в индексный регистр значение длины необходимо загружать в регистр длины с темже номером. Однако для регистров модификации такого соответствия нет.
Длямодификации можно использовать любой регистр модификации из тех, которыепринадлежат данному генератору. Например, при работе с массивом адрес которогохранится в регистре 10 можно использовать регистры модификации МО, Ml, М2, М3 ноиспользовать, например, регистр М5 нельзя. Индексные регистры и регистры длины беззнаковые, старшие два разряда шины DMD заполняются нулями. Регистр модификации88- знаковый, поэтому старшие два разряда шины DMD заполняются знаковымрасширением.Пример: Инициализация и использование генератора адресовПрием,показанныйвпримере(MR=MR+MX0*MY0,MX0=DM(I0,M1),MX0=PM(I5,M7);) достаточно широко используется на практике, особенно приреализации фильтров, поскольку используются различные устройства (MAC, DAG 1, DAG2), которые работают параллельно, три команды выполняются за один цикл!При использовании кольцевой адресации для вычисления следующего адресаиспользуется следующая формулаСледующий адрес=(I+М-В) mod(L) + ВГде I-индексный регистр, М-модификатор, L-регистр длины, В-базовый адрес.Эти числа должны удовлетворять ограничению |M|<L.В генераторе адреса DAG 1 имеется режим изменения порядка бит в адресе наобратный (реверс бит).
Этот режим полезен для реализации алгоритмов FFT. Точкаотсчета середины адреса находится между 6 и 7 битами адреса.Таблица 5.7 Операция инверсииЛинии шины DMA (N=14)В нормальном порядке13 12 11 10 09 08 07 06 05 04 03 02 01 00В инвертированном порядке00 01 02 03 04 05 06 07 08 09 10 11 12 13Адресация с изменением порядка бит в адресе на обратный - режим, включаемыйустановкой бита 1 в регистре MSTAT. При установке этого бита в регистре I значениехранится в нормальном порядке, реверс производится лишь при выдаче адреса на шинуDMA.89Возможно вывести с изменением порядка бит на обратный, так же и адресшириной меньше 14 бит. Для этого нужно установить значение в регистре М такое, чтопри реверсе бит, появлялся нужный адрес.1.Разработайтепрограмму,вычисляющуюБПФпо128точкам.Работоспособность проверьте, сравнивая с аналогичной операцией пакетаMATLAB.5.3 Контроллер прерыванийПри получении сигнала прерывания контроллер прерываний передает управлениекоманде, расположенной по соответствующему адресу.
Вектора прерываний хранятся впамяти программы через четыре ячейки, что позволяет кодировать короткие обработчикипрерываний без использования команд перехода, непосредственно в этих ячейках.Возврат в исполняемую программу осуществляется командой RTI. Прерывания могутустанавливаться программно, через регистр IFC. Адреса векторов прерываний дляпроцессора ADSP-2189 приведены в таблице 4.8.Таблица 5.8 Схема приоритетов прерыванийКогда поступает запрос на прерывание, он откладывается до конца выполнениятекущей инструкции.
Затем контроллер сравнивает запрос с регистром маски IMASK.Если прерывание в этот момент не замаскировано, в стек PC помещается PC (которыйсодержит адрес следующей инструкции главной программы). В стек статуса помещаютсяASTAT, MSTAT и IMASK в том порядке, в котором перечислены. После помещения1MASK в стек статуса он автоматически загружается значением, которое определяет,возможны ли вложенные прерывания.
После этого процессор выполняет пустой цикл90(NOP),втовремякакзагружаетсяинструкция,расположеннаяпоадресусоответствующего вектора прерывания. После окончания обработки прерыванияинструкцией RTI выталкиваются из стека PC значение PC и из стека статуса ASTAT,MSTAT и 1MASK и исполнение программы продолжается со следующей инструкции.IRQ0 - Реакция IRQ0 (1 - по спаду, 0 - по уровню)IRQ1 - Реакция IRQ1 (1 - по спаду, 0 - по уровню)IRQ2 - Реакция 1RQ2 (1 - по спаду, 0 - по уровню)INT_ENA - Разрешение вложенных прерыванийЗдесь и далее:TIMER - Прерывание от таймераRSPORT1 - Прерывание приема SPORT1TSPORT1 - Прерывание передачи SPORT1RSPORTO - Прерывание приема SPORTOTSPORTO - Прерывание передачи SPORTORHIP - Чтение хост-машиныRHIP - Запись хост-машиныIRQ2 - Прерывание IRQ291Пример: Установка обработчика прерываний5.4 Режим пониженного энергопотребленияВ режим пониженного энергопотребления процессор переходит инструкциейIDLE.