- •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. Разработка обработчиков прерываний. Диспетчер прерываний. Классификация обработчиков прерываний по "быстродействию" и накладным расходам.
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) с помощью инструкции BITREV над любым I-регистром DAG:
I0 = 0x80400000;
BITREV (I4, 7); // I4 <= 0xE0000201
2) в режиме автоматического реверсирования адреса (только для регистров I0 и I8):
I0 = 0x80400000;
R1 = DM(I0,3); // DMA-шина <= 0x201, I0 <= 0x80400003
Кольцевые буферы
Циклический буфер – набор ячеек памяти, в которых хранятся данные. Перемещение указателя индекса в буфере осуществляется с помощью операции постмодификации с обновлением, на каждом шаге добавляется заданное число (положительное или отрицательное) к значению указателя индекса. Если значение модифицированного указателя буфера выходит за пределы буфера, значение длины буфера вычитается или прибавляется к значению указателя, чтобы он вернулся к началу буфера. Не существует ограничений на значение базового адреса циклического буфера.
При адресации циклического буфера регистры М и I должны использоваться в операциях постмодификации (но не предмодификации), например:
F1=DM(I0,M0); операция постмодификации адреса для циклического буфера,
F1=DM(M0,I0); операция предмодификации.
Организация циклического буфера осуществляется путем инициализации регистра длины L положительным, отличным от нуля значением и загрузки соответствующего (имеющего тот же номер) регистра В базовым (начальным) адресом буфера. Соответствующий регистр индекса I автоматически загружается этим же начальным адресом.
При осуществлении первого обращения с постмодификацией с использованием регистра I, DAG выводит значение регистра I на шину адреса и затем модифицирует его, добавляя содержимое определенного регистра М или непосредственное значение. Если измененное значение попадает в диапазон адресов буфера, то оно записывается обратно в регистр I. Если значение выходит за диапазон адресов буфера, то сначала из этого значения вычитается значение регистра L (или, если модификатор отрицательный, прибавляется).
