Использование процессов Blackfin для обработки видеоизображений
Введение
В этой статье рассматриваются проблемы, связанные с обеспечением максимальной производительности процессоров ADSP в приложениях видеообработки:
- Оптимизация работы с памятью:
- работа с внутренней памятью;
- работа с памятью SDRAM;
- управление доступом к внешним данным.
- Режимы DMA для захвата и воспроизведения видео через PPI:
- входные режимы ITU-R-656;
- вывод видеокадров ITU-R-656;
- приоритет DMA и регистр управления трафиком.
Оптимизация работы с памятью
Архитектура процессоров Blackfin поддерживает иерархическую память, что позволяет программисту иметь доступ к быстрой памяти меньшего объема для размещения там часто исполняющегося кода, и к памяти большего объема для буферов данных, относящихся к видеоприложениям. Память процессоров Blackfin имеет унифицированное адресное пространство, куда входит внутренняя память первого уровня L1 (а в случае процессора ADSP-BF561 также и память второго уровня L2), синхронное динамическое ОЗУ (SDRAM) и пространство асинхронной памяти.
Работа с внутренней памятью
Память L1 работает на частоте ядра и, таким образом, имеет наименьшее время доступа по сравнению с другими областями памяти. Процессоры Blackfin® имеют отдельную память L1 для данных и программ.
Статическая (SRAM) память данных L1 состоит из однопортовых подсекций (банков); каждый такой банк содержит 4 кбайт памяти. Результатом такой организации является мультипортовое поведение при одновременном обращении к разным банкам или к одному четному и одному нечетному 32-битному слову внутри одного и того же 4-кбайтного банка.
На рис. 1 показано неоптимизированное размещение различных буферов в памяти. Каждый прямоугольный блок на рисунке представляет 4-кбайтный банк внутренней памяти данных. Здесь внутренние шины данных используются неэффективно, поскольку процессор не может извлечь два слова данных одновременно.

Рис. 2 показывает оптимизированное распределение памяти среди 4-кбайтных банков памяти данных. Такое распределение памяти допускает одновременный доступ к ней двух устройств генерации адреса (DAG) и контроллера DMA, за счет чего обеспечивается максимальная пропускная способность шин данных.

В приложениях кодирования и декодирования видео оптимизированное распределение памяти уменьшает задержки доступа к памяти данных L1, связанные с одновременным обращением ядра и контроллера DMA.
Работа с памятью SDRAM
Контроллер SDRAM (SDC) позволяет процессору обмениваться данными с синхронной динамической памятью (SDRAM). Он способен поддерживать соединение с четырьмя внутренними банками SDRAM. Соответственно, в конечных приложениях, размещая буферы данных в разных внутренних банках, можно минимизировать задержки доступа ядра/DMA к данным. SDC может отслеживать по одной строке в каждом из четырех возможных внутренних банков. То есть переключение между четырьмя внутренними банками SDRAM будет осуществляться без каких-либо дополнительных задержек.
В приложениях обработки изображений видеокадр вводится в память при помощи PPI DMA. Из-за существенных размеров кадра вводимого изображения (например, форматы VGA, D-1 NTSC, D-1 PAL, 4CIF, 16CIF), каждый кадр должен быть захвачен в SDRAM через PPI с использованием канала DMA. Алгоритм может считывать точки блок за блоком из SDRAM и обрабатывать каждый блок по мере его поступления. Каждый последующий кадр PPI захватывает в другой буфер, пока ядро занято обработкой предыдущего. Поскольку ядро и контроллер DMA обращаются к SDRAM памяти одновременно, то для минимизации задержек доступа необходимо соответствующим образом размещать программный код, видеокадры и другие буферы в SDRAM.
Рис. 3 иллюстрирует неоптимальное распределение объектов по внутренним банкам памяти SDRAM. На рис. 3 программный код и один из буферов видеокадра помещены в нулевой внутренний банк SDRAM. Такой способ размещения порождает дополнительую задержку, потому что циклы выборки строки SDRAM происходят почти каждый системный такт. Причина — в чередовании обращений со стороны ядра (извлечение инструкций) и DMA к разным страницам одного и того же внутреннего банка SDRAM. Эта задержка может привести к ошибке переполнения (в случае захвата изображения) или недополнения (в случае вывода изображения) аппаратной очереди (FIFO) PPI. Для увеличения пропускной способности при доступе к внешней памяти необходимо размещать видео/эталонный буферы так, чтобы только один канал DMA обращался к банку SDRAM в любое заданное время.

Рис. 4 иллюстрирует оптимизированное размещение объектов по внутренним банкам SDRAM. В этом примере распределения памяти в любой момент времени или ядро, или контроллер DMA осуществляют доступ в конкретный внутренний банк SDRAM памяти. Таким образом, задержки минимизированы, поскольку циклы выборки строк разбросаны среди сотен обращений к SDRAM.

Управление доступом к внешним данным
Обращения к внешней памяти производятся более эффективно, если передача осуществляется в одном и том же направлении. При доступе к памяти SDRAM, группирование однонаправленных пересылок (то есть избежание частой смены направления) может снизить задержки передачи данных. Частые смены направлений в контроллере DMA могут привести к увеличению задержек из-за циклов записи, следующих непосредственно за чтением.
Режимы DMA для захвата и воспроизведения видео через PPI
Контроллер DMA процессора Blackfin® способен эффективно передавать данные между памятью и периферией. Разработчик имеет возможность выбрать соответствующие режимы DMA (например: режим остановки, автобуфер, или дескрипторные цепочки DMA) для передачи данных. Также, программист может выбрать приоритет DMA для конкретной периферии путем использования соответствующего канала DMA.
Порт PPI процессоров Blackfin® поддерживает режим промышленного стандарта ITU-R-656, а также режим ввода/вывода общего назначения с различными опциями внутренней и внешней синхронизации кадров. Целостное изображение может быть захвачено или отображено при помощи PPI в сочетании с соответствующим режимом DMA. Программисту следует выбрать конкретный режим DMA таким образом, чтобы изображение могло обрабатываться в реальном времени без потери кадров.
В приложениях кодирования изображения порт PPI может быть запрограммирован на работу в режиме дескрипторных цепочек DMA — для захвата кадров в два или более буферов. Ядро может обрабатывать один буфер, пока DMA заполняет другой буфер. Вы должны убедиться, что ядро и контроллер DMA не обращаются в один и тот же банк SDRAM, как уже обсуждалось выше.

В приложениях кодирования и декодирования изображения количество инструкций, выполняемых процессором в единицу времени (выраженное в MIPS) не является постоянным. Значение показателя MIPS зависит от коэффициента сжатия, содержания захватываемого изображения и т. д. В приложениях декодирования изображения, если декодируемый кадр еще не готов, PPI может передать последний декодированный кадр повторно. Чтобы реализовать такую возможность, порт PPI может быть запрограммирован на использование в режиме DMA с остановкой. Этот режим предоставляет больший контроль над данными, чем это необходимо для простого вывода изображения.
В режиме DMA с остановкой прерывание генерируется после каждого блока пересылки, а канал DMA при этом переводится в состояние паузы.
Таким образом, если следующий кадр еще не готов для отображения, предыдущий кадр может быть передан повторно. Это может быть сделано внутри функции обработки прерывания от PPI DMA.
Входные режимы ITU-R-656
Порт PPI поддерживает три входных режима для данных в формате ITU-R-656:
- Режим «Поле целиком»
- Режим «Активное видео»
- Режим «Только вертикальное гашение»
В приложениях кодирования изображения видеокадр можно вводить в режиме «Активное видео», так что будут захватываться только поля 1 и 2. Хотя ITU-R-656 имеет чересстрочный (interlaced) формат, алгоритмы могут требовать, чтобы видеоданные были доступны в прогрессивном (de-interlaced) формате. Используя канал Memory DMA (MDMA), программист может объединить вместе два поля видеокадра.

Для минимизации накладных расходов процессора на объединение полей кадра PPI может осуществлять захват с пропуском одной строки после ввода каждой строки активного видео (как показано на рис. 7). В этом случае MDMA сможет добавить поле 2 к полю 1, заполняя пустые строки.

Рис. 8 иллюстрирует объединение видеополей с использованием механизма MDMA. Данные поля 2 должны быть объединены с данными поля 1. Таким образом, пропущенные строки заменяются данными поля 2. Здесь адрес источника MDMA должен содержать адрес первой строки поля 2, а адрес назначения MDMA — первой пропущенной строки. Значения регистров MDMAx_Y_MODIFY для обоих портов MDMA (источника и назначения) должны быть сконфигурированы для пропуска одной строки.

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

Приоритеты каналов DMA и регистр управления трафиком
В процессорах Blackfin вся периферия способна работать в режиме DMA. По умолчанию каждое периферийное устройство связано с конкретным каналом DMA, который имеет свой собственный приоритет доступа к памяти. Каналы DMA с меньшими номерами имеют больший приоритет. Программисты могут назначать конкретный канал DMA периферийному устройству и, таким образом, изменить для него приоритет DMA.
По умолчанию PPI использует канал с более высоким приоритетом, чем другие периферийные устройства. Если в приложении имеется несколько работающих параллельно потоков DMA, периферийные устройства с более высоким уровнем трафика или требованием готовности могут быть назначены на каналы DMA с меньшим номером (то есть большим приоритетом) при помощи регистра DMA_PERIPHERAL_MAP.
С помощью регистра управления каналом DMA программист может влиять на направление передачи данных по внутренним шинам DMA (DAB, DCB и DEB). Управление трафиком обеспечивает возможность влияния на то, как часто может меняться направление передачи по шинам данных, за счет автоматической группировки в серии однонаправленных пересылок.
Шины DAB, DCB и DEB предоставляют периферийным устройствам, работающим в режиме DMA, средства доступа к внутренней и внешней памяти при небольшом снижении пропускной способности между ядром и памятью или даже практически без него.
Контроллер DMA использует шину DAB для доступа к DMA-совместимым периферийным устройствам. Шина DCB используется для доступа к внутренней памяти. Аналогично, шина DEB используется для доступа к внешней памяти через EBIU (модуль интерфейса внешней шины).
С помощью регистра управления каналом DMA программист имеет возможность влиять на направление передачи данных по каждой шине независимо, группируя однонаправленные передачи в серии.
На рис. 10 показаны поля регистра DMA_TC_PER. Например, рассмотрим приложение, в котором задействован MDMA вместе с PPI DMA и используется регистр управления трафиком. Если PPI DMA и MDMA одновременно требуется шина DEB (при этом направление передачи MDMA «по трафику» а PPI DMA — «против трафика»), MDMA первым получит доступ к шине DEB, даже несмотря на более высокий приоритет PPI DMA. Поскольку PPI DMA запрос осуществляется «против трафика» шины DEB, эффективный номер приоритета PPI DMA увеличится на 16, и в результате MDMA получает доступ к шине DEB. PPI DMA получит доступ к шине DEB, когда обнулится соответствующий счетчик в регистре управления трафиком (или когда трафик прекратится либо поменяет направление сам по себе).

Для более подробной информации о регистре управления трафиком DMA обращайтесь к аппаратному руководству по ADSP-BF533 и ADSP-BF561.
Шинный арбитраж
При доступе к внутренней памяти L1 приоритет DMA выше, чем у ядра. По умолчанию, при доступе к внешней памяти, ядро имеет приоритет выше, чем DMA. При установке бита CDPRIO в регистре EBIU_AMGCTL, все транзакции DEB к внешней шине имеют приоритет перед обращениями ядра к внешней памяти. Программисты могут использовать этот бит, исходя из конкретных требований их приложения.
DMA и когерентность кэша
В приложении с включенным кэшем, если ядро и DMA обращаются к совместно используемому буферу, следует обеспечить когерентность кэша за счет инвалидации (invalidating)* данных в разделяемом буфере. В процессорах Blackfin содержимое кэша может быть инвалидированно при помощи системных регистров, отображенных в память. Кроме того, средства разработки VisualDSP++ 4.0 предоставляют библиотечные функции (вызываемые из C кода) для инвалидации конкретных банков кэша. Программное обеспечение может производить инвалидацию кэша каждый раз перед доступом к совместно используемому volatile буферу.
* Инвалидация — процесс придания данным, находящимся в кэше статуса недействительных. Фактически речь идет об удалении данных из кэша.

Заключение
Учитывая различные факторы, обсуждаемые в данной статье, вы можете обеспечить максимальную производительность процессоров Blackfin® в приложениях обработки видео изображения.
- ADSP-BF533 Blackfin Processor Hardware Reference. Revision 3.1 May 2005. Analog Devices, Inc.
- ADSP-BF561 Blackfin Processor Hardware Reference. Revision 1.0, July 2005. Analog Devices, Inc.