- •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. Разработка обработчиков прерываний. Диспетчер прерываний. Классификация обработчиков прерываний по "быстродействию" и накладным расходам.
30. Организация взаимодействия между процессорами по выделенным каналом через линк-порты. Регистр lsrq и его назначение. Идея алгоритма "передачи маркера".
Организация взаимодействия между процессорами по выделенным каналом через линк-порты
Запрос обслуживания линк_порта дает возможность заблокированному линк-порту (для которого не назначен буфер или назначен заблокированный буфер) генерировать прерывание при попытке внешнего доступа. Биты состояния запроса приема и передачи в регистре LSRQ (биты 20_31) позволяют процессору ADSP_2106x определить, пытается ли другой процессор ADSP_2106x послать или принять данные через соответствующий линк-порт. Это дает возможность двум процессорам связываться без предварительного информирования о направлении передачи, номере линк-порта или без точных сведений о том, когда будет произведена передача.
Шесть возможных LSR для приема и шесть возможных LSR для передачи объединяются по схеме «монтажное ИЛИ» для генерации прерывания запроса обслуживания линк-порта. Запрос прерывания LSRQ может быть маскирован битом маски LSRQI в регистре IMASK. Когда бит маски установлен, прерывания могут проходить в устройство определения приоритета прерывания. Блок-схема этой логики показана на рисунке ниже.
Регистр LSRQ и его назначение
Программа обработки прерывания должна считывать регистр LSRQ для определения номера линк-порта, который надо обслужить, и типа запроса – передача или прием. Прерывания LSR имеют задержку два цикла. Заметим, что прерывание запроса обслуживания линк-порта отличается от прерываний приема и передачи линк-порта. 32_разрядный регистр LSRQ содержит маскируемые биты состояния запроса приема или передачи для каждого линк_порта и соответствующие биты маски прерывания. Бит состояния линк_порта устанавливается, когда порт заблокирован и выставлен (высокий уровень) один из сигналов LxACK или LxCLK. Биты состояния LSRQ только для чтения. В табл. 9.5 показаны биты регистра LSRQ.
Чтобы определить, какой линк_порт надо обслужить, передайте содержимое регистра LSRQ в регистр Rx (в регистровый файл), используя команду обнаружения начальных нулей (Rn=LEFTZ Rx). Rn укажет активизированные линк-порты в порядке приоритета. Если используются запросы обслуживания линк-порта, то они должны маскироваться при активизации и блокировании буферов, назначенных линк-порту, или при блокировании линк-порта в регистре LAR, в противном случае могут генерироваться ложные запросы обслуживания. Необходимость этого маскирования возникает из-за задержки «подтягивания» к земле (если оно разрешено) сигналов LxCLK или LxACK (если они были выставлены) или из-за задержки при выполнении сброса этих сигналов внешним устройством ниже логического порога (если «подтягивание» запрещено). При опросе этих сигналов в течение этой задержки определяется, что они выставлены, в результате чего генерируется LSRQ.
Чтобы устранить возможность возникновения ложных прерываний, маскируйте прерывание LSRQ или соответствующий бит запроса в регистре LSRQ и обеспечьте соответствующую задержку перед демаскированием этого прерывания. С другой стороны, маскируйте прерывание LSRQ и опрашивайте соответствующий бит состояния запроса до тех пор, пока он не будет очищен, а затем демаскируйте прерывание.
Идея алгоритма "передачи маркера"
Если два процессора связываются через линк_порт, то необходимо определить передатчик и приемник. В противном случае возможна попытка одновременной передачи. Передача маркера – это способ решения этой проблемы.
Передача маркера – это способ определения текущего передатчика в системе из двух ADSP_2106x. Маркер – это программный флаг, похожий на семафор, который передается между процессорами. После сброса маркер (флаг) принадлежит одному из устройств, что делает его ведущим и передатчиком. Когда линк-порт приемника (ведомого) хочет стать ведущим, он может выставить сигнал на линии LxACK (запрос данных), чтобы привлечь внимание ведущего. В соответствии с программным протоколом ведущий определит, нужно ли ему отвечать на сигнал передачей данных или у него запрашивают маркер.
Если ведущий желает отдать маркер, он может послать назад определяемое пользователем слово освобождения маркера и впоследствии сбросить свой флаг маркера. Одновременно ведомый проверяет посланные назад данные, и, если они являются словом освобождения маркера, он устанавливает свой маркер и после этого начинает передачу. Если принятые данные не являются словом освобождения маркера, ведомый должен предположить, что ведущий начал новую передачу.
Ведущий может также запросить прием данных согласно программному протоколу, посылая слово освобождения маркера вместо того, чтобы сначала сбросить LxACK (запрос данных).
Замечания:
Слово освобождения маркера (TRW – Token Release Word) может быть любым значением, определяемым пользователем. Так как и приемник, и передатчик ожидают кодового слова, нет необходимости, чтобы оно было исключением из обычно передаваемых данных.
Далее описаны несколько основных важных моментов, требующих особого внимания при реализации программного протокола передачи маркера.
Необходимо, чтобы оба буфера линк-портов не были настроены на передачу в одно время. Если это случилось, то данные могут быть переданы и потеряны из-за того, что ни один линк-порт не будет управлять LxACK. В примере, приведенном в конце главы, опрашиваются биты регистра состояния LSRQ, чтобы гарантировать, что ведущий становится ведомым до того, как ведомый становится ведущим. Т. о., предотвращается конфликт двух передатчиков.
Необходимо, чтобы выбор прерывания линк-порта соответствовал приложению. Если используется схема определения состояния, проверяющая биты состояния регистра LSRQ, важно следующее: если настроенный на прием линк-порт блокируется в то время, как LxACK выставлен, то будет возникать определяемая RC задержка перед тем, как резистор номиналом 50 КОм на LxACK (если подключен) сможет понизить уровень сигнала ниже логического порога. Аналогично, если настроенный на передачу линк-порт блокируется в то время, как LxCLK выставлен, тогда будет возникать определяемая RC задержка перед тем, как резистор номиналом 50 КОм на LxCLK (если подключен) сможет понизить уровень сигнала ниже логического порога. Если в этот момент соответствующий бит состояния запроса в регистре LSRQ не маскирован, то будет зафиксирован LSR – и прерывание LSRQ может обслуживаться, даже если его генерация не планировалась.
Необходимо, чтобы синхронизация двух параллельно выполняющихся кодов (в передатчике и приемнике) не нарушалась из-за помех. Запрещение вложенных прерываний – один из методов, используемых в примере, чтобы реализовать это.
