FPGAキットで始めるハード&ソフト丸ごと設計
CQ出版社からブログの内容に加筆して
「FPGAキットで始めるハード&ソフト丸ごと設計: CPUと周辺回路を作り込んでCプログラミング」
を出版しました。
<img src="http://blog-imgs-62.fc2.com/f/p/g/fpgadesign/cover.jpg" alt="cover.jpg" border="0" width="300" height="300" /></a>">
ブログの内容と同じく以下の様なシステムをFPGA上に開発します。
FPGAの中は以下の図のようなSoCでLinuxが動作しています。
すべてのソースコード( ハードウェア:VHDL, OS: Linux, アプリケーション&デバイスドライバ : C)はGPLライセンスでsourceforgeで公開しています。
最初にJPEGハードマクロが無い状態でストリーミング再生を行います。FPGAのCPU性能は低いため紙芝居のような再生となります。そのシステムでプロファイラを動作させて処理の重さを測定します。処理の重いJPEGデコードをハードウェアにオフロードすることにより高速化され紙芝居が通常の動画再生のレベルにまでなります。
ブログの内容に、ソフトウェア処理とハードウェア処理においてチップの中でどのようにデータ処理が行われているのかの解説を付け加えています。(1)単純な演算処理でのソフトウェア処理とハードウェア処理の違い(2)システムにおいてソフトウェア処理とハードウェア処理の違いを理解できるようにしました。ハードウェア処理はソフトウェア処理と異なり、並列動作が可能なこと、1クロック内であれば直列につないで処理できることを理解できるようにしたつもりです。
Appendix的にAMBAバスの説明を付けています。
対象読者は、FPGAの使いこなしは既に知っているが、小規模なロジックの実装しかしたことがなく大規模システムの開発がどのような物か知りたい人です。優秀な大学院生や企業の新入社員等をイメージしました。
実習書的な側面が大きく実際に動作させることによって理解できるようにイメージしています。
FPGA内部の設計データがハードなのかソフトなのかという話を出版社と色々しました。VHDLコードはそのままASIC化ができるハードウェアの設計データでもあり、FPGAにマッピングする限りはソフトウェア相当と見るべきという考え方もあります。ココらへんはオープンソースハードウェアのまた一つの別の流れだと私は思っていてオープンソースハードウェアというムーブメントを広めるという私の個人的な意思があります。その時のユーザーニーズとしては教育が一番分かりやすいのかな?という感覚があります。
すべてがGPLライセンスでgitで公開しているため、以下のような開発をgit上で開発していくイメージとなります。
既に大規模システム設計できるレベルのエンジニアの方にはこの事でハードウェアもオープンソース化やバザール開発への扉が開きつつあることを感じてもらえるのではないかという期待もちょっとあったりします。
Androidの会神戸支部 DevCafe
丁度関西に行く用事と重なったので、Androidの会神戸支部のDevCafeに参加してきました。
神戸支部は Android x FPGA に興味を持った人たちがいるという話を聞いていたので楽しみにしていました。
実際に行ってみた所、いろいろ面白い話が聞けて楽しかったです。
以下の写真は、デモを見せてもらった、AndroidスマートフォンとFPGA上のNiosシステムのソフトウェアとの連携。
スマートフォンのタッチパネルに指を置いて画面上を自由にスライドさせると、その座標に応じて、FPGA側のLEDが点滅します。
連携をとる基礎的な部分を開発されています。
面白いデモや話を聞けて、大いに刺激を受けました。
GDD
google developer day に参加してきました。
展示でいっぱいいっぱいで、ひとつも講義を聴けなかったのですが、刺激的でした。
皆楽しげに技術の会話しているのが、すごく印象的でした。
スタッフも腰から風船浮かべてたり、学園祭のような雰囲気です。
次回も参加しようと思いました。
それより、アメリカの google I/O に行ってみたいかも。
Google developer day
11月1日にみなとみらいで開催される google develper day(GDD 2011)の中で、googleテクノロジーを用いたアプリケーションを展示する、デベロッパーサンドボックスという枠があります。
Android Vehicleのandroidコントロールシステムがデベロッパーサンドボックスの選考に通ったので、展示します。
GDDデベロッパーサンドボックス
K2-GARAGEという名前で出展してます。個人名ではあんまりなので。
GDDには優秀な開発者の方々が参加されるそうですので、いろんな意見交換ができることを期待しています。参加される方は是非見学して意見交換をお願いします。
部屋でこつこつ作ったアプリケーションを名前の通った企業のブースと訳隔てなく並べて展示させてくれるgoogleという会社の頭の柔らかさに少し感動しました。
Beagleboard-xMでAndroidを立ち上げるまでの情報
Beagleboard-xMでAndroidを立ち上げるまでの情報を書いておきます。
Beagleboard-xM rev.B
Android TI 提供のFro-Yo
です。
Beagleboard-xMは、digikeyで買うのが一番簡単。日本のサイトから購入してもアメリカのサイトに飛びます。
最近はアメリカで注文しても数日で届きます。
HMDI端子が付いていますが、HDMI信号は出ていないという変な(?)仕様のため、HDMIからDVIへの変換器が必要になります。また、シリアル出力をTeraterm等で受けるため、PCにシリアルが無い場合(多分ほとんど無いはず)USB-シリアル変換器もあった方が良い。
電源は5Vジャック。
購入するとSDカードが一枚ついてきます。これにはLinuxが入っています。
ディスプレイとteratermを接続して、電源を入れるとそれだけでLinuxが起動します。
以上が最初の動作確認。
最初についてきたSDカードはそのまま残しておいて、他のOSをインストールするSDカードを購入します。私は相性問題がありました。私の場合、東芝のSDHCは3枚とも問題なく動作しています。
私は最初にUbuntuをインストールしてみました。
http://elinux.org/BeagleBoardUbuntu
の情報でプレビルドのイメージが簡単にブートできます。Beagleboard用のSDカードパーティションも自動で切ってくれるので、そのままSDカードのパーティションだけ残して、Androidのインストールに移りました。
Beagleboard-xMで動作するAndroidは複数ありますが、TIからリリースされているFro-Yo-Devkit-V2.2を使用します。
http://processors.wiki.ti.com/index.php/TI-Android-FroYo-DevKit-V2.2_UserGuide
にTIのユーザガイドがあります。
プレビルドなら簡単にブートするはず。
以下に、最初にBeagleboard-xMでAndroidを立ち上げるときに役に立つ情報源をあげておきます。
1. solaさんのHP
http://blog.sola-dolphin-1.net/
様々なボードでとりあえずAndroidを動かすための情報が満載。多くの人が参考にしているページ
2. 電脳羊(Android dream)
http://xiangcai.at.webry.info/
私は初期の頃、このページの情報がすごく役に立ちました。
3. 基礎から学ぶ 組み込みAndroid (書籍)
この本は定番中の定番