- •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.4.2. Регистры компилятора
Компилятор cc21k предполагает использование регистров процессора для различных целей. В соответствии с этими целями и правилами модификации этих регистров подпрограммами пользователя (на ассемблере) регистры можно разделить на следующие категории:
- регистры компилятора (Compiler Registers), которые используются компилятором исключительно для собственных целей и должны содержать указанные в таблице значения. Не следует изменять значения этих регистров, так как компилятор предполагает, что эти регистры всегда имеют значения, приведенные в таблице. Дополнительно следует отметить, что все L‑регистры (кроме L6 и L7) должны быть равны 0 в любой точке вызова процедуры и возврата из процедуры. Если какой-либо из L-регистров был модифицирован, то при вызове функции или возврате управления в вызывающую подпрограмму, его следует обнулить. Подпрограммы – обработчики прерываний должны сохранять (в памяти) и сбрасывать L-регистры в 0 до использования соответствующих им I-регистров для любых инструкций с пост-модификацией;
Регистры компилятора (Compiler Registers) |
Значение |
Правило использования |
M5, M13 |
0 |
Не модифицировать |
M6, M14 |
1 |
Не модифицировать |
M7, M15 |
-1 |
Не модифицировать |
B6, B7 |
база стека |
Не модифицировать |
L6, L7 |
длина стека |
Не модифицировать |
L0, L1, L2, L3, L4, L5, L8, L9, L10, L11, L12, L13, L14, L15 |
0 |
Доступны для временного использования. После использования – восстановить |
- регистры, зарегистрированные пользователем (User Registers), задание (перечисление) которых в опциях компилятора вынуждает компилятор отказаться от использования этих регистров. Если же компилятору не будет хватать регистров, он проигнорирует запрет на их использование. Следует заметить, что "заказ" L-регистра требует резервирования соответствующего I‑регистра и наоборот, в противном случае возможны ошибки на этапе выполнения. Чем больше зарезервировано регистров для пользовательских целей, тем ниже может оказаться "качество" кода, сгенерированного компилятором;
Пользовательские регистры (User Registers) |
Значение |
Правило использования |
i0, n0, l0, m0, i1, b1, l1, m1, i8, b8, l8, m8, i9, b9, l9, m9, mrb, ustat1, ustat2, ustat3, ustat4 |
Задается пользователем |
Если не зарезервированы явно, то можно использовать для временного пользования, а по окончании восстановить прежние значения. Если явно зарезервированы под пользовательские цели в опциях компилятора, то можно использовать без ограничения |
- регистры, сохраняемые при вызове (Call Preserved Registers), представляют собой набор регистров, которые должны быть сохранены в "прологе" функции и затем восстановлены в "эпилоге" функции, если эта функция написана на ассемблере. Естественно, что если функция не изменяет регистры данной группы, то сохранять и восстанавливать их необязательно. При этом, если используется сохраняемый при вызове I-регистр, то необходимо сохранить (и затем восстановить) не только этот I-регистр, но и соответствующий ему L-регистр. Значительная часть библиотечных функций выполняется в предположении, что процессор работает в определенном режиме, определяемом, в частности, регистрами параметров и управления. Если эти значения будут изменены и затем выполнен вызов стандартной функции, то результат ее работы будет непредсказуем. Поэтому при необходимости изменения режимов работы процессора (регистры MODE1 и MODE2) "хорошим тоном" считается сохранение их старых значений и их восстановление при вызове другой функции и при возврате в вызывающую функцию.
"Сохраняемые при вызове" регистры (Call Preserved Registers) |
B0, B1, B2, B3, B5, B8, B9, B10, B11, B14, B15 |
I0, I1, I2, I3, I5, I8, I9, I10, I11, I14, I15 |
MODE1, MODE2 |
MRB, MRF |
M0, M1, M2, M3, M8, M9, M10, M11 |
R3, R5, R6, R7, R9, R10, R11, R13, R14, R15 |
USTAT1, USTAT2 |
По умолчанию run-time среда С/С++ предполагает, что режим процессора задается следующими установками (задача обеспечить эти установки ложится на инициализационный код):
а) не используется бит-реверсная адресация;
б) используется основной (не теневой) набор регистров;
в) используется точность .PRESICION=32 (32-битовые ПЗ-числа) и режим округления до ближайшего целого;
г) запрещено насыщение АЛУ (бит ALUSAT=0);
д) для ADSP-2116x разрешены циклические буферы (бит CBUFEN=1 в регистре MODE1);
- временные или рабочие регистры (Scratch Registers) не требуют сохранения и восстановления, изменение их содержимого при вызове функций или вставке ассемблерного кода не "волнует" компилятор. Для процессора ADSP-2116x все регистры данных процессорного элемента PEy являются Scratch-регистрами;
Рабочие регистры (Scratch Registers) |
B4, B12, B13 |
R0, R1, R2, R4, R8, R12 |
I4, I12, I13 |
M4, M12 |
PX |
- отдельный набор регистров (Stack Registers) резервируется и всегда используется для работы с программным стеком. Подпрограммы на ассемблере должны строго придерживаться правил работы с ними;
Регистры стека (Stack Registers) |
Значение |
Правило использования |
I7 |
Указатель стека (Stack Pointer) |
Модифицируется при работе со стеком, восстановить при возврате из подпрограммы |
I6 |
Указатель фрейма стека (Frame Pointer) |
Модифицируется при работе со стеком, восстановить при возврате из подпрограммы |
I12 |
Адрес возврата |
Загружается адресом возврата при выходе из функции |
- альтернативные регистры (Alternate Registers) не используются средой выполнения и доступны для использования в ассемблерных подпрограммах. Однако при их использовании следует учитывать, что при переключении регистров I6 и I7 (DAG1) на теневой набор может быть нарушена работа со стеком. Поэтому при использовании теневых регистров, особенно I6 и I7, прерывания должны быть запрещены. Кроме того, самый быстрый диспетчер прерываний (super fast interrupt dispatcher) для переключения контекста сам использует теневые регистры вместо сохранения регистров в стеке среды выполнения. Поэтому во избежание конфликтов желательно не применять данный вид диспетчера прерываний при использовании теневых регистров в ассемблерных вставках.
