Проектування для FPGA вимагає мови опису обладнання (HDL). ЛПВЩ зовсім не схожий на C. У той час як програма С - це послідовна серія інструкцій і повинна домогтися себе для досягнення паралельного виконання, HDL описує паралельний ланцюг і повинен підкоряти себе для досягнення послідовного виконання. Це зовсім інший світ, і якщо ви спробуєте побудувати схему в FPGA, думаючи, як розробник програмного забезпечення, це зашкодить.
MCU обмежений часом. Для того, щоб виконати більше роботи, вам потрібно більше циклів процесора. Годинники мають дуже реальні межі частот, тому легко обрушитися на обчислювальну стіну. Однак FPGA обмежена простором. Для того, щоб виконати більше роботи, ви просто додати більше схем. Якщо ваш FPGA недостатньо великий, ви можете придбати більшу. Дуже важко побудувати схему, яка не може вміститися у найбільшій FPGA, і навіть якщо у вас є примітки до додатків, що описують, як складати ланцюги FPGA разом.
FPGA більше зосереджуються на паралельному виконанні. Іноді вам доводиться турбуватися про те, скільки часу ISR вашого MCU займе на обслуговування переривання, і чи зможете ви досягти ваших обмежень у реальному часі. Однак у FPGA постійно працює безліч кінцевих машин (FSM). Вони схожі на "фемто-контролери", як маленькі хмари логіки управління. Всі вони працюють одночасно, тому не варто турбуватися про те, щоб пропустити перерву. Можливо, у вас є FSM для інтерфейсу до АЦП, інший FSM для інтерфейсу до адреси / шини даних мікроконтролера, інший FSM для передачі даних у стереокодек, ще один FSM для буферизації потоку даних від АЦП до кодека ... Ви потрібно використовувати тренажер, щоб переконатися, що всі FSM співають гармонійно.
FPGA - це мокра мрія дизайнера макетів на друкованій платі. Вони надзвичайно налаштовані. У вас може бути безліч різних логічних інтерфейсів (LVTTL, LVCMOS, LVDS тощо), різної напруги та навіть потужності приводу (тому вам не потрібні резистори серійного закінчення). Шпильки міняються; Ви коли-небудь бачили адресну шину MCU, де шпильки були розкидані навколо чіпа? Твоєму дизайнеру друкованих плат, мабуть, доведеться скинути купу віатів, щоб правильно зв’язати всі сигнали разом. За допомогою FPGA дизайнер друкованої плати може потім запускати сигнали в мікросхему в будь-якому зручному для цього порядку, і тоді конструкція може бути анотована до ланцюжка інструментів FPGA.
У FPGA також є багато приємних іграшних іграшок. Одним з моїх улюблених є диспетчер цифрових годин у чіпах Xilinx. Ви подаєте йому один тактовий сигнал, і він може отримати від нього ще чотири, використовуючи широкий спектр множників частоти та дільників, все з незайманим 50% робочим циклом і 100% у фазі ... і він навіть може враховувати перекос годинника, який виникає через затримки розповсюдження, зовнішні до чіпа!
EDIT (відповідь на доповнення):
Ви можете розмістити "м'яке ядро" в FPGA. Ви буквально з'єднуєте мікроконтролер, або, швидше за все, ви, мабуть, кидаєте чужий ланцюг у свій дизайн, як, наприклад, PicoBlaze або MicroBlaze або Nios Altera в Xilinx. Але, як і компілятори C-> VHDL, ці ядра, як правило, трохи роздуті та повільні порівняно з використанням FSM та шляхів передачі даних, або власне мікроконтролером. Інструменти розробки можуть також додати значної складності в процесі проектування, що може бути поганою справою, коли FPGA вже є надзвичайно складними чіпами.
Існують також деякі FPGA, які мають вбудовані "жорсткі ядра", як-от серія Virtex4 Xilinx, які мають справжній, виділений IBM PowerPC з тканиною FPGA навколо нього.
EDIT2 (відповідь на коментар):
Я думаю, я зараз бачу ... ви запитуєте про підключення дискретного MCU до FPGA; тобто дві окремі фішки. Для цього є вагомі причини; FPGA, які мають жорсткі ядра, і ті, які є досить великими, щоб підтримувати пристойні м'які ядра, як правило, монстри з багатьма сотнями штифтів, які в кінцевому підсумку потребують пакету BGA, що легко збільшує труднощі проектування друкованої плати в 10 разів.
З цим набагато простіше, тому MCU, безумовно, мають своє місце, працюючи в тандемі з FPGA. Оскільки простіше писати C, ви можете написати "мізки" або центральний алгоритм у MCU, тоді як FPGA може реалізувати під алгоритми, які можуть потребувати прискорення. Постарайтеся помістити речі, які змінюються, в код C, оскільки це простіше змінити, а FPGA залиште більш присвяченим типом речі, які не змінюватимуться часто.
Інструменти дизайну MCU також простіші у використанні. Інструменти дизайну потребують декількох хвилин, щоб створити бітовий файл FPGA, навіть для дещо простих конструкцій, але складні програми MCU зазвичай займають кілька секунд. З MCU можна помилитися набагато, набагато менше, тому вони також простіше налагоджувати ... Я не можу зрозуміти, наскільки складними можуть бути FPGA. Вам дійсно потрібно отримати таблицю даних для тієї, що у вас є, і ви повинні спробувати прочитати кожну її сторінку. Я знаю, це кілька сотень сторінок ... зробіть це все одно.
Найкращий спосіб їх з'єднання - це використання MCU із зовнішньою адресою та шиною даних. Тоді ви можете просто зіставити карту пам'яті FPGA в MCU та додати свої власні "регістри", у кожного з яких є своя адреса. Тепер FPGA може додавати власні периферійні пристрої, як 32-розрядний таймер, який може фіксувати всі 4 байти відразу, коли перший байт зчитується, щоб запобігти переповненню між 8-бітовими зчитуваннями. Ви також можете використовувати його як логіку клею, щоб відобразити на карті більше периферійних пристроїв з інших мікросхем, як окремий АЦП.
Нарешті, деякі MCU розроблені для використання з "зовнішнім майстром", як FPGA. Cypress створює декілька USB-процесорів, які мають 8051 всередині, але наміром є, щоб USB-дані вироблялися / споживалися, наприклад, FPGA.