Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AiPSP_ekzamen_main.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

12. Доступ к памяти в программе. Организация dag. Основные возможности. Особенности программирования регистров dag. Кольцевые буферы.

Генераторы адреса данных (DAGs, Data Address Generators) формируют адреса для пересылок данных в память и из памяти. Формируя адреса, генераторы адреса данных позволяют программам осуществлять косвенное обращение к памяти, используя вместо абсолютного адреса регистры DAG.

Архитектура DAG поддерживает несколько функций, минимизирующих непроизводительные затраты в процедурах доступа к данным. Эти функции включают:

  • Выдача адреса – обеспечивается адрес при доступе к данным.

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

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

  • Модификация адреса – осуществляется инкрементирование или декрементирование адреса, сохраняемого в регистр без выполнения пересылки данных.

  • Бит-реверсная адресация – при пересылке данных обеспечивается бит-реверсный адрес; реверсирование адреса, сохраняемого в регистр, не выполняется.

Генератор адреса данных 1 (DAG1) генерирует 32_разрядные адреса по шине адреса памяти данных (DM). Генератор адреса данных 2 (DAG2) генерирует 24_ разрядные адреса по шине адреса памяти программы (PM). Генераторы также поддерживают некоторые функции, обычно используемые в алгоритмах цифровой обработки сигналов. Оба генератора поддерживают циклические буферы данных. Также оба генератора выполняют битреверсные операции, в результате которых биты адреса выводятся в обратном порядке.

Подсистема DAG включает два арифметических устройства DAG и следующие регистры.

  • Индексные регистры, I. Беззнаковые 32-разрядные индексные регистры являются указателями на адрес в памяти. Например, при выполнении команды R3=[I0] в регистр R3 загружается значение, расположенное в ячейке памяти, на которую указывает регистр I0. Индексные регистры могут использоваться при 16- и 32-разрядных обращениях к памяти.

  • Регистры модификации, М. Знаковые 32-разрядные регистры модификации обеспечивают инкремент или шаг, с которым индексный регистр постмодифицируется при пересылке регистра. Например, команда R0=[I0++ M1] приводит к тому, что DAG:

    • выдает адрес в регистре I0;

    • загружает в R0 содержимое ячейки памяти, на которую указывает регистр I0;

    • изменяет содержимое регистра I0 на величину, содержащуюся в регистре М0.

  • Регистры длины и базового адреса, B и L. Беззнаковые 32-разрядные регистры длины и базового адреса определяют начальный адрес и диапазон адресов циклического буфера. Каждая пара регистров B и L всегда используется совместно с соответствующим I-регистром. Например, I3, B3,L3.

  • Регистры указателей, P, FP (указатель кадра), USP (указатель пользовательского тека) и SP (указатель стека). 32-разрядные регистры указателей являются указателями на адреса в памяти. Пример: при выполнении команды R3=[P0] в регистр R3 загружается значение, содержащееся в ячейке памяти, на которую указывает регистр Р0.

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

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

B0_B7 B8_B15

I0_I7 I8_I15

M0_M7 M8_M15

L0_L7 L8_L15

Не следует полагать, что L-регистры автоматически инициализируются нулевым значением при линейной адресации. После сброса процессора I-, L-, M- и B-регистры содержат случайные значения. Для каждого используемого I-регистра программа должна инициализировать соответствующий L-регистр нулевым значением при линейной адресаци или значением длины буфера при адресации циклических буферов.

Возможности регистров DAG:

  1. Пред- и пост- модификация регистра указателя (также можно без доступа к памяти, указав конкретное значение)

  1. Бит-реверсная адресация. Реверсирование битов адреса может осуществляться двумя способами:

1) с помощью инструкции BITREV над любым I-регистром DAG:

I0 = 0x80400000;

BITREV (I4, 7); // I4 <= 0xE0000201

2) в режиме автоматического реверсирования адреса (только для регистров I0 и I8):

I0 = 0x80400000;

R1 = DM(I0,3); // DMA-шина <= 0x201, I0 <= 0x80400003

  1. Кольцевые буферы

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

При адресации циклического буфера регистры М и I должны использоваться в операциях постмодификации (но не предмодификации), например:

F1=DM(I0,M0); операция постмодификации адреса для циклического буфера,

F1=DM(M0,I0); операция предмодификации.

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

При осуществлении первого обращения с постмодификацией с использованием регистра I, DAG выводит значение регистра I на шину адреса и затем модифицирует его, добавляя содержимое определенного регистра М или непосредственное значение. Если измененное значение попадает в диапазон адресов буфера, то оно записывается обратно в регистр I. Если значение выходит за диапазон адресов буфера, то сначала из этого значения вычитается значение регистра L (или, если модификатор отрицательный, прибавляется).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]