Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Руководство пользователя по сигнальным процессорам Sharc

.pdf
Скачиваний:
128
Добавлен:
01.05.2014
Размер:
9.49 Mб
Скачать

Управление программой 3

Регистр TCOUNT содержит счетчик таймера. В каждом цикле тактовой частоты значение регистра TCOUNT уменьшается на единицу. Когда значение TCOUNT достигает нуля, генерируется прерывание и на выходе TIMEXP устанавливается высокий уровень сигнала в течение 4 циклов — когда таймер включен (См. рис.

3.12). После того, как значение TCOUNT достигает нуля, TCOUNT автоматически перезагружается из регистра TPERIOD в том же цикле.

Значение TPERIOD определяет частоту прерываний по таймеру. Число циклов между прерываниями – TPERIOD+1. Максимальное значение TPERIOD – 232+1. Т. о., если период тактовой частоты равен 50 нс, то максимальный интервал между прерываниями – 214.75 секунд.

Тактовая

частота

TCOUNT=1 TCOUNT=0

TIMEXP

Рис. 3.12. Сигнал TIMEXP

3.7.1. Включение и выключение таймера

Включение или выключение таймера производится битом TIMEN регистра MODE2. При выключенном таймере вам нужно загрузить регистр TCOUNT начальным значением счетчика, а TPERIOD – числом циклов для желаемого интервала. Когда хотите начать счет, вы включаете таймер.

После сброса бит включения таймера в регистре MODE2 обнулен, т. е. таймер выключен. Когда таймер выключен, значение в регистре TCOUNT не декрементируется и прерывания не генерируются. Когда бит включения таймера установлен, таймер начинает уменьшать значение регистра TCOUNT в конце следующего цикла. Если бит впоследствии обнуляется, то таймер выключается и прекращает декрементировать TCOUNT через один цикл (см. рис. 3.13).

Бит MODE2

Имя

Описание

5

TIMEN

1=таймер включен

101

3 Управление программой

включение

установка TIMEN

 

 

 

 

 

таймера

таймер активен

 

 

 

в MODE2

 

 

 

 

 

 

 

 

 

 

 

тактовая

 

 

 

 

 

 

 

частота

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TCOUNT=N

TCOUNT=N

TCOUNT=N-1

 

выключение

 

 

 

 

 

 

 

таймера

обнуление TIMEN

таймер не

 

 

 

 

 

 

 

 

 

 

в MODE2

активен

 

 

 

 

 

 

 

 

 

 

 

тактовая

 

 

 

 

 

 

 

частота

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TCOUNT=M-1

TCOUNT=M-2

TCOUNT=M-2

 

Рис. 3.13. Включение и выключение таймера

3.7.2. Прерывания таймера

Когда значение TCOUNT достигает нуля, таймер генерирует два прерывания, одно с более высоким приоритетом, другое с более низким приоритетом. После сброса процессора оба маскируются. Необходимо демаскировать только то прерывание по таймеру, которое имеет нужный вам приоритет, а другое оставить маскированным.

Бит IRPTL

Имя прерывания

Адрес вектора Функция

4

TMZHI

0x10

Таймер = 0 (высокий приоритет)

23

TMZLI

0x5C

Таймер = 0 (низкий приоритет)

Приоритет прерывания определяет, какой из двух запросов прерываний, поступивших в течение одного цикла, будет обработан первым. Он также влияет на вложенность прерываний: когда вложенность разрешена, только прерывания с более высоким приоритетом могут прерывать выполнение программы обработки другого прерывания.

Как и другие прерывания, прерывание по таймеру требует двух циклов для выполнения выборки и декодирования первой команды подпрограммы. Программа обработки начинает выполняться через четыре цикла после того, как счетчик таймера достигает нуля, как показано на рис. 3.14.

102

Управление программой 3

Рис. 3.14. Временные диаграммы генерирования прерывания по таймеру

3.7.3. Регистры таймера

Регистр TPERIOD и регистр TCOUNT доступны для чтения и записи. Чтение регистров не оказывает никакого влияния на таймер. Явная запись в TCOUNT имеет приоритет перед загрузкой в TCOUNT из TPERIOD и перед уменьшением TCOUNT.

Ни на TCOUNT, ни на TPERIOD сброс не действует, поэтому после сброса, перед включением таймера, необходимо инициализировать оба регистра.

3.8. Флаги стека

Регистр состояния STKY содержит флаги стек пустой и стек полный для стека счетчика команд, а также флаги стек пустой и стек переполнен для стека состояния и стеков цикла (стека адреса цикла и стека счетчика цикла). В отличие от других битов в STKY, некоторые из битов этих флагов не являются «залипшими». Они устанавливаются при выполнении соответствующего условия и сбрасываются, когда условие изменяется (при помещении, извлечении данных из стека или при сбросе процессора).

Флаги стека состояния доступны только для чтения. Запись в регистр STKY не влияет на эти биты.

103

3 Управление программой

Бит STKY

Имя

Описание

Не залипший

Залипший, сбрасывается

21

PCFL

Стек счетчика команд полный

Не залипший

Помещением в стек

22

PCEM Стек счетчика команд пустой

Не залипший

Извлечением из стека

23

SSOV

Переполнение стека состояния Залипший

Сбросом

24

SSEM

Стек состояния пустой

Не залипший

Извлечением из стека

25

LSOV

Стеки цикла* переполнены

Залипший

Сбросом

26

LSEM

Стеки цикла* пустые

Не залипший

Извлечением из стека

* Стек адреса цикла и стек счетчика цикла

Флаги стек переполнен и стек полный предусмотрены только для диагностики и не предназначены для восстановления из состояния переполнения. Переполнение стека состояния, стека цикла или заполнение стека счетчика команд вызывает генерацию прерывания.

Флаги стек пустой облегчают сохранение стека в памяти. Вы следите за состоянием флага при сохранении стека в памяти, и, следовательно, узнаете, когда все значения будут перемещены.

3.9. IDLE и IDLE16

IDLE и IDLE16 – специальные команды, выполнение которых переводит ядро процессора ADSP 2106x в состояние пониженного потребления мощности до

поступления сигнала внешнего прерывания , прерывания таймера,

прерывания DMA или векторного прерывания VIRPT. Когда процессор выполняет команду IDLE, он выбирает еще одну команду по текущему адресу выборки, а затем приостанавливает работу. Команда IDLE не воздействует на устройство ввода вывода. Любые передачи по DMA во внутреннюю память или из нее будут продолжаться непрерывно.

Сигналы внутренней тактовой синхронизации продолжают генерироваться во время выполнения IDLE, также работает таймер (если он включен). Когда

приходит запрос внешнего прерывание , прерывания таймера,

прерывания DMA или векторного прерывания VIRPT, процессор отвечает обычным образом. После двух циклов, необходимых для выборки и декодирования первой команды программы обработки прерывания, процессор продолжает выполнять команды обычным образом.

Только в ADSP 21061 по команде IDLE16 выполняется NOP и процессор переводится в состояние пониженного потребления мощности. Команда IDLE16 является вариантом команды IDLE с более низкой потребляемой мощностью. Эта команда останавливает процессор подобно команде IDLE;

104

Управление программой 3

только в этом случае внутренняя тактовая частота равна 1/16 от CLKIN. Устройство ввода вывода ADSP 21061 продолжает функционировать, но все операции происходят в 16 раз медленнее. Все передачи данных во внутренней памяти требуют дополнительных 15 циклов. Частоты тактовой и кадровой синхронизации последовательного порта, если их источником является ADSP 21061, делятся на 16 во время выполнения IDLE16. Точно так же все обращения хост процессора осуществляются в 16 раз медленнее. Процессор остается в состоянии пониженного потребления мощности, пока не придет запрос прерывания.

После возврата из прерывания выполнение программы продолжается с команды, следующей за командой IDLE или IDLE16.

3.10. Кэш команд

Кэш команд, расположенный на кристалле процессора ADSP 2106x, является ассоциативным и может хранить до 32 х команд. Работа кэша понятна для программиста. Процессор кэширует только те команды, при выборке которых возникает конфликт с доступом к данным памяти программы (по шине данных PM, с адресом, сгенерированным DAG2 по шине адреса PM). Эта возможность делает кэш значительно более эффективным, чем кэш, в который загружается каждая команда, так как обычно только при выполнении нескольких команд нужно обращаться к данным из блока памяти программы.

Если при выполнении команды, находящейся по адресу n, требуется обращение к данным памяти программы, то из за конвейерного выполнения команд возникает конфликт с выборкой команды по адресу n+2 (предполагается последовательное выполнение программы). В кэше команд сохраняется эта выбранная команда (n+2), а не та команда, для выполнения которой требуется обращение к данным памяти программы.

Если необходимая команда находится в кэше, происходит «удачное обращение к кэшу»– кэш обеспечивает команду, когда выполняется обращение к данным памяти программы. Если необходимой команды нет в кэше, происходит «неудачное обращение к кэшу» и выборка команды (из памяти) происходит в цикле, следующем за обращением к данным памяти программы, т. о., добавляется один непроизводительный цикл. Эта команда загружается в кэш, если кэш разблокирован и не зафиксирован, т. о., она будет доступна, когда в следующий цикл будет выполняться команда, требующая обращения к данным памяти программы.

105

3 Управление программой

3.10.1. Архитектура кэша

На рис. 3.15 показана блок схема кэша команд. Кэш имеет 32 элемента. Элемент состоит из пары регистров, содержащих команду и ее адрес. Каждый элемент имеет бит «истинности», который установлен, если элемент содержит истинную команду.

Элементы разделены на 16 наборов (пронумерованных от 0 до 15), содержащих по два элемента каждый – элемент 0 и элемент 1. Каждый набор имеет бит LRU (LRU – Least Recently Used), значение которого указывает, какой из двух элементов содержит последнюю из недавно используемых команд (1=элемент 1, 0=элемент 0).

Рис. 3.15. Архитектура кэша команд

Адрес любой возможной команды отображается в один из наборов в кэше, используя 4 младших бита адреса в качестве номера набора. Когда процессору необходимо выбрать команду из кэша, он использует 4 младших бита адреса как индекс определенного набора. Внутри этого набора он проверяет адреса двух элементов на наличие необходимой команды. Если команда обнаружена, происходит удачное обращение к кэшу. Бит LRU обновляется, если необходимо обозначить элемент, который не содержит необходимую команду.

Если ни один элемент в наборе не содержит необходимой команды, происходит неудачное обращение к кэшу. В этом случае новая команда и ее адрес загружаются в последний из недавно использованных элементов набора, адрес которого определяется 4 младшими битами адреса. Бит LRU переключается для того, чтобы указать, что сейчас другой элемент в наборе является последним недавно использованным.

Поскольку команды отображаются в набор с использованием 4 младших бит их адреса, нет необходимости хранить эти биты в кэше; 4 младших бита являются

106

Управление программой 3

номером набора, в котором команда была сохранена. Фактически в элементе кэша хранятся только биты 23 4.

3.10.2. Эффективность использования кэша

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

Когда происходит неудачное обращение к кэшу, необходимая команда загружается в кэш, чтобы она находилась там, если потребуется снова (таким образом, произойдет удачное обращение к кэшу). Однако если другая команда, адрес которой отображается в тот же самый набор, заместит эту команду, произойдет неудачное обращение к кэшу. Биты LRU снижают вероятность этого события, так как должны потребоваться, по крайней мере, две других команды, отображаемые в тот же самый набор, прежде чем команда будет замещена. Если

Адрес

 

 

0x0100

lcntr

= 1024, do tight until lce;

0x0101

 

r0 = dm (i0, m0), pm (i8, m8) = f3;

0x0102

 

r1 = r0-r15;

0x0103

 

if eq call (sub);

0x0104

 

f2 = float r1;

0x0105

 

f3 = f2*f2;

0x0106

tight: f3 = f3 + f4;

0x0107

 

pm (i8, m8) = f3;

·

 

 

·

 

 

·

 

 

0x0200

sub:

r1 = R13;

0x0201

 

r14 = pm (i9, m9);

·

 

 

·

 

 

·

 

 

0x0211

 

pm (i9, m9) = r12;

·

 

 

·

 

 

0x021F

 

rts;

Рис. 3.16. Код, в котором неэффективно используется кэш

107

3 Управление программой

все три команды, отображенные в одном и том же наборе, необходимы неоднократно, то эффективность использования кэша (то есть «степень удачного обращения») может стремиться к нулю. Решение заключается в том, чтобы переместить одну или более команд по новому адресу, который отобразится в другом наборе.

Пример кода, в котором неэффективно используется кэш, показан на рис. 3.16. Обращение к данным памяти программы по адресу 0x101 в цикле tight вызывает команду по адресу 0x103, которую нужно кэшировать (в наборе 3). Каждый раз, когда вызывается подпрограмма call, при обращении к данным памяти программы по адресам 0x201 и 0x211 эта команда замещается, загружаются команды по адресам 0x203 и 0x213 в набор 3. Если во время выполнения цикла подпрограмма вызывается редко, влияние на эффективность кэша будет минимально. Если подпрограмма вызывается часто, влияние будет заметным. Если выполнение цикла критично ко времени, было бы желательно переместить подпрограмму на одну ячейку (начиная с 0x201) так, чтобы две кэшируемых команды помещались в 4 й набор вместо 3 го.

3.10.3. Отключение и фиксация кэша

Фиксация кэша запрещает любые изменения его содержимого – неудачное обращение к кэшу не будет приводить к сохранению в кэше новой команды. Отключение кэша полностью останавливает его работу; все выборки команды, вызывающие конфликт с обращением к данным памяти программы, задерживаются. Эти функции управляются битами CADIS (кэш включен/ выключен) и CAFRZ (фиксация кэша) в регистре MODE2:

Бит MODE2

Имя

Функция

4

CADIS

Отключение кэша

19

CAFRZ

Фиксация кэша

После сброса кэш обнулен, не содержит никаких команд, не зафиксирован и включен.

Команда, в которой осуществляется обращение к данным памяти программы, не должна находиться непосредственно за командой включения или выключения кэша – процессор должен ждать, по крайней мере, один цикл перед выполнением обращения к данным PM. Для выполнения этого условия после команды включения или выключения кэша может быть добавлена команда NOP.

108

Передача данных 4

4.1. Обзор

В каждом процессоре ADSP 2106x содержится два самостоятельных генератора адреса данных (Data Address Generator – DAG), которые позволяют упростить систематизацию данных, генерируя адреса памяти. Генераторы адреса данных позволяют осуществлять косвенную адресацию данных, когда в команде задается регистр DAG, содержащий адрес, вместо непосредственного значения адреса.

Генератор адреса данных 1 (DAG1) генерирует 32 разрядные адреса по шине адреса памяти данных (DM). Генератор адреса данных 2 (DAG2) генерирует 24 разрядные адреса по шине адреса памяти программы (PM). Архитектура обоих генераторов изображена на рис. 4.1.

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

4.2. Регистры генератора адреса данных

Каждый генератор имеет четыре типа регистров: регистры индекса (I), модификации (M), базового адреса (В) и длины (L).

Регистр I служит указателем памяти, регистр М содержит значение приращения для перемещения указателя. Вы можете изменять приращение, модифицируя содержимое регистра I различными значениями регистра М.

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

Каждый DAG содержит восемь регистров каждого типа:

109

4 Передача данных

Регистры DAG1 (32 разрядные)

Регистры DAG2 (24 разрядные)

B0 B7

B8 B15

I0 I7

I8 I15

M0 M7

M8 M15

L0 L7

L8 L15

 

 

 

 

 

 

 

 

 

 

 

 

Шина данных памяти данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

N

 

 

 

N

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Из команды

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L

 

 

 

 

 

В

 

 

 

 

 

 

 

 

 

I

 

 

 

N

 

 

 

 

М

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8xN

 

 

 

 

 

 

 

 

 

8хN

 

 

 

8хN

 

 

 

 

 

8хN

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Логическое

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мультиплексор

 

 

 

 

устройство

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

адресации по модулю

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сумматор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Устройство

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

перестановки бит в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

адресе в обратном

 

 

 

 

 

 

 

 

 

 

 

Мультиплексор

 

 

 

 

 

 

 

порядке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(дополнительно)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обновление

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Устройство перестановки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D AG1: N=32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

бит в адресе в обратном

 

 

 

 

DAG2: N=24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

порядке I0 (DAG1) или I8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(DAG2) (дополнительно)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шина адреса памяти программы (DAG2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шина адреса памяти данных (DAG1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.1. Блок-схема генератора адреса данных

4.2.1. Дополнительные регистры DAG

Каждый регистр генератора адреса данных имеет дополнительный (вторичный) регистр для контекстного переключения. Каждый генератор состоит из двух половин – верхней и нижней — как показано на рис. 4.2. Верхняя половина DAG1 содержит регистры I, M, B и L с номерами 4 7, а нижняя – с номерами 0 3. Аналогично верхняя половина DAG2 включает регистры 12 15, а нижняя половина – регистры 8 11.

110