A criação de um FPGA requer uma linguagem de descrição de hardware (HDL). HDLs são absolutamente nada como C. Considerando que um programa C é uma série seqüencial de instruções e deve se contorcer para obter execução paralela, um HDL descreve um circuito simultâneo e deve se contorcer para obter execução sequencial. É um mundo muito diferente e se você tentar construir um circuito em um FPGA enquanto pensa como um desenvolvedor de software, isso vai doer.
Um MCU é limitado no tempo. Para realizar mais trabalho, você precisa de mais ciclos do processador. Os relógios têm limites muito reais para suas frequências, por isso é fácil atingir uma parede computacional. No entanto, um FPGA tem espaço limitado. Para realizar mais trabalho, basta adicionar mais circuitos. Se o seu FPGA não for grande o suficiente, você poderá comprar um maior. É muito difícil construir um circuito que não se encaixa no maior FPGA, e mesmo se houver, há notas de aplicativos que descrevem como conectar em série os FPGAs.
Os FPGAs se concentram muito mais na execução paralela. Às vezes, você precisa se preocupar com quanto tempo o ISR do seu MCU leva para atender à interrupção e se você conseguirá atingir seus limites em tempo real. No entanto, em FPGA, existem muitas máquinas de estado finito (FSM) em execução o tempo todo. Eles são como "femto-controllers", como pequenas nuvens da lógica de controle. Todos eles estão sendo executados simultaneamente, portanto, não se preocupe em perder uma interrupção. Você pode ter um FSM para interface com um ADC, outro FSM para interface com o endereço / barramento de dados de um microcontrolador, outro FSM para transmitir dados para um codec estéreo, outro FSM para bufferizar o fluxo de dados do ADC para o codec ... precisa usar um simulador para garantir que todos os FSMs cantem em harmonia.
FPGAs são o sonho de um designer de layout de PCB. Eles são extremamente configuráveis. Você pode ter muitas interfaces lógicas diferentes (LVTTL, LVCMOS, LVDS, etc), de tensões variadas e até forças de acionamento (para que você não precise de resistores de terminação em série). Os pinos são trocáveis; Você já viu um barramento de endereços MCU onde os pinos estavam espalhados pelo chip? Seu projetista de PCB provavelmente precisará soltar várias vias apenas para ligar todos os sinais corretamente. Com um FPGA, o designer de PCB pode executar os sinais no chip em praticamente qualquer ordem que for conveniente e, em seguida, o design pode ser anotado novamente na cadeia de ferramentas FPGA.
Os FPGAs também têm muitos brinquedos legais e sofisticados. Um dos meus favoritos é o Digital Clock Manager nos chips Xilinx. Você alimenta um sinal de relógio, e ele pode derivar mais quatro usando uma ampla variedade de multiplicadores e divisores de frequência, todos com ciclo de trabalho primitivo de 50% e 100% em fase ... e pode até levar em consideração o desvio do relógio que decorre de atrasos de propagação externos ao chip!
EDIT (resposta à adenda):
Você pode colocar um "núcleo flexível" em um FPGA. Você está literalmente conectando um circuito de microcontrolador, ou melhor, provavelmente está inserindo o circuito de outra pessoa em seu projeto, como o PicoBlaze da Xilinx ou o MicroBlaze ou o Nios da Altera da Xilinx. Mas, como os compiladores C-> VHDL, esses núcleos tendem a ser um pouco inchados e lentos em comparação com o uso de um FSM e caminho de dados ou um microcontrolador real. As ferramentas de desenvolvimento também podem adicionar complexidade significativa ao processo de design, o que pode ser ruim quando os FPGAs já são chips extremamente complexos.
Existem também alguns FPGAs que possuem "núcleos rígidos" incorporados, como a série Virtex4 da Xilinx, que possui um IBM PowerPC real e dedicado, com tecido FPGA ao seu redor.
EDIT2 (resposta ao comentário):
Acho que vejo agora ... você está perguntando sobre como conectar um MCU discreto a um FPGA; ou seja, duas fichas separadas. Existem boas razões para fazer isso; os FPGAs que possuem núcleos rígidos e os que são grandes o suficiente para suportar núcleos flexíveis decentes geralmente são monstros com muitas centenas de pinos que acabam exigindo um pacote BGA, o que aumenta facilmente a dificuldade de projetar uma PCB por um fator de 10.
C é muito mais fácil, portanto, os MCUs definitivamente têm seu lugar trabalhando em conjunto com um FPGA. Como é mais fácil escrever C, você pode escrever o "cérebro" ou o algoritmo central no MCU, enquanto o FPGA pode implementar sub-algoritmos que podem precisar ser acelerados. Tente colocar coisas que mudam para o código C, porque é mais fácil mudar e deixe o FPGA para ser do tipo mais dedicado, que não muda com frequência.
As ferramentas de design do MCU também são mais fáceis de usar. As ferramentas de design levam vários minutos para criar o arquivo de bits FPGA, mesmo para projetos um pouco simples, mas programas complexos de MCU geralmente levam alguns segundos. Há muito, muito menos a dar errado com o MCU, então eles também são mais fáceis de depurar ... Não consigo subestimar como FPGAs complexos podem ser. Você realmente precisa obter a folha de dados para a que possui e deve tentar ler todas as páginas. Eu sei, são algumas centenas de páginas ... faça assim mesmo.
A melhor maneira de conectá-los é usar um MCU com um endereço externo e um barramento de dados. Em seguida, você pode simplesmente mapear os circuitos FPGA para a memória no MCU e adicionar seus próprios "registros", cada um com seu próprio endereço. Agora, o FPGA pode adicionar periféricos personalizados, como um timer de 32 bits que pode trancar todos os 4 bytes de uma só vez quando o primeiro byte é lido, para evitar transbordamentos entre as leituras de 8 bits. Você também pode usá-lo como lógica de cola para mapear mais periféricos de outros chips, como um ADC separado.
Finalmente, algumas MCUs são projetadas para uso com um "mestre externo" como um FPGA. O Cypress fabrica alguns MCUs USB com 8051, mas a intenção é que os dados USB sejam produzidos / consumidos por, por exemplo, um FPGA.