Недавно я собрал мощный преобразователь напряжения для клиента, и на протяжении всего проектирования я старался избежать использования микроконтроллера (MCU). Как только клиент захотел добавить функцию диммирования на плату, мне пришлось добавить небольшой компонент с EEPROM на 100 000 циклов. Для меня это не было большой проблемой, так как было довольно просто потратить $0.33 на плату, чтобы добавить эту функцию, а также позволить системе быть переконфигурированной позже. Это заставило меня задуматься об интересном вопросе: когда следует выбирать FPGA вместо MCU?
Дизайнеры, с которыми я работаю, живут и дышат модулями/SoC MCU от Arm, STM, TI и Nordic, в основном благодаря поддержке производителя через SDK. А что насчет FPGA? Можно ли ожидать такого же уровня поддержки и следует ли использовать FPGA для встраиваемого компонента? Ответ на этот тип вопроса не всегда прост. Вот что следует учитывать при выборе между FPGA и MCU и где вы можете найти новые компоненты для ваших плат.
Я помню, когда впервые серьезно начал работать в области электронного дизайна и начал разбираться в алфавитном супе из аббревиатур различных компонентов. Сначала было сложно увидеть различия между некоторыми цифровыми процессорами, но понимание ограничений каждого компонента для различных приложений хорошо мне послужило. Ограничения того, что вы можете программировать в эти процессоры, также были критически важны для понимания, когда выбирать каждый тип компонента.
Я скоро затрону эти аспекты, но иногда мне все еще задают вопрос от молодого дизайнера: что такое FPGA и MCU? Оба обеспечивают вычислительную мощность, так что они должны быть идеальными заменами, верно? Это зависит от того, какое приложение вам нужно выполнить.
Чтобы понять различия между компонентами FPGA и MCU, полезно сравнить их с ASIC. Буква «A» в ASIC говорит вам, что компонент разработан для конкретного приложения в более крупной системе. Примеры включают:
Список можно продолжать. Любой ASIC обеспечивает очень специфические, иногда программируемые функции для узкого диапазона задач. Уровень интеграции в ASIC также варьируется в зависимости от чипа. Микроконтроллер также в некоторой степени программируем, хотя задачи, которые можно выполнить, шире, чем то, что встроено в прошивку ASIC. MCU созданы для адаптации и выполнения любой задачи, которую вы можете запрограммировать в устройство с помощью SDK производителя.
Веселье и сложности начинаются с ПЛИС. Мне нравится думать о ПЛИС как о настраиваемых ASIC. Если оксюморон вас смущает, просто знайте, что вы можете использовать ПЛИС в качестве части прототипирования при проектировании ASIC. Это потому, что все логические блоки на ПЛИС настраиваемые (они по сути ячейки SRAM). Вы создаете прошивку с нуля, и можете определить, как задачи будут выполняться на устройстве на аппаратном уровне. Это то, что вы не можете сделать с MCU или ASIC.
FPGA против MCU против ASIC: специфический против универсального спектра.
Забавно, но SoC могут быть от специфических до универсальных с точки зрения вычислительных возможностей. Производители компонентов используют термин «SoC», «SoM» или «SiP» для новой интегральной схемы, выполняющей ряд задач, при условии, что эти задачи ранее требовали использования нескольких отдельных интегральных схем. Эти компоненты высокоинтегрированы, и они могут находиться где угодно на спектре от специфического до универсального.
Где-то справа от ПЛИС на вышеупомянутой графике будут MPU. Эти устройства работают под управлением операционной системы, взаимодействуют с множеством периферийных устройств и являются основой вычислений общего назначения. Некоторые могут спорить, что MCU и ПЛИС должны поменяться местами в терминах универсальности (см. ниже), но ни ПЛИС, ни MCU не предназначены для такого же типа общих вычислений, как MPU.
В таблице ниже показано краткое сравнение некоторых наиболее важных аспектов MCU и ПЛИС. Каждый тип компонента имеет свои преимущества, и выбор зависит от разработчика, что лучше для его системы. Лично я предпочитаю MCU, потому что у меня есть некоторый опыт работы на C, и я никогда не изучал HDL. Однако ПЛИС можно программировать для выполнения некоторых тех же функций, что и специализированные ASIC, если вы знаете, как их кодировать.
| | ПЛИС | MCU | | ---------- | ---------- | ---------- | | Перепрограммирование| Полностью перепрограммируем на аппаратном уровне | Варьируется: зависит от встроенной операционной системы, динамично | | Время программирования | Дольше: требует перекодирования и перекомпиляции всего в машинный код | Короче: содействие SDK и библиотек производителя | | Простота программирования | Считается, что имеет более крутой кривой обучения | Просто: любой, кто знаком с общими языками, может программировать | | Потребление энергии | Выше | Ниже | | Параллелизация | Может быть настроена во время программирования | Ограничено архитектурой аппаратного обеспечения | | Фиксированная vs. плавающая точка | Настроено для фиксированной точки, но плавающая точка может быть реализована во время программирования | Доступны оба | | Языки | Язык описания аппаратуры (HDL) | C/Ассемблер, другие, если поддерживаются RTOS (например, Python) |
Поскольку FPGA часто считаются сложными в программировании для начинающих разработчиков, MCU обычно рассматривается как лучший процессор для встраиваемого устройства. В этом в значительной степени помогло сообщество открытого кода, и некоторые проекты с открытым исходным кодом могут использоваться в качестве базовой архитектуры или концепции для нового продукта. Добавьте к этому поддержку от производителей, и у вас будет множество инструментов для программирования MCU.
Несмотря на крутой изгиб кривой обучения программированию FPGA, они гораздо более настраиваемы с точки зрения архитектуры прошивки. Параллелизация может быть запрограммирована в устройство в зависимости от количества доступных LUT и ALU. Это делает FPGA отличным выбором, когда ваша прошивка должна быть разработана для очень конкретных приложений. Примеры включают вывод в ИИ, обработку изображений, алгоритмы управления оборудованием и другие задачи, требующие повторяющихся (или параллельных) вычислений.
Ваша следующая встраиваемая система никуда не денется без правильных компонентов, и вы можете найти необходимые компоненты, используя поисковую систему электронных компонентов, такую как Octopart. Расширенные функции фильтрации помогут вам сузить поиск до необходимых компонентов и помогут быстро сделать выбор между FPGA и MCU для вашей следующей системы. Вы можете найти FPGA и MCU на Octopart.
Оставайтесь в курсе наших последних статей, подписавшись на нашу рассылку.