
- •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. Разработка обработчиков прерываний. Диспетчер прерываний. Классификация обработчиков прерываний по "быстродействию" и накладным расходам.
4. Этапы и средства разработки и отладки по для процессоров цос. Критерии выбора языка программирования и средств разработки по
Разработка
Набор средств разработки программного обеспечения обычно состоит из компилятора языка С или С++, ассемблера, компоновщика, сплиттера, загрузчика, средств отладки (симулятора и эмулятора), библиотеки утилит.
Процесс разработки ПО начинается с определения объектной аппаратуры системы: задаются конфигурация системы, параметры доступа к памяти и размещение в ней сегментов, порты ввода/вывода.
Генерация кода начинается с написания исходных файлов на языке Си или Ассемблера, каждый файл ассемблируется отдельно в объектный файл, содержащий машинные инструкции. Используется модульный принцип разработки, что делает более эффективной модификацию и позволяет использовать библиотечные функции.
Отдельные файлы затем компонуются вместе для формирования программы. Компоновщик определяет расположение сегментов кода и данных. Неперемещаемые сегменты размещаются по определенным адресам памяти с необходимыми атрибутами. Далее компоновщик генерирует файл с расширением "exe", содержащий "карту памяти", который может быть загружен в симулятор или эмулятор для тестирования.
Полученный исполняемый файл должен быть загружен в память процессора (или внешнюю память) и выполнен. Для этого используется небольшая специальная программа – "загрузчик", который выполняет начальную загрузку инструкций программы из внешнего ПЗУ и запись их во внутреннюю память процессора по определенным адресам.
Если программный код системы не должен загружаться во внутреннюю память процессора, а должен храниться и выполняться из внешней памяти, то вместо загрузчика следует использовать утилиту "сплиттер", которая по карте исполняемого файла генерирует файл одного из промышленных стандартов для программатора ПЗУ.
Библиотекарь – это утилита, которая группирует объектные файлы вместе для получения библиотечных файлов.
Для автоматизации процесса компиляции, ассемблирования, компоновки, генерации могут использоваться MAKE-файлы или файлы сценариев (scripts), которые содержат последовательность вызовов системных утилит с задаваемыми ключами, необходимые действия в зависимости от результатов, например, компиляции (есть ошибки или нет).
Отладка
После того, как программный файл получен, начинается стадия отладки программы.
Симулятор – средство отладки программ, моделирующее устройство процессора, память, обмен данными с устройствами ввода/вывода посредством использования файлов данных. Он программно выполняет программу так же, как и процессор в действительности, что позволяет отлаживать систему и анализировать производительность.
Далее можно использовать эмулятор в аппаратном прототипе системы для тестирования аппаратных схем, синхронизации и выполнения программы в реальном времени. Можно управлять ходом выполнения программы (точки останова, трассировка памяти и т.д.).
Аппаратные средства отладки для процессоров TMS и ADSP включают в себя следующие аппаратные схемы:
- начальный набор разработчика: плата с ЦСП, кодек, АЦП/ЦАП, микросхемы внешней памяти, средства анализа выполнения программ. Содержит неполную систему команд, усеченная версия IDE, используется для обучения.
- отладочный модуль: плата, сходная с платой из начального набора разработчика, но позволяющая организовать интерфейс с хост-процессором в реальном масштабе времени через PCI- или EISA-шину. Предоставляет широкие возможности отладки.
- внутрисхемные эмуляторы – используются как промежуточное звено между ПК и конечной схемой с ЦСП для отладки приложений в конечной системе.
Критерии выбора языка программирования и средств разработки ПО
В качестве языков программирования для систем ЦОС обычно используются С и Ассемблер.
Программы на Ассемблере отвечают требованиям максимально эффективной реализации алгоритма с учетом возможностей параллельной обработки и других особенностей архитектуры конкретного процессора, однако обладают ддлительным сроком разработки и сложной отладкой.
Языки высокого уровня типа С зачастую не очень эффективны для описания алгоритмов ЦОС. Для повышения эффективности используются оптимизированные компиляторы.
Однако С лучше подходит для реализации сложных алгоритмов, Ассемблер для более простых. Выбор также зависит от требований максимальной скорости функционирования процессора, количества разработчиков (много – Си / один – Ассемблер), что важнее: стоимость системы (Ассемблер) или стоимость разработки (Си), опыт работы, имеющиеся средства разработки программного обеспечения, поддержка производителей ЦСП.
Также самый простой и быстрый путь - использование среды Matlab, для которой характерны простота, наглядность, наличие инструментов для моделирования процессов обработки в масштабе времени близком к реальному (Simulink), однако это требует больших расходов и итоговый код отличается сравнительно низкой эффективностью.
5. Способы организации ввода/вывода данных при взаимодействии DSP-процессора с внешними устройствами в системе ЦОС. Ввод/вывод под управлением ядра, по прерываниям, с использованием DMA-пересылок. Достоинства и недостатки каждого из способов.
Процессор цифровой обработки сигналов должен содержать средства для взаимодействия как с периферийными устройствами, обеспечивающими ввод/вывод и преобразование этих сигналов (АЦП и ЦАП), так и с другими процессорами. Операции ввода и вывода данных должны выполняться с высокой скоростью с минимальным задействованием процессорного ядра.
При получении очередного входного отчета процессор должен выполнить необходимую обработку и выдать очередное выходное значение на ЦАП или выход кодека. В то же время на процессор поступают сигналы, например, от других процессоров или хост-процессора, которые могут изменять логику выполнения алгоритма и его параметры. Подобные события происходят нерегулярно (асинхронно). Таким образом, DSP-процессор должен уметь обрабатывать как синхронные события (поступление отсчетов с постоянным временным интервалом), так и асинхронные, причем последние должны обрабатываться, не оказывая влияния на скорость обработки регулярных событий.
Для реализации такого способа взаимодействий могут использоваться следующие подходы.
1. Ввод/вывод с последовательным опросом. DSP-процессор опрашивает внешние устройства путем анализа состояния своих сигнальных выводов или определенных ячеек памяти. Если считается, что событие произошло, то вызывается соответствующая процедура обработки. Данный подход очень прост, однако его главный недостаток – затрата ресурсов процессора на постоянную регулярную проверку каких-либо условий, что снижает его возможности по выполнению "полезной" работы.
2. Управление по прерываниям. Данный режим возможен, если сигнальным ножкам процессора поставить в соответствие определенные вектора прерывания (и соответствующие обработчики прерываний). В этом случае процессор "отвлекается" от вычислительной обработки только в том случае, когда определенное событие действительно произошло. Такой подход требует более тщательного программирования, но существенно повышает количество "полезного" времени, идущего на обработку данных.
3. При взаимодействии с внешними устройствами могут широко использоваться механизмы прямого доступа к памяти, которые позволяют организовать обмен большими объемами (блоками) данных между коммуникационными портами процессора и внутренней памятью без использования ресурсов процессорного ядра параллельно с ходом выполнения основной программы. Это наиболее эффективный способ ввода и вывода информации, однако его применение обычно целесообразно при вводе/выводе потоков данных, а не сигнальной информации.