Мультиядерные микроконтроллеры семейства xCORE от XMOS
Введение
Многие задачи управления, обработки сигналов, сбора данных достаточно простым и естественным образом разбиваются на набор взаимодействующих подзадач, часть из которых выполняется последовательно друг за другом, или как конвейер, часть может исполняться параллельно. В современных встраиваемых системах можно, пусть в какой-то мере и условно, выделить вопросы управления и обработки потоков данных, а также вычислительные задачи.
Современный контроллер имеет довольно широкий и разнообразный набор периферийных устройств, позволяющих реализовать многие операции параллельно и почти без вмешательства процессорного ядра. В этом случае процессорное ядро контроллера играет роль своеобразного диспетчера, обслуживающего потоки данных от периферийных устройств. Для эффективной работы в помощь процессорному ядру задействуются развитая система обработки прерываний, контроллеры прямого доступа к памяти, сопроцессоры. Залогом успеха здесь является грамотное распределение приоритетов прерываний и задание режимов работы периферийных устройств.
Распределение ресурсов процессорного ядра возможно и при помощи операционных систем реального времени.
Критичным фактором будет фиксированное время реакции системы на события. При увеличении количества задач, обрабатываемых контроллером, возникают сложности организации взаимодействия между отдельными процессами или периферийными устройствами.
Применение ПЛИС для проектов, состоящих из большого количества подсистем, часто оказывается неэффективным. Намечается подход высокоуровневого проектирования при множестве взаимодействующих заранее заданных софт-ядер. Особый интерес в этом плане представляют технологии проектирования и программирования параллельно взаимодействующих последовательных процессов и подсистем, поддержанные аппаратно.
Попытки реализации процессорных систем, аппаратно поддерживающих высокоуровневые языки программирования, предпринимались и ранее — форт-процессоры Novix, RTX2000, ява-процессор picoJava, транспьютеры INMOS (Оккам), процессоры семейств «Эльбрус» («Эль‑76»), «Кронос», а также ряд других. Некоторые из перечисленных процессоров или их модификации имели успех в определенных областях, хотя и не стали мейнстримом.
Многоядерные процессоры, такие как процессоры Intel, AMD с технологиями HyperThreading, процессоры семейства SPARС, поддерживают многопоточное программирование, но для систем реального времени с большим количеством относительно несложных задач и с ограничениями на потребляемую мощность и размеры они не всегда подходят. Многоядерные процессоры Tile от Tilera тоже выглядят тяжеловатыми для целого класса систем.
Многоядерные процессоры, например GA144, AsAP-II, разрешают запуск и выполнение параллельных задач и процессов, обеспечивая аппаратными средствами их взаимодействие и синхронизацию, однако программирование данных процессоров — вопрос далеко не тривиальный и требует от разработчиков и программистов определенных навыков и усердия.
Семейство процессоров xCORE
Семейство процессоров xCORE британской компании XMOS заявлено как класс микроконтроллеров с несколькими процессорными ядрами, гибкой системой портов ввода/вывода и архитектурой, обеспечивающей временной детерминизм [1, 2].
xCORE можно классифицировать как многопоточные мультиядерные микроконтроллеры. В их состав входит один, два или четыре процессорных сегмента, каждый из которых может содержать 4, 6 или 8 логических процессорных ядер. Производительность одного процессорного сегмента составляет 500 MIPS, что является достаточно высоким показателем для микроконтроллеров.
В противовес большинству современных контроллеров, в xCORE периферийные и интерфейсные устройства реализуются программно. Это позволяет разработчику не менять семейство контроллеров при переходе от одной задачи к другой, свободно добавлять необходимые периферийные устройства к системе, предоставляет больше свободы при проектировании топологии печатной платы.
В основе контроллера лежит одна или более так называемых плиток/сегментов (tile), в состав которой входит набор исполнительных устройств и высокопроизводительный коммутатор. Представлено несколько типов сегментов, но основным типом является сегмент, содержащий процессорное ядро [1].
Процессорный сегмент состоит из следующего набора компонентов (рис. 1):
- xCORE logical processor cores — логические процессорные ядра. В состав процессорного сегмента может входить от четырех до восьми логических процессорных ядер, способных выполнять вычисления, поддерживать операции ЦОС, осуществлять задачи управления или обслуживать линии ввода/вывода; каждое из логических процессорных ядер разделяет процессорные ресурсы и память процессорного сегмента, но имеет собственный набор регистров.
- xTIME Scheduler — планировщик. Аппаратно реализует основные функции ОС реального времени, отвечает за осуществление задач на ядрах процессора, выполняет отсчет времени, предоставляет набор системных таймеров с разрешением до 10 нс.
- Hardware-Response ports — порты. Набор программно-управляемых линий ввода/вывода: порты управляются логическими процессорными ядрами и могут быть настроены как синхронные или асинхронные линии ввода/вывода, генераторы логических последовательностей, преобразователи последовательного кода в параллельный и наоборот.
- xCONNECT — коммутатор. Высоко-скоростной неблокирующий коммутатор, объединяющий между собой ресурсы сегмента, также может служить для объединения нескольких процессоров.
- SRAM — блок оперативной памяти для хранения кода и данных исполняемой программы.
- Интерфейс программирования и отладки JTAG.
- Блок однократно программируемой памяти OTP ROM для обеспечения функций безопасности.
Архитектура связей, основанная на коммутаторе, позволяет масштабировать систему как по числу сегментов в процессоре на одном кристалле, так и по числу отдельных процессоров, связанных между собой в сеть (рис. 2).
Связи коммутатора позволяют осуществлять взаимодействие между любыми логическими или процессорными ядрами в пределах одного или нескольких сегментов или процессорных ядер. Возможен доступ к памяти любого процессорного сегмента в пределах системы, вплоть до управления потоками другого процессорного сегмента.
Коммутатор объединяет четыре линии XMOS Links каждого процессорного ядра и шестнадцать внешних линий, что дает возможность формировать систему из отдельных устройств. Также коммутатор способен выделять отдельные группы линий в независимые сети, что позволяет, к примеру, разделить сети управления процессом и сети передачи данных.
Архитектура процессорных ядер xCORE
Процессорное ядро xCORE является 32‑разрядным многопоточным RISC-процессором с эффективной и развитой системой команд. Каждому логическому ядру доступна определенная доля процессорного времени (до 125 MIPS на частоте 500 МГц), которая контролируется планировщиком xTIME Scheduler. Логические ядра для прикладной программы представляются как независимые параллельные процессоры. Благодаря планировщику xTIME скорость выполнения независимых процессов на логических ядрах строго детерминирована [1, 2].
Система команд процессора включает команды 32‑битной арифметики, логические операции, умножение с накоплением, вычисление контрольной суммы, передачу данных между логическими ядрами и процессорными сегментами, управление потоками исполнения, передачу данных и синхронизацию параллельно выполняющихся задач.
Блок шифрования в xCORE, работая совместно с логическими ядрами, позволяет настраивать и реализовывать криптографические алгоритмы как для прикладных задач, так и для защиты программного кода, располагаемого во внешней флэш-памяти.
Каждый процессорный сегмент имеет высокопроизводительную подсистему памяти, позволяющую логическим ядрам разделять программный код и данные, кроме того, могут быть реализованы механизмы совместного доступа к данным. Процессор xCORE не использует и не нуждается в кэше, и это делает время выполнения инструкций и программ детерминированным. В том случае, если логическое ядро ожидает данные, планировщик переключает процессор на ядро, готовое продолжать вычисления.
Каждый процессор xCORE предоставляет аппаратные ресурсы для нескольких параллельных задач (потоков/нитей), включая:
- набор регистров для каждой задачи;
- планировщик, выбирающий, какая из задач активна в данное время;
- набор аппаратных семафоров для синхронизации задач и управления доступом к разделяемым ресурсам;
- набор каналов для коммуникаций между задачами;
- набор таймеров.
Например, процессорный сегмент микроконтроллера серии XS1‑L1 при рабочей частоте 500 МГц имеет производительность порядка 500 MIPS, поддерживает 8 аппаратных потоков (8 логических ядер), 64 кбайт ОЗУ.
Логическое ядро способно выполнять более 125 MMAC в секунду, до 125 млн событий. Коммутатор имеет 4 связи для процессорного ядра, 8 внешних связей. Ядро имеет также 4 линии связи с пропускной способностью до 400 Мбит/с. Логическим ядрам доступно 7 семафоров, 10 таймеров, 32 канала связи.
Линии ввода/вывода организованы в порты шириной 1, 4, 8, 16 и 32 бит.
Параллельные задачи могут быть использованы для реализации вычислительных алгоритмов, выполнения функций периферийных устройств, DMA и прочего.
Управление задачами полностью поддерживается системой команд процессора: инициализация, останов, запуск, синхронизация параллельных задач, а также все коммуникации между задачами. Это позволяет:
- осуществлять управляемые событиями коммуникации между задачами в системе и с внешними устройствами;
- поддерживать потоковый, пакетный или синхронный обмен данными между задачами;
- процессор переходит в режим ожидания в случае, когда все задачи находятся в ожидании;
- реализовать передачу данных между логическими ядрами, процессорными сегментами или на линии ввода/вывода.
Обычно для задачи (для одного потока вычислений) отводится одно логическое процессорное ядро. В логическое ядро входят 12 регистров общего назначения, 4 регистра указателя и 2 регистра управления.
Регистры общего назначения r0: r11 используются в арифметических и логических операциях, вызове подпрограмм, доступе к структурам данных.
Регистры-указатели:
- cp — указатель пула констант;
- dp — указатель данных;
- sp — указатель стека;
- lr — регистр связи.
Регистры управления:
- pc — программный счетчик;
- sr — регистр статуса.
Допускается также выполнение нескольких задач на одном логическом ядре в рамках кооперативной многозадачности (механизм round-robin). Каждая задача имеет семь дополнительных регистров специального назначения:
- spc — сохраненный счетчик команд;
- ssr — сохраненный регистр статуса;
- et — регистр типа исключительной ситуации;
- ed — данные исключения;
- sed — сохраненные данные исключения;
- kep — точка входа ядра;
- ksp — указатель стека ядра.
Регистр статуса содержит следующую информацию:
- eeble — разрешение события;
- ieble — разрешение прерывания;
- inenb — в задаче разрешены события;
- inint — задача обрабатывает прерывание;
- ink — задача в режиме ядра;
- sink — сохраненный бит ink;
- waiting — задача ожидает выполнения текущей инструкции;
- fast — задаче разрешен быстрый ввод/вывод.
В процессоре реализован небольшой конвейер, оптимизированный для детерминированного выполнения нескольких задач.
Порядка 80% инструкций процессора 16‑битные, таким образом, процессор за один такт выбирает две команды. Как правило, лишь менее 30% инструкций требуют доступ к памяти, следовательно, каждое из процессорных ядер может работать на полной скорости, используя единую подсистему памяти.
Метод планирования позволяет любому количеству задач разделять общую подсистему памяти и ввода/вывода, гарантируя, что при n‑ном количестве активных задач каждая из них получит как минимум каждый n‑ный процессорный такт.
С практической точки зрения можно представить некий цикл задач как период из n процессорных тактов. С программной точки зрения это означает, что минимальная производительность выполнения задачи может быть оценена как частное от общей производительности процессора на число задач. На практике производительность будет несколько выше расчетной, поскольку возможны нахождения задач в состоянии ожидания и фактически цикл задач становится короче, чем n тактов.
К примеру, чип с 128 ядрами, каждое из которых способно одновременно выполнять 8 потоков, может быть использован как 1024‑ядерный процессор, и каждое из его ядер работает на частоте 1/8 частоты процессора.
Планировщик поддерживает набор активных задач, выбирая из них инструкции для выполнения. Задача не активна в том случае, если:
- она ожидает синхронизации с другой задачей перед продолжением или завершением;
- задача ожидает входные данные;
- задача принимает данные, но для них недостаточно места;
- задача ожидает истечения таймера;
- задача ожидает одно или несколько событий.
Задача может ожидать события от канала коммутатора, порта ввода/вывода или таймера. Для каждого ресурса определена точка входа. Данные, необходимые для обработки каждого события, предварительно инициализированы и доступны непосредственно после события.
Задача в данном случае может быть представлена как машина состояний (конечный автомат), и по приходу события выполняется заданная для данного типа события последовательность операций.
Порты ввода/вывода
Программируемые порты ввода/вывода xCORE обладают удивительной гибкостью и производительностью [1]. Данные на порты передаются непосредственно от логических процессорных ядер, минуя оперативную память. Порты могут автоматически преобразовывать данные из параллельной формы в последовательную и наоборот, порты могут точно контролировать порядок выдачи/приема сигналов по времени (квант составляет 10 нс) — все эти возможности позволяют программно реализовать практически любой тип интерфейса (табл. 1).
Структурная схема |
Тип вывода |
Описание |
Ввод/вывод значений |
генерируется выходной сигнал через определенные временные интервалы |
|
считываются входные линии через заданные интервалы |
||
временное разрешение до 10 нс |
||
Временные штампы |
отмечается время совершения определенного события |
|
временное разрешение до 10 нс |
||
Компаратор |
ядро ожидает определенный уровень на выводе |
|
программно реализованный конечный автомат |
||
Синхронный стробированный порт |
данные с вывода считываются при наличии разрешающего сигнала и выбранного уровня тактового сигнала |
|
Преобразователь последовательный <—> |
32-битное преобразование параллельного кода в последовательный и наоборот |
|
битовая скорость до 60 Мбит/с |
Серии контроллеров семейства xCORE
На данный момент мультиядерные микроконтроллеры семейства xCORE представлены четырьмя сериями устройств. Все они имеют в своей основе одну архитектуру, что делает миграцию между сериями достаточно простой. Серии различаются по количеству процессорных сегментов, корпусному исполнению, допустимым рабочим диапазонам.
Серии микроконтроллеров xCORE [3–6] включают:
- xCORE General Purpose — базовая серия устройств. В состав микроконтроллеров данной серии входят только процессорные сегменты.
- xCORE-USB — микроконтроллеры дополнительно к процессорным сегментам содержат сегмент с аппаратно реализованным USB (USB PHY).
- xCORE-Analog — серия оптимизирована для промышленных применений, дополнительно к процессорным сегментам содержит сегмент с многоканальным 12‑битным АЦП.
- xCORE-XA — серия расширенной архитектуры (eXtended Architecture). Одно из логических ядер процессорного сегмента заменено на процессорное ядро ARM Cortex-M3.
- xCORE GENERAL PURPOSE (L‑SERIES)
Серия xCORE General Purpose [3] подходит для широкого спектра приложений — от управления двигателями до систем реального времени и автомобильных приложений.
Устройства представлены в вариантах с 4, 6, 8, 10, 12 и 16 логическими ядрами с общей вычислительной мощностью от 400 до 1000 MIPS. Микроконтроллеры в пределах серии можно разделить на две группы повыводно совместимых контроллеров — с повышенной производительностью и бюджетные варианты (рис. 3, табл. 2).
Микроконтроллер |
Количество |
ОЗУ, кбайт |
Количество линий ввода/вывода |
Производительность, MIPS |
Корпус |
Температурный |
XS1-L4A-64 |
4 |
64 |
28 |
400 |
TQFP48 |
Коммерческий/Промышленный |
XS1-L6A-64 |
6 |
64 |
64 |
500 |
TQFP48, LQFP64, TQFP128 |
Коммерческий/Промышленный |
XS1-L8A-64 |
8 |
|||||
XS1-L8A-128 |
8 |
128 |
84 |
1000 |
QFN124 |
Коммерческий/Промышленный |
88 |
FBGA324 |
Автомобильный |
||||
XS1-L10A-128 |
10 |
128 |
84 |
1000 |
QFN124 |
Коммерческий/Промышленный |
88 |
FBGA324 |
Автомобильный |
||||
XS1-L12A-128 |
12 |
128 |
84 |
1000 |
QFN124 |
Коммерческий/Промышленный |
88 |
FBGA324 |
Автомобильный |
||||
XS1-L16A-128 |
16 |
128 |
84 |
1000 |
QFN124 |
Коммерческий/Промышленный |
88 |
FBGA324 |
Автомобильный |
xCORE-USB (U‑SERIES)
Контроллеры серии xCORE-USB [4] дополнительно к процессорным сегментам содержат сегмент с аппаратно реализованным высокоскоростным USB-интерфейсом, поддерживающим скорость обмена до 480 Мбит/с и стандарт USB Audio Class 2. Контроллеры доступны в вариантах с 8, 10, 12 и 16 логическими ядрами. Сегмент с USB-интерфейсом дополнительно содержит многоканальный 12‑битный аналого-цифровой преобразователь.
Возможности контроллера расширены за счет добавления режимов низкого энергопотребления, обнаружения просадки напряжения, наличия сторожевого таймера.
xCORE-USB (рис. 4, табл. 3) ориентированы на рынок мультимедийных и аудио-устройств, включая устройства воспроизведения, микрофоны, многоканальные аудиоинтерфейсы, микшеры.
Микроконтроллер |
Количество |
ОЗУ, |
Количество |
Производи- |
Корпус |
Температурный диапазон |
XS1-U6A-64 |
6 |
64 |
38 |
500 |
FBGA96 |
Коммерческий/Промышленный |
XS1-U8A-64 |
8 |
|||||
XS1-U8A-128 |
8 |
128 |
78 |
1000 |
FBGA217 |
Коммерческий/Промышленный |
XS1-U10A-128 |
10 |
|||||
XS1-U12A-128 |
12 |
|||||
XS1-U16A-128 |
16 |
xCORE-ANALOG (A‑SERIES)
Серия xCORE-Analog (A‑Series) [5] расширена сегментом, содержащим 12‑битный многоканальный АЦП (до 8 каналов) со скоростью преобразования 1 Мвыб./с. Также сегмент АЦП имеет таймер реального времени, супервизор питания (детектирование просадки питания, формирование сигнала сброса по подаче питания, сторожевой таймер). Моменты выборки данных АЦП контролируются непосредственно портом контроллера.
В серии xCORE-ANALOG (рис. 5, табл. 4) аналоговый сегмент позволяет получать отсчеты входных аналоговых сигналов, благодаря системе связей отсчеты могут быть доступны любому из логических ядер в системе.
Микроконтроллер |
Количество |
ОЗУ, |
Количество |
Производи- |
Корпус |
Температурный |
XS1-A6A-64 |
6 |
64 |
42 |
500 |
FBGA96 |
Коммерческий/Промышленный |
XS1-A8A-64 |
8 |
|||||
XS1-A8A-128 |
8 |
128 |
90 |
1000 |
FBGA217 |
Коммерческий/Промышленный |
XS1-A10A-128 |
10 |
|||||
XS1-A12A-128 |
12 |
|||||
XS1-A16A-128 |
16 |
Супервизор питания позволяет переводить контроллер в режим ожидания, с общим потреблением порядка 500 мкВт. Выход из режима ожидания возможен либо по сигналу таймера реального времени, либо по изменению уровня на одном из внешних выводов.
xCORE-XA
В серии xCORE-eXtended Architecture (XA Family) [6] объединены технологии многопоточных контроллеров xCORE и ARM. В процессорном сегменте данных контроллеров вместо одного из логических ядер располагается низкопотребляющий контроллер с ядром ARM Cortex-M3 с набором периферийных устройств, типичным для ARM-контроллеров (UART, I2C, SPI, АЦП, ЦАП, в ряде вариантов USB2.0) и флэш-памятью (рис. 6, табл. 5).
Микроконтроллер |
Количество |
Производительность, MIPS |
ОЗУ, кбайт |
Флэш-память, кбайт |
Количество линий |
Корпус |
Температурный |
XS1-XA8A-512 |
7+Cortex M3 |
500 |
192 |
512 |
38/93 |
FBGA265 |
Коммерческий/Промышленный |
XS1-XAU8A-512 |
|||||||
XS1-XA8A-1024 |
1024 |
||||||
XS1-XAU8A-1024 |
Архитектура xCORE-XA позволяет разработчикам встраиваемых систем применять высокоуровневое программное обеспечение для конфигурирования устройства — задания необходимых узлов и интерфейсов, в то же самое время есть возможность использовать обширные библиотеки бинарных кодов и исходных текстов, доступных для ARM-контроллеров.
xCORE-XA представляет фактически полностью программируемую «систему на кристалле» (СнК) с достаточно высокой производительностью (до 500 MIPS). При этом программирование всей системы, в отличие от СнК типа «процессорное ядро + программируемая логика», осуществляется на языке С.
В качестве дополнительных возможностей предусмотрена гибкая система управления режимами энергопотребления. Например, менее 1 мкА необходимо для работы таймера реального времени, а также периферийных устройств, которые он тактирует. В режиме ожидания контроллер потребляет менее 100 нА и может быть переведен в активный режим по событию на линиях ввода/вывода.
Среда разработки и библиотеки программного обеспечения
Разработка программного обеспечения для микроконтроллеров в среде xTIMEcomposer Studio [7, 8]. Программирование можно осуществлять на языке С, С++ (точнее, на их несколько расширенной версии, адаптированной для архитектуры xCORE) или на ассемблере xCORE [7].
Наиболее удобный и простой подход — писать приложения на расширенном С, называемом XMOS — xC. В xC внесены языковые конструкции для поддержки многозадачности, управления временными параметрами, передачи данных и синхронизации между отдельными задачами. Кроме того, xC позволяет программисту самому распределять ресурсы микроконтроллера, если это необходимо, в частности, осуществлять привязку задач к конкретным логическим ядрам или сегментам в процессорной системе.
Отладчик среды разработки XMOS GNU Debugger (GDB) и статический временной анализатор XTA static timing analyzer позволяют решать проблемы функциональной отладки приложений и проверить код на соответствие требованиям реального времени.
Установить правильность результатов отладки можно, запустив приложение на выполнение (в симуляторе или на реальном контроллере), а затем проанализировать поведение приложения в инструменте XScope.
При отладке приложения его код загружается в контроллер посредством JTAG-интерфейса, для применения в конечной системе исполняемый код записывается во внешнюю флэш-память. При необходимости код, помещаемый во внешнюю память, может быть защищен шифрованием.
Для разработчиков XMOS предоставляет набор программных библиотек xSOFTip [8], содержащий примеры программ, реализующих некоторые алгоритмы ЦОС, алгоритмы работы периферийных устройств, интерфейсов передачи данных, примеры приложений для отладочных плат и комплектов. Библиотека постоянно пополняется и расширяется. Помимо xSOFTip, помощь в разработке программного обеспечения может быть получена со стороны сообщества разработчиков. Списки наиболее интересных программных модулей и библиотек представлены в таблицах 6 и 7.
Программные модули |
Библиотеки |
|
ЦОС, работа со звуком |
Long-Delay Function Library |
|
Non-linear Gain Function Library |
||
BiQuad Filter Function Library |
||
Short-Delay Function Library |
||
Reverb Function Library |
||
DSP Audio Utilities Function Library |
||
Short-Reverb sliceKIT Audio Demo |
||
Level Meter Display |
||
BiQuad Filter sliceKIT Audio Demo |
||
Simple FFT Function Library |
||
Алгоритмы общего назначения |
Random number generation module |
|
Lock Handling Library |
||
OTP Reading Library |
||
Lightweight and flexible assertion module |
||
Работа с внешними устройствами |
Дисплей |
JPEG Decoder Component |
Touch Screen Driver Component |
||
Parallel RGB LCD Driver |
||
Touch Screen Driver Function Library |
||
Display Controller |
||
Touchscreen Controller Library |
||
Внешняя память |
External SRAM memory Controller |
|
SDRAM Memory Controller |
||
SDRAM Memory Translation Function Library |
||
SDRAM Regression Application |
||
SDRAM_Reverb Function Library |
||
Управление шаговыми двигателями |
Stepper Motor Motion Contrtoller |
|
Stepper Driver Pulse Generator Component |
Типы |
Библиотеки |
Основные |
ADAT Transmitter |
MIDI Component |
|
S/PDI |
|
TDM Audio Driver Component |
|
I2S Master Audio Driver |
|
UART Transmitter |
|
SPI Master/Slave |
|
Quad SPI Flash Controller SPI RS485 Transceiver Component |
|
I2C Functions Library |
|
I2C Master (Single Bit Ports) Function Library |
|
SPI Master Function Library |
|
Сетевые |
Ethernet |
External WIFI Module Controller |
|
Embedded Webserver Function Library |
|
Ethernet/TCP Module |
|
SMI Ethernet Phy Protocol Library |
|
Layer 2 Ethernet MAC |
|
Wi-Fi TiWi-SL Module Driver |
|
Промышленные |
CANopen Stack Component |
Profibus DP Slave Stack Component |
|
Ethercat Slave Data Link Layer Controller (ESC) |
|
LIN Bus Master/Slave Modbus RTU (Slave) Server Component |
|
Profibus Fieldbus Data Link Layer (FDL) Slave Controller |
|
Modbus TCP Server (Slave) Component |
|
Powerlink Slave Node |
|
LIN Bus Component |
|
CAN Bus Module |
|
Ethercat Slave Stack |
Отладочные средства для микроконтроллеров семейства xCORE
XMOS и ее партнерами для освоения архитектуры xCORE, а также в качестве примеров вариантов включения микроконтроллеров предлагается ряд отладочных плат и отладочных комплектов [9–11].
sliceKIT MODULAR DEVELOPMENT SYSTEM
Базовыми отладочными комплектами для работы с микроконтроллерами xCORE можно считать отладочные наборы sliceKIT [9], состоящие из основной платы (рис. 7), содержащей микроконтроллер с 16 логическими ядрами, и нескольких плат расширения, подключаемых к основной плате разъемами.
Подобное решение позволяет достаточно быстро производить макетирование целевых устройств, включая интерфейсы с внешними системами и человеком.
Дополнительные платы расширения из отладочного набора представляют собой платы расширения линий ввода/вывода, плата с Ethernet-интерфейсом, плата с разъемом и необходимой обвязкой для подключения графического LCD, платы с внешней оперативной памятью, интерфейсами MUART, CAN, LIN, RS‑232, плата с беспроводным Wi-Fi-модулем, плата для подключения аудиоустройств.
Прекрасным вариантом начать работу с контроллерами xCORE является недорогая отладочная плата starterKit [10] (рис. 8). Она содержит двухсегментный контроллер xCORE с дополнительным аналоговым сегментом. Один из процессорных сегментов используется как внурисхемный отладчик, второй сегмент совместно с аналоговым сегментом работает как 8‑потоковый контроллер серии xCORE-ANALOG с четырьмя каналами АЦП.
На плате расположено несколько разъемов — для подключения плат из наборов sliceKit, для подключения внешних устройств (включая разъем, совместимый по распиновке с разъемом популярного одноплатного компьютера Raspberry Pi), для подачи аналоговых сигналов. Также на плате размещено несколько светодиодов, два сенсорных четырехэлектродных слайдера и кнопка.
Кроме упомянутых отладочных средств доступен и ряд других, в том числе представленных и третьими фирмами [11].
Заключение
Завершая далеко не полный обзор микроконтроллеров xCORE от XMOS, можно отметить следующее. Контроллеры семейства обладают достаточно высокой производительностью, сопоставимой с производительностью наиболее мощных семейств микроконтроллеров, построенных на архитектуре ARM. В сравнении с мультиядерными микроконтроллерами микроконтроллеры xCORE смотрятся также довольно неплохо (табл. 8). Однако по общему уровню потребления энергии микроконтроллеры xCORE больше подходят для устройств с достаточно емкими источниками питания с возможностью периодической зарядки.
Процессор |
Количество ядер |
Разрядность |
Миллионов операций |
Количество потоков на ядро |
Удельная потребляемая ядром мощность, мВт/МIPS |
Многоядерные процессоры |
|||||
GA144F18A1 |
144 |
18 |
650–700 |
1 |
0,018 |
Tile64pro |
64 |
32 |
700–866 |
1 |
0,3–0,45 |
Tile-Gx100 |
100 |
64 |
3000–4500 |
1 |
0,033–0,11 |
AsAP-II |
167 |
16 |
66–1000 |
1 |
0,001–0,06 |
CSX700 |
192 |
32 |
250 |
1 |
0,188 |
Мультиядерные процессоры и микроконтроллеры |
|||||
Mips32 1004k |
4 |
32 |
800 |
2 |
0,125 |
xlp832 |
8 |
32 |
500–2000 |
4 |
3–3,75 |
xCORE |
4 |
32 |
400–500 |
8 |
0,45 |
Propeller P8X32A |
8 |
32 |
20 |
1 |
6,25 |
SPEAr600 (ядра ARM Cortex-A9) |
2 |
32 |
600–800 |
1 |
0,5–0,9 |
МС-12 (1892ВМ3Т) |
2 |
32/64 |
80/320 |
1 |
0,009/0,0016 |
МС-24 (1892ВМ2Я) |
Особенности xCORE:
- аппаратная поддержка многозадачности;
- гибкая подсистема ввода/вывода, обеспечивающая времена реакции на внешние события, и ввод/вывод с тактами от 10 нс;
- возможность масштабирования системы путем наращивания количества ядер и микроконтроллеров.
Приятным дополнением является мощная среда разработки, наличие аппаратных и программных средств отладки кода, большой набор библиотечных функций.
Можно сказать, что технологии микроконтроллеров xCORE дают преимущества многопоточного программирования в сегмент встраиваемых систем, позволяя естественным образом проводить декомпозицию задачи на подзадачи и простыми средствами организовать взаимодействие подзадач. К тому же наиболее важные функции, присущие ОС реального времени, реализованы в xCORE аппаратно. Программная реализация периферийных устройств позволяет легко исправлять возможные ошибки в алгоритмах их функционирования.
- Inside the xCORE architecture. XMOS Multicore microcontrollers
- THE xCORE DIFFERENCE XMOS Multicore microcontrollers
- xCORE GENERAL PURPOSE (L‑SERIES)
- xCORE-USB (U‑SERIES)
- xCORE-ANALOG (A‑SERIES)
- xCORE-XA with ARM Cortex-M3 XMOS Multicore microcontrollers
- xTOOLS, our suite of tools XMOS Multicore microcontrollers XMOS
- Support XMOS
- sliceKIT XMOS
- STARTER KITS XMOS
- PARTNER MODULES XMOS