- •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. Разработка обработчиков прерываний. Диспетчер прерываний. Классификация обработчиков прерываний по "быстродействию" и накладным расходам.
2.5. Взаимодействие подпрограмм на с и ассемблере
2.5.1. Описания имен и области их видимости
Компилятор языка С/С++ предваряет любое внешнее имя знаком подчеркивания. Поэтому чтобы имя метки или переменной из ассемблерного модуля было видно в функциях С/С++, следует:
- либо метку в ассемблерном модуле начинать с подчеркивания;
- либо в программе на С при описании внешней метки использовать конструкцию вида:
extern "asm" {}
Не следует забывать, что в модуле, где метка описана, ее имя следует объявлять как global, а в модуле, в котором к ней идет обращение – как extern, например:
Описание функции в asm-модуле |
Объявление функции в С-модуле |
.global _asmfunc; … _asmfunc: … |
void asmfunc(void); … asmfunc(); … |
.global asmfunc; … asmfunc: … |
extern "asm" void asmfunc(void); … asmfunc(); … |
2.5.2. Макросы для работы со стеком при вызове и возврате из функций на ассемблере
Для облегчения работы со стеком при вызове и возврате из подпрограмм, сохранении/восстановлении регистров и очистки стека от передаваемых в подпрограмму параметров может быть использован ряд макросов, описанных в файле asm_sprt.h. Основные из них приведены в таблице.
Макрос |
Программный код для ADSP-21060 |
Описание применения макроса |
leaf_exit |
i12=dm(m7,i6); jump (m14,i12) (db); nop; RFRAME |
Эпилог функции – последняя строка ассемблерной программы |
ccall(x) |
cjump (x) (DB); dm(i7,m7)=r2; dm(i7,m7)=PC |
Вызов функции с именем x |
reads(x) |
dm(x, i6) |
Читает значение из стека, которое находится со смещением x относительно указателя кадра стека (I6), например: R0=reads(1) -> R0=dm(1,I6); |
puts |
dm(i7, m7) |
Помещает в стек значение регистра, например: puts=R0 -> dm(I7,M7)=R0; |
gets(x) |
dm(x, i7) |
Читает значение из стека со смещением x относительно его вершины (I7): R0=gets(3) -> R0=dm(3,I7); |
alter(x) |
modify(i7, x) |
Изменяет значение указателя на вершину стека (I7) на число x, позволяя таким образом (при x>0) очистить стек от x верхних слов. Это может быть полезно при очистке стека от параметров процедуры в вызывающей функции |
save_reg |
puts=r0;\ puts=r1;\ ... puts=r15 |
Последовательно сохраняет в стеке все регистры регистрового файла |
restore_reg |
r15=gets(1);\ r14=gets(2);\ ... r0=gets(16);\ alter(16) |
Последовательно восстанавливает из стека все регистры регистрового файла и очищает стек |
Пример подпрограммы на ассемблере с использованием макросов.
Вызов: my_func(int a, int b, int c, int d, int e);
#include <asm_sprt.h>
...
my_func: puts=R3; // сохранить R3
R3 = reads(1); // R3 = d (доступ к парам. отн. I6)
...
R3 = gets(1); // восстановить R3
alter(1); // и вытолкнуть его из стека - необязательно
leaf_exit;
my_func.end: nop;
