- •1. Принципы и базовые алгоритмы обработки сигналов в цифровых системах. Требования к аппаратной базе для выполнения базовых операций цос.
- •3. Форматы представления данных в сигнальных процессорах. Сравнительные особенности процессоров, ориентированных на обработку фз- и пз-данных. Оценка необходимой разрядности процессора.
- •1. Данные с фиксированной запятой (Fixed-Point Numbers)
- •2. Данные с плавающей запятой (Floating-Point Numbers)
- •4. Этапы и средства разработки и отладки по для процессоров цос. Критерии выбора языка программирования и средств разработки по
- •6. Особенности программной организации ввода-обработки-вывода данных в системах цос, работающих в реальном времени. Работа по прерываниям. Использование буферов.
- •7. Методики оптимизации кода для risc-процессоров
- •Inline- функции
- •8. Dsp семейства adsp-2106x. Основные характеристики и особенности архитектуры.
- •9. Карта памяти adsp-2106x. Пространства внутренней памяти, памяти многопроцессорной системы и внешней памяти. Пространство памяти iop-регистров.
- •10. Физическая организация внутренней памяти. Блоки памяти. Возможные виды конфликтов при обращении к внутренней памяти и способы их устранения. Адресация нормальных и коротких слов.
- •12. Доступ к памяти в программе. Организация dag. Основные возможности. Особенности программирования регистров dag. Кольцевые буферы.
- •13. Системные регистры: назначение и работа с ними. Устройство обмена между шинами (px-регистры).
- •14. Общие принципы работы вычислительных блоков adsp-21ххх. Особенности организации вычислений с пз- и фз-данными. Регистровый файл. Поддерживаемые типы данных и их идентификация в программе.
- •15. Теневые регистры. Регистры флагов. Понятие "липких" флагов. Флаги аккумулирующих сравнений.
- •16. Описание и функции алу. Флаги состояния и режимы работы алу. Мас. Функционирование мас. Особенности выполнения операций округления и насыщения при работе с фз-операндами. Флаги состояния мас.
- •17. Сдвигатель. Функционирование сдвигателя. Выделение и депонирование битовых полей. Флаги состояния сдвигателя. Организация многофункциональных вычислений. Ограничения.
- •19. Организация циклов. Ограничения при организации циклов. Циклы не по счетчику. Достоинства и недостатки аппаратной поддержки циклов.
- •20. Кэш инструкций. Структура и функционирование. Возможности управления обновлением кэша. Примеры повышения/понижения эффективности выполнения кода с учетом работы кэша.
- •21. Обработка прерываний: общая последовательность действий. Таблица прерываний. Маскирование прерываний. Регистры, программного секвенсора, используемые при обработке прерываний.
- •22. Отличия работы процессора при разрешенных и запрещенных вложенных прерываниях.
- •23. Организация работы с таймером. Программные прерывания. Внешние прерывания.
- •24. Понятие и назначение dma-пересылок в adsp-2106x. Направления пересылок. Каналы dma. Принципы функционирования dma-контроллера adsp-2106x. Генерация прерываний dma-контроллером.
- •26. Цепочечные dma-пересылки в adsp-2106x. Tcb-блоки. Инициирование и завершение цепочечных dma-пересылок. Контроль состояния цепочечной dma-пересылки
- •27. Порты sharc-процессоров. Реализуемые виды интерфейсов. Организация взаимодействия между процессорным ядром и портами при вводе/выводе данных.
- •29. Архитектура и принципы функционирования линк-портов (звеньевых портов) adsp-2106x. Регистры управления работой линк-портов adsp-2106x. Связь между линк-буферами и линк-портами.
- •30. Организация взаимодействия между процессорами по выделенным каналом через линк-порты. Регистр lsrq и его назначение. Идея алгоритма "передачи маркера".
- •31. Механизм арбитража внешней шины. Схемы приоритетов. Приоритетный доступ процессорного ядра.
- •32. Операции вещательной записи. Блокировка шины. Использование "зеркальных" семафоров. Межпроцессорные сообщения и вектор прерывания virpt.
- •33. Отличительные особенности компилятора cc21k. Поддерживаемые типы данных и их реализация.
- •2.1. Общие сведения
- •2.2. Поддерживаемые типы данных
- •34. Расширения языка с. Ассемблерные вставки – использование регистров. Поддержка пространств памяти данных памяти команд. Доступ к круговым буферам.
- •2.3.1. Поддержка inline-функций
- •2.3.2. Ассемблерные вставки
- •2.3.3. Поддержка пространств памяти данных и памяти команд
- •2.3.4. Доступ к круговым буферам
- •2.4.1. Использование памяти
- •2.4.2. Регистры компилятора
- •36. Работа со стеком при вызове процедур в рамках rte. Передача и возврат параметров. Взаимодействие программ на с и ассемблере
- •2.4.4. Передача параметров в функции и возврат значений
- •2.5. Взаимодействие подпрограмм на с и ассемблере
- •2.5.1. Описания имен и области их видимости
- •2.5.2. Макросы для работы со стеком при вызове и возврате из функций на ассемблере
- •2.5.3. Вызов подпрограммы на ассемблере из программы на с
- •2.5.4. Вызов подпрограммы на с из подпрограммы на ассемблере
- •37. Разработка обработчиков прерываний. Диспетчер прерываний. Классификация обработчиков прерываний по "быстродействию" и накладным расходам.
6. Особенности программной организации ввода-обработки-вывода данных в системах цос, работающих в реальном времени. Работа по прерываниям. Использование буферов.
Рассматривая применение операционных систем в ЦОС-приложениях, необходимо помнить три очень важных момента: ограниченность ресурсов встроенной системы; необходимость минимизации временных накладных расходов; система должна быть предсказуемой.
В системе ЦОС обработка очередного отсчета (группы отсчетов) сигнала и переход к обработке следующего отсчета (группе отсчетов) должны происходить строго в соответствии с частотой дискретизации сигнала (периодом между поступлением отсчетов на входной порт процессора). Это значит, что несмотря на то, что какой-то отсчет или группа отсчетов в силу своих параметров и особенностей алгоритма может быть обработана быстрее, следующий отсчет должен быть "затребован" (прочитан из входного порта) не раньше ожидаемого времени его поступления. То же самое можно сказать и о выводе сформированных/обработанных значений в выходной порт.
В большинстве приложений ЦОС обрабатываемый сигнал рассматривается как бесконечно продолжающийся во времени. Поэтому хранение такого сигнала в вычислительном устройстве, имеющем ограниченный размер памяти в принципе невозможно. К счастью, практически всегда для реализации алгоритма обработки сигнала достаточно иметь какое-то определенное количество последних входных отсчетов (например, нерекурсивный фильтр), а иногда и выходных отсчетов (рекурсивный фильтр).
Как нельзя лучше для хранения последних отсчетов сигнала подходит такая структура данных, как кольцевой буфер, поддерживаемый аппаратными возможностями всех современных DSP-процессоров. Он позволяет эффективно организовать (рис.9):
- обновление буфера, при этом последний записываемый в буфер отсчет X(i) "затирает" самый "старый" отсчет X(i-N) (для буфера длиной N) и в буфере остаются N последних отсчетов;
Пример 1. Организация буферов при поэлементном формировании результатов обработки. В первом примере рассмотрим простейший нерекурсивный фильтр, реализуемый как сумма поэлементных произведений последних N отсчетов входного сигнала на N коэффициентов фильтра. Каждый раз при поступлении нового отсчета сигнала можно выполнять обработку N последних отсчетов и формировать очередной отсчет выходного сигнала.
Этапы выполнения итерационной процедуры обработки данных можно записать следующим образом (на рисунке ниже):
1. По таймеру или сигналу от внешнего устройства вызывается обработчик прерывания, который выводит в выходной порт сформированный на предыдущей итерации выходной отсчет и переносит из входного порта в приемный буфер новый отсчет входного сигнала.
2. Обработчик вызывает процедуру вычисления, в которой выполняется обход N элементов буфера входного сигнала (и соответствующий обход буфера с коэффициентами фильтра) и формируется очередной отсчет выходной сигнала.
3. Работа обработчика завершается, процессор переходит в цикл ожидания следующего прерывания.
Следует обратить внимание на то, что вывод сформированных отсчетов всегда отстает от ввода отсчетов исходного сигнала. При программной реализации алгоритма одним из ключевых моментов является верхняя оценка частоты дискретизации входного сигнала, для которой выполняется корректная обработка отсчетов на данном процессоре.
Рассмотрим пример вычисления оценки предельной частоты дискретизации входного сигнала для приведенной в данном разделе схемы поэлементной обработки.
Для реализации системы ЦОС выбран процессор с тактовой частотой 100МГц (длительность одного процессорного такта – 10нс). Пусть длительность выполнения собственно программной реализации алгоритма обработки (включая переход на обработчик прерывания, выполнения вычислений и возврат из обработчика с учетом некоторых потерь на переходы и т.п.) составляет, например 400 тактов. Тогда интервал между поступлениями последовательных отсчетов входного сигнала не может быть меньше 400 тактов = 4 мкс. Находя обратную величину от этого интервала, получаем предельную скорость поступления входных отсчетов – 250000 отсчетов/с = 250 КГц – это и есть предельно допустимая частота дискретизации входного сигнала.
Организация хранения и доступа к данным для примера 1
Пример 2. Организация буферов при поблочной обработке входных данных. Во втором примере рассмотрим организацию буферов ввода/вывода для реализации алгоритма, который последовательно обрабатывает непересекающиеся фрагменты из N последовательных отсчетов сигнала, например, при выполнении преобразования Фурье.
Этапы выполнения итерационной процедуры обработки данных можно записать следующим образом (на рисунке ниже):
1. По таймеру или сигналу от внешнего устройства вызывается обработчик прерывания, который выводит в выходной порт очередной выходной отсчет из передающего буфера, а также переносит из входного порта в приемный буфер новый отсчет входного сигнала. Если приемный буфер полон (произошел круговой "заворот" указателя), генерируется специальное прерывание переполнения буфера. Работа обработчика прерывания таймера завершается.
2. Если произошло прерывание по переполнению приемного буфера, вызывается соответствующий обработчик, который переносит данные их приемного буфера во входной буфер и из выходного буфера в передающий буфер.
3. Выполняется обработка данных. Чтение данных в процедуре обработки осуществляется из входного буфера, а запись результатов – в выходной буфер.
4. По завершении обработки фрагмента работа обработчика прерывания завершается, процессор переходит в цикл ожидания следующего прерывания.
Для обеспечения работоспособности схемы приоритет обработчика прерывания от таймера должен быть выше приоритета обработчика прерывания по переполнению кругового буфера, поскольку во время обработки фрагмента сигнала (и даже, возможно, во время переноса данных из буфера ввода во внутренний приемный буфер) прием/выдача очередных отсчетов должны продолжаться. Это означает, что время работы процедуры обработки следует увеличить на время выполнения обработчика прерывания от таймера, умноженного на количество отсчетов в одном фрагменте данных.
Сигнал генерации прерывания по переполнению кругового буфера обычно можно "повесить" на один из указателей, например, на указатель записи данных во входной буфер. Также можно отметить, что копирование между буферами не обязательно должно завершиться до поступления первого отсчета следующего фрагмента. Главное – чтобы приемный буфер освобождался быстрее, чем будет заполняться новым фрагментом.
Следует обратить внимание на то, что вывод сформированных отсчетов "отстает" от ввода отсчетов исходного сигнала на время, равное длительности 2-х фрагментов сигнала, т.е. задержка будет равна длительности 2N отсчетов.
Упростить рассмотренную процедуру в большинстве случаев можно путем использования обмена указателей на приемный и входной буферы, как показано на рисунке ниже. Повышение производительности соответствует разнице в трудоемкости переноса данных из одного буфера в другой и перестановкой указателей (особенно актуально для буферов больших размеров).
Справедливости ради следует заметить, что большинство современных процессоров обладают возможностями обмена блоками данных между портами ввода/вывода и внутренней памятью процессора посредством DMA-контроллера, т.е. без "отвлечения" процессора от выполнения "основных" вычислений.
Рис.12. Буферизация ввода/вывода данных с использованием указателей
