В статье рассматриваются особенности реализации встроенного процессорного ядра на ПЛИС. Выделены факторы, на которые следует обратить внимание при выборе параметров.
Матрица ПЛИС со встроенным процессором представляет собой наиболее гибкое решение для любого приложения, поскольку оно в наименьшей степени подвержено устареванию, содержит максимальное количество IP-модулей и требует минимум внешних компонентов. На рисунке 1 показано, какие компоненты могут быть реализованы на ПЛИС.
Что касается программной реализации, следует обратить внимание на структуру кода и разработку драйверов устройств, а также решить вопрос об использовании операционной системы реального времени (ОСРВ). Программные и аппаратные средства являются критическими факторами, поэтому важно выбрать лучшие.
Рис. 1. Пример структуры ПЛИС
|
Процессорное ядро ПЛИС является объектом интеллектуальной собственности (IP) и может быть реализовано тремя способами: программно, аппаратно или в виде встроенного ПО. Основные достоинства и недостатки каждого варианта показаны в таблице 1. Программное ядро выполняется на моделях HDL и не оптимизируется под конкретную архитектуру. Такая реализация имеет меньшую производительность и менее эффективна с точки зрения использования ресурсов. Ядро, зашитое в ПЗУ (firmware), также реализуется с помощью HDL-моделей, однако тщательно оптимизируется под целевую архитектуру ПЛИС.
Реализация ядра |
Достоинства |
Недостатки |
Программная (software) |
– высокая степень переносимости – в общем случае более доступна по средствам |
– более низкое быстродействие и менее эффективный расход ресурсов – менее развернутые результаты моделирования для специализированных архитектур |
Аппаратная (hardware) |
– подробная документированность, высокая степень оптимизации и надежности |
– из-за сложной оптимизации и настройки трудно переносить на другие платформы без потери производительности и увеличения затрат |
Программно-аппаратная (firmware) |
– максимально оптимизирована под целевую платформу – доступ к параметрам моделирования (испытательные стенды и результаты) |
– низкая переносимость на другие платформы |
Если процессорное ядро может быть выполнено на ПЛИС точно так же, как и на дискретных элементах, тогда процесс проектирования пойдет существенно быстрее. По сравнению с готовым автономным процессором встроенный процессор имеет более низкую стоимость и потенциально более высокое быстродействие, поскольку может быть полностью оптимизирован под требования приложения. Вместе с тем, снижается риск раннего устаревания разработки. Программный код в большинстве случаев можно перенести на более современную матрицу, если соблюдены определенные условия: имеется право на использование данного HDL-кода и обеспечена независимость архитектуры процессора от аппаратной платформы и инструментов проектирования. Исходный HDL-код процессора, лицензии и набор программных инструментов образуют единую техническую базовую линию, что позволяет избежать таких проблем как устаревание.
Преимущества использования встроенного процессора на ПЛИС:
– возможность реализовать весь или почти весь функционал внутри одного устройства;
– возможность максимально подогнать процессор под требования приложения;
– отсутствие лишних функций;
– масштабируемость;
– возможность дальнейшего улучшения характеристик;
– возможность модификации проекта;
– оптимизация интерфейсов с периферийными устройствами;
– программно-аппаратная оптимизация;
– параллельное проектирование программного и аппаратного обеспечения;
– эффективный системный интерфейс (встроенный интерфейс между кристаллами);
– возможность повторного использования аппаратной платформы;
– снижение затрат на проектирование;
– возможность разработки специализированных прикладных процессоров;
– создание многопроцессорных систем;
– возможность создания автоматов.
Недостатки:
– неоптимальный расход энергии;
– энергопотребление ПЛИС больше, чем отдельного дискретного процессора;
– сложность обработки аналоговых сигналов.
При проектировании ПЛИС-процессора следует рассмотреть следующие вопросы: возможность параллельной разработки программной и аппаратной частей, выбор архитектуры процессора, типа процессорного ядра, параметров системы и набора периферийных интерфейсов, разделение функций по принципу реализации на программные и аппаратные.
На разработку программного кода может уйти больше половины цикла проектирования, поэтому необходимо обеспечить взаимодействие между группами инженеров, работающих над программной и аппаратной частями. В частности, это достигается за счет правильного выбора средств разработки.
Так, среди инструментов для проектирования ПЛИС-процессора обязательно должен быть комплект разработки, который позволяет создавать драйверы низкого уровня. Аппаратные инструменты должны обеспечивать эффективную интеграцию IP, а также синхронизацию процессов отладки аппаратной и программной частей. Желательно, чтобы инструменты обладали следующими свойствами.
1. Работа в фоновом режиме. Автоматические инструменты работают в фоновом режиме, но в любое время доступны пользователю. Интеллектуальные инструменты должны распознавать настройки платформы и предоставлять высокий уровень абстракции, чтобы обеспечить непрерывность процесса и синхронизовать программную и аппаратную части. Кроме того, уровень сложности инструментов должен соответствовать уровню проектируемого устройства.
2. Предоставление помощи разработчику. Ускорение процесса проектирования за счет использования мастеров настройки и генераторов.
3. Удобство работы. Удобный интуитивно понятный пользовательский интерфейс.
4. Возможность осуществлять полный контроль над разработкой и вносить изменения без потери гибкости.
5. Мощные встроенные возможности отладки.
6. Встроенная возможность базисного управления.
На характеристики системы оказывают влияние состав процессорного ядра (блоки предсказаний, ответвлений, глубина конвейера и т.д.), архитектура шины, а также специализированные модули, такие как кэш-память, устройство управления памятью или контроллер прерываний.
Выбор типа шины и ее параметров существенно влияет на быстродействие системы. Среди факторов и критериев увеличения производительности шины можно отметить следующие:
– увеличение скорости работы;
– использование более широкой шины;
– разделение шины данных и адреса;
– использование монопольного последовательного доступа;
– использование буфера записи;
– поддержка синхронного и асинхронного интерфейса;
– последовательность записи битов (в TCP/IP запись начинается со старшего бита);
– обнаружение и коррекция ошибок для обеспечения целостности шины;
– использование контроллера прямого доступа к памяти.
Существует две основных архитектуры шины: гарвардская и фон-неймановская.
В гарвардской архитектуре используется двойная шина, что обеспечивает одновременный доступ к инструкциям и данным. В фон-неймановской архитектуре шина общая. Ее преимуществом является меньшее количество выводов, а недостатком — низкое быстродействие.
При выборе архитектуры следует ориентироваться на количество свободных линий ввода-вывода ПЛИС, которые предполагается использовать для шины.
В качестве вычислительного ядра ПЛИС могут использоваться три устройства: микропроцессор, микроконтроллер и специализированный процессор. Выбор между ними зависит от назначения, быстродействия, архитектуры, потребления и стоимости проектируемого устройства.
Микропроцессор — это отдельное ядро с ограниченным набором периферийных возможностей. Микроконтроллеры, наоборот, имеют широкие периферийные возможности. Микроконтроллеры, как правило, предназначены для специальных применений, например, для управления двигателем или PDA.
В процессорном ядре могут быть реализованы следующие функциональные блоки: одиночный процессор, несколько процессоров, блок вычислений с плавающей запятой, автомат, прикладной процессор, специализированные логические блоки ПЛИС, внешние периферийные устройства.
Существует несколько категорий IP-процессоров (см. табл. 2).
Категория |
Пример |
Процессорное ядро |
MicroBlase, Nios-II, 8051, 68000, TMS320C25, z80 |
Общие периферийные устройства |
16550 UART, Gigabit Ethernet MAC |
Память |
Контроллеры DDR SDRAM, RLDRAM, SDRAM |
Хранение |
FIFO, CAM |
Вычисления |
Преобразователь функций с плавающей запятой в фиксированную, LFSR |
Безопасность |
Шифровальщики DES, DES3 |
Шина |
Контроллеры PCI и USB, интерфейс PCI-X, контроллер шины CAN |
Периферийные устройства |
Модуль сброса, таймер-счетчик |
Выбор типа процессора определяется многими факторами и, в первую очередь, бюджетом и графиком разработки. Над его созданием совместно работают группы системных инженеров, программистов и схемотехников. Ниже приведены основные аспекты, которые необходимо принимать во внимание при выборе процессора:
– целевое назначение;
– тип оптимизации (под специализированную архитектуру или под наибольшую производительность);
– использование ресурсов;
– поддержка моделирования;
– покрытие тестирования;
– поддержка индивидуальных наборов инструментов моделирования;
– доступность практических результатов моделирования;
– точность и законченность документации;
– возможность связи с разработчиками ядра или квалифицированными экспертами;
– количество и квалификация специалистов, разрабатывающих IP-блоки;
– доступные средства разработки;
– тип операционной системы.
Процессорные ядра сравниваются по архитектурным особенностям (конвейер, интерфейс памяти, скорость ядра и т.д.). Так, более глубокий конвейер обеспечивает и более высокое быстродействие при условии, что ветвление ограниченно. Использование больших регистровых файлов уменьшает количество операций загрузки и хранения. Наличие кэш-памяти может существенно повысить быстродействие за счет сокращения обращений к внешней памяти.
Также необходимо оценивать следующие факторы:
– тип, размер и реализация периферийной шины;
– механизмы обнаружения и коррекции ошибок;
– типы транзакций на шине (например, монопольная передача);
– размер и тип адресного пространства;
– тип и размер кэш-памяти инструкций и данных;
– тип контроллеров (ПДП, устройство управления памятью);
– функциональные элементы, такие как регистровые файлы и исполнительные модули;
– тип конвейера и стратегии предотвращения простоев (предсказания и т.д.);
– буферы записи для внешних модулей памяти;
– структура прерываний и реакция на них (теневые регистры).
Не менее значимы другие факторы, влияющие на производительность или эффективность разработки. Среди них можно отметить инструменты разработки, доступность IP, поддержка операционных систем реального времени и т.д.
При разработке аппаратной части следует обратить внимание на следующие процедуры: оптимизация на уровне устройств, платы и всего проекта, установка встроенного процессора, использование IP. Все они взаимосвязаны.
Средства разработки можно разделить на ручные и полностью автоматизированные. При использовании ручных методов реализация системы производится под тщательным контролем, однако идет медленно. Автоматический процесс позволяет реализовать любые функции. Сложные проекты рекомендуется выполнять в два этапа: сначала с применением автоматических средств, а затем приступить к более детальной модификации и модернизации, выполняющимся вручную.
С точки зрения написания программного кода, проектирование встроенного процессора на ПЛИС и автономного процессора схожи. Основным средством проектирования является встроенная среда разработки (IDE), которая объединяет редактор, оптимизированный компилятор, инкрементный компоновщик, симулятор и отладчик. Хороший пример IDE –Eclipse IDE, а также распространенный компилятор gcc и отладчик gdb.
Если проект очень сложный, то для его реализации необходимо перейти на более высокий уровень программной абстракции, на котором встраиваемая система обеспечивает отклик на события в масштабе реального времени. Для обеспечения достаточного уровня абстракции используют ОСРВ с заданной степенью детерминированности, чтобы она удовлетворяла временным требованиям. В свою очередь, детерминированность может быть обеспечена аппаратно или программно. В последнем случае временной джиттер максимален. Второй задачей ОСРВ является сопряжение программного кода низкого уровня с аппаратной платформой. Код низкого уровня для поддержки конкретной аппаратной платформы (board support package, BSP) содержит загрузочный код для инициализации, драйверы низкого уровня и процедуры обработки прерываний для периферийных устройств.
Эффективное выполнение прерываний — важный фактор в детерминированных встраиваемых системах реального времени. Целесообразнее использовать специализированный контроллер прерываний для обеспечения малой задержки при оповещении процессорного ядра о получении запроса на прерывание.
Обычно в операционной системе содержатся важные связующие программные компоненты, в т.ч. стек TCP/IP, веб-серверы, стек USB, криптографические программы и другие часто применяемые устройства. При выборе ОСРВ следует учитывать также такие факторы, как модели управления задачами, надежность ядра, наличие API и скорость отклика на прерывание. Как правило, любое процессорное ядро имеет список поддерживаемых или сертифицированных ОС.
Для повышения эффективности и расширения возможностей отладки между ОСРВ и инструментами разработки IDE должно быть тесное взаимодействие. Одной из таких возможностей является профилирование задач, которое следит за правильностью соблюдения последовательности операций.
При написании кода следует стремиться к универсальности, чтобы написанные однажды функции можно было использовать повторно. Сложные функции рекомендуется разбивать на несколько простых, чтобы применять их впоследствии. Выбор ОСРВ производится по следующим параметрам:
– детерминированность (программная или аппаратная);
– допустимая временная неопределенность;
– планирование (по приоритетам или с учетом прерываний);
– использование стандартного API и вспомогательных интерфейсных функций для выполнения задач, не входящих в API;
– тип синхронизации и протоколы передачи данных;
– модуль памяти (размер стека команд, меры предотвращения переполнения стека);
– лицензирование (стоимость лицензии на ОСРВ и аппаратные IP-блоки).
Рассмотрим пример создания концепции проекта. Для наглядности обратимся к уже существующей микросхеме XC4VFX20 Xilinx, которая содержит процессор 405 PowerPC, трехрежимный модуль Ethernet, встроенную память и слайсы DSP. Среди требований в ТЗ была поддержка PCI, 10/100 Ethernet, внешнего контроллера DDR для доступа к памяти процессора и внешнего контроллера флэш-памяти для доступа к памяти программ. Система должна обеспечивать интерфейсы I2C, SPI, RS-232 UART и доступ к внешним переключателям и светодиодам через сигналы GPIO, а также функции DSP и заказные модули (см. рис. 2).
Рис. 2. Структура XC4VFX20 Xilinx
|
Компания Xilinx рекомендует для реализации встроенного процессора на ПЛИС комплект разработки встраиваемых систем EDK. Средства EDK позволяют объединить системные, аппаратные и программные средства в одном корпусе. В качестве стартовой точки при автоматизированном техпроцессе может использоваться оценочная плата, которая должна содержать как можно больше особенностей, эквивалентных требуемым в ТЗ. Это поможет сократить много времени.
Скорее всего, подобрать оценочную плату с точно таким же, как в ТЗ, набором периферийных возможностей и компонентов ПЛИС, не удастся, поэтому следует выбрать оценочную плату для аналогичной ПЛИС из этого же семейства. Возьмем оценочную плату для XC4VFX12 и приступим к ее настройке с помощью EDK.
При автоматической конфигурации выполняются следующие операции: выбор нового проекта, выбор оценочной платы, выбор процессора (PowerPC), установка параметров процессора (в нашем примере частота работы ядра 200 МГц, частота шины 100 МГц, кэш включен, отладка производится по интерфейсу JTAG), выбор последовательности записи битов (для TCP/IP лучше использовать формат Big-endian, когда первым записывается старший значащий разряд), добавление периферийных возможностей (в нашем случае память DDR, флэш, Ethernet и RS-232), видов адресации и режимов работы
После выполнения этих шагов на основе настроенной ПЛИС создается начальный проект для разработки первичного программного обеспечения. Проект сохраняется, после чего выполняется конфигурирование PCI, SPI, I2C и таймеров, в процессе которого каждое из этих устройств подсоединяется к шине процессора.
Реализация процессорной шины полностью определяется типом процессора. Для ядра 405 EDK поддерживает шину IBM CoreConnect. Шина, подсоединенная непосредственно к процессору, называется процессорной локальной шиной (processor local bus, PLB). Вторичная, более медленная шина называется периферийной (on-chip peripheral bus, OPB). Шины соединены мостом, который устанавливает задержку при обращении к периферийным устройствам, подключенным к ОРВ.
К шине PLB подключаются контроллер памяти DDR и Flash, контроллер PCI, трехуровневый МАС. Она резервируется для всех устройств с высоким приоритетом или высоким быстродействием. К шине OPB подключается контроллер I2C, SPI, блок UART и графический интерфейс GPIO, системный таймер и контроллер прерываний.
Для данного проекта необходимо произвести ускорение работы за счет использования внутреннего кэша и вспомогательного вычислительного модуля (APU) процессора 405 PowerPC для обмена данными с сигнальным прикладным процессором, реализованном на ПЛИС.
Модуль APU обеспечивает широкополосный интерфейс между логическими схемами ПЛИС и конвейером ядра 405. На плате имеется контроллер прерываний, который используется для подключения дополнительных линий прерываний. Ядро РowerPC поддерживает две линии: для критических и некритических прерываний. Более подробное описание см. в [1].
Главная цель использования этих модулей — уменьшение количества внешних обращений к памяти и уменьшение задержки отклика периферийных устройств. Для увеличения пропускной способности канала Ethernet и разгрузки процессорного ядра используется контроллер прямого доступа к памяти.
Реализацию фиксированных функций можно выполнить несколькими способами. В качестве примера рассмотрим на высоком уровне взаимосвязь процессов проектирования аппаратной и программной частей (см. рис. 3).
Рис. 3. Взаимосвязь процессов проектирования аппаратной и программной части
|
В данном примере была выбрана операционная система uCLinux. Ее преимущества заключаются в том, что она обеспечивает доступ к исходному коду, имеет стек TCP/IP и является довольно распространенной. Поскольку для нее не требуется MMU, этот блок ядра может быть отключен. Ускорить отладку программного кода можно за счет использования сетевой файловой системы NFS и сервера gdbserver.
Система NFS позволяет экспортировать рабочую директорию на удаленную платформу uClinux. То есть разработчики могут компилировать код на отладочной плате, а запускать его удаленно на целевой системе. Программа gdbserver обеспечивает целевой сервер для соединения со средой разработки gdbdebugger.
Другой важный аспект проектирования — порядок выполнения кода. Реализация многих процедур стандартна, однако иногда требуется изменить последовательность выполнения инструкций. Такая возможность в ядре PowerPC есть (EIEIO — команда принудительного изменения последовательности).
Для написания программного кода для PowerPC был выбран язык С. При разработке встраиваемых систем следует иметь в виду несколько аспектов, в т.ч.:
– использовать статический синтаксис для управления видимостью переменных;
– использовать энергонезависимый синтаксис;
– по возможности избегать ветвления, чтобы простои не снизили эффективность;
– следить за состоянием стека;
– отключить прерывания на время выполнения загрузочного кода;
– оставлять комментарии для объяснения кода и выделения критичных факторов и исключений;
– задавать нулевые процедуры обслуживания прерывания для всех неиспользуемых прерываний.
Основная сложность реализации проекта связана с разработкой новой аппаратной платформы. Гораздо проще создавать и верифицировать код на изученной оценочной плате, а затем переносить его на новую. Вместе с тем, важно помнить, что на некоторых стадиях техпроцесса использовать готовую платформу бессмысленно. Речь идет о верификации платы.
Алгоритм включения встраиваемого процессора выглядит следующим образом:
– инициализация ПЛИС из внешнего энергонезависимого устройства хранения конфигурации;
– включение процессора, сброс параметров;
– инициализация процессора (обычно выполняется на ассемблере);
– переключение на язык высокого уровня для загрузки загрузочного кода;
– выполнение анализа целостности аппаратной части (модули памяти и другие блоки, связанные с процессором);
– обновление кода приложения, если доступна более новая версия;
– копирование программы из источника в исполнительный модуль;
– переход к коду приложения;
– инициализация ОСРВ и установка BSP;
– запуск планировщика.
Реализация встроенного процессора на ПЛИС является непростой задачей. Для ускорения разработки следует последовательно рассмотреть все критичные элементы и факторы. Примерный план начальной стадии разработки встроенного процессора следующий.
– Определить требования к функционалу и характеристикам. Чем четче требования, тем эффективнее проводится выбор процессора.
– Выбор между ОС и ОСРВ. Напрямую влияет на эффективность разработки и быстродействие проектируемой системы.
– Выбор подходящего процессора или ядра.
– Выбор шины.
– Сопряжение шины с периферийными устройствами и IP.
– Выбор типа блоков (использовать готовые или собственной разработки).
– Выбор типа реализации блоков (программная или аппаратная).
– Определение количества вычислительных ядер.
– Разбиение системы на модули.
– Обеспечение возможности повторного использования проекта.
– Разработка структуры прерываний.
– Реализация прерываний.
– Планирование периферийных возможностей.
– Анализ потока данных.
– Реализация.
– Сопряжение процессора и периферии по шине.
– Оценка инструментов системного уровня (EDK, SOPC, т.д.).
При реализации встроенного вычислительного ядра на ПЛИС следует рассматривать все аспекты проектирования на системном уровне и обеспечивать гибкость. Высокая гибкость достигается благодаря тому, что каждый блок ядра реализуется с учетом нужд целевого приложения. При использовании готового автономного процессора гибкость значительно ниже.
ПЛИС предоставляет полную свободу в разработке программной и аппаратной части. Оценка, выбор и реализация каждого элемента в ПЛИС производится в соответствии с требованиями приложения. Если преимущества оправдывают затраченные усилия, в проект моно вносить изменения даже на поздних стадиях.
2. Cofer R.C. и Harding В. Basics of Core-Based FPGA Design//www.eetimes.com.