FPGAの設計には、ハードウェア記述言語(HDL)が必要です。HDLはCのようなものではありません。Cプログラムは命令の連続シリーズであり、並列実行を達成するためにそれ自体をゆがめる必要がありますが、HDLは並行回路を記述し、連続実行を達成するためにそれ自体をゆがめなければなりません。これは非常に異なる世界であり、ソフトウェア開発者のように考えながらFPGAで回路を構築しようとすると、痛い目に遭います。
MCUは時間制限があります。より多くの作業を達成するには、より多くのプロセッササイクルが必要です。クロックの周波数には非常に現実的な制限があるため、計算の壁にぶつかるのは簡単です。ただし、FPGAはスペースに制限があります。より多くの作業を行うには、単に回路を追加するだけです。FPGAが十分に大きくない場合は、より大きなFPGAを購入できます。最大のFPGAに収まらない回路を構築することは非常に困難です。たとえそうする場合でも、FPGAをデイジーチェーン接続する方法を説明するアプリノートがあります。
FPGAは、並列実行により重点を置いています。MCUのISRが割り込みを処理するのにかかる時間と、ハードリアルタイムの制限を達成できるかどうかを心配する必要がある場合があります。ただし、FPGAでは、常に多くの有限状態マシン(FSM)が実行されています。それらは、制御ロジックの小さな雲のような「フェムトコントローラー」のようなものです。それらはすべて同時に実行されているため、割り込みを見逃す心配はありません。ADCに接続するFSM、マイクロコントローラーのアドレス/データバスに接続する別のFSM、ステレオコーデックにデータをストリーミングする別のFSM、ADCからコーデックへのデータフローをバッファリングする別のFSMがあります...シミュレータを使用して、すべてのFSMが調和して歌うことを確認する必要があります。
FPGAは、PCBレイアウト設計者の夢です。彼らは非常に構成可能です。さまざまな電圧と駆動強度のさまざまなロジックインターフェイス(LVTTL、LVCMOS、LVDSなど)を使用できます(したがって、直列終端抵抗は必要ありません)。ピンは交換可能です。ピンがチップの周りに散らばっているMCUアドレスバスを見たことがありますか?PCB設計者は、すべての信号を正しく結び付けるために、おそらく多数のビアをドロップする必要があります。FPGAを使用すると、PCB設計者は都合のよい順序でチップに信号を実行でき、設計にFPGAツールチェーンにバックアノテーションを付けることができます。
FPGAには、素敵でおしゃれなおもちゃもたくさんあります。私のお気に入りの1つは、ザイリンクスチップのデジタルクロックマネージャーです。クロック信号を1つ供給し、50%のデューティサイクルと100%の位相のすべてを備えた多種多様な周波数逓倍器と分周器を使用して、さらに4つを引き出すことができます...チップ外部の伝播遅延から発生します!
編集(補遺に返信):
FPGAに「ソフトコア」を配置できます。あなたは文字通りマイクロコントローラ回路を一緒に配線している、あるいはあなたはおそらくザイリンクスのPicoBlazeまたはMicroBlazeまたはアルテラのNiosのような他の誰かの回路をあなたのデザインに落としているでしょう。しかし、C-> VHDLコンパイラのように、これらのコアは、FSMとデータパス、または実際のマイクロコントローラーを使用する場合と比較して、少し肥大化して遅くなる傾向があります。また、開発ツールは設計プロセスを大幅に複雑化する可能性がありますが、FPGAがすでに非常に複雑なチップである場合、これは悪いことです。
「ハードコア」が埋め込まれたFPGAもあります。たとえば、XilinxのVirtex4シリーズには、FPGAファブリックを備えた実際の専用IBM PowerPCがあります。
EDIT2(コメントへの返信):
私は今見ていると思います...ディスクリートMCUをFPGAに接続することを求めているのです。すなわち、2つの別々のチップ。これを行う正当な理由があります。ハードコアと適切なソフトコアをサポートするのに十分な大きさのFPGAは、通常、最終的にBGAパッケージを必要とする数百のピンを持つモンスターであり、PCBの設計の難易度を10倍に高めます。
ただし、Cの方がはるかに簡単なので、MCUはFPGAと連携して動作することは間違いありません。Cを書く方が簡単なので、MCUで「ブレイン」または中央アルゴリズムを書くことができますが、FPGAは加速が必要なサブアルゴリズムを実装できます。変更が簡単であるため、変更するものをCコードに入れて、FPGAはより頻繁に変更されない、より専用のタイプのものにしておきます。
MCU設計ツールも使いやすくなっています。多少シンプルな設計であっても、設計ツールがFPGAビットファイルを構築するのに数分かかりますが、通常、複雑なMCUプログラムには数秒かかります。MCUの問題ははるかに少なく、デバッグも簡単です... FPGAがどれほど複雑になる可能性があるかを軽視することはできません。あなたは本当にあなたが持っているもののデータシートを取得する必要があり、あなたはそれのすべてのページを読んでみるべきです。数百ページだから...とにかくやりなさい。
それらを接続する最良の方法は、外部アドレスとデータバスを備えたMCUを使用することです。その後、FPGA回路をMCUにメモリマップし、それぞれ独自のアドレスを持つ独自の「レジスタ」を追加できます。FPGAは、最初のバイトが読み取られたときに4バイトすべてを一度にラッチして8ビット読み取り間のオーバーフローを防ぐことができる32ビットタイマーのようなカスタムペリフェラルを追加できるようになりました。また、別のADCのように、他のチップからより多くの周辺機器をメモリマップするためのグルーロジックとして使用できます。
最後に、一部のMCUはFPGAなどの「外部マスター」で使用するように設計されています。サイプレスは、8051を内部に持つUSB MCUをいくつか製造していますが、その意図は、FPGAなどによってUSBデータを生成/消費することです。