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

Вид материалаДокументы
1.11.1. Генераторы адресов
1.11.2. Узел обмена данными
1.12. Последовательные порты
1.12.2. Программирование SPORT
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   26

Примечание: в табл. 1.12 использованы следующие обозначения – DRBS (Data Register Bank Select) – выбор банка регистров данных, RME (Reverse Mode Enable) – разрешение режима реверса битов в DAG1, OLME (ALU Overflow Latch Mode Enable) – разрешение режима защелки бита переполнения ALU, SME (AR Saturation Mode Enable) – разрешение режима насыщения регистра AR, MRP (MAC Result Placement) – размещение результата МАС, TE (Timer Enable) – разрешение (запуск) таймера, GME (Go Mode Enable) – разрешение режима GO, INTS – бит глобального разрешения/запрета прерываний процессора (см. п. 1.9.3).


Как и любой другой регистр, допускающий запись, MSTAT может быть модифицирован пересылочной командой MOVE (оператором присвоения). Но в отличие от других регистров, биты регистра MSTAT могут быть изменены командами управления режимом работы процессора (ENA и DIS, см. п. 1.17.10.Б).

Например, чтобы разрешить режим реверса битов в DAG1, достаточно дать команду ENA BIT_REV;. Эта команда будет производить реверс битов адреса, который формирует DAG1, что используется при выполнении быстрого преобразования Фурье (БПФ). Отменить режим реверса можно командой DIS BIT_REV;.

Бит DRBS регистра MSTAT позволяет выбрать первичный набор (при DRBS = 0) регистров данных вычислительных устройств (см. пп. 1.5…1.7) или – вторичный набор (при DRBS = 1) регистров данных вычислительных устройств. Переключение на вторичный набор осуществляет команда ENA SEC_REG;, возврат первичного набора осуществляет команда DIS SEC_REG;.

Бит OLME регистра MSTAT позволяет (если установлен) заморозить бит переполнения ALU AV, если таковое случилось. Бит AV будет при этом установлен даже, если последующие арифметические операции не будут генерировать переполнения. Сбросить бит AV можно только записью нуля в бит 2 регистра ASTAT (см. табл. 1.9). Установка бита OLME производится командой ENA AV_LATCH;, сброс – командой DIS AV_LATCH;.

Бит SME регистра MSTAT позволяет (если установлен) производить насыщение регистра результата ALU AR, т.е. при наличии переполнения записывать в AR максимально положительное число (0х7FFF) или максимально отрицательное число (0х8000). Установка бита SME производится командой ENA AR_SAT;, сброс – командой DIS AR_SAT;.

Бит MRP регистра MSTAT определяет режим работы МАС: целый или дробный (см. п. 1.10). В целом режиме код на выходе Р умножителя (см. рис. 1.7) складывается (вычитается) с содержимым MR без сдвига. В дробном режиме код на выходе Р умножителя (см. рис. 1.7) складывается (вычитается) с содержимым MR со сдвигом на один разряд влево (при этом в самый правый разряд сдвинутого кода записывается ноль). Установка бита MRP (целый режим) производится командой ENA M_MODE;, сброс (дробный режим) – командой DIS M_MODE;.

Установка бита TE (командой ENA TIMER;) запускает таймер (на декрементирование), очистка (сброс) бита ТЕ (командой DIS TIMER;) останавливает таймер.

Установка бита GME (командой ENA G_MODE;) переводит процессор в режим GO, что позволяет ему в режиме захвата выполнять программу, находящуюся во внутренней ПП. В такой ситуации его может остановить только потребность во внешней шине (занятой в режиме захвата альтернативным задатчиком магистрали). Если режим GO запретить (например, командой DIS G_MODE;), то в режиме захвата процессор не будет выполнять программу, а произведет останов до выхода из режима захвата.


1.11. Передача данных


Передачей данных в/из процессора управляют генераторы адресов DAG1, DAG2 (см. п. 1.2). Передачей данных с одной магистрали на другую (PMD – DMD) управляет узел обмена данными BUS EXCH (см. п. 1.2).


1.11.1. Генераторы адресов


DAG1 и DAG2 работают независимо, поэтому возможен одновременный доступ как к ПД, так и к ПП. Адресные генераторы обеспечивают косвенную адресацию данных, оба выполняют адресную модификацию (пост-инкрементную или пост-декрементную), оба поддерживают кольцевые буферы. Но DAG1 генерирует адреса только для ПД, зато может производить реверс бит адреса (см. п. 1.10). DAG2 генерирует адреса и для ПД, и для ПП, но не может производить реверс бит адреса .

Каждый генератор содержит по четыре 14-битных регистра следующих типов: модификации (М), индексный (I) и длины (L). Каждый из этих регистров может быть прочитан и записан через DMD шину.

Индексные регистры (I0-I3 в DAG1, I4-I7 в DAG2) содержат адреса для доступа к памяти. При использовании косвенной адресации эти адреса выдаются на адресные шины процессора (DMA и/или РМА). После осуществления косвенной пересылки данных индексные регистры подвергаются пост-модификации с помощью регистров модификации.

Это означает, что к содержимому, выбранного в команде индексному регистру, после ее выполнения прибавляется содержимое, выбранного регистра модификации. Для модификации регистров I0-I3 может быть использован любой из регистров М0-М3, а для модификации регистров I4-I7 – любой из регистров М4-М7. Нельзя только смешивать индексные и модификационные регистры DAG1 и DAG2. Для примера запишем команду пересылки данных из ПД в регистр АХ0: АХ0 = DM(I0, M3). Адресом операнда является содержимое индексного регистра I0 до пересылки. После пересылки к содержимому I0 прибавляется содержимое М3.

В регистрах модификации хранятся числа со знаком, поэтому может быть осуществлена как пост-инкрементная адресация, так и пост-дек­ре­мен­тная адресация.

В зависимости от содержимого регистров длины буфера (L0-L3 в DAG1 и L4-L7 в DAG2) адресные генераторы поддерживают как линейную адресацию, так и кольцевую адресацию. Если какой-либо регистр длины содержит нуль, то соответствующий ему индексный регистр обеспечивает линейную адресацию. В противном случае (регистр длины содержит ненулевое значение) поддерживается кольцевая адресация.

Обычно для реализации кольцевой адресации в соответствующий регистр длины записывается длина буфера (массива) данных. Тогда, если в результате очередного пост-инкремента содержимое индексного регистра выйдет за пределы буфера, то в индексный регистр записывается начальный адрес буфера.

После сброса процессора содержимое всех регистров DAG1 и DAG2 не определено, поэтому перед использованием косвенной адресации они должны быть программно инициализированы, например, следующим образом:

I3 = 0x3800; {инициализация индексного регистра}

M2 = 0; {модификация отсутствует}

L3 = 0; {объявлен линейный буфер}

{содержимое ячейки памяти 0х3800 пересылается в регистр АХ0}

AX0 = DM(I3, M2);

Средства разработки программного обеспечения процессора ADSP-2181 [2] поддерживают работу с отдельными переменными и массивами переменных как линейными, так и кольцевыми. Так массив объявляется следующей директивой:

.VAR/DM coefficients[128];

В памяти данных (DM) объявлен массив из 128 16-битных слов с именем coefficients. Специальные операторы и % возвращают начальный адрес и длину массива соответственно. Ниже представлен пример их использования:

I0 = coefficients; {инициализация указателя на начало массива}

L0 = 0; {объявлен линейный буфер}

MX0 = DM(I0, M0); {загрузка регистра МХ0 из буфера}

В примере в регистр МХ0 загружается первый элемент буфера coefficients, который располагается в ПД. Если бы было необходимо сделать только это, то достаточно было записать MX0 = DM(coefficients);. Но, если необходимо пересылать в цикле значения всех элементов буфера, то необходимо инициализировать регистр М0 и вставить третий оператор примера в тело соответствующего цикла.

Объявление простой переменной является частным случаем объявления массива:

.VAR/DM coefficient;

Для работы с кольцевым буфером должны быть сделаны некоторые шаги. Во-первых, буфер должен быть объявлен с зарезервированным словом CIRC:

.VAR/DM/CIRC coefficient[128];

Во-вторых, должны быть проинциализированы соответствующие регистры - индексный, длины и модификации:

I0 = coefficients; {инициализация указателя на начало массива}

L0 = %coefficients; {объявлен кольцевой буфер}

М0 = 1; {инкремент на один адрес после пересылки}

В-третьих, в тело цикла должен быть вставлен оператор:

MX0 = DM(I0, M0); {загрузка регистра МХ0 из буфера}

В результате после каждого очередного выполнения этого оператора содержимое регистра I0 будет указывать на следующий элемент буфера coefficients. После считывания последнего элемента содержимое регистра I0 будет указывать на первый элемент буфера coefficients.


1.11.2. Узел обмена данными


Узел BUS EXCH позволяет производить обмен данными в обоих направлениях между PMD и DMD шинами. Поскольку ширина PMD шины составляет 24 линии, а ширина DMD шины составляет 16 линий, то прямо передаются только старшие 16 бит PMD шины. Младшие 8 бит записываются (или считываются) в (из) внутренний регистр РХ узла BUS EXCH.

При одновременном считывании данных из ПП и ПД, которое используется в некоторых командах, 16 старших бит данных из ПП считываются в Y-ре­гис­тры вычислительных устройств минуя узел BUS EXCH.

Внутренний РХ регистр используется при пересылках в обоих направлениях между ПП и любым регистром. Пример прямой пересылки:

АХ0 = РМ(I4, M4);

Здесь старшие 16 бит содержимого ячейки ПП, на которую указывает I4, загружаются в регистр АХ0, а младшие 8 бит загружаются в регистр РХ. В примере используется индексный регистр I4, поскольку только индексные регистры DAG2 (см. п. 1.11.1) могут адресовать ПП.

Пример обратной пересылки:

РМ(I4, M4) = АХ0;

Здесь содержимое регистра АХ0 сохраняется в старших 16 битах содержимого ячейки ПП, на которую указывает I4, а младшие 8 бит загружаются из регистра РХ.

Регистр РХ также может загружаться (считываться) с (на) DMD шины, когда в пересылочной команде точно указан как регистр-назначение. Пример загрузки:

РХ = АХ0;

Здесь содержимое младших 8 бит регистра АХ0 загружается в регистр РХ. Такая загрузка должна производится перед записью в ПП 24-битных данных.

Пример считывания:

АХ0 = РХ;

Здесь содержимое регистра РХ записывается в 8 младших бит регистра АХ0.


1.12. Последовательные порты


1.12.1. Общие сведения


Синхронные последовательные порты SPORT0, SPORT1 (см. рис. 1.3) поддерживают множество протоколов передачи данных и могут использоваться для связи процессоров в многопроцессорной вычислительной системе. Структурная схема SPORTn (n = 0, 1) представлена на рис. 1.10.

На рис. 1.10 сделаны следующие обозначения: SCLK (Serial CLocK) – сигнал синхронизации; RFS (Receive Frame Synchronization) – синхросигнал принимаемого фрейма; TFS (Transmit Frame Synchronization) – синхросигнал передаваемого фрейма; DR (Serial Data Receive) – принимаемые данные; DT (Serial Data Transmit) – передаваемые данные.

Последовательный порт передает данные через DT, а принимает – через DR. Прием и передача может происходить одновременно, что поддерживает режим полного дуплекса. Передаваемые (принимаемые) биты синхронизируются сигналом SCLK, который может выходным, если его генерирует сам порт, или входным, если его генерирует внешний генератор. Сигналы фреймовой синхронизации RFS, TFS отмечают начало передаваемого слова или потока последовательных слов.

Из рис. 1.10 видно, что для передачи слова в последовательный канал связи достаточно записать его (через DMD шину) в регистр ТХ. Из него оно загружается в сдвиговый регистр передачи и затем побитно (старшими разрядами вперед) выдается на линию DT. Выдача каждого бита синхронизируется сигналами SCLK.




Принимаемые данные поступают с линии DR в сдвиговый регистр приема. После приема целого слова оно автоматически загружаются в регистр RX откуда через DMD шину может быть считано процессором. Прием каждого бита также синхронизируется сигналами SCLK. И принимаемые, и выдаваемые данные могут быть подвергнуты сжатию с помощью узла сжатия данных.

Последовательные порты процессора имеют следующие особенности:
  • Двунаправленность: каждый SPORT имеет независимые блоки приема и передачи;
  • Двойная буферизация: блоки приема и передачи SPORT имеют регистры для связи с внутренними ресурсами процессора (регистры принимаемых и передаваемых данных соответственно) и сдвиговые регистры, поддерживающие связь с внешними устройствами микропроцессорной системы. Двойная буферизация позволяет уменьшить время обслуживания порта со стороны процессора;
  • Синхронизация: каждый SPORT может использовать внешний сигнал синхронизации или генерировать свой собственный в широком диапазоне частот вплоть до 0 Гц (см. п. 1.12.2);
  • Длина слова: каждый SPORT поддерживает обмен словами длиной от трех до шестнадцати бит (см. п. 1.12.2);
  • Фреймовая синхронизация: каждый SPORT поддерживает обмен данными как с фреймовой синхронизацией (см. п. 1.12.2) каждого слова, так и без нее. Фреймовые сигналы могут генерироваться как самим портом, так и внешними устройствами. Активный уровень фреймовых сигналов (низкий/высокий) может устанавливаться программно;
  • Аппаратное уплотнение данных: каждый SPORT может производить уплотнение данных по А- и -законам (см. узел уплотнения данных на рис. 1.10) в соответствии с рекомендациями G.711 CCITT (см. п. 1.12.4);
  • Автобуферизация: используя DAG1, DAG2, каждый SPORT может автоматически принимать/передавать целый кольцевой буфер данных с одним циклом перевода указателя на начало буфера (см. п. 1.12.5). Передача данных из буфера в порт и обратно происходит автоматически без вмешательства программы;
  • Прерывания: блоки приема и передачи каждого SPORT генерируют запросы на прерывания после выполнения приема/передачи как слова, так и целого буфера (см. п. 1.9);
  • Многоканальность: SPORT0 может получать/передавать данные избирательно от 24 или 32 каналов последовательного потока битов в режиме временного мультиплексирования. Это особенно полезно для поддержки Т1 интерфейса или локальной сети процессоров;
  • Многофункциональность: вместо последовательного порта SPORT1 может быть сконфигурирован на прием двух запросов на прерывания IRQ0# и IRQ1#, а также прием сигнала FlagIn и выдачу сигнала FlagOut. Единственный не конфигурируемый сигнал – это синхросигнал.


После приема или передачи слова данных последовательные порты формируют запросы на прерывания, перечень которых и приоритеты приведены в табл. 1.8.

Для передачи данного через последовательный порт достаточно записать его в регистр ТХ. После этого активизируется фреймовый сигнал TFS и содержимое регистра ТХ перезаписывается в сдвиговый регистр передачи (см. рис. 1.10). Сдвиговый регистр передачи последовательно выталкивает выдаваемое слово бит за битом в канал связи, начиная с самого старшего бита. Выдача очередного бита происходит по фронту сигнала SCLK.

После выдачи самого старшего бита SPORT генерирует запрос на прерывание по передаче. Регистр ТХ является доступным, хотя передача слова еще не завершилась.

Блок приема данных принимает из канала связи последовательные биты в сдвиговом регистре приема (см. рис. 1.10). После приема целого слова оно перезаписывается в регистр RX и формируется запрос на прерывание по приему.


1.12.2. Программирование SPORT


Для программиста SPORT представляется двумя группами регистров: конфигурационными и данных. Конфигурационные регистры располагаются в ПД и служат для задания режима работы SPORT. Перед первым использованием порта они должны быть обязательно проинициализированы. Регистры данных (RX и TX) используются для приема/пере­да­чи данных через порт.

Адреса и функциональное назначение конфигурационных регистров приведены в табл. 1.13.

Таблица 1.13

Функциональное назначение конфигурационных регистров

Адрес

Назначение


0x3FFA

Разрешение многоканального приема слова SPORT0 (31-16)

0x3FF9

Разрешение многоканального приема слова SPORT0 (15-0)

0x3FF8

Разрешение многоканальной передачи слова SPORT0 (31-16)

0x3FF7

Разрешение многоканальной передачи слова SPORT0 (15-0)

0x3FF6

Регистр управления SPORT0: управление многоканальным

режимом, выбор источника битовой синхронизации, управление фреймовой синхронизацией, выбор длины слова данных

0x3FF5

Делитель частоты битовой синхронизации SPORT0

0x3FF4

Делитель частоты приемного фрейма SPORT0

0x3FF3

Регистр управления автобуферизацией SPORT0

0x3FF2

Регистр управления SPORT1: значение выходного флага, выбор источника битовой синхронизации, управление фреймовой синхронизацией, режим сжатия данных, выбор длины слова данных

0x3FF1

Делитель частоты битовой синхронизации SPORT1

0x3FF0

Делитель частоты приемного фрейма SPORT1

0x3FЕF

Регистр управления автобуферизацией SPORT1