FPGAとマイクロコントローラー[非公開]


36

私はArduinoファミリー(特にSanguino)に取り組み、いくつかの簡単なデバイスと簡単なフォトトロープを作成しました。したがって、マイクロコントローラー、特にAtmelには非常に満足しています。FPGAが標準のマイクロコントローラーとどう違うのか知りたいです。私は技術的なバックグラウンド(C / C ++プログラミング)であるため、技術的な答えが大好きです。私はエレクトロニクス分野の初心者です(私のs / wの経験と比べて)。:)

私はこのクエリを実行しましたが、それは良かったのですが、さらに詳細を探しています。

ありがとう!シュシュルート。


補遺-ハイブリッドアーキテクチャを使用する、つまりfpgaとマイクロコントローラーを組み合わせた実世界での良い例はありますか?
Sushrut J Mairの

Sushrut J Mair-通常、FPGAがあり、マイクロが必要な場合、マイクロはFPGAに実装さます。
コナーウルフ

はい、偽名、同意しました。ただし、FPGAとMCUの両方を使用してシステムを設計する実際のケースを探していました。デザインのFPGA部分を使用して、システムへの入力の変化に応じて応答およびモーフィングする「進化可能な」ハードウェアを実装し、コアの論理処理はMCUによって実行されるという考え方です。
Sushrut J Mairの

回答:


48

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データを生成/消費することです。


これは良い情報です、ありがとう。C / C ++ to HDLコンパイラについて聞いたことがあります。試したことがありますか?
Sushrut J Mairの

彼らは...大丈夫です。単一の論理ブロックについては、それほど悪くはありません。しかし、私はそのようなコンパイラを使用して設計全体を書くことはしません。言語は非常に異なるため、あまり効率的ではありません...特別な規則を使用する必要があり、古いANSI Cコードを使用するだけではありません。
ajs410

おかげで、これは便利です。ラティスセミコンダクターのXP2 Brevia開発キットを注文しました。FPGAの基本的な設計コンセプトに慣れたら、HDLからCコンパイラーを試してみるつもりです。
Sushrut J Mairの

元のクエリで補遺の答えを見たところです。おかげで、実際には(少なくとも今日の技術では)標準MCU + FPGAのハイブリッドアーキテクチャは、実際の状況で実際に使用できるほどの付加価値はほとんどないと言っていますか?
Sushrut J Mairの

驚くばかり。ありがとうajs410。エキサイティングなハイブリッドアーチの可能性に入る前に、数週間かけてfpgaを起動したいと思います!
Sushrut J Mairの

10

「実世界の例... FPGAとマイクロコントローラーを組み合わせて?」

原則として、十分な大きさのFPGAだけで、FPGAとマイクロコントローラーができることをすべて実行できます。おそらく、FPGA内にソフトCPUを実装することです。実際には、FPGA単体(またはMCU単体)よりもFPGAと独立したマイクロコントローラーを使用して実装した場合、特定レベルのパフォーマンスでは部品コストが低く、消費電力が少なくて済むことがよくあります。FPGAとマイクロコントローラーの両方を搭載した、有名なデバイスのいくつかを以下に示します。

  • ElphelカメラElphel Project Wikiには、Xilinx(R)Spartan 3e 1200KゲートFPGAと、GNU / Linuxを実行するETRAX FSプロセッサがあります。
  • TS-7500は、 5000 LUTのラティスFPGAとLinuxを実行することができます最高250MHz Cavium社ARM9 CPUを持っています。
  • バルーンボードは、ザイリンクスのSpartan FPGAとARM CPUを持っています
  • いくつかのTeeny weeny Linux SBCには、FPGAとCPUの両方が含まれます
  • ArmadeusたWikiドキュメントザイリンクスのSpartan-3 FPGAおよび400 MHzのARM9 CPUの両方でいくつかのボードボード。
  • Blackfinハンディボードは、ザイリンクスのSpartan 3E FPGAと600MHzのアナログ・デバイセズのBlackfin®ADSP-BF537プロセッサの両方を含みます。(MMUがないため、完全なLinuxは実行できませんが、uClinuxは実行できます)。
  • 「Minimig」(ミニアミーガ)はディスクコントローラに作用するようにザイリンクスのSpartan-3 FPGA、M68000 CPU、及び小さなPIC MCUを含みます。

4

多くの場合、FPGAは、高度に並列または低レイテンシの操作、複数のクロックドメインでの動作、ハードウェア速度でのカスタムロジックの実行など、マイクロコントローラーが効率的に実行できないタスクを実行するために特に使用されます。そのため、それらは重い作業を行い、MCUが設計の中心になることはほとんど必要ありません。コンフィギュレーションビットストリームのロードなどの管理位置に移動される可能性があります。この例は、ストレージインターフェイスを実装するMinimigの PICまたはARM です。

ただし、いくつかの製品は境界線を曖昧にします。いくつかの例:

  1. 大規模なFPGAには、ハードCPUが組み込まれている傾向があります(大規模なプロジェクトでは、とにかくCPUが必要になります)。
  2. 一部のマイクロコントローラーは並列操作を目指しています(XMOS XS1、Atmel Xmega、GreenArray、Parallax Propeller)
  3. 一部のチップはハイブリッドとして設計されています(サイプレスPSoC、Atmel FPSLIC)

プログラミングのバックグラウンドから来ると、FPGAの利点を得る必要があるため、ハードウェアでの設計はかなり調整されます。ただし、この経験は他の場所でも役立ちます。


1

AVRのようなMCUとFPGAにプログラムされたMCUの間に実際の違いはありません。OpenCoresサイトには、FPGAで使用できるAVRのVHDLコードがあります。適切なFPGAボードを購入せずに、シミュレーターでそれを調べて、どのように機能するかを確認できます。


1
多くの場合、FPGAは同じMCUに対してより遅いクロック速度で実行する必要があります。そうしないと、FPGAが大幅に高価になります。より高価な場合、コントローラーと外部ピンの間に追加のハードウェアを簡単に実装できます。
Kortuk

とにかくシステムでFPGAが必要な場合、MCUは「無料」です。
レオン・ヘラー

1

マイクロコントローラーは、プログラムメモリからのコマンドをコマンドごとに順番に実行するデジタル回路です。マイクロコントローラーのデジタルハードウェア回路は固定されており、デジタル回路を構成する異なるゲート間の相互接続は永続的であり、シリコン上にエッチングされています。FPGAは、プログラム可能なインターコネクトを備えたデジタルゲートのプールと考えることができます(実際にはlutが存在しますが)。これで、相互接続をプログラムすることにより、FPGA上で任意のデジタル回路(マイクロコントローラーを含む)を作成できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.