• ベストアンサー

FPGA や CPLD は何に使うんですか?

普段PICマイコンを使って遊んでいます。 調べごとをするときは当然のようにネットを使うんですが 時々FPGAやCPLDに関しての記載事項があったりして それについても調べてみたんですがイマイチ何に使うのかが判りません。 現状での僕の理解は以下のとおりです。 ・プログラムを書きICの中にあらかじめ道を作ってあげるため  内部での判断時間がなくINからOUTへ結果出力までの時間がマイコン  等に比べてものすごく早い。 ・一見するとICだけどイメージとしてはプログラムで指定したとおりの  道が入っている。 ・ピンが1から100まであったとして30番のピンと56番のピンに信号が入  ったら88番に出力するみたいな使い方をする。 この程度です。 そこで質問です。 質問1 処理が早いといってもFPGAやCPLDは単体ではなくマイコン等の先につけ て判断自体はマイコンがやるんだから結局マイコンのスピードになって しまう気がするんですがそもそもどういうところに使うんですか? 質問2 イメージとしてはICの中にプリント基板を作るようなことなんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

簡単にいえばある処理をCPUでやるのか,論理回路(FPGAなりCPLDなり)でやるのかという問題ですよね? CPUではどうしても1命令ずつ処理していくという特性から,複雑な演算や条件判定は得意ですが,逆に「きっちり定周期で動かす」「外部信号に対してすばやく反応する」「複数の処理をパラレルに処理する」など,時間軸方向の制約の厳しい処理は不得手なんですね.FPGAやCPLDはこれとは逆に比較的単調な処理だけども,時間軸をきっちり守るといったような分野が得意ですね. たとえば外部回路からクロックに同期してデータを送ってくるとしましょう.クロック信号が'0'から'1'に変わったときに1ビットずつデータを読むと考えます.もし,これをCPUで全部処理すると,クロック信号を常に監視し続けて,'0'から'1'の変化があったらデータを読むという処理になります.CPUがこれ以外にやることがないならばそれなりの速度は出ますが,実際にはそれだけで済むことは少なくて,受け取ったデータを元に何がしかの処理をして他に出力するという操作が必要です.ところがこの「何がしかの処理」の合間にも相手からはデータが送られてきてしまいますよね?また,CPUによる処理では ・入力を読む ・前回値と比較して'0'から'1'への変化か判定 ・変化があればデータを1ビット取り込み といったような処理が必要で,さらに ・8回読んで1バイト分のデータに直す ということもあるでしょう.もし,相手機器とハンドシェークが必要ならばここで,相手とのやり取りも入ってきます. CPUではこれらをシーケンシャルにしか処理できませんし,1命令ずつしか実行できませんので,どうしてもそれなりの時間が必要です.つまり実際にクロック信号が変化してからそれを検出するまでの時間,さらにデータを取るまでの時間が必要です. 一方,これをハードウェア化してしまえば,データを取ってシフトして8ビットデータに直す・・というのはごく簡単なシフトレジスタでできてしまいます.CPUで1ビットずつ送るのでは多分1Mbpsを超えるとかなり厳しくなると思いますが,ハードウェアならその程度はごく簡単にできるレベルです. こうしておいて,8ビット分データができた時点でCPUにバイトデータ引取り要求をすれば,CPUの負担はずっと軽くなります.さらにハードウェアでバッファも用意して何バイトかは蓄えておけるようにすれば,CPUが最初のデータをとるまでの時間にも余裕ができます. データを出力するときも,CPUで1ビットずつ送信するのでは正確なタイミングを作るのはかなり大変です.特に「一定の間隔で送信しながら他の事もやってほしい」となったらプログラムは超絶技巧みたいなことになるでしょうし,そこまでやったとしてもやはり「1命令ずつ処理」のくびきからそれほど速度は上げられません. そこで,ハードウェア側で8ビットなり32ビットなりのデータをCPUからまとめて受け取って,それを一定の周期で出力するような回路を組んでおきます.さらに多少のバッファも用意しておきましょうか. そうすると,CPUがFPGA側にデータを書くタイミングはかなりばらついても関係ありません.他の処理をしている間にFPGAが順次送信処理をおこなっており,バッファが空になる前にCPUが次のデータを書き込んでおけば,一定周期できれいにデータが出て行ってくれるわけです. また,外部バスを持つようなタイプのCPUを使ったときにはCPUとFPGAがバスを共有して,メインメモリなどを直接FPGAがアクセスするという手法も使われます. CPUはメモリ上に伝送したいデータを用意しておけば,FPGA側が勝手にそれを取り込んで出力したりするわけです.ノートPCのグラフィックコントローラのように,「メインメモリの一部を表示用に使います」というのはまさにこのような考え方ですね. ディスプレイにデータを送るような処理をCPUがいちいちやっていたのでは他の処理がまったくできなくなってしまいますよね? また,FPGAも大規模になってくると加減算や乗除算などの数値演算回路も組み込めるようになってきます.こうなるとCPUにとって負荷の重い演算などもかなり肩代わりできるようになってきます. 複雑な繰り返し演算などを行う専用回路をFPGA内に構成しておいて,CPUはそこにデータを投入し,専用回路で演算された結果を取り出してりようすれば,CPUによる処理よりも時間を短縮できるわけですね. まぁ,他にもいろいろと役割分担のやりかたはありますし,用途によってはCPUでやるほうが良いのかFPGAでやるのが良いのかといったグレーゾーンもかなり広がっていることも確かですけどね.

midugane
質問者

お礼

同時進行で複数の処理ができるって事でしょうか? なんだかペンティアムのクアッドコアみたいですね。。。 グラフィックコントローラの例えはすごい判りやすかったです。 タイムリーに処理させるため役割分担をさせるんですね。 なんとなくイメージがつかめてきました。 具体的な詳細回答ありがとうございます。

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

本当に FPGA に計算エンジンを載せた例もあります. 例えば GRAPE-7.

midugane
質問者

お礼

>GRAPE-7 宇宙の計算に使われてるんですか(@@; FPGAってそんなにすごいものなんですか!?

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.3

ASICを作るほど数が出なくて速度も要求されていない場合に使います。 遅いと言ってもプロセッサ入れてプログラムで動かすよりは遥かに速いです。

midugane
質問者

お礼

そこの早いという部分なんですが それが一番判らないんです。。。 マイコンも趣味の範囲でやってるだけなのでピンとこないのかもしれませんが マイコンだって一命令あたり何十万分の1とかじゃないですか それよりも早いっていったい何に使うんだろうって思って・・・

回答No.2

> FPGA や CPLD は何に使うんですか? ・製品を早く、安く(条件付)作るため 回答1:人が思うほどプロセッサーを作るのは必ずしも大変なわけではないんです。(高速、高性能、汎用でなければ) だから、FPGAの中にプロセッサーを作ることも可能だし、製品によっては、はじめからコアが入っているものもあります。 だから、マイコンに接続すると言っても、マイコンのクロックと同じである必要もなければ、マイコンの命令を待つものにしなくてもいいわけです。 使い方としては、     1)ゲートアレイに出来るほど時間も生産数も無い場合に使う     2)試作機に使ってデバッグする 回路自体を改版するような作業をする場合(デバッグ)には非常に都合がいいです 回答2:基盤でも専用ICでもいいですが、自分のイメージは専用回路をソフトで作るというとこです 回路規模の見積もりさえ間違えなければ、ジャンパー線要らんですからデバッグが気楽でしたね

midugane
質問者

お礼

使い方によっては面倒をかなり省けるって事でしょうか? ん~・・・難しい。 とにかく遊んでみます。

回答No.1

>質問1 昔は74シリーズをいっぱい並べて回路を作ってましたが、現在ではCPLD1個で同等の役割を果たします。 FPGAはもっと規模の大きな回路を作るときに採用します。 >判断自体はマイコンがやるんだから結局マイコンのスピードになって しまう気がするんですがそもそもどういうところに使うんですか? マイコンは同じ演算回路(ALU)を時分割で使いまわしてますが、CPLDやFPGAは本当に同時に演算できます。 判断をFPGAが行ってマイコンに割り込みをかけることも可能ですし、FPGA単体で事足りてしまう場合もあります。 最近ではFPGAの中にCPU回路を作るのも流行ってます。 >質問2 どちらかと言えば専用ICを作るってイメージです。

midugane
質問者

お礼

判断をFPGAですか。 FPGAやCPLDを触ったことがないので あんまりイメージがつかめませんが とにかく早い専用ICって事でしょうか? スピードメーターを作ってみようと思っているので そこで使ってみようとおもいます。

関連するQ&A