« 【人類は宇宙へ飛び出そう まずは小惑星から】 第5章『小惑星開拓宇宙船は 19世紀のテクノロジー』(2/2) | Main | 【人類は宇宙へ飛び出そう まずは小惑星から】 第6章『これから、やるべきこと』 »

May 05, 2008

12 コア CPU を FPGA に

堅い話題が続いているので、ちょっと休憩。

雑誌の付録の FPGA で遊んで居る。
25万ゲートとは言え、オンチップでメモリーに使えるのは 24k バイトが上限なので、ワンチップ・マイコンとして使うなら、そんなに大規模ではない。小規模な組込み制御用のマイコンとして、適当なCPUコアを入れてリアルタイムOSをインストールできないか、調査し始めた。

調査を進めるうちに、疑問が芽生えて来た。
適当なCPUとリアルタイムOSが見つからなかった訳ではない。

「ワンチップ・マイコンとしてリアルタイムOSを走らすことに、FPGAの使い方として、何のメリットがあるというのか??」と

市販のワンチップ・マイコンに比べて、FPGAにCPUコアを入れることが有利な点は、インターフェース部分を自由に作り替えることは可能な事くらいだ。それ以外は、市販のワンチップ・マイコンの方が遥かに有利だ。数百円も出せば、H8 や SH-Tiny など、FPGA の何倍ものメモリー容量を持つワンチップ・マイコンが買えるし、それらでリアルタイムOSを使って居て、何の不便も無い。
もし、インターフェースを自由に作り替えたいなら、数百円のワンチップ・マイコンに、これまた数百円で買える数千ゲート級の CPLD を付けた方が大容量FPGAを使うより安くて早い。

FPGA でなければ、実現できないような事じゃなきゃ、試しても意味が無い。

そもそも、何故、リアルタイムOSを使うかと言うと、組み込み制御のマイコンの場合、いくつかの処理を組み合わせている場合が多いからだ。プログラミング・テクニックを駆使して、複数の処理を一つのタスク上で時分割に行うよりも、リアルタイムOS上で複数のタスクに各々の処理を任せた方が楽だ。

だが、本当に「複数の処理を行うには、リアルタイムOSでマルチタスクで行う」のがベストなんだろうか?
考えてみれば、大きな前提条件として「複数のCPUを組み合わせるのは難しい」があって始めて「リアルタイムOSがベスト」と言える。

もし、「必要なタスクの数だけCPUがある」のなら、リアルタイムOSは必要ないのかもしれない。

私自身のリアルタイムOSで作ったプログラムをみると、タスクの数は概ね6〜8個迄である。もちろん、大きなプログラムで、もっとタスクの数が必要になった時もあるが、それはむしろ例外的だ。大概の場合、10個程度のタスクが使えれば、それなりに使えそうだ。

市販のマイコン・チップは、当然のことながら、1つのチップで、1つのCPUコアしかもたない。最近では、SH などでもデュアルコアのチップが出始めたが、これは極めて例外的だし、それとて CPU コアの数は2個が上限だ。

今までは 10個のCPUが必要なら、10個のマイコン・チップを接続するしかなかった。これは大変な手間である。こんな手間をするくらいなら、リアルタイムOSの方が、ずっと楽だ。

だが、FPGA だと話は別だ。複数のCPUコアを一つのチップ上に入れることなど、造作もない。実際、25万ゲートのFPGAにZ80コンパチCPUを入れた時、半分も使って居なかったので、少なくとも2つの Z80 CPU をいれることは可能だろう。

もっとシンプルな CPU なら、もっと沢山の CPU が FPGA の中に入るかもしれない。

FPGA 上にマルチコアを入れ、各々のCPUコアに一つずつタスクを割り当てるなら、Z80 よりシンプルな機能の CPU で十分だろう。割り込みも必要ない。そもそもリアルタイムOSは使わないし、また、割り込みが必要なタスクには、それぞれ専用の CPU を割り当てるからだ。

ネットで調べた結果、XILINX が 公開している PicoBlaze と言う CPU が、コンパクトで良さそうだと判った。PicoBlaze は正確にはオープンソースでは無いのだが、無料で使えるので、CPU を何個 FPGA 上に作ってもロイヤリティーの問題は無い。ただ、PicoBlaze は割り込みの機能があるのだが、これは使わなければ良いだけの話だろう。

いろいろ試して、25万ゲートの FPGA に 12個の PicoBlaze CPU を乗せることに成功した。

それぞれの CPU 間は、メッセージ・キューやセマフォにあたる機能をハードウエア的に作って接続し、データの受け渡しや並行処理の同期を行っている。まだ、共有メモりにあたるものは実装していないが、作るのは難しくは無さそうである。

各 CPU は、PCCOMP と言う専用の C コンパイラでプログラミングした。実は、この C コンパイラの癖が強いのが、最も苦労したところだ。もっとも PicoBlaze と言う CPU 自体がプログラムエリアは 2k バイトと、それなりの容量なのに、リード・ライトできるデータエリアが僅か 64 バイトと極端に少ないので、あながちコンパイラの所為とも言い切れない。

とりあえず、12 個の CPU を1つの FPGA に乗せ、何とかデータの受け渡しや処理の同期を試したと言うのが本当のところで、まだまだ、複数 CPU による複数タスクの効果を確認したところまで達して居ない。

次の課題は、少なくともマルチ CPU ・マルチタスクの効果を確認できるような使い方を試す事だと思う。

ちゃんと実用になるためには、もう少しプログラミングしやすい CPU が欲しいところだ。コンパイラとして gcc が使え、メモリーは 2k バイトでも良いから、プログラム領域とデータ領域が共用できて欲しい。MIPS のようにメジャーな CPU のオープンソースの互換コアで、割り込み等は省略しても小さいサイズのものを探すべきなのかも知れない。

もっとも、理想的な CPU が見つかって、多数の CPU を FPGA に乗せることができても、何等かの理由で、リアルタイム OS の方が使い勝手が良いと言う結論になる可能性もある。

それを確かめるためにも、頭の中で考えるだけじゃなくて、実際に試してみなきゃいけないんだよねえ。

|

« 【人類は宇宙へ飛び出そう まずは小惑星から】 第5章『小惑星開拓宇宙船は 19世紀のテクノロジー』(2/2) | Main | 【人類は宇宙へ飛び出そう まずは小惑星から】 第6章『これから、やるべきこと』 »

Comments

一応、フォローとしまして。
FPGAにプロセッサを入れて、ワンチップマイコン的に使うメリットはそれなりにあるんですよ。
・製造中止対策
試作レベルではあまり関係ないですが、半導体は常に製造中止(デスコン)の心配があります。マイコンが製造中止になったら手も足も出ませんが、FPGAなら製造中止になっても、中身をごっそり別のFPGAに持っていけば良いだけです。
※ホントはそんな単純でもありませんが(笑)
・プロセッサが「二の次」
システムの比重がハードウェアに寄る事があります。画像処理などでは通常そうなります。こんな時はプロセッサは正直なんでも良くて、外部に付けても、FPGA内部の隙間に押し込んでもOKです。
・狭いっ!
いや、ホント、基板にプロセッサを置く場所すら無かったりするんです。そんなときはこっそりFPGAの中に…

でも、ある程度の規模のプロセッサにRTOSを使って複数の仕事をさせるよりは、小さなプロセッサを複数載せて「1プロセッサ=1タスク」にした方が、個人的には好みです。FPGAならではですし。
Xilinxではなく、AlteraのNios II/eを使ってそんなのを作ったことはあります。6プロセッサぐらいでしたが。組み込みではタスクが増減することはあまり無いので、こんなもんで十分だったりします。セマフォとか共有メモリも簡単に作れるので楽でした。

ただ、仰る通り、ソフトの環境が問題で、タスクの振り分け(プログラムの分割)や同期処理なども全てユーザの負担になります。
ハードウェア構成がユーザ毎に全く異なった物になるので、開発環境が対応するのは確かに大変そうです。

使い方を見てると、コンパイル時にタスク分割してくれる物が良さそうですが、これも難しそうです。その前に、LinuxなどSMPカーネルが載って、プロセッサの数が隠蔽されるかもしれません。
さらに、タスクや関数単位で、C→ハードウェアにコンパイルして、高性能化とか。一部分は実現されていたりします。

いやはや、なかなか混沌とした世界になってきて、面白いですね。

Posted by: koma | May 20, 2008 at 02:16 PM

koma さん、よろしく。

確かにFPGAにCPUコアを入れるのは製造中止(デスコン)対策の面もありますね。迂闊でした。

>使い方を見てると、コンパイル時にタスク分割してくれる物が良さそうですが、
全く、その通りだと思います。
リアルタイムOSのコンフィギュレーションにあたるような・・
そう言った事をやって、ハードとソフトを適当に自動的に振り分けてくれると楽なんですよねえ。

Posted by: 野田篤司 | May 25, 2008 at 03:17 PM

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/94422/41095938

Listed below are links to weblogs that reference 12 コア CPU を FPGA に:

« 【人類は宇宙へ飛び出そう まずは小惑星から】 第5章『小惑星開拓宇宙船は 19世紀のテクノロジー』(2/2) | Main | 【人類は宇宙へ飛び出そう まずは小惑星から】 第6章『これから、やるべきこと』 »