ASIC против FPGA
Программируемый в полевых условиях вентильный массив можно рассматривать как этап создания прототипа интегральных микросхем для конкретных приложений: ASIC очень дороги в изготовлении, и после его изготовления возврат не происходит (поскольку самая дорогая фиксированная стоимость - это трафарет типа маски). "] и их развитие). FPGA перепрограммируются много раз, однако из-за того, что общий массив вентилей связан для достижения вашей цели, он не оптимизирован, как ASIC. Кроме того, ПЛИС являются динамическими устройствами в том смысле, что при отключении питания вы теряете не только текущее состояние, но и конфигурацию. В настоящее время существуют платы, в которых добавлена микросхема FLASH и / или микроконтроллер для загрузки конфигурации при запуске, так что это, как правило, менее важный аргумент. Как ASIC, так и FPGA могут быть настроены с языками описания аппаратного обеспечения, и иногда ПЛИС используются для конечного продукта. Но, как правило, ASIC включаются, когда дизайн исправлен.
FPGA против микроконтроллера
Что касается различия между микроконтроллером и FPGA, вы можете считать микроконтроллер ASIC, который в основном последовательно обрабатывает код во FLASH / ROM. Вы можете создавать микроконтроллеры с ПЛИС, даже если они не оптимизированы, но не наоборот. ПЛИС подключены так же, как электронные схемы, так что вы можете иметь действительно параллельные схемы, а не как в микроконтроллере, где процессор перепрыгивает с одного фрагмента кода на другой, чтобы имитировать достаточно хороший параллелизм. Однако поскольку FPGA были разработаны для параллельных задач, писать последовательный код не так просто, как в микроконтроллере.
Например, как правило, если вы пишете в псевдокоде «пусть C будет XOR B», на FPGA, которая будет преобразована в «построить вентиль XOR с содержащимися в нем лего-кирпичами (таблицы поиска и защелки), и подключите A / B в качестве входов». и C в качестве выхода ", который будет обновляться каждый тактовый цикл независимо от того, используется ли C или нет. В то время как на микроконтроллере, который будет переведен в «инструкцию чтения - это XOR переменных по адресу A и адресу B RAM, результат для хранения по адресу C. Загрузите регистры арифметической логики, затем попросите ALU сделать XOR, затем скопировать регистр вывода по адресу С ОЗУ ". На стороне пользователя обе инструкции представляли собой 1 строку кода. Если бы мы делали это, ТОГДА что-то еще, в HDL нам пришлось бы определять то, что называется процессом для искусственного выполнения последовательностей - отдельно от параллельного кода. Тогда как в микроконтроллере делать нечего. С другой стороны, чтобы получить «параллелизм» (на самом деле настраивая и выводя) из микроконтроллера, вам нужно было бы манипулировать потоками, что не является тривиальным Разные способы работы, разные цели.
В итоге:
ASIC против FPGA: фиксированный, более дорогой для небольшого количества продуктов (более дешевый для больших объемов), но более оптимизированный.
ASIC против микроконтроллера: конечно, как сравнивать инструмент с молотком.
FPGA против микроконтроллера: не оптимизирован для последовательной обработки кода, но также может очень легко выполнять действительно параллельные задачи. Обычно FPGA программируются на HDL, микроконтроллеры на C / Assembly.
Всякий раз, когда скорость параллельных задач является проблемой, возьмите FPGA, доработайте свой дизайн и, наконец, сделайте его ASIC, если он будет дешевле для вас в долгосрочной перспективе (массовое производство). Если с последовательными задачами все в порядке, возьмите микроконтроллер. Я полагаю, что из этого вы могли бы сделать еще более специфическую для конкретного приложения микросхему, если она будет дешевле для вас в долгосрочной перспективе. Лучшим решением, вероятно, будет и то и другое.
Какой быстрый поиск после написания этого дал мне:
FPGA против микроконтроллеров, на этом самом форуме