ЭУМК по дисциплине "Проектирование проблемно-ориентированных вычислительных средств" › Теория › Тема 3. Операционное устройство процессоров платформы с5000

# Электронный учебно-методический
комплекс по дисциплине
"Проектирование проблемно-ориентированных вычислительных средств"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

3.2. Адресация памяти в процессорах TMS320C5х
3.2.1. Способы адресации памяти данных в процессоре

Память C54x DSP организована в три индивидуально выбираемых пространства: программ, данных и ввода-вывода. Внутри любого из этих пространств, ОЗУ, ПЗУ, ППЗУ, СППЗУ или периферийные устройства с отображением на память может постоянно находиться на кристалле или вне кристалла.
TMS320C54x DSP имеет восемь основных способов адресации данных:

- Непосредственная адресация используется для задания фиксированного значения (константы).
- Абсолютная адресация используется для задания фиксированного (абсолютного) адреса.
- Аккумуляторная адресация используется для обращения к памяти программ как к данным.
- Адресация регистров с отображением на память позволяет обращаться к ним, не зависимо от текущего значения DP или SP.
- Адресация стека управляет добавлением и удалением элементов от системного стека.
- Регистровая и неявная адресация.
- Прямая адресация использует семь бит команды для задания смещения относительно DP или SP. Смещение плюс содержимое DP или SP определяет исполнительный адрес в памяти данных.
- Косвенная адресация использует вспомогательные регистры для задания адреса памяти.

Непосредственная адресация

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

- Короткие константы могут быть длиной 3, 5, 8 или 9 бит.
- Длинные константы всегда длиной 16 бит.

При этом, короткие константы используются в однословных командах, а длинные – в двухсловных.
Для указания на непосредственно адресуемый операнд используется символ решетки (#) непосредственно предшествующий числовому значению или символическому имени.

Абсолютная адресация

Есть четыре типа абсолютной адресации:

- Адресация памяти данных (dmad).
- Адресация памяти программ (pmad).
- Адресация порта ввода-вывода (PA).
- *(lk) (косвенная абсолютная) адресация используется всеми командами, которые адресуют память данных одиночного доступа (Smem).

Поскольку абсолютные адреса всегда длиной 16 бит, то команды, использующие абсолютные адреса всегда имеют длину не менее два слова.
*(lk) адресация использует заданное значение, чтобы определить адрес в пространстве данных. При задании данного типа адресации используется как символическое имя, так и числовое значение. Например, чтобы загрузить аккумулятор значением, содержащимся по адресу BUFFER в пространстве данных, Вы должны записать:
LD *(BUFFER), A
Синтаксис для *(lk) адресации могут использовать все команды, которые используют Smem адресацию, чтобы обратиться к любой ячейке пространства данных без изменения DP или инициализации AR. При использовании этой формы абсолютного адреса длина команды увеличивается на одно слово.
Добавление одного слова к команде затрагивает ее применение в тактах задержки.
Внимание: Команды, использующие *(lk) форму абсолютного адреса не могут использоваться с командами повторения одной команды (RPT, RPTZ).

Аккумуляторная адресация

Аккумуляторная адресация использует значение в аккумуляторе как адрес. Этот способ адресации используется, чтобы адресовать память программ как данные.
Две команды позволяют Вам использовать аккумулятор как адрес:
READA Smem
WRITA Smem
В режиме повторения может использоваться приращение, чтобы увеличить аккумулятор A.

Адресация регистров с отображением на память

Адресация регистров с отображением на память используется для модификации этих регистров независимо от текущего значения указателя страницы данных (DP) или указателя стека (SP). Поскольку DP и SP не нужно изменять в этом режиме, издержки при записи в регистры минимальны. Адресация регистров с отображением на память работает и при прямой, и при косвенной адресации.
Адреса формируются:

- Принудительно девять старших битов (MSBs) адреса памяти данных устанавливаются в 0, независимо от текущего значения DP или SP при использовании прямой адресации
- Используется значение семи младших битов (LSBs) текущего вспомогательного регистра при использовании косвенной адресации

Внимание: При косвенной адресации девять старших разрядов (MSBs) вспомогательного регистра после операции всегда устанавливаются в 0.
Например, если AR1 используется, чтобы указать на регистр с отображением на память при этом способе адресации, и он содержит значение FF25H, тогда AR1 указывает на регистр периода таймера (PRD), так как семь младших разрядов (LSBs) AR1 равны 25h и адрес PRD равен 0025h. После выполнения команды значение, остающееся в AR1 равно 0025h.
Внимание: В дополнение к регистрам, любая ячейка сверхоперативной памяти, расположенная на 0-й странице данных может быть изменена с использованием адресации регистров с отображением на память.
Только восемь команд могут использовать адресацию регистров с отображением на память:
LDM mmr, dst
MVDM dmad, mmr
MVMD mmr, dmad
MVMM MMRx, MMRy
POPM mmr
PSHM mmr
STLM src, mmr
STM #lk, mmr
Внимание: Следующие способы косвенной адресации не могут использоваться при адресации регистров с отображением на память:
*ARx(lk)
*+ARx(lk)
*+ARx(lk)%
*(lk)

Адресация стека

Системный стек используется автоматически для записи программного счетчика при прерывании и вызове подпрограмм. Он может также использоваться по вашему усмотрению, чтобы сохранить дополнительные элементы контекста или передать значения данных. Стек заполняется от самого старшего до самого младшего адреса памяти. Процессор использует 16-битный отображаемый на память регистр, указатель стека (SP), для адресации стека. SP всегда указывает на последний элемент, сохраненный в стеке.
Четыре команды обращаются к стеку, используя способ адресации стека:
PSHD помещает значение памяти данных в стек.
PSHM помещает отображаемый на память регистр в стек.
POPD выталкивает значение памяти данных из стека.
POPM выталкивает отображаемый на память регистр из стека.
Адрес в SP модифицируется с применением предекрементного способа при помещении в стек и постинкрементного при выталкивании.
Рисунок 3.4 показывает пример стека и SP до и после помещения X2 в стек (команда PSHD X2).

| Стек и SP перед операцией |  | Стек и SP после операции
SP | 0011 | 0001 |  | SP | 0010 | 0001 |
|  | 0010 |  |  |  | 0010 | X2
|  | 0011 | X1 |  |  | 0011 | X1
|  | 0100 |  |  |  | 0100 |
|  | 0101 |  |  |  | 0101 |
|  | 0110 |  |  |  | 0110 |

###### Рисунок 3.4 – Стек и указатель стека до и после команды PSHD

Другие команды также затрагивают стек и указатель стека. Стек используется при обработке прерываний и подпрограмм, чтобы сохранять и восстановить содержимое PC. Когда вызывается подпрограмма или происходит прерывание, адрес возврата автоматически сохраняется в стеке, используя помещающуюся операцию. Команды, используемые для вызова подпрограмм и прерываний - CALA[D], CALL[D], CC [D], INTR и TRAP.
При возврате из подпрограммы адрес возврата восстанавливается из стека, используя операцию выталкивания, и загружается в PC. Команды, используемые для возврата из подпрограмм - RET[D], RETE[D], RETEF[D] и RC[D].
Команда FRAME также затрагивает стек. Эта команда добавляет короткое непосредственное смещение к указателю стека. Стек также используется при прямой адресация относительно SP.

Регистровая и неявная адресация

При регистровой адресации в команде указывается имя регистра: A, ASM, B, DP и др. Регистровую адресацию используют практически все арифметические и логические команды для указания источника (src) или приемника (dst).
Неявная адресация является вариантом регистровой адресации, но при этом в команде явно не указывается имя используемого регистра. Примерами таких команд являются:
LTD Smem ; загрузка регистра Т из Smem
MACA Smem ; умножение АН на Smem и сложение с В
MPY Smem, dst ; умножение регистра Т на Smem

3.2.2. Прямая и косвенная адресация, методы адресации в двухоперандных командах
Прямая адресация

При прямой адресации команда содержит младшие семь бит адреса памяти данных (dma). 7 бит dma - смещение адреса, которое объединяется с базовым адресом из указателя страницы данных (DP) или указателем стека (SP), чтобы сформировать 16-битный адрес памяти данных. Используя эту форму адресации, Вы можете обращаться к одной из 128 ячеек на текущей странице в случайном порядке без изменения DP или SP.
Внимание: Прямая адресация - не единственный метод адресации со смещением. Однако, преимущество этого режима состоит в том, что при это каждая команда и адрес кодируются в одно слово.
Со смещением dma для получения исполнительного адреса могут быть объединены или DP, или SP. Бит режима трансляции (CPL), расположенный в регистре состоянии ST1, определяет, какой метод используется для генерирования адреса:

- Когда CPL = 0, поле dma объединяется с 9-битным полем DP, чтобы сформировать 16-битный адрес памяти данных.
- Когда CPL = 1, поле dma прибавляется (как положительное смещение) к SP, чтобы сформировать 16-битный адрес памяти данных.

Косвенная адресация одного операнда

При косвенной адресации к любой ячейке, расположенной в 64К-словном пространстве данных, можно обращаться, используя 16-битный адрес, содержащийся во вспомогательном регистре. C54x DSP имеет восемь 16-битных вспомогательных регистратора (AR0-AR7). Косвенная адресация используется главным образом, когда есть необходимость перебирать последовательно расположенные в памяти ячейки с постоянным шагом.
Когда память адресуется с использованием косвенной адресации, вспомогательный регистр и адрес может быть произвольно изменен уменьшением, увеличением, смещением или индексом. Специальные режимы реализуют циклическую и двоично-инверсную адресацию. При циклической адресации используется регистр размера циклического буфера (BK). Регистр AR0 используется для индексной и двоично-инверсной адресации в дополнение к использованию в качестве указателя ячейки памяти, как и другие вспомогательные регистры.
Косвенная адресация используется, не только для чтения или записи одного 16-битного операнда в одной команде, но также и для обращения к двум расположенным в памяти данных операндам в одной команде. Доступ к двум ячейкам памяти данных включает – чтение двух произвольных ячеек памяти, чтение и запись двух последовательных ячеек памяти и чтение одной ячейки памяти, объединенное с записью в ячейку памяти.
На рис. 3.5 показан формат команды с косвенной адресацией для одного операнда памяти данных (Smem), а в табл. 3.2 – описание битов команды.

15–8

7

6–3

2–0

Код операции

I=1

MOD

ARF

###### Рисунок 3.5 – Формат команды с косвенной адресацией для одного операнда

Таблица 3.2 - Биты команды с косвенной адресацией - один операнд

Бит

Название

Функция

15-8

Код операции

Это 8-битное поле содержит код операции команды.

7

I

I=1, способ адресации, используемый командой - косвенный способ адресации.

6-3

MOD

Это 4-битное поле модификации определяет тип косвенной адресации.

2-0

ARF

Эти 3 бита поля вспомогательного регистра определяют вспомогательный регистр, используемый для адресации. Значение поля ARF зависит от бита совместимости (CMPT): CMPT=0 Стандартный режим. В стандартном режиме ARF всегда определяет вспомогательный регистр, независимо от значения в ARP. ARP не модифицируется. ARP должен быть ноль, когда DSP в этом режиме. CMPT=1 Режим совместимости. В режиме совместимости ARP выбирает вспомогательный регистр, если ARF = 0. Иначе ARF выбирает вспомогательный регистр и значение ARF загружается в ARP после завершения доступа. *AR0 в команде на ассемблере указывает вспомогательный регистр, выбранный ARP в режиме совместимости.

Внимание: В некоторых случаях два операнда данных могут быть выбраны сразу. Это требует команды другого формата.

Косвенная адресация в двухоперандных командах

Адресация двойного операнда памяти данных используется для команд, которые выполняют два чтения или одно чтение и параллельную запись в память (обозначенные двумя вертикальными линиями ||) одновременно. Эти команды - все длиной в одно слово и работают только с косвенным способом адресации. Два операнда памяти данных обозначаются Xmem и Ymem:

- Xmem - операнд чтения с доступом через шину D. Команды сохранения, например STH и STL, используют Xmem как операнд записи.
- Ymem используется как операнд чтения в командах с двойным чтением (обращение через шину C) или как операнд записи в командах с параллельной записью (обращение через шину E).

Если операнд источника и адресата совпадают, в командах с параллельной записью (например, ST||LD), источник читается перед записью адресата. Если команда двойного операнда (например, ADD) указывает на один вспомогательный регистр с различными способами адресации, для адресации используется режим, определенный полем Xmod.
На рис. 3.6 показан формат команды с косвенной адресацией для двух операндов памяти данных. В табл. 3.3 описаны биты команды.

15–8

7 6

5 4

3 2

1 0

Код операции

Xmod

Xar

Ymod

Yar

###### Рисунок 3.6 – Формат команды с косвенной адресацией для двух операндов

Таблица 3.3 - Биты команды с косвенной адресацией - два операнда

Бит

Название

Функция

15-8

Код операции

Это 8-битное поле содержит код операции команды.

7-6

XMOD

Это 2-битное поле модификации определяет тип косвенной адресации при обращении к операнду Xmem

5-4

XAR

Эти 2 бита поля вспомогательного регистра определяют вспомогательный регистр, используемый для адресации операнда Ymem

7-6

YMOD

Это 2-битное поле модификации определяет тип косвенной адресации при обращении к операнду Xmem

5-4

YAR

Эти 2 бита поля вспомогательного регистра определяют вспомогательный регистр, используемый для адресации операнда Ymem

Поля AR и MOD кодируют 4-ре регистра и способа адресации (табл. 3.4).
Таблица 3.4 - Регистры и способы адресации - два операнда

Вспом. регистр | Xar или Yar (Xmod|Ymod) | Синтаксис операнда | Функция | Описание
AR2 | 00 (0) | *ARx | addr = ARx | ARx - адрес памяти данных
AR3 | 01 (1) | *ARx– | addr = ARx ARx = ARx – 1 | После доступа, адрес в ARx уменьшается на 1
AR4 | 10 (2) | *ARx+ | addr = ARx ARx = ARx + 1 | После доступа, адрес в ARx увеличивается на 1
AR5 | 11 (3) | *ARx+0% | addr = ARx ARx=circ(ARx+AR0) | После доступа, AR0 добавляется к ARx циклически

Типы адресуемых данных

Есть два основных типа данных при обращении к памяти в процессорах C54x: 16 бит и 32 бита. Большинство команд может обращаться к 16-битовым данным. Обращение к 32-битовым данным, однако, требует использования специальных команд.
Для доступа к 16-битному операнду слово из 16 битов читается из памяти данных на шину D и записывается в память через шину данных E. Для доступа к 32-битовому операнду используются шины C (старшее слово) и D (младшее слово) для чтения. Однако, поскольку только шина E используется для записи, операция записи (команда DST) выполняется за два цикла.
При доступе к 32 битам первое слово является старшим (MSW), в то время как второе слово – младшим (LSW). Если первое слово по четному адресу, то второе слово - по следующему (большему) адресу. Если первое слово по нечетному адресу, то второе слово - по предыдущему (меньшему) адресу (рис. 3.7).

Аккумулятор A | MSW | LSW

DST A, 1000h

DST A, 1001h

Порядок записи если адрес = 1000h

Порядок записи если адрес = 1001h

1000h

MSW

1000h

LSW

1001h

LSW

1001h

MSW

###### Рисунок 3.7 – Порядок слов в памяти

3.2.3. Способы адресации памяти программ в процессоре
Генератор адреса программы

Память программ содержит коды прикладных программ, таблицы коэффициентов и непосредственные операнды. TMS320C54х DSP может адресовать общее количество 64К слов памяти программ, используя шину адреса программы (PAB). TMS320C5402 имеет дополнительные 4 линии адреса памяти программы, которые обеспечивают внешний доступ к 16-ти страницам по 64К слов.
Логика генерации адреса программы (PAGEN) формирует адрес для обращения к командам, таблицам коэффициентов, непосредственным 16-битным операндам или другой информации, сохраненной в памяти программы и выдает этот адрес на PAB.
PAGEN состоит из пяти регистров (рис. 3.8):

- счетчик программы (PC);
- счетчик повторения (RC);
- счетчик повторения блока (BRC);
- регистр адреса начала повторяемого блока (RSA);
- регистр адреса конца повторяемого блока (REA).

######

###### Рисунок 3.8 – Генератор адреса программы

Процессор C5402 использует один дополнительный регистр, чтобы адресовать расширенную память:

регистр расширения счетчика программы (XPC).

C54x устройства выбирают команды, помещая значение PC на PAB и читая соответствующее содержимое памяти. В то время как содержимое памяти читается, PC увеличивается для следующей выборки. Если последовательность адресов программы изменяется (например, переход, вызов, возврат, прерывание или повторение блока), соответствующий адрес загружается в PC. Команда, адресованная через PAB, загружается в регистр команды (IR).
Чтобы улучшать эффективность некоторых команд, модуль генерации адреса программы используется также для выбора операнда из памяти программы.

Способы адресации памяти программ
В процессорах TMS320C54x можно выделить четыре основных способа адресации памяти программ:

- Автоинкрементная (аппаратное увеличение РС при выборе очередного слова из памяти программ).
- Абсолютная адресация используется в командах переходов и вызовов подпрограмм:
B[D] pmad;
BC[D] pmad, cond;
CALL[D] pmad;
CC[D] pmad, cond.
- Аккумуляторная адресация используется в командах переходов и вызовов подпрограмм (адрес перехода берется из указанного аккумулятора):
BACC[D] src;
CALA[D] src.
- Стековая адресация используется в командах возврата (адрес перехода берется из вершины стека):
RET[D];
RETE[D];
RC[D] cond;

Загрузка счетчика команд РС

Счетчик PC это 16-битовый регистр, который содержит используемый адрес внутренней или внешней памяти программ, когда выбирается команда или 16-разрядный непосредственный операнд или коэффициент из таблицы в памяти программ. Чтобы адресовать память программы, адрес из PC выдается на PAB.
Счетчик PC может быть загружен несколькими путями (табл. 3.5).

Таблица 3.5 - Загрузка адресов в PC

Тип операции

Код, загружаемый в PC

Сброс

PC загружается FF80h

Последовательное выполнение

PC загружается PC + 1

Переход

PC загружается 16-разрядным непосредственным значением находящимся непосредственно после команды перехода

Переход по аккумулятору

PC загружается младшим 16-битным словом аккумулятора А или B

Цикл повторения блока команд

PC загружается адресом начала повторяемого блока (RSA), когда PC + 1 равняется адресу конца повторяемого блока (REA) + 1, при условии, что BRAF = 1

Вызов подпрограммы

PC + 2 помещается в стек и PC загружается 16-разрядным непосредственным значением находящимся непосредственно после команды вызова. Команда возврата выталкивает вершину стека назад в PC, чтобы возвратиться к вызывающей последовательности кода

Вызов подпрограммы по аккумулятору

PC + 1 помещается в стек и PC загружается младшим 16-битным словом аккумулятора А или B. Команда возврата выталкивает вершину стека назад в PC, чтобы возвратиться к вызывающей последовательности кода

Аппаратное или программное прерывание

PC помещена на стек, и PC загружен адресом соответствующего вектора западни. Команда возврата выталкивает вершину стека назад в PC, чтобы возвратиться к последовательности прерывания кода

Возврат из подпрограммы

Команда возврата выталкивает вершину стека в PC, чтобы возвратиться к вызывающей последовательности кода

XPC – 4-х битовый регистр, который выбирает расширенную страницу памяти программ для C5402. Регистр XPC может быть загружен несколькими способами вместе с загрузкой PC (табл. 3.6).
Таблица 3.6 - Загрузка адресов в XPC

Тип операции

Код, загружаемый в PC

Сброс

PC загружается FF80h, XPC загружается 0h

Последовательное выполнение

PC загружается PC + 1, XPC автоматически не увеличивается

Дальний переход

PC загружается битами 15-0 непосредственного значения находящегося непосредственно после команды перехода, XPC загружается битами 7-0 слова команды

Дальний переход по аккумулятору

PC загружается битами 15-0 аккумулятора А или B, XPC загружается битами 23-16 аккумулятора А или B

Дальний вызов подпрограммы

PC + 2 помещается в стек, XPC помещается в стек, PC загружается битами 15-0 непосредственного значения находящегося непосредственно после команды вызова, XPC загружается битами 7-0 слова команды

Дальний вызов подпрограммы по аккумулятору

PC + 1 помещается в стек, XPC помещается в стек, PC и XPC загружаются битами 15-0 и битами 23-16 соответственно, аккумулятора А или B

Дальний возврат

Команда возврата выталкивает вершину стека в XPC и выталкивает следующее значение в PC, чтобы возвратиться к вызывающей последовательности кода

Внимание: XPC не загружается никакими другими командами кроме перечисленных в таблице 3.6.

Оглавление | Программа | Теория| Практика | Контроль знаний | Об авторах
© БГУИР , 2012