FPGAとは何ですか?


38

私は以前に多くの人がFPGAについて話しているのを見てきましたが、それはフィールドプログラマブルゲートアレイの略ですが、どのように機能し、FPGAを使用する目的は何ですか?

回答:


30

それらは、回路にロジックを追加する電子部品です(したがって、マイクロコントローラーに似ています)。ただし、設計アプローチはuC(マイクロコントローラー)とはまったく異なります。uCでは、内部uCデザインを変更できません。「クラシック」プログラムのみを実行できます。FPGAのプログラミングは、新しいハードウェアの作成に似ています。論理ゲート間に新しい接続を作成し、新しい特殊なプロセッサを作成します。そして、自宅、机、PCですべてを実行できます。

かっこいいね?はい、しかしいくつかの欠点があります。たとえば、価格(ただし、比較するのは難しいと思います)、高消費電力、低クロック速度(ただし、スマートな方法でアプリケーションを設計し、1クロックサイクルでより多くの操作を実行できます)。

便利なリンク:

使用例:http : //nsa.unaligned.org/


3
多くのFPGAは、複数のCPUコアを収容するのに十分な大きさであり、FPGAをそれ自体でコンピューター全体にすることができます。
クレイグトレーダー

3
注として、クロック速度が遅いと誤解を招く可能性があると思います。はい、PCと比較して。pic16と比較すると、高速になりますが、コストに依存します。私が手に入れた安価なもののほとんどは40MHzで動作しますが、製品ごとのバリエーションがあります。
Kortuk

23

FPGAは、文字通り、現場でプログラムできる論理ゲートの配列です。Cライクな言語(Verilog)を使用して、任意の方法で接続できるフリップフロップ、マルチプレクサ、4ビットルックアップテーブルなど。

AVRなどのuCも同様の論理ゲートで構成されていますが、デバイスの作成時に構成されます。もちろん、RAMとFlashを備えているため、入力を読み取って出力を制御するソフトウェアを作成できますが、実際のゲートの配置を変更することはできません。ゲートは常にALU、メモリコントローラー、シリアルポートなどに配置されます。

uCの利点は、Cなどの使いやすい使い慣れた高水準言語を使用して(デスクで)フィールドでプログラムできることです。問題は、ソフトウェアが「遅い」ことです。入力で出力を制御するには、最も単純な場合、次のように記述します。

void loop(){buttonState = digitalRead(buttonPin); if(buttonState == HIGH){
digitalWrite(ledPin、HIGH);
} else {digitalWrite(ledPin、LOW); }}

これは1ダースのアセンブリ命令に変換されるため、ループは1つの入力から1つの出力を制御するのに1マイクロ秒程度かかります。そして、uCチップ全体がこれを高速に実行します。もちろん、もっと多くのことができますが、その出力を制御する能力は、uCが他のことをするのに忙しくなるにつれて遅くなります。

FPGAでは、入力が1クロックで出力を制御するようにゲートを構成できます。そのため、出力は25ナノ秒の遅延で入力に追従します。同じクロック周期を使用すると、40倍高速になります。また、FPGAの残りのゲートは、他の多くのことを行うために使用できますが、この小さな機能の速度には影響しません。

FPGAのコードは単純なフリップフロップです。

常に@(ポーズクロック)ledPin <= buttonPin;

これには、FPGAの数万個のうち、1個のFPGAセル、約40ゲートしか必要ありません。

FPGAを再プログラムして、たとえば1つのクロックで、その1つのFPGAセルを使用しながら、4つの入力の組み合わせに基づいてLEDを制御するなど、他のことを行うことができます。または、入力からのシリアルストリームに基づいて、いくつかのFPGAセル(数百のゲート)でLEDを制御します。そのため、非常に高いレート(簡単に20MHz)でシリアルストリームを使用して、「オン」または「オフ」などのシリアルデータに基づいてLEDを制御し、FPGAの容量のごく一部しか使用できません。

したがって、FPGAの利点は明らかにスピードです。uCでできることなら何でもでき、すべてを並行して行うことで、はるかに高速に実行できます。uCが数ミリ秒かかる複雑なことは、FPGAはマイクロ秒以下で行うことができます。FPGAにゲートが残っている限り、FPGAの以前の機能の速度や動作に影響を与えることなく、さらに機能を追加できます。ところで、FPGAは非常に簡単に20MHzのクロックレートを実行できます。

コストは差別化要因ではありません。Arduino AVRチップとほぼ同じ約5ドルで、これまで見たほぼすべてのArduinoデザインを実装できるFPGAを購入できます。FPGA用の無料のツールチェーン(IDE、コンパイラ、デバッガ)もあります。

電力は差別化要因ではありません。FPGAをはるかに低いクロックレートで実行してuCと同じ機能を実現し、そのゲートの一部を使用する(未使用のゲートはリーク電力のみを使用する)ため、FPGAはほとんどすべてのuCベースの電力を上回ることができます設計。

FPGAの最大の欠点は、uCプログラムよりも、複雑なFPGAデザインの定義、コードの記述、デバッグがはるかに複雑で時間がかかることです。夕方に行う典型的なuCプロジェクトは、FPGAで数日かかる場合があります。

その他の潜在的に修正可能な問題は、ほとんどの人がソフトウェアプログラミングの訓練を受けていることですが、ハードウェアプログラミングを理解している人はほとんどいません。Verilogはかなり簡単に習得できます。しかし、ソフトウェア設計ではなくハードウェア設計の観点から考える必要もあります。設計パターンは大きく異なります。

もう1つの問題は、FPGAが8〜20ピンDIPパッケージで提供されないことです。それらは100ピン以上の表面実装パッケージで提供される傾向があるため、ボードの構築はより困難です。

そして最後の問題は、多くの興味深いプロジェクトを使いやすいuCでうまく実装できるということです。


2
「約5ドルで見たことのあるほぼすべてのArduinoデザインを実装できるFPGAを購入できます」ごめんなさい。どこ?
-medivh

9

基本的な論理ゲートに精通している場合、それらは事実上瞬時であることを知っておく必要があります。操作AとBまたはCは、A、BまたはCが変わると即座に変わります。

FPGAは(一種の)プログラマブルロジックゲートのマトリックスです。入力と出力を(入力の組み合わせとして)定義できます。

uCでは、A + B / C * sqrt(D)には数クロックサイクルとメモリが必要です。FPGAでは、結果はほとんどすぐに得られます。

ビデオ、DSP、暗号化に最適です...

それが主な利点です。現在、最新のFPGAはメモリに適しており、uC / FPGAハイブリッドがあります。


私は、長年の経験を持つ多くのPracticing EEを知っています。多くの場合、uCを使用していたuCではなく、FPGAを介して設計に至ることがよくあります。インターフェースの処理に最適だと思います。
Kortuk

:はい、私はこれが良い例だと思いますarmadeus.com/english/index.html。私のために特別に興味深いのサーボ制御例である:marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/...
Maciek Sawicki

2
また、「C to VHDL」または「C to Verilog」コンバーターが増えていることにも注意してください。これらはまだ最も効率的なものではありませんが、すでに記述されたコードを、速度向上のために利用できるハードウェアに変換できます。あなたが私に尋ねると(そしてあなたがそれのための生地を持っているなら)かなりクールです。
クリスギャメル

5

これらは、汎用コンピューターよりもはるかに高速に暗号化キーをクラッキングするために使用されます。:D


1
ハハ、あなたの非常に機能的な説明を楽しみました。彼らは並列処理で驚くべきことです。
Kortuk


2

ASICに対してお金とリスクを節約するため。あなたがいない限り

  1. パワーを深く気にするか
  2. それらの束を構築しています(10,000個を超えるユニットなど)

ASICを実行するための固定(NRE)コストにより、コストが非常に高くなります。

FPGAを簡単に変更できるので、設計のシミュレーションを少なくして、より迅速にラボに入ることができます。また、ソフトウェアのように、部分的な設計を行い、その上に構築することもできます。

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