2024年7月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

tweet

  • tweets

トップページ | 2008年1月 »

2007年12月

プロジェクトは踊る ~ ホストPCとの接続

評価ボード選択、というかFPGA将棋のシステム全体の設計上、 ホストPCとの接続方法は重要な要素の一つです。かれこれ1か月ほど検討しているのですが、なかなか「これだ!」という決定的な解が見つからず。また検討しているうちにいろんなことがわかってきて、ある方向で固まりかけてたかに見えたのが「いややっぱりこっちの方が…」となって180度転換、というのを何度となく繰り返してます。

シリアルかパラレルかUSBかEtherか、と考え、シリやパラはボードに端子ないなぁ、OpenCoresのUSBを今考えてます、だけどいくつか問題があって、と言ってたのが先週までのあらすじ。で、OpenCores USBのソース読みはじめたり、デバドラが必要になりそうなのでO'reilly HPからLinux Device Drivers をDLしてきて読みだしたり、といったことをしていたのですが。

でもどうもしっくり来なかったので、人に聞いてみようと思い、といっても聞くあてもないので2ちゃんねるのFPGAスレというのがあったのでそこで聞いてみました。すると10分もしないうちに「Opencoresなんかより普通にFT245とか使えば?」とのレス。

何を隠そうこっちはFT245って何かも知らなかったのですが、ググるとUSBのコントローラチップ。なるほど、FPGA内にコントローラ持つより、できあいのコントローラチップがFPGAの先にあればいいわけです。そういうボードないか探そう、いや、てより、USB端子のあるボードなら、もしかしてコントローラ付いてんじゃないの?と思い、Alteraの3C120Nボードのスケマ(回路図)を見てみると…しっかりありました、ずばりFT245BLが。

でさっそくFTDI社HPに行き、データシートをDL。FPGA側とのI/Fは超簡単の一言。これならI/Fのステートマシンも簡単にかけそうです。おまけにドライバも用意されてました。というか、キットにUSB Blasterのドライバが付いてくるので、それがFT245用のはずだし。

というわけで、Opencoresやデバドラの情報は一気に無駄になってしまいました。やれやれ、と思いつつもFT245の線をもっと詰めはじめました。FT245とI/FするFPGA側のステートマシンを書いてみたり。一方ボードの資料やスケマを詳細に読みだすと、気になる記述が。

 - FT245はconfig専用のようにも読める?
  実アプリでFPGAをUSBデバイスにする使い方は
  できないかも?
 - FT245の他にCypressのUSBチップも載ってる模様。
  しかし、スケマにあるだけでdocには何も記述なし。

といった問題点が出てきて、代理店に問い合わせたのですが、1週間くらいたっても解決せず、不明のまま正月休みに突入。Cypressチップの方はまだ情報入手してないが、ピンからして一見してI/FはFT245とは違いそう。そうするとFT245 I/Fの設計はまた無駄になるし。

一方Etherの方も全く諦めたわけではなく、並行して調べてました。3C120NボードではMarvell 88E1111をPHYに使っている。これもspec未確認。

Etherの場合はハードでステートマシン作ってI/F、というのはさすがに無理で、FPGA上にCPUを持つ必要があります。で、NiosIIのチュートリアルを読み出す。…と、「あれ?」と思うことが。FT245経由(Alteraは"USB Blaster"と呼んでる)で、configの他に"JTAG UART"というのがあり、これでホストPC-FPGA間でシリアル通信できることを発見。

JTAGなんでいかにも遅そうですが、FPGA将棋での要求を考えるに、ま少なくともA級リーグ指し手1号の場合は、1手指すごとに数十ByteをホストPCからFPGAに送り、探索が終わるとやはり数十ByteをFPGAからホストPCに返す、という程度。これなら数十Byteがコンマ数秒程度で送れれば十分なのです。まあこれは単一プロセサの場合で、並列化時はもっと速度必要ですが、とりあえず来年5月向けにはこれで十分。

NiosIIではハード、ソフト共いろいろ環境が用意されてて、I/Fやプロトコル等ほとんど何も考えなくても、普通にCでプログラム書いてJTAG UARTをstdin/stdoutとして使えるようです。これは超楽。おまけに、試作のぶんには費用もかからず。

で、いったんは「これで決まりじゃん!」と安心してしまいました。ところが、まだまだ。プロジェクトは踊る。

更にNiosIIのことを調べ、専用のIDEのdocを読んでいくと。FPGAへのNiosII用ソフトのDL&実行はこのIDEから行います。で、stdin/stdoutはこのIDEのコンソールになる。当然ながら対局時は対局サーバと通信するプログラムがあるわけで、このプログラムがFPGAのstdin/outに読み書きできる必要があります。これがそのIDEでできるのか?パイプにredirect、とかできる?この点はまだ調べついてなく、次週持ち越しです。NiosII IDEはフリーでDLできるようなので、これからまたインストールして試してみる予定。(それを正月にやるのか、お前は?)

話は戻ってEtherの方ですが、USBに決定/Etherは当面捨てる、という方針でよいかを最終レビューしていた段階で、実はやはりEtherの方が優位、というケースが出てきてしまいました。それは、またも並列化時。

評価ボードへのconfig DL等の制御は、ボードとUSB接続したPC上のQuartusIIから行います。NiosIIがあるなら更にそのPC上でIDEも動かし、そこからソフトのDLや起動をします。複数ボード使うとき、QuartusIIやIDEを複数立ち上げるのか?接続先を複数のUSBケーブルから選べるのか?メモリ足りなくならない?

この辺がEtherなら、以下のような構成で問題なさそう。

  config用PC -- FPGA --+
                                  |
  config用PC -- FPGA --+
                                  |(Ether)
       :
                                   |
  config用PC -- FPGA --+
                                   |
  探索マスターPC ------+
                      

以上はチップ間並列の話ですが、チップ内並列のことも考えると。EtherというよりはCPUを持つ持たないの話ですが、FPGA1チップ内に探索コアを複数インスタンスすることを考えると、ハードのI/Fステートマシンをそのたび書き換えるのは面倒そうです。CPUを持ち、探索コアを増やす時は単にインスタンスを追加してバスにぶら下げ、ディスパッチはCPU上のソフトでやらせる、の方がずっと筋がよさそう。

というわけで、並列化まで見すえた最終形態としては「NiosII+Ether」が本命なのかな、と今のところ考えています。ただこれをやるとなると、OSやTCP/IPスタックも必要になり、かなり大きな話になってきます。来年5月に間に合うかというと甚だ疑問なので、理想形とスケジュールのトレードオフでどこを落とし所にするか、で悩んでいるところ。

ちなみに、Etherにするなら3C120Nボードで問題ないので、納期もあることだし年明けに発注してしまおうと考えています。謎電ブログでDigikeyというのを知りまして、当該ボードも在庫あるようなのでこっちにしようか、と思ってます。

OSやTCP/IPスタックの話もいろいろあるのですが、だいぶ長くなってきたのでまた今度。

評価ボード調達進捗状況 エピソード2 サイクロンの台頭

いやいや、びっくりしました。ずっと「だいとう」と読んでたんだけど変換できず、「たいとう」なことにはじめて気づいた^^;

ツール代をけちりたい、という動機から、Cyclone3でも合成トライしてみました。QuartusII WebEditionをインストールし、某ムックで使い方覚えて、ファミリーはCyclone3、デバイスは自動選択、というモードで

  EP3C80     LE 40,294 / 81,264 (50%)   Fmax 14.35MHz

ログの見方がいまいちよくわからんがたぶんこうだと思う。EP3C60でも入るよなきっと。
まあSpartan3とほぼ同レベル、並ですね。Stratixは試してないが、たぶんSt2≒V4, St3≒V5, なのでは(まったくの憶測)。
ご感想いかがですか、謎電さん。
ちなみに、XC3SD3400Aはやはりあふれました。

Cyclone系ボードを探すと、EP3C120のボードで$1,495 / 20.3万円というのがあり。ただ難点は、I/FがシリアルがなくUSBとEtherのみな点。USBでもEtherでもコントローラがけっこう大変そうな気がするのだが、うーんまあ最悪しょうがないか、と覚悟を決め。

問題のボード入手。私は勤め先新宿なんですが、アルテラKKがアイランドタワー、代理店その1がモノリスとご近所。これならいざとなったら押しかけて、「ボード出しやがれ!出すまでここを動かねえぞ!」などと居座れば出すだろ、などとほとんどヤ○ザなことを考えつつ、代理店その1にTEL。そしたら、「個人のお客様は、弊社では扱ってませんが、取引先の商社がありますのでそちらをご紹介します」とのこと。

  なーんでえ、案外話わかんじゃねぇかよ、えぇ?
  最初っからそう言ってくれりゃあいいんだよ。

ただ、上記の3C120Nのボードは、最近リリースされたばかりなので納期3か月とのこと。

  なああんちゃん、この納期だけどさ、俺ぁちょいと急いでんだよ。
  何とかしてくんねぇか、あ?

…いや、やめときますか。堅気の衆に迷惑かけちゃいけねぇ、と先代も言ってたし。

というわけで、納期がちょっとあれですが、まあ何とか入手はできそうです。ただ、USB or Etherで動かせるメドをつけねばならんので、目下そこを検討中。ここをクリアできれば、3C120Nにほぼ決定です。これだとご予算20.3万ですべて揃う。

♪ ごお~ ごお~ れっつごお~
  かがやくまーしーんー~    ♪

で、PCとのI/Fの話。正直、まだ今のところ見極めついてません。いろいろ情報収集している段階。

まずコントローラを一から作るなんてやってられなので、IPを探す必要があります。Megacore IP storeとかいうのがあって、USB等だいたい何でも揃ってはいるのですが、これはかなりのお値段しそう。いくらかまでは調べてないですが。で、だめもとでネットで探すと…なんと、フリーのがありました。 www.opencores.org。これもけっこう何でも揃ってる。業界の人には常識なのかもしれませんが、これは正直感動しました。IPのFSF、みたいなもん。フリーなんで品質どうよ?というのは少しありますが、ソースあるならデバッグもできるし。

Etherのコントローラはだいぶでかくなるようなので、USBを本線で検討。OpencoresのUSBは、説明読むと「FIFOベースで、MCUは不要」と書いてある。要確認ですが、ほんとならだいぶ楽になる(というか、今からNios覚えて、なんてなるとちょっと来年の大会は無理そう)ので、いちおうこれに期待してるところ。決める前にソース読まないとあれですが。

USBデバイスとなると、PC側のソフトやドライバ等も考えねばならないのですが…ここまではまだ手がまわっていない。

3か月ってえと、来年3月末か… 5月の大会はやっぱ苦しいかも…まあ、6月でも7月でも、動いたらdojoででも指せばいいや。

しかしあれですね、FPGAだと動かすだけではるかに大変ですね。ソフトでも最初に開発するときは、エンジンの方は楽しいでしょうが、いざ大会に出ようとするとシリアルだとかTCP/IPだとかのプログラムを組む必要が出ますよね。あれで大抵の人は「えーやだ何それー超うざーい何でアタシがそんなことしなきゃなんないのー」と思っただろうと思うのですが(え、思わなかった?私だけ?)、FPGAの場合その百倍くらいです。12月から「将棋的に強くする」作業がぜんぜんできてないのですが。まあ、当面の目標は、この際速さ強さはおいといて、「実FPGAで将棋が動くことを示す」にトーンダウンしつつあるのですが、それすら難しい。

評価ボード調達進捗状況

FPGA内部の論理の作成が一段落したため、FPGAボードへの具体的実装やホストPCとの接続の検討を開始しました。

まずはボードの調達。世の中にいろんなFPGA評価ボードというのが出回っているので、用途に合うものはないか探し始めたのですが…

以前にもざっとはチェックしており、数万~十数万円くらいだろう、と踏んでいたのですが、これらはみな搭載チップが小さいことが判明。(チェックしたのは合成かける前だった。)XC5VLX85以上のチップ搭載というのも数少ないながらあるのですが、50万とか60万(円)とか。

        高!

あっさり稟議否決になってしまいました。
おまけに「企業のお客様が対象」というところが多く、個人で買うのは難しいかも、という状況も判明。

Virtex5だから高いのか?と思いVirtex4やSpartan3のボードも探してみました。V4の方はV5とあまり状況変わらず。S3はそもそも大きいチップ搭載のボードが非常に少ない。いちおう3A3400DSP付きで$995、というのを発見。3400ってゲート数入るか微妙なんだけど、うーんしょうがないから何とか論理削れんか考えてみようか…ところでこれ個人に売ってくれんのかな、ていうか在庫あんのか、というあたりを来週チェック予定。

なおV4, S3でも全く同じRTLで合成かけてみたところ、結果は以下のとおり:

        Virtex5   XC5VLX85    37MHz    area ratio = 96
        Virtex4   XC4VLX100   25MHz    area ratio = 55
        Spartan3  XC3S4000    12MHz    area ratio = 90

V4はエリア余裕あるので、LX80(orもしかして60)でも入るかも。V5,S3は上記より小さいチップはだめっぽいです。性能はご覧の通り3:2:1くらい。
前回は「1500万局面/秒」と大風呂敷を広げてしまいましたが、公取委から不当表示の警告を受けそうなので、謹んで訂正致します:

[訂正版] A級リーグ指し手1号の性能予測

    特上   1500万局面/秒
     上      1000万局面/秒
    並      500万局面/秒
                      (※数字はイメージです)

     じゃ、私は並で。

となりそう。

仕事でFPGAに関わってる友人I氏にこのあたりの話を聞いてみたのですが、更に衝撃の事実が。彼曰く(※プライバシー保護上、音声は変えてあります):

「大きいチップって、カタログには載ってても実際に頼むと物なかったりするんだよね。ロットで頼むような大口の客だと出すみたいなんだけど、試作で1個とか頼んでも出てこないんだよ。」

      何じゃそりゃー!! (裏手つっこみ)

ロットって、65nmウェハーのロット?それなら軽く1千万は超えるはずだし。
まあそういうもんなのかもしれませんが。

というわけで、並すら入手できないかも。…いやいや、てなこと言ってちゃあかんのですが。

うーん困ったな。どうしよっか。とりあえずAlteraも合成してそっちもボード探してみようかな。Quartusいじったことないけど、まあ何とかなるだろ。でもボードの状況はあまり変わらんような予感もしたり。

そういえばツールの問題というのもあって。ISEだとLX50までは"ISE WebPack"というので無料なんですが、それより上だと"ISE Foundation"になって20万くらいするし。お試しでやるぶんにはまあつてをたどって何とかしたんですが、本格的にやるとなるとそうも行かんし。QuartusIIはCycloneならWebEditionで全部OKのようなので、こちらを探すべきか。

いやーしかし地雷踏みまくってますねーはっはっはっはー。
まあうすうす予想はしてたけど。

てなわけで次号へ。

将棋プロセサ 「A級リーグ指し手1号」開発中

ルート局面から全てハードで探索を行い、終わると指し手を返す、という完全独立型将棋プロセサ、「A級リーグ指し手1号」をFPGAで開発してます。他に類例を聞いたことがないので、たぶん世界初じゃないかな、と思っています。

[ハード概要と性能]

まず、どのFPGAを使うか、ですが、まあverilogで書いているので、どれでもいいと言えばどれでもいいです。今お試しで合成やP&Rを試しているのは Xilinx Virtex5 です。合成結果で 37MHz でした。P&Rで少し落ちるかもしれませんが、30MHzは越えると思います。局面を進めるのと戻すのにそれぞれ1クロックかかるので、30MHzなら15M局面/秒になります。

Virtex 5 の XC5VLX85 に1プロセサが収まります。XC5VLX330 を使えば4プロセサは入るでしょう。仮に4チップつなげて並列に動かすソフトを書けば、Deep Blue の2億局面/秒は越えられそうです。

[プロジェクト状況]

今はverilogでのコーディングを終え、Simulationが動いている段階。 上記のとおり、お試しレベルでは合成とP&Rは実施済。 実チップへの焼き込みはこれからです。評価ボードを用意したり、ホストI/Fのソフトを作ったり、と作業が多いので、来年5月の選手権参加を目標にしてはいますが、果たして間に合うか…というところ。

[動作サンプル波形]

Simulation の波形のサンプルを以下に示します。こんな感じか、というのがわかっていただけると幸いです。

Aleagwavesmall_2

ソフト屋の方は見慣れないかもしれませんが、ハードのデバッグは通常このような「波形ビューア」で行います。

forward/rewind が、局面を進める/戻す、です。動作中は必ず毎クロックfwdかrwdのどちらかが出るようになってます。この図はちょうど探索が終わったところで、カーソルの線で終わってます。

この例は「コンピュータ将棋の進歩2」の問題集37番を解かせた例で、終了時bestMvが"20552"(5二角打、正解)を返しています。今はPCでソフト的にsimulationしているので、速度は数サイクル/秒と遅く、深い探索はできません。今は全幅1手、静止6手の設定で動かしています。問題37はこの深さでも正解が出るため使用しています。

探索が終わるとstoppedがつきます。stoppedは外部へ出力され、ホストPCに伝えます。ホストはこれを見るとcmdReadをプロセサへ送ります。するとプロセサは指し手とあと若干の情報を数サイクルかけてcmdReadDataに載せてホストに伝える、という動きになります。

なお最初の起動の時は、ホストがcmdWriteを立てた後、数サイクルかけてルート局面、α、β、depth を cmdWriteData で送ります。プロセサ側では、cmdWrite でステートマシンを起動し、受け取ったデータを然るべきflip flopに設定した後、stoppedを落として自分で起動して探索を開始します。α、β、depth も送るのは、並列化を視野に入れてのことです。

実マシンでホストへ接続する際は、クロックの違いによる同期化の問題等あるので、これよりもう少し複雑になりそうです。ただ、基本的な動きは変わらない予定です。

[今後の予定]

・まずは、何はともあれ「早く焼きたい!」。そのためには評価ボードや、 I/F ソフトを…

・今はまだ簡単な例しかやってませんので、regressionの環境を作ったり、 もう少し深い探索をやらせてみたり、もしないと。

・今までは「まず最初は、簡単でいいからとにかく動くものを」というスタンス でやってきたので、チューニングはぜんぜんできていません。たぶん37MHzより はかなり高速化できるだろう、とは思っているので、これもやりたいところ。

・ちょい(かなり?)先ですが、並列化も…

・フリーハードウェアとして FPGA netlist (NGC等)を公開しようかともくろんで ます。ただ、これはこれで、いろいろと環境整備をしないといけないので、 なかなか手がまわらないのですが。誰でも勝手にNGCダウンロードしてFPGAに 焼ける、ようになると面白いかな、と。

・このHPのメンテ:まめに更新したいのは山々なんですが、なんせ仕事の合間 にやってるのでなかなか時間がとれず…でも何とかできる範囲でやっていこうと 思っております。

[コンピュータ将棋としての動作]

全般に、ソフトなら簡単にできるがハードでは難しいこと、というのがけっこうあります。それを考慮した結果、現状は以下のようになってます。(すぐ変わるかもしれませんが)

・全幅探索です。元々Bonaの成功を見て、「全幅やったらFPGAでできるんちゃうか」 と思ったのが始めたきっかけです。それまでは Deep Purple という、1次予選を 通るか通らないか、くらいのソフトを作っていたのですが、ハードに転向しました。

・深さが一定以下になると静止探索になります。といっても全幅と静止の差はほとんど なく、生成する手が全部か、取り+パスか、が唯一の違いです。詰将棋はありません。

・多重反復深化します。前のループのα更新した手を2つまで覚え、次のループで 最初にトライします。

・ハッシュはありません。反復深化があれば必須ではないかな、と思っています。 ただ、ハッシュコードがないため、今はループ(千日手)のチェックができて いません。もしかしたら将来このためだけにハッシュコード入れるかもしれま せん(あまりやりたくないが…)

・手生成には3種類あります:1)全幅、2)取り+パス、3)王手防ぎ。 それぞれのカテゴリの中では、機械的な順序で生成し、たとえばSEEでソート、 なんてことはしてません。これも、まあ反復深化があるからいいだろ、と自分に 言い訳してます。 ただ、全幅時もまず取りから、くらいはやります。

・評価は、今のところかなりいいかげんです。各マスの両王との相対位置、 個々の利き、を考慮して適当に線形和、という感じ。(評価のチューンって つまんないんですよね^^;)進行度は連続で持ってます。

・基本は普通のαβ探索。NULLMOVE PRUNINGはありません(全幅ではパスしないし)。 が、「ベスト手以外全部PRUNE」をやります。YSSの0.5手延長、みたいな感じ? FUTILITY PRUNINGも今はやってないです。ただ、「静止探索、深さ一定以下で、 手番側がβ以上ならβカット」くらいでお茶濁そうかな、などと考えてます。

トップページ | 2008年1月 »