Проектирование для FPGA требует аппаратного языка описания (HDL). HDL абсолютно не похожи на C. В то время как программа на C представляет собой последовательную последовательность инструкций и должна искажать себя для достижения параллельного выполнения, HDL описывает параллельную схему и должна искажать себя для достижения последовательного выполнения. Это совсем другой мир, и если вы попытаетесь построить схему в ПЛИС, думая как разработчик программного обеспечения, это повредит.
MCU ограничен по времени. Чтобы выполнить больше работы, вам нужно больше процессорных циклов. Часы имеют очень реальные ограничения по частоте, поэтому легко попасть в вычислительную стену. Тем не менее, FPGA ограничена в пространстве. Чтобы выполнить больше работы, вы просто добавляете больше цепей. Если ваша FPGA недостаточно велика, вы можете купить большую. Очень сложно создать схему, которая не подходит для самой большой FPGA, и даже если вы это сделаете, есть заметки о приложениях, описывающие, как объединять FPGA в цепочку.
FPGA больше ориентированы на параллельное выполнение. Иногда вам нужно беспокоиться о том, сколько времени требуется ISR вашего MCU для обслуживания прерывания, и сможете ли вы достичь своих жестких ограничений в реальном времени. Однако в FPGA постоянно работает множество конечных автоматов (FSM). Они как «фемто-контроллеры», как маленькие облака управляющей логики. Все они работают одновременно, поэтому не стоит беспокоиться об отсутствии прерывания. У вас может быть FSM для взаимодействия с АЦП, другой FSM для взаимодействия с адресной / микроконтроллерной шиной, другой FSM для потоковой передачи данных на стереокодек, и еще один FSM для буферизации потока данных от АЦП до кодека ... Вы Нужно использовать симулятор, чтобы убедиться, что все автоматы поют в гармонии.
ПЛИС - это мечта дизайнера макетов печатных плат. Они чрезвычайно настраиваемы. У вас может быть много различных логических интерфейсов (LVTTL, LVCMOS, LVDS и т. Д.), С различными напряжениями и даже мощностями привода (поэтому вам не нужны резисторы с последовательным выводом). Пальцы могут быть заменены; Вы когда-нибудь видели адресную шину MCU, где контакты были разбросаны по всему чипу? Ваш дизайнер печатных плат, вероятно, должен отказаться от нескольких переходов, чтобы правильно связать все сигналы. С помощью FPGA разработчик печатной платы может затем подавать сигналы в микросхему практически в любом удобном для них порядке, а затем дизайн может быть аннотирован обратно в цепочку инструментов FPGA.
У FPGA также есть много хороших, причудливых игрушек. Одним из моих любимых является Digital Clock Manager в чипах Xilinx. Вы подаете ему один тактовый сигнал, и из него можно получить еще четыре, используя широкий спектр множителей и делителей частоты, все с чистым рабочим циклом 50% и фазой 100% ... и это может даже учитывать сдвиг тактовой частоты, что возникает из-за задержек распространения вне чипа!
РЕДАКТИРОВАТЬ (ответ на добавление):
Вы можете поместить «мягкое ядро» в ПЛИС. Вы буквально соединяете микроконтроллерную схему, или, скорее, вы добавляете в свой проект чужую схему, например, PicoBlaze от Xilinx, MicroBlaze или Nios от Altera. Но, как и в C-> VHDL-компиляторах, эти ядра имеют тенденцию быть немного раздутыми и медленными по сравнению с использованием FSM и канала передачи данных или реального микроконтроллера. Инструменты разработки также могут значительно усложнить процесс проектирования, что может быть плохо, если ПЛИС - это уже чрезвычайно сложные микросхемы.
Есть также некоторые FPGA, в которые встроены «жесткие ядра», например серия XtexX Virtex4, в которой установлен настоящий IBM PowerPC с матрицей FPGA.
EDIT2 (ответ на комментарий):
Я думаю, что теперь вижу ... вы спрашиваете о подключении дискретного MCU к FPGA; т.е. две отдельные фишки. Есть веские причины для этого; FPGA с жесткими ядрами и достаточно большими, чтобы поддерживать достойные мягкие ядра, обычно являются монстрами со многими сотнями выводов, для которых требуется пакет BGA, что легко увеличивает сложность проектирования печатной платы в 10 раз.
Тем не менее, C намного проще, поэтому микроконтроллеры определенно работают вместе с FPGA. Поскольку легче написать C, вы можете написать «мозг» или центральный алгоритм в MCU, в то время как FPGA может реализовывать суб-алгоритмы, которые могут нуждаться в ускорении. Попытайтесь поместить вещи, которые изменяются, в код C, потому что это легче изменить, и оставьте FPGA более специализированным типом, который будет меняться не часто.
Инструменты проектирования MCU также проще в использовании. Инструментам проектирования требуется несколько минут, чтобы создать битовый файл FPGA, даже для несколько простых проектов, но сложные программы MCU обычно занимают несколько секунд. С микроконтроллером можно пойти гораздо дальше, поэтому их легче отлаживать ... Я не могу понять, насколько сложными могут быть ПЛИС. Вам действительно нужно получить таблицу данных для той, которая у вас есть, и вы должны постараться прочитать каждую ее страницу. Я знаю, это несколько сотен страниц ... сделай это в любом случае.
Лучший способ их подключения - использовать MCU с внешним адресом и шиной данных. Затем вы можете просто отобразить в памяти схемы FPGA в MCU и добавить свои собственные «регистры», каждый из которых имеет свой собственный адрес. Теперь FPGA может добавлять пользовательские периферийные устройства, такие как 32-разрядный таймер, который может фиксировать все 4 байта за раз, когда первый байт считывается, чтобы предотвратить переполнение между 8-разрядными считываниями. Вы также можете использовать его как связующую логику для отображения в памяти большего количества периферийных устройств от других чипов, например, отдельного АЦП.
Наконец, некоторые микроконтроллеры предназначены для использования с «внешним мастером», таким как ПЛИС. Cypress делает несколько USB MCU, которые имеют 8051 внутри, но цель состоит в том, чтобы данные USB создавались / потреблялись, например, FPGA.