!!!独り言日記 !!デバッグと息抜き(2005/05/28) デバッグで煮詰まってなかなか原因をつかめなかったため、 息抜きに本屋に。 英語コーナーにて「ネコと話す英会話(光文社)」というのが砕けた感じで わかりやすそうだったので購入。 「Let's」が「Let us」の省略型だと今さら認識しました。 なんで、「一緒に歌を歌いましょう。」というのを「with me」なんかつけると 間違いとなります(Let'sの中に私(i)も私達(we)も入っているため)。 「Let's sing a song together.」が正解。 いやはや、無知ですな、私。 作業中はなかなか英語に集中できないのですが、なんとか両立できないものか・・・。 (かといって、英語のドキュメントを読みながらってのも効率悪いしなぁ。 なんせ、基礎がダメダメなので左から右に流れるだけ(^_^;;) 勉強自身は楽しいのですが、もうちょっと区分けしてスケジューリングしないと ダメですね。 後、本屋にて下記で紹介した「Shadeプラグイン大全」は、もうすでに売ってました。 6/24発売でなかったっけ・・・(BNNさんのとこの誤植かな?)。 これ、CD-ROMがついてないのですがサンプルファイル参照部分があります。 実際にサンプルみないと全体を通して把握することが難しいところがありますので、 BNNさんのところでソースをダウンロードできるようにしていただく予定で進めてます。 今しばらくお待ちくださいませ。 !!ゲーム攻略(2005/05/27) 仕事で某ゲームの舞台設定(ストーリー)とステージなどを デザインさせていただいたのですが、あれ、クリアできた 人がいるのだろうか・・・・。 (テスト段階でも誰一人クリアできず、結局私だけがクリアしていたという きつめの設定です(^_^;;) わけあって公にできないけど(といっても別に妖しいゲームでは ないです。スタッフロールにちょこっと名前を入れてもらいました(笑)) 好評ではあるようで。 ヌルゲーではない昔気質のゲームなんで、評価はどう出るか楽しみではあります。 しかし今の人って、どんなゲームを好むのでしょうね? RPGやアドベンチャーはあきらかにヌルゲー化してるように感じます。 アクションもかな。 しかし、シューティングは・・・無理です・・・一般人じゃとうてい クリアできないような(<弾幕系)。でも、ノーミスクリアするような 方もいるんですよね・・・どういう動体視力なんだろ・・。 でも、なぜシューティングだけハイレベルになったんでしょうね? !!Shadeプラグイン大全(2005/05/27) Shade7.5のプラグインSDKの使い方や機能などを説明した書籍が 発売されます。プラグイン開発者向け書籍であります。 http://www.bnn.co.jp/books/archives/2005/04/shade_2.html 自作自演になるのですが(^_^;;、執筆させていただきました。 本当はもっと機能の説明を詳しく書いた方がよかったのですが、 入門書みたいな立ち位置になっちゃいますね。 window_interfaceの説明だけでも、本1冊は書ける内容かと 思います。もし書くとすると、 昔のVC++のマニュアルみたいに複数冊子がないと 完全網羅は難しいですね。 (実は、初期段階では3Dに関する基本的なことも書くつもりでいたのですが、 3Dアルゴリズム本ではなくてShade本なので、ということで それはお流れになりました。そのため、ちょっと敷居が高いかもしれません。 Shadeを使っていて、 3Dプログラミングが分かっている方でかつC++言語で開発ができる方がターゲットです。 ねらいがニッチだ・・・・) しかし、Shade本でありながらプログラム全開ってのは ある意味爽快だなぁ。 スクリプトに関しては、「Shadeスクリプト大全」があります。 http://www.bnn.co.jp/books/archives/2004/12/shade_1.html といった感じで、私自身は実は水面下で協力したりしてます(Shade6からブランクが 空いてるように表立っては見えてますが、何かしらやってますね)。 補足など、このサイトでも取り上げていければと思ってます。 !!defineによるコンパイルエラー(2005/05/24) Windows APIやMFCやDirectXなどでプログラムしているときに 自分で使う関数の名称で「DrawText」「DrawImage」みたいにありきたりな命名すると、 コンパイル時に「error C2039: 'DrawTextA' : 'CMyInfo' のメンバではありません。」 みたいにエラーになって袋小路にはまるときがあります。 「DrawTextA」なんてつけた覚えはないのに・・・と思って、「DrawText2」 みたいに変えるとコンパイルが通って「あれ?」とかなってしまいます。 原因はどこかのヘッダファイルで「#define DrawText DrawTextA」みたいに 定義されていて「DrawText ==> DrawTextA」に置き換わっていた、 というのがオチだったりします。 ヘッダでの全置換はやめてほしいものですねぇ、これで小一時間ほど費やしてしまったです(T_T)。 しかし、DirectX9 SDK・・・おまえもか・・・。 「d3dx9core.h」にてこの置き換えしてます。 こんな場合は、ヘッダの関数名を変えるのはシャクなので、 自分が使うDrawText関数の記述されているソースの先頭にて #define DrawTextA DrawText にて変換の変換をかけてやります(せこっ)。 というか、複数の外部ライブラリを使用していればこんな衝突もありますので もうちと考えてほしいもんですね。<MSとかMSとか・・・ !!雑誌(2005/05/21) 最近は、もう1年以上(創刊号から愛読していた、といっても はじめは父親が買っていたんですが 途中からバトンタッチしました)「C MAGAZINE」を買わなくなりました。 というか、プログラム含むコンピュータ雑誌自体を買ってないですねぇ。 ネットで調べることができるし、詳しい書籍も(後発ではありますが)出たりしますので それほど必要がなくなったのかもしれません。 変わりといってはなんですが、「NHK 英語でしゃべらナイト」のを 買ってます。4月号からは初心者のための講座が始まりましたので タイミング的にはいいかなと思って。 仕事仲間の間でも、やはり英語が必要になりつつあって 英語は必須だなと再認識している今日このごろです。 「日常会話は限られてるから覚えないといかんよ」と言われたんですが、 たしかにそうですね。 今まで避けていた道なんですが、そろそろ崖っぷちに立ってみないと いけないなと思ってます。 最近、フィリピンの話を聞いてきました。中国と同じで仕事を求める意志と 勉強をする(学びたい)意志は結構強いそうです。 また、基本的にアメリカライズされているとのことで 「コンピュータを扱える人=エリート」となってまして、 そのエリート層は大抵は英語を話せるとのこと。 しかし、階級のようなものがあり 場合によっては親切がアダとなる みたいな場面もあるようです(例えばメイドさんの掃除を手伝ってあげたりとか。 仕事のテリトリーは分かれている、って感じかな。いわゆる精神面でいうバウンドリーか)。 このへん、日本だと考えられないですね。 また、ハリウッドなどのCG製作はアメリカでやっている・・・んではなくて、 大抵は海外の人件費が安いところに外注している模様。 なんだ、アメリカで完結しているわけじゃないのね。 フィリピンの方でもハリウッドに(末端で)携わってる人が多いみたい。 世界的にコスト削減なんだなぁと思いました。 ちなみに、フィリピンでは月5万円くらいの給料でも十分で、 暮らしていけるとのこと。物価が日本とは違いますね。 ・・・将来、海外につっこんでみたいなぁ。 まぁせっかくなんで、英語は学んでおいて損はないということで 希望を持ちつつ 慣れていこうと思います。 とりあえずは「Nice to meet you.」から先の 会話のキャッチボールができないと(^_^;;。 !!Shade8 発表(2005/05/21) されましたね。 http://shade.e-frontier.co.jp/shade8pre/ 元professionalの機能がstandardに下りてきてるんですねぇ。 ネットワークとか。 なにげに素材集がついているのはありがたいです。 その勢いでサンプル形状もつけてほしいんですが・・・(イズとか机とか)、贅沢かな(^_^;;。 「ShadeGrid」でネットワーク強化するなら、SDKでも対応しないとShadeの レンダラonlyの強化になってしまうので生かせないかと (SDKいじらなくても、socketを直接操作してネットワークを使ったレンダリングなり データの共有はできるけどね)。 仮に1000台のマシンを インターネットで結んで1つのシーンをレンダリングすると、どれくらい 効率アップするのだろう・・・。 それよりも、シーンデータを個々のマシンに転送するだけで結構時間を食うような。 「UD Agent」(がんなどの解析に使うグリッドシステム(https://www.ud.com/home.htm)。 未だに加入してます) みたいに、常駐しておけば勝手に登録されたマシンの空きリソースを使って シーンデータを送信〜レンダリングされる、となると作業しながら人様のマシンでレンダリングとか・・・できないかな。 !!1チップMSXの予約開始(2005/05/20) https://www.ascii.co.jp/1chip/ にて、1チップMSXの予約が開始されました。 で、早速予約。 MSXとして19800円、という風に考える方もいるかもしれませんが 「FPGAの勉強に使える」のがミソです(MSXは単にサンプルとして FPGAに乗っかっている、と考えてもいいかも。書き換えると、 ファミコンにもなると思うし、外部の機器をいじる インターフェースにもなると思う)。 正直、この値段・スペックでいじれるのは安いと思います。 5000台の予約が集まらなくても、西さんが買い取るとか 豪語してたんですが(MSX WORLD 2005にて)、今の調子なら すぐに5000台はいくかな? 私はVGAをいじってみたいので、こんな1パッケージ化されているのは 助かります(基盤自身に新たに増設する、という知識はありませんので)。 !!メモ(2005/05/17) E3開催の時期にいまさらですが、 http://www.watch.impress.co.jp/game/docs/20041021/3dmark1.htm 「PSM」ってのがあるんですね。 シャドウマップをきれいに見せるリアルタイム技術。 http://www.watch.impress.co.jp/game/docs/20040520/3due3.htm とか http://www.watch.impress.co.jp/game/docs/20050310/aoe3.htm とか見ると、もうレイトレでなくても映画レベルは十分いけそうだなぁと 思ってしまいます。 こんな技術でバーチャルリアリティーな空間ができないかなぁ、というか 実装してみたいものです。時間があれば遊んでみたいなぁ。 それと関係ないですが、ファイナルファンタジーアドベントチルドレンが 2005/09/14発売に決定したようです。 http://www.square-enix.co.jp/dvd/ff7ac/ 長いこと待ってたのでようやくですねぇ。 !!ちらつかないアニメーション向け面・線光源(2005/05/14) 以前ちらっと話題にして放置状態でしたが、検証してみました。 まず「面光源」「線光源」などは面積を持つ光源であるため、3DCGでは サンプリングにて表現します。 ここでノイズが発生します。 {{ref_image linelight_20050514.jpg}} ここで、アニメーションまで考慮したレンダラは少ない(と思う)ため、 連続動画で出すと無惨な結果となります(=ちらつく)。 上画像は「周期的要因」を取り入れてノイズをパターン化してます (そのほうが人間の目には「ノイズ」と目立ちにくいという独自解釈から)。 ところで上の画像、このノイジーな感じでアニメーションはできないと 思いますでしょうか? 動かしてみました。 {{ref linelight_20050514.mov}} 1フレームのレンダリングは、Athlon 1100MHzで27-29秒ほど。 以前よりも格段に速くなりました。 実は、BSPによる空間分割を間違って実装していたため遅かったのでした。 ので、UG(ユニフォームグリッド)からBSPに移行しました。 簡単なシーンはUGのほうが速いかと思ってたのですが、トラバースが 軽いからかまんべんなく効率がアップしますね、こりゃいいや。 ちょっとわけあってまだ公開できないのですが、(役に立つかはわからないですが) 時が来たら技術公開できれば、と思ってます。 このやり方だと、パストレーシングのざらざらの感じでもアニメーションしても ちらつかない、なんてことができそうです。 !!ここにしか咲かない花(2005/05/11) コブクロの本日発売されたシングル「ここにしか咲かない花」を購入。 「瑠璃の島」というドラマのエンディング曲です。このような突き抜けるような 歌は好きだなぁ。 ひさびさのマイヒットです。 ドラマもほのぼの雰囲気が気に入ったので毎週見てます。ドラマで この曲が入るタイミングがいいと、なかなか泣けるんですわ。 しばらくエンドレスで聞き続けそうです。 で、ついでといってはなんですが「AIR Vol.2」のDVDも購入しました。 これは全話集める予定。summer編もBSでやるみたいですね。 !!最近ウイルスメールが増えてきた(2005/05/09) ここ数日、ウイルスが増えてきたように感じます。 (先月はあまり来なかったのになぁ) お気をつけて。DMも必死なのが来ていて、ある意味笑ってしまいますが(^_^;;。 なんでもアリですな。取り締まってほしいものです。 1日20件以上来ますので、サイトを公開しているものとしてはうっとおしい限りです。 さて、ウイルスチェッカ(ノートン)にも引っかからない妖しいメールが来ました。 ググってもないですので以下のはご注意!! 差出人が「Webmaster@メールサーバ名」 Subjectが「*IMPORTANT* Your Account Has Been Locked」。 メール内容が「We have suspended some of your email services, to resolve the problem you should read the attached document.」 で、添付ファイルが「wxbu.zip」です。 適当に訳すると、「あなたのメールのサービスの一部を使えないようにしました。原因は添付のドキュメントを見てね」って感じです。 ウイルスかな? so-netからメールが来るとすると「Webmaster@xxx.so-net.ne.jp」のように サブから来ることはありませんので、こんな妖しいのが来たら速攻破棄です。 メールヘッダからみても、どうもso-netサーバ経由で来ている感じなので本当の送信元が 特定できないようになってました。 ウイルスかどうか判断が難しいですが・・・、珍しく消そうかどうか迷ったです。 メッセージ文で検索したら見つかりました。 これっぽい。 http://www.symantec.com/avcenter/venc/data/w32.mydoom.bo@mm.html 昨日発見されたばかりのウイルスのようです。 !! MSX WORLD 2005(2005/05/08) 行ってきました。やはり年齢層は若干高かったですね。 リアル世代ということか・・・。 西さんがMSXの歴史から未来像まで講演されてました。 10年先など未来の展開も見込んでおられるようですね、その説明もありました。 で、特に「教育」に力を入れているようで教材として普及させたい、とおっしゃってました。 教育話題でヒートアップしてましたが(^_^;;、やはりこのへんに思い入れがあるんだろうなぁ。 と同時に、商売よりもMSXの普及に力を入れているのがありありと伝わりました。 今の大学ではハードを教えるのはLEDレベルで止まっているらしく、そのことでも憤慨されてました(^_^;;。 ・・・そんな浅いのか・・・<大学。ただ、学校の授業はあくまでもきっかけ、とフォローされてましたので 教育内容については案外シビアな問題もあるのかもしれないですね。 取材陣もいましたので、たぶんどこかのサイトで詳細は公開されると思います。 FPGAの可能性も強調していて(大事なのはハードウェア自身をカスタマイズできること)、アルテラ社の方も説明をいれてました。 しかし、微妙に商売気のある方と西さんとでは温度差があるように感じましたね。 もしかしたら、モノヅクリサイドと利益優先サイドの考え方の違いかもしれない・・・どっちも 大事なんですが、私はモノヅクリを応援したいなぁ。 ここで初めて知ったこと「OSX」のライセンスはMSXアソシエーションが持っているらしい。 Appleのは「OS X」(真ん中にスペースを入れる)ですと。 なるほど、そういう理由があったのね。 1チップMSXは19800円で販売されるとのことで、アルテラ社のFPGAであるCyclone(プレゼン資料では100万ゲート規模、となってたけど本当かな?だと、価格的にも冒険かと)が載ってます。FPGA自身も自由に書き換え可能なようで「ハードウェアもカスタマイズ(改造)できる」 という視点は新しいですね。たしかに教材として使えそうです。試作機は展示されてましたが、 まんま評価キットみたいな雰囲気でした。携帯でもMSXのゲームが動いてましたねぇ。 未来のマルチコアとかサーバレスの話もされてましたが、これは私自身も注目してましたので 今後の展開が楽しみです。 ・・・しかし、司会進行の方、メイドさんのコスプレしてたのですが アキバならではですね(^_^;;。EGGの方もメイドコスでしたし。 で、帰り際に駅で(別の)メイドさんとすれ違い・・・。 アキバはやっぱり独特だなぁ。 !! MSX WORLD 2005(2005/05/07) 5/8(日)に開催とのこと。 http://www.msxevent.info/msxworld2005/ 1チップMSX試作機も展示しているらしいので見に行こうかな(後、西さんの講演も聞きに)。 なぜか8ビットパソコン時代のは未だにワクワク感があります(そのときに 子供だったので懐古なのかもしれないですが)。 できることは限られてるのですがアツイというか。商用としてではなく、マニアが深く掘っている領域でしょうから惹かれますねぇ。 しかし、1チップの考え方(というよりも現在のPCの環境(ハード&ソフト)に左右されない方法)は 別次元の可能性を感じています(携帯電話とかコンパクトにする方法だけではなく)。 なので、ハード設計ができればどんだけ面白いか、とか妄想します(^_^;;。 もし実現できれば現在のPC(WinとかMacとかLinuxとかに関係なく)の概念が変わるんではなかろうか、と妄想していることがありますので(そのかわり、基盤からCPUからOSからすべて 作らないといけない(^_^;;)、ハードも勉強してみようかなと思ってます。 このへんはマニアにならないとたぶん進まないと思いますので、MSX WORLD 2005で その道の方のパワーを感じてこようかと。 現実の制限にとらわれない形も必要かもしれないですね。 となると、ハードウェア(CPU含む)やOSを使うこと自体が制限になってしまいます。 その先にリアルタイムGIの世界も実現できるに違いない、と飛躍妄想してみる(^_^;;。 関係ないですが、コミック「20世紀少年」を一気読み(=大人買い)しました。 懐かしいし面白い、いい世界観ですね(浦沢氏のモンスターもかなり前に読んだのですが、 この方のはストーリーが卓越してるように感じてます)。 そこでバーチャルアトラクションというのが出てくるのですが、あれが実現すれば 面白いなぁ。そこでリアルタイムGIが可能だとすると(今は不可能ですが)すげ〜現実的に なるかもしれんですね。 !!シリアル通信(2005/05/05) 「Spartan-IIE300 評価キット」はたいしたことができないかもと思ってたのですが、 スペック的には30万ゲートくらいまで可能なようで十分使いものになりそうです (ちなみに開発ツールである「ISE WebPack」のフリー版の使用制限は約30万ゲートまで)。 ファミコンをこのボードで実装しているサイトがありました。 http://crystal.freespace.jp/pgate1/nes/index.html 1チップMSXはもうちょっとコンパクトなFPGAを使ってるのかな。たぶん、以下が1チップMSXの 元となっているものの気が。 http://www.hat.hi-ho.ne.jp/tujikawa/esepld/index.html ですが「Spartan-IIE300 評価キット」は、 残念ながらサンプルソースは一部がブラックボックス化されているようで、 いまいちメモリにアクセスする動きが把握できません。 ということで、「シリアル通信(RS-232C)-FPGA-SDRAM」の通信手段を 掘ってみました。 このボードでのシリアル通信は「TxD(out/送信データ)」「RxD(in/受信データ)」 「RTS(out/送信要求)」「CTS(in/送信可能信号)」の4ピンを使用してます。 サンプルではシリアル通信部分がブラックボックス化されてSDRAMを制御しています。 例えば、データ転送速度を115200bps/データビットを8ビット/パリティなし/ストップビット1/フロー制御なし、のシリアル通信を考えます。この場合は、「スタートビット+データビット+ストップビット」の計10ビットで1文字ずつデータが流れます。 {{ref_image rs232c_20050505.png}} たとえばアスキーコードの「a」(0x61)を送る場合は、「0100001101」と順に送ることになります(ビットの並びはLowからHighの順に)。 転送速度が115200bpsなので、10ビット/バイトとした場合は11520バイトを送れることになりますね。 ここで、この評価ボードのFPGAで使用しているクロックが66MHzなので、1秒に(66 x 10^6)の処理を行うことができます。シリアル通信に同期させる場合は「(66 x 10^6) / 115200 = 572.91666」で約573回に1回の割合でシリアル通信のビットをチェックするといい計算になります。 ここでVerilogのソースを書きます。評価ボードにて、シリアルからの入力を 単体LED8個に対してビットデータとして点灯します。 付属サンプルはVHDLなのですが、私としてはCライクなVerilogのほうが 理解しやすいのでVerilogで書いてます。 module SerialTest(RSTi, CLK66i, CxLEDo, TXDo, RXDi, RTSo, CTSi); input RSTi; //リセット信号 input CLK66i; //クロック66MHz output [7:0] CxLEDo; //単体LED x 8 output TXDo; //シリアル TxD信号 input RXDi; //シリアル RxD信号 output RTSo; //シリアル RTS信号 input CTSi; //シリアル CTS信号 reg [7:0] CxLEDo; reg TXDo; reg RTSo; reg [9:0] counter; reg [3:0] pos; reg [7:0] LEDFlag; always@(posedge CLK66i) begin if(!RSTi) begin counter <= 0; end else begin if(!CTSi) begin //クロック数が66MHzなので、 //(66 x 10^6) / 115200 = 573回のループ後に //シリアル通信のチェックを1ビットごとに行うとよい。 if(counter < 573) counter <= counter + 1; else counter <= 0; end else begin counter <= 0; end end end always@(posedge CLK66i) begin CxLEDo = 8'b11111111; TXDo = 0; RTSo = 1; if(!RSTi) begin pos <= 15; LEDFlag <= 8'b11111111; end else if(!CTSi) begin if(counter == 0) begin //スタートビットの検出。 if(pos == 15) begin if(~RXDi) pos <= 0; end else begin //ビットを立てる if(pos <= 7) begin LEDFlag[pos] <= ~RXDi; end //カウンタは0-8の間 if(pos < 8) pos <= pos + 1; else pos <= 15; end end //LEDに結果を反映 CxLEDo = LEDFlag; end else begin pos <= 15; LEDFlag <= 8'b11111111; end end endmodule この後にin/outに対するピン配置をしてFPGA側にダウンロードすることで 動作はしますが、ノイズが乗るというかLEDが点滅しますね。 元々シリアル通信がノイジーなのか私の実装がまずいのかは追いかけれてません。 Windowsツールのハイパーターミナルなどで入力した文字をそのまま画面に表示させたい場合は、 TXDo = RXDi; RTSo = CTSi; と、受信データを送信側のピンに送ることでエコーされます。 上記ソースで「always」というのでくくってますが、これが複数あると マルチスレッドのごとく並列に動作します。 FPGAプログラムはこのように 並列動作させるのが基本ですので(それで速度アップさせますので) きっかけさえつかめると回路設計はたやすいような気がします。 「posedge CLK66i」というのは、クロック(信号)の立ち上がりで このalways内を実行する、 という意味になります。あまり長い処理だと物理的な遅れが出ますが、 この中で処理したことが「1クロックで処理できる」内容となります。 TXDo/RXDi以外のin/outは、すべて「0で有効」となる点に注意です。 どうもFPGAの世界では「true = 0」がデフォのようですね。 クロック同期のタイミングがなんとなくですが把握できますでしょうか。 すべてはクロックありき、です。 しかし、SDRAMへの読み書きまでの道は遠い・・・。また気が向いたらTipsページ作る ことにします。なかなか楽しいので最近徹夜気味です(^_^;;。 !!FPGA(2005/05/02) 「MSXマガジン3」がASCIIより発売されてましたので購入。 1チップMSXの記事が載ってました。MSXの機能をFPGAに収めてしまおうという ものですが、FPGAについてわかりやすく解説していました。 FPGA(Field Programmable Gate Array)とは、一言で言うとプログラム可能な LSIのことを指します。見た目は普通のチップ(石)です。 チップメーカーは「Xilinx社」と「Altera社」が有名です。1チップMSXはAlteraの チップを使っているようです。 現在は単価が高いのですが、おそらく価格破壊と性能競争がこれから起こるのではないか、 と密かに期待しています。 以下、私が所有している「Spartan-IIE300 評価キット」。実験・学習用です。 Spartan-IIE300は、この真ん中のチップのことです(Xilinx製)。 {{ref_image fpga_20050502_0.jpg}} FPGAチップ「XC2S300E-6FG456C」。 {{ref_image fpga_20050502_1.jpg}} チップ自身がコアであり、1チップMSXだとこの20mm x 20mmほどの領域に すべての機能が入る、としたら結構すごいことですね。 でも、身近なモノで言うと実は携帯電話がそんな感じの高性能機械だったりして、 身近にコンパクトなシステムはゴロゴロ存在していたりします。 さて、「Spartan-IIE300 評価キット」は評価キットなので たいしたことができないのですが、結構遊べます。 一般に手に入るFPGAキットとしては唯一なのではないでしょうか。 これ、秋葉原の本屋で8万くらいで購入しました。チップだけがほしい、という方は ラジオ館とか入ると売ってます。秋葉原の一部は昔の風情ですね。 で、「プログラム可能なLSI」ってあやふやな表現ですが、 FPGAはちょうどハードウェア(精密な回路設計)とソフトウェアの中間くらいの 役割を担うことができます。 なのでソフトウェアよりも速い・コンパクト・低消費電力がウリであります。 が・・・・低消費電力の正体は低クロック動作でして、上記のだと66MHzで 現在のPCに比べて数十倍遅いですね。 計算をやらせても圧倒的にソフトウェアonlyの方が速いです。 で、これを打破する方法が「並列化」だったりハード寄りのプログラムだったりします。 FPGAはアセンブラよりもさらに低レベルの開発となり、CPU自身を作るということに 等しいです。レジスタも自分で作ってあげる必要があります。メモリのI/Oなども タイミングをみながら独自で、なのでかなりソフトウェアとは勝手が違います。 後、物理的な配置配線が行われるため、ソフトウェアのように手軽にとはいかないのですが、 以下のようなIDEにて開発するコードはまんまソフトウェアっぽいです。 {{ref_image fpga_ise_20050502.jpg}} 実際はソース(HDL(Verilog-HDL/VHDLなど)という言語でソースを書きます)の後にピン配置の設定を行い、 「ダウンロード」という形でFPGAに配線情報(これがビットストリームと呼ばれる、 ソフトウェアで言うバイナリです)を転送します。 Verilog-HDLの例。ボタンを押すとLEDを点灯。 module MyTest(SYS_xRSTi, CLK66i, xPBSi, CxLEDo, LED_7SEGo, LED_xSELo); input SYS_xRSTi; //Reset input CLK66i; //clock input [3:0] xPBSi; //Push button x 4 output [7:0] CxLEDo; //singleLED x 8 output [7:0] LED_7SEGo; //7segmentLED x 4 output [3:0] LED_xSELo; //7segmentLED on/off reg [7:0] CxLEDo; reg [7:0] LED_7SEGo; reg [3:0] LED_xSELo; always@(posedge CLK66i) begin CxLEDo = 8'b11111111; LED_7SEGo = 8'b00000000; LED_xSELo = 4'b1111; if(SYS_xRSTi) begin if(!xPBSi[0]) LED_xSELo[0] = 0; if(!xPBSi[1]) LED_xSELo[1] = 0; if(!xPBSi[2]) LED_xSELo[2] = 0; if(!xPBSi[3]) LED_xSELo[3] = 0; CxLEDo[0] = 1; CxLEDo[1] = 1; CxLEDo[2] = 0; CxLEDo[3] = 0; CxLEDo[4] = 0; CxLEDo[5] = 0; CxLEDo[6] = 1; CxLEDo[7] = 0; LED_7SEGo[0] = 1; LED_7SEGo[1] = 1; LED_7SEGo[2] = 1; LED_7SEGo[3] = 0; LED_7SEGo[4] = 0; LED_7SEGo[5] = 0; LED_7SEGo[6] = 0; LED_7SEGo[7] = 0; end end endmodule C言語っぽいですね。Verilogの場合はCライクなのですぐに理解ができると 思います。が、実際の壁はクロック数に同期させるタイミングでして、 私も正直いまいち理解できてないです。 FPGAの利点として、例えばレイトレーシングの三角形とレイとの交差判定は、普通のPCでは数十クロックから 数百クロック必要になりますが、FPGAによる実装で上から下までズドンと通すと1クロックで 済ませることも可能です。 (ですが、CPUのマルチコア化により、速度の面ではPCもFPGAも常にイタチゴッコと言えます) FPGAでは物理的に実装可能なロジック数に上限があるため、例えば レイトレーシングのシステムを1チップに収めるということは難しいです。 ただ考え方として、CPUとソフトウェアの関係のように担う機能を分けるという 考え方もできるかもしれません。 現OSの上でPCIバス経由の〜、とかAGP/PCI-Expressを使って〜、という こと自体でバスネックになりますので、ベクトルプロセッサとしてのFPGA利用 (レイトレに特化したCPUを作る)した専用マシンを作ってしまう、とするともしかしたら 「レイトレはハードウェア化できないのでは」に対する1つの解決策になるのかも しれませんね。 いわゆる昔の数値演算コプロセッサのように、シームレスにCPUと結びつけば。 研究レベルのFPGAを使用したレイトレーサは、おそらくハード側にすべての ポリゴン情報・テクスチャ情報などを持ってるでしょうから 制限もありそうですし。 これは現GPUでも言えることですが。しかし、GPUのプログラマブルシェーダは FPGAの「ダウンロード」と概念が似てますね。カスタマイズという点では近づいているのかも しれませんが、現段階では一過性のもののような気もしてます(Simple is bestではなくて、 3Dを表現するための(GPU仕様に合わせた)苦肉の策で当てはめているように個人的には感じます)。 さて、時代はどっちに転ぶか楽しみにしつつ、FPGAについては今のうちに 知識を蓄えておきたいなぁと思ってます。 今、1チップMSXレベルまで時代は来ているとすると、もしかしたら10年後は 1チップWindowsまで行けたりして。・・・そのときはPCがもっと性能アップしてるかな(^_^;;。なにせコンパクトになるということは一番の利点なので 例えば10チップ分を並列動作なんかできれば「リアルタイム3Dと言えばレイトレ」 という時代が来るかもしれないですね。 GPUも内部で並列化しているそうですが、並列化が進めば進むほどレイトレのほうが 速度アップできる可能性があるわけですので。 !!GW(2005/05/01) 自由にプログラムする時間ができると思ったら仕事が 何個か入ってしまったので、あいかわらず仕事モードです。 う〜む、うまいこといかないかぁ。 「雲作り」のほうは後回しになってますが、5月中になんとかできないかな。