FPGA, ASIC или микроконтроллер: как выбрать под задачу
Вопрос «на чём делать» звучит как вопрос о вкусе, но на самом деле ответ почти всегда следует из двух чисел: сколько изделий планируется и сколько операций должно выполняться параллельно. Три варианта — микроконтроллер, программируемая логическая схема и заказная микросхема — решают одну и ту же задачу принципиально разными способами, и разница между ними не в списке функций, а в том, как вы платите за сложность. Путь от вентиля до готового устройства проходит через страницу «Схемотехника».
Три способа превратить идею в железо
- Микроконтроллер — это готовый процессор с памятью, тактовым генератором и периферией в одном корпусе. Вы пишете прошивку: последовательность команд, которую процессор выполняет одна за другой. Логика, которая вам нужна, получается из команд, а не из соединений.
- FPGA — это матрица программируемых логических элементов и триггеров, соединённых программируемой сетью. Вы описываете схему из вентилей, и после загрузки конфигурации она работает как обычная аппаратная схема: все ветви одновременно, а тактовый сигнал лишь отмечает моменты, когда триггеры обновляются. Программируемость означает, что ту же плату можно перепрошить под другую задачу.
- ASIC — это заказная микросхема, спроектированная под вашу схему: транзисторы, металлизация и дорожки создаются по вашим чертежам. Функционально она может сделать ровно то же, что и плата на FPGA, но изготовить её стоит целый проект с комплектом масок, и повторить этот проект дешевле не получится.
| Свойство | Микроконтроллер | FPGA | ASIC |
|---|---|---|---|
| Что описываете вы | Прошивку на языке программирования | Схему из вентилей на языке описания аппаратуры | Схему, а затем размещение и трассировку |
| Разовые затраты | Низкие | Низкие | Очень высокие: проект и комплект масок |
| Цена одного изделия | Низкая | Заметная | Самая низкая при большом тираже |
| Срок до работающего образца | Дни | Недели | Месяцы, а первый рабочий экземпляр — только после верификации |
| Параллелизм | Один поток команд, многокоординатность — явление в программировании | Одновременно всё, что нарисовано | Полностью под вашим контролем |
| Предсказуемость времени | Считается в тактах, если смотреть в datasheet | Задаётся длиной цепочки элементов, инструмент считает сам | Считается до изготовления |
| Переделка | Перепрошивка | Перепрошивка | Новый комплект масок |
Последняя строка таблицы определяет всё остальное. Там, где переделка бесплатна, решение можно отложить, проверить и исправить. Там, где переделка означает новый цикл проектирования, ошибка становится дорогой, и её стараются не допустить, вкладываясь в проверку заранее.
Путь решения
Когда выигрывает микроконтроллер
Начните с микроконтроллера, потому что чаще всего он и есть правильный ответ. Задачи «считать импульсы с датчика, читать температуру, переключать выходы по расписанию, мигать лампой» не требуют ничего, кроме готовой микросхемы и прошивки. Вся обвязка уже внутри: память для программы, память для данных, тактовый генератор, отдельные преобразователи питания не требуются, сертифицировать ничего не нужно. Потребление в состоянии покоя у микроконтроллера настолько мало, что батарейки хватает месяцами, и это качество, ради которого микроконтроллеры чаще всего и выбирают.
Цена этого удобства — последовательность. Процессор выполняет команды одна за другой, и если задача требует обслуживать два десятка входов строго одновременно, один поток команд перестаёт справляться. Дальше есть три выхода: разбить задачу между несколькими микроконтроллерами, уйти в более быстрый класс микроконтроллеров или взять FPGA. Первый путь недооценивают чаще всего, и он часто самый дешёвый: два дешёвых микроконтроллера, каждый со своей задачей, стоят дешевле одной программируемой логики и не требуют освоения нового инструментария.
Когда выигрывает FPGA
FPGA отвечает на задачу «логика должна работать параллельно и предсказуемо». Там, где микроконтроллер обязан гарантировать время реакции подсчётом тактов и заранее закладывать запас, FPGA даёт время, заданное длиной цепочки элементов, и считает его инструмент при разводке. Параллельных ветвей может быть сколько угодно, и их число задаётся вами, а не длиной программы.
Вторая причина, не менее важная, — перенастройка. Одна и та же плата может сначала служить стендом, потом стенд с другой конфигурацией, потом рабочим изделием. Это меняет экономику проекта целиком: вместо того чтобы закладывать отдельную схему под каждый вариант, вы перезаписываете конфигурацию. Именно поэтому FPGA остаются стандартом для прототипов, а не только для конечных изделий.
Платить за это приходится двумя вещами. Первая — цена одного изделия: логическая матрица сама по себе дороже микроконтроллера, и при большом тираже эта разница складывается. Вторая — привязка к инструментарию производителя: написанный проект переносится на другую плату с трудом, потому что он привязан к ресурсам и библиотекам конкретной микросхемы. Обе цены известны заранее и должны входить в расчёт до начала работы, а не после.
Когда выигрывает ASIC
ASIC имеет смысл, когда объём выпуска оправдывает разовые затраты, а требования к потреблению, площади или частоте уже не выполняются на программируемой матрице. Экономика простая: заказная микросхема требует разовых затрат, которые сразу перекрывают цену программируемой матрицы, и почти ничего сверх того на каждом следующем экземпляре, поэтому чем больше тираж, тем раньше пересекается точка окупаемости. Точное место пересечения зависит от размера кристалла и от того, сколько места он занимает на плате, поэтому её считают заранее, до первой заливки.
Существенная часть затрат здесь не в масках, а в проверке. Заказная микросхема не перепрошивается, значит ошибку нельзя исправить после изготовления, и всё внимание уходит на то, чтобы не допустить её раньше. Отсюда объём работ, который обычно удивляет новичков: моделирование, написание проверяющих тестов, анализ покрытия, проверка правил проектирования, сравнение схемы с исходным описанием, размещение и трассировка, и только после этого заказ масок. Именно поэтому сроки ASIC измеряются месяцами, а первая партия приходит заметно позже, чем первые экспериментальные образцы.
Отдельно стоит сказать про энергопотребление, потому что это главный аргумент «за» заказную схему. Программируемая конфигурация и служебная логика потребляют энергию даже когда полезной работы почти нет, а маршрутизация внутри матрицы вносит задержки, которые невозможно убрать. Специализированная схема лишнего не потребляет, и на большом тираже это даёт экономию, которую не даёт ни FPGA, ни микроконтроллер.
Ошибки, которые встречаются чаще всего
- Начинать с ASIC. Первая же потребность измениться после изготовления означает новый цикл проектирования. Если изделие ещё не определено, это самая дорогая ошибка из возможных.
- Брать FPGA «на вырост». Матрица вдвое больше нужного стоит вдвое дороже и почти не даёт выигрыша, если задача укладывается в меньшую.
- Планировать FPGA как ASIC. Рассчитывать на то, что «потом перенесём», нельзя: проект, написанный под ресурсы конкретной микросхемы, переносится тяжело, и часто приходится переписывать, а не переносить.
- Забыть про проверку. В ASIC проверка стоит дороже, чем маски, и сокращать её — значит оплачивать переделанную кристаллу.
- Недооценить микроконтроллер. Задачи, которые кажутся сложными, часто решаются прошивкой на несколько страниц, и никакая программируемая логика не даст того же результата дешевле.
- Считать скорость по цифре на коробке. Частота, тактов и «миллион операций в секунду» означают разные вещи у разных классов, и сравнивать их без учёта того, что именно считается, бессмысленно.
Чем FPGA отличается от микроконтроллера?
Микроконтроллер — это готовый процессор с памятью и периферией, программируемый прошивкой: логика собирается из команд, которые он выполняет по очереди. FPGA — это программируемая матрица из логических элементов и триггеров, логика собирается из соединений между ними и работает параллельно, не подчиняясь порядку команд. Отсюда главное различие: у микроконтроллера время ответа известно по тактам, у FPGA оно задано задержкой цепочки элементов, а число параллельных операций у FPGA не ограничено длиной программы.
Когда ASIC выгоднее FPGA?
Когда изделий достаточно много, чтобы компенсировать разовые затраты на проект и комплект масок, а требования к потреблению, площади или тактовой частоте уже не выполняются на программируемой матрице. При этом стоимость разработки ASIC включает не только маски: значительная её часть приходится на проверку, и именно она чаще всего определяет сроки. Для единичных изделий или опытных партий ASIC не подходит никогда.
Когда микроконтроллер лучше FPGA?
Когда задача сводится к последовательному управлению: считать импульсы, читать датчики, переключать реле, мигать лампой. Микроконтроллер уже содержит всю обвязку, программа пишется за день, а потребление в сонном состоянии ни с чем не сравнимо. Платить за программируемую логику имеет смысл, только когда нужно выполнять много операций одновременно или гарантировать время реакции жёстче, чем даёт порядок команд.
Почему в этом курсе сначала собирают процессор, а потом переходят к плате?
Потому что так дешевле всего ошибаться. В симуляторе или на микроконтроллере можно собрать процессор целиком, увидеть его работу такта за тактом и понять, где ошибка, не производя ни одной печатной платы. Когда схема уже работает и её поведение понятно, перенос на программируемую логику становится механической работой, а не поиском ошибки в железе. Плата сразу даёт доступ к временным характеристикам, которых в симуляторе нет.
Проверьте себя
Можно ли взять проект, работающий на FPGA, и просто перенести его в ASIC?
Не перенести, а переписать — и это главная ловушка. Проект, который использует ресурсы конкретной микросхемы, опирается на готовые блоки памяти, умножители, PLL и стандарты ввода-вывода, и в заказной схеме у этих блоков нет. Даже если логика описана переносимо, время достигается по-другому: маршрутизация внутри матрицы короткая и предсказуемая, а в кремнии длина дорожек и нагрузки определяют, закроет ли схема частоту. Поэтому перенос начинают с того, что на этапе разработки держат логику в переносимом подмножестве языка и выносят физические ограничения наружу, а затем всё равно проводят проверку заново.
Сколько изделий нужно, чтобы ASIC стал выгоднее FPGA?
Считается это просто: разовые затраты на ASIC делятся на разницу в цене одного изделия между FPGA и заказной микросхемой, с учётом корпуса и проверки. Чем больше кристалл, тем дороже и разовая часть, и тем позже точка окупаемости; чем мельче изделие, тем раньше она наступает. Единой цифры нет: результат зависит от размера схемы, от цен на маски и от того, что именно вы сравниваете. Считать это нужно по реальным предложениям, до начала проектирования, потому что ответ легко перевернуть.
Устройство должно месяцами работать от батарейки. Что выбрать?
Сначала надо посчитать, что именно потребляет энергию. Если устройство спит между событиями, решает не тип микросхемы, а ток в состоянии покоя выбранной модели, и здесь микроконтроллер обычно вне конкуренции: он уже умеет засыпать, просыпаться по событию и не гонять логику, пока она не нужна. Если же устройство должно непрерывно обрабатывать поток данных, экономия на масштабируемой логике становится основным аргументом, и появляется смысл в заказной схеме. Общее правило: сначала измеряют профиль нагрузки, а уже потом выбирают класс микросхемы.
Почему в этом курсе порядок обратный
В этом курсе сначала собирают процессор из вентилей в симуляторе, потом запускают его на микроконтроллере, и только в самом конце переносят на програмтируемую логику — на плату Tang Nano. На первый взгляд порядок странный: раз уж задача про схемотехнику, логично сразу взять плату. На самом деле это самый дешёвый способ ошибаться.
В симуляторе или на микроконтроллере можно собрать процессор целиком, увидеть его работу такта за тактом и понять, где именно ошибка, не производя ни одной печатной платы. Регистр показывает своё значение, такт можно остановить и сделать шаг, сигналы на каждом такте можно сравнить с ожиданием. Когда схема работает и её поведение понятно, перенос на плату превращается в механическую работу, а не в поиск ошибки в железе. Подробнее о плате и её возможностях — в руководстве по Tang Nano, о самом процессоре и его архитектуре — в материале про архитектуру RISC-V, а о языке описания схем — в статье Verilog — это не программирование.
Порядок «от простого к сложному» здесь работает и в обратную сторону: тот, кто прошёл симулятор, понимает, зачем вообще нужна плата. А тот, кто начал с платы и упёрся в неработающую схему, обычно не может отличить ошибку в логике от ошибки во временных характеристиках, потому что не знает, что именно должно происходить на каждом такте.