Мы завершаем нашу эпопею с переводом фирменной документации Cypress об UDB. Последний выпуск – про адресацию UDB – перед вами.

Предыдущие статьи цикла:

UDB. Что же это такое? Часть 1. Введение. PLD.
UDB. Что же это такое? Часть 2. Datapath.
UDB. Что же это такое? Часть 3. Datapath FIFO.
UDB. Что же это такое? Часть 4. Datapath ALU.
UDB. Что же это такое? Часть 5. Datapath. Полезные мелочи.
UDB. Что же это такое? Часть 6. Модуль управления и статуса.
UDB. Что же это такое? Часть 7. Модуль управления тактированием и сбросом

21.3.5 Адресация UDB (UDB Addressing)


В паре UDB есть три уникальных адресных пространства:

  • 8-битные рабочие регистры – контроллер шины, который имеет доступ только к 8 битам данных за один цикл шины может использовать это адресное пространство для чтения или записи любых рабочих регистров UDB. К ним относятся регистры, с которыми взаимодействуют CPU и DMA во время обычной работы.
  • 16-битные рабочие регистры – 16-битный контроллер шины, например DMA или PSoC 5LP Cortex-M3 могут получать доступ к 16 битам за один цикл шины для обеспечения передачи данных функций, которым требуется 16 бит или больше. Несмотря на то, что это адресное пространство привязано не к той области, к которой привязано 8-битное пространство, оно имеет доступ к тем же регистрам, только к паре одновременно.
  • 8- или 16-битные регистры конфигурации – эти регистры конфигурируют UDB для выполнения функции. После конфигурации регистры обычно устанавливаются в статичное состояние во время работы UDB. Эти регистры сохраняют свое состояние после спящего режима.

Примечание переводчика
Как-то всё сложно сформулировано. По-моему, для первых двух пунктов проще ввести понятие методов адресации с различной разрядностью рабочего регистра. Через 8-разрядный и через 16-разрядный рабочие регистры соответственно. Если вы запутались при чтении этих пунктов, попробуйте рассмотреть текст именно в таком ключе. Разные окна в адресном пространстве ЦП, предоставляющие адресацию одного и того же через рабочие регистры разной разрядности. Вот и всё.

21.3.5.1 Адресное пространство рабочего регистра (Working Register Address Space)


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

Рисунок 21-43 показывает карту регистров одного UDB.

Справа на рисунке 21-43 находится 16-битный адрес, который всегда чётный. В этом случае номер UDB имеет размерность 5 бит, а не 4, из-за четного расположения адресов. Старшие 4 бита по-прежнему задают номер регистра.


Рисунок 21-43. Рабочие регистры UDB.

Доступ к 8-битному рабочему регистру (8-Bit Working Register Access)
В этом режиме доступ ко всем регистрам UDB осуществляется через адреса, выравненные по границе байта. В режиме доступа к 8-битным регистрам, как показано на рисунке 21-44, все байты данных, записанные в UDB, выравненные с младшим байтом шины 16-битного UDB.

В этом режиме доступ в любой момент времени можно получать только к одному байту.


Рисунок 21-44. Доступ к 8-битному рабочему регистру.

Адресное пространство 16-битного рабочего регистра (16-Bit Working Register Address Space)
16-битное адресное пространство, разработанное для эффективного доступа DMA и предоставления программного доступа CPU в процессорах, которые это поддерживают, например, Cortex-M3 в PSoC 5LP. Существует два режима доступа к 16-битным регистрам: режим «по умолчанию» (default) и режим «конкатенации» (concat). Как показано на рисунке 21-45, в режиме по умолчанию обращается к указанному регистру в UDB ‘i’ через младший байт и к тому же регистру в UDB ‘i+1’ через старший байт. Это делает обработку 16-битных данных эффективной в соседних UDB (по порядку адресов), сконфигурированных как 16-битные функции.


Рисунок 21-45. Доступ к 16-битным рабочим регистрам в режиме по умолчанию.

В режиме конкатенации, регистры одного UDB объединяются для формирования 16-битных регистров, как показано на рисунке 21-46. В этом режиме 16-битная шина данных массива UDB должна получить доступ к паре регистров в UDB в формате, показанном на рисунке. Например, при обращении к регистру A0 реально произойдёт доступ к A0 через младший байт и к A1 — через старший.


Рисунок 21-46. Доступ к 16-битному рабочему регистру в режиме конкатенации

Использование DMA ограничено разрядностью 16-битного рабочего регистра. Его недостаточно при работе с функциями больше 16 бит. Это вызвано адресными наложениями, как показано в
таблице 21-25.

Таблицы 21-25. Оптимизированное адресное пространство для 16-битных функций UDB.
Адрес Старший байт записывается в Младший байт записывается в
0 UDB1 UDB0
2 UDB2 UDB1
4 UDB3 UDB2

Когда DMA передает 16 бит на адрес 0, младший и старший байты записываются в UDB0 и UDB1, соответственно. В следующей 16-битной передаче DMA на адрес 2 значение в UDB1 перезаписывается младшим байтом этой передачи.

Чтобы предотвратить проблемы, связанные с такой организацией памяти, рекомендуется для функций, разрядность которых более 16 бит, запускать процесс DMA для области с 8-битными рабочими регистрами.

21.3.5.2 Адресное пространство регистра конфигурации (Configuration Register Address)


Конфигурация выполняется на уровне пар UDB. Пара UDB состоит из двух UDB и связанного с ними трассировочного канала, как показано на рисунке 21-47.


Рисунок 21-47. Адресная схема конфигурации пары UDB.

21.3.5.3 Адресное пространство конфигурации UDB (UDB Configuration Address Space)


Рисунок 21-48 показывает адресную схему конфигурации конкретной UDB. Как можно заметить, данное пространство конфигурации дублируется на обоих UDB в паре. Всего зарезервировано 128 байт (7 бит адресов) для каждой конфигурации UDB, которые разделены на 16-битные отрезки. Стоит заметить, что 16-битный доступ к нечетным границам не поддерживается. Чтение всегда возвращает 16 бит в конфигурационном пространстве, а ненужный байт можно игнорировать.


Рисунок 21-48. Адресное пространство конфигурации UDB.

21.3.5.4 Адресное пространство конфигурации трассировки (Routing Configuration Address Space)


Конфигурация трассировки UDB состоит из встраиваемых бит ОЗУ для управления состоянием переключателями шлюзов, сегментацией и входными/выходными буферами.

21.3.6 Когерентность доступа системной шины (System Bus Access Coherency)


Регистры UDB имеют двойной режим доступа:

  • доступ к системной шине, при котором CPU или DMA читает или записывает в регистр UDB;
  • внутренний доступ UDB, при котором функция UDB обновляет или использует содержимое регистра
.

21.3.6.1 Одновременный доступ к системной шине (Simultaneous System Bus Access)


Таблица ниже содержит список возможных событий одновременного доступа и требуемое поведение.

Таблица 21-26. Одновременный доступ к системной шине.
Регистр Запись из UDB
Запись из шины
Запись из UDB
Чтение из шины
Чтение из UDB
Запись из шины
Чтение из UDB
Чтение из шины
Ax Неопределенный результат Недоступно напрямуюа,b UDB считывает предыдущее значение Шина и UDB считывают текущее значение
Dx
Fx Не поддерживается (UDB и шина должны иметь разнонаправленный доступ) Если используются флаги статуса FIFO, одновременное чтение/запись Не поддерживается (UDB и шины должны иметь разнонаправленный доступ)
ST Недоступно, шина не записывает Шина считывает предыдущее значение Недоступно, UDB не считывает
CTL Недоступно, UDB не записывает UDB считывает предыдущее значение Шина и UDB считывают текущее значение
CNT Неопределенный результат Недоступно напрямуюс
ACTL Недоступно, UDB не записывает
MSK
PER
MC (RO) Недоступно, шина не записывает Недоступно напрямуюd Недоступно, шина не записывает

а. Регистры Ax можно безопасно считывать при помощи функции программного захвата FIFO.
b. В регистры Dx FIFO могут только динамически записывать. При этом режиме прямое чтение регистров Dx недоступно.
c. Регистр CNT можно безопасно считывать, только когда он отключен. Альтернативой для динамического чтения значения CNT является трассировка выхода на регистр SC (в прозрачном режиме).
d. Биты регистра MC могут быть трассированы на входы регистра статуса (в прозрачном режиме) для безопасного чтения.

21.3.6.2 Когерентный доступ к аккумулятору (Атомарные операции чтения и записи) (Coherent Accumulator Access (Atomic Reads and Writes))


Аккумуляторы UDB являются первичной целью обработки данных. Следовательно, чтение этих регистров напрямую во время обычной работы дает неопределенный результат, как показано в таблице выше. Однако присутствует встроенная поддержка атомарных чтений в виде программного захвата, реализованного на связанных в цепочку блоках. В такой модели использования, чтение последнего значащего аккумулятора переносит данные со всех блоков, связанных в цепочку на связанные с ними FIFO. Атомарная запись в FIFO может быть реализована программно. Отдельные операции записи могут быть выполнены на входе FIFO, а затем сигнал статуса FIFO, в который была выполнена последняя запись, может быть проброшен на все связанные блоки, в то время как данные FIFO будут переданы на регистры Dx или Ax.

Послесловие от переводчика


Этот цикл переводов был сделан как ответ на комментарий к статье, где было предложено сначала кратко рассказать, что такое UDB. Теперь видно, что для краткого ответа надо было бы процитировать хотя бы половину из приведённых здесь материалов, иначе ответ всё равно получился бы неполным. Но теперь все материалы переведены и собраны. Задача выполнена.

Пока шла работа, мы также обратили внимание ещё на один интересный блок PSoC, который слабо известен кому-либо, но таит в себе огромную мощь. Это DFB, Digital Filter Block. Правда, бросаться в перевод боязно. Из перевода про UDB видно, что одной документации ох как не хватает, нужна практика. Беда в том, что готовых примеров по UDB пусть мало, но они есть. Найти что-то путное из примеров по DFB пока не удалось (сама фирма Cypress сделала цифровой фильтр в виде чёрного ящика, он работает, но как — пока не ясно). Перевод без примеров не будет иметь смысла. Поэтому, пользуясь случаем, обращаем внимание читателей на этот блок. Возможно, кто-то в комментариях даст ссылки на хорошие примеры. Если удастся с этим блоком разобраться, можно будет сделать цикл переводов и практических статей и по нему. А пока у нас всё.

Комментарии (0)