2017年9月
          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

tweet

  • tweets

« 2007年12月 | トップページ | 2008年2月 »

2008年1月

FPGAのSimulation環境

とりあえず一つの局面で手を考えて返す、というとこまでは前回できたので、じゃあ次は
 ・複数の局面まとめて流せるようにする
 ・相手の手をコンソールから入れて、それで盤面を進める
をまずやりました。この後regression。いつもだいたい「読みの技法」25題、進歩本②の48題、とかをやらせてたんで、まずこれをトライ。結果は:
  … うーん、おかしい …
で、今はまっててデバッグ中です。

FPGAの設計では今までregressionをやってませんで、今回が初めて。何でかというと、SIMLが遅いから。少し前まではIcarus Verilogというフリーソフトを使っていました。これはフリーにしてはなかなかよくできているのですが、いかんせん1局面で全幅1手静止6手でも40分とかかかる。25題regression、なんてとてもやってられなかったのです。

ボードを買ったところ、ModelSimのAltera Editionというのが付いてきて、これは期待できそうと思い、インストールして立ち上げ。案の定、40分が5分になりました。それでも20pos/s、実機の数十万分の一ですが。最初のうちはできるだけこれで調査する方向。ちなみにNios込みの全体SIMLと、NiosなしエンジンのみのSIML環境の2つを立ち上げてます。Niosの初期化等だけでけっこうかかるので普段はエンジンのみで。でも、時々ですがエンジンだけSIMLだと動くけど実機だと動かない、なんてことになると、Nios込みモデルで動かさないとわからない、ということもあるので、なかなか面倒です。

しかし、12月初めくらいから2か月近くずっと、将棋とは直接関係のない環境立ち上げばっかやってきたので、ようやく将棋のデバッグに戻ってこれたのはなかなかめでたいです。

う、動いた(涙&鼻水)

しょうがないなぁ…ほら、ハンカチ。
…え"?ちょっと待ってよ?!…

ボードが届いたんで、何はともあれ「とりあえず動かす」環境を作りだしました。通信対戦は時間かかりそうなのでとりあえずおいといて、NiosIIからエンジンをドライブ、通信はIDEコンソールから手入力で、とするならいちおうできそうなメドはついていたので、まずはこの線で動かそう、と決め打ち。エンジンのI/Fをそれ用に若干改造。それ用のSIML環境も整備。

次、Nios上のソフトを作る。まずは、初期局面の配列をソフトで持ち、これをエンジンにソフトからセット、エンジンを起動し、返った手を表示、だけのもの。とはいえこれが動けば、あとはregressionに対応したり手入力で対戦するのは比較的楽のはず。

変更したハードをコンパイル。以前のお試し合成では最大~14MHzだったので、入力xtal 50MHzを4分周して12.5MHzに設定。諸般の事情でNiosIIの方は別のクロックで25MHzになりましたが。これで毎秒625万局面、になるはず(以下6.25Mp/sと記)。

で、ハードを焼きこんで動かす…はずが、もろもろのトラブル続発でした。私はありとあらゆるトラブルに遭遇したが、その詳細はこのブログの余白には書ききれない。DLできないとか、JTAG通信できないとか、何かわからんけどとにかく動かん、とか。この時点では

            う、動かん(汗)

だったんですが。調査のためにModelSimのRTL Siml環境も覚えて立ち上げて、とかやって。でもまあそうこうしてるうちに本日午前10時ごろ、無事動きだしました。

テストは例によって進歩本②の問題37。ソフトにこれ書き込んであるので、まだ他のはやってません。最初はSIML時と同じ全幅1手、静止6手(うちではこれを「深さ7」と呼んでます。以下、静止6手は変えず)でやり、あっという間に終わる。SIMLでは40分かかるんですけどねぇ…で調子にのって次深さ14。25秒、0x08b0f539局面(fwdの数)で終了。2^20=1Mとすると、139M局面なんで、5.6Mp/sくらい。6.25Mp/sより少ないですが、まあJTAG通信のオーバーヘッドとかあるんでしょう、ということで、いちおう期待通りに動いてはいるようです。更に調子にのって深さ15では70秒368Mpos。深さ16で465秒2.7Gpos。だいたい5.5-6Mp/s程度は出るみたい。

深さについては、最初の記事に書いたとおり「ベスト手以外全部PRUNE」でやってますんで、普通の感覚とは違うかも。ただ、Bonaは4Mp/sで20手くらいまで読んでたっけ?まあこの辺は、こちらのチューンが未熟、なせいだと思います。

いちおうハードは動いたみたいなので、今後はデバッグが課題ですね。たぶんバグいろいろあると思うので…。FPGAが動いてる間は、まったくうんともすんとも言いません。ソフトと違って途中でメッセージ出したりとかしないので。465秒待つのはかなり不安なものがありました。ハングしたかな?とか。まあボードにはLEDや7SEGもあるので、若干の表示ができなくもないのですが、大した情報は出せないし。そんな環境で、いったいどうやってデバッグするのか?を次考えないと。

と、届いた(涙)

ボード届いてしまいました。注文してから一週間たってないし。Digi-key rocks! 今後ごひいきにしましょう(って、そうそう買うもんじゃないが)

それはうれしいんですが、全く予定外だったのでぜんぜん準備ができてませんでした。今あわてふためいていろいろやってるところ。何しろやること山積みですんで。ブログ書いてる暇もあまりないので、今回は短く。また一段落したら報告します。一行だけ:17:03から始めたコンパイルがまだ延々と走っている(今19:25)

別件で、今CSA理事会さんとメールやりとり中。なかなかつっこみどころのあるやりとりをしていて、一部の方にはたぶんかなりお楽しみいただけるのではと思うのですが、なにぶん今折衝中なものでこれも今のところノーコメントで。

Niosを倒す鬼

いや回文作ってどうする。

あれこれドキュメントばっか見ててもわからんことも多いので、何はともあれインストールして動かしてみよう、というわけでNiosII EDS (Embedded Design Suite)をインストールしてみました。

とその前にPCの話。私はここ2年ほど、会社からノートPC(2kg弱)を支給されてからというもの、会社でも自宅でも出張・旅行でも常にこれ、どこにでも持ち歩き全てこれで済ます、というスタイルでやってました。だって便利だし。1.0GHz Celeron M 512MBですが、大抵の使い方するぶんにはそう不便はないし。Deep Purpleの開発もこれ上のCygwinでやってました。

ですが最近FPGAを始めてISEやQuartusを動かすと、さすがに遅い。EDSを入れるにあたって、ついに開発マシンは別に用意することにしました。で、1年近く前にDeep Purpleの実験用に作ったマシンがほとんど使ってなかったので、これを流用することにしました。

元々このマシンを作った目的は2つあって、1つは64bit OSでの性能を見るため。このためにSuSE Linux EM64T版を入れてました。もう1つは並列化の実験。クラスタベースで、各マシンは(1台を除いて)ディスクレスクライアントにして、自作でできるだけ安くあげる、を目標にしました。で、Core2Duo 1.86GHz + マザボ + メモリ512MB + ケース&電源200W、他何もなし、の構成で5万弱。最初の1台はHDD 160B ~\7K もつきましたが。OSはLinuxなのでただ。pxelinuxでディスクレスブートも確認して、よしよしこれで8CPUマシンが20万弱でできるな、などと考えていたのですが。

FPGAに転向したため、すべて無駄になってしまいました。

この件に限らずよく思うんですが、何かをやろうとしていろいろ検討して、いくつか案を考え、そのうち1つを選んで残りは捨て、となるわけですが、私の場合100検討したうち、最終的に役に立つのが7くらいかなぁ、と。ま数えたわけじゃないですが、感覚的に1割は切ってる気がします。残りの93は、エネルギーを費やして真剣に検討するのですが、結局お蔵入りに。その労力と時間は一体どこに行ってしまうのか…

   俺の青春の日々を返せー (返せー) (返せー)

あぁ山はいいなぁ。

ちなみにDeep Purpleの思考エンジン部は、一から作り直す、を4回やりました。大会には3回出ましたが、エンジンは全部まったく別物。I/F部はさすがに流用してますが。

まそんなわけで、そのマシンにメモリ2GBとWin VistaのOEM版を買い。FPGA用しか使わんので迷わずHome Basic \14.4K。を近所のケーズデンキで買ったのが大晦日。新年早々まずメモリを差し。これは問題なかったのだが、次のVistaインストールで。「インストールできるシステム ボリュームがありません」何じゃこりゃ。ググって調べるといくつか当てはまりそうな点が見つかったが、初詣タイムになったので中断。翌2日再開していろいろ試し、結局怪しい点その3の「Win以外のパーティションがbootableになってるせい」が正解と判明。私の場合当然Linuxがbootableになってたので、SuSEのCDROMからレスキューモードでブートし、fdiskでWinパーティションのみをbootableに変えてからやるとインストール成功。

Vistaに続いて、QuartusII, MegaCore, NiosII EDSと続けてインストール。で、まずは  Hardware Tutorialをとりあえずそのままなぞる。9割方うまく行き、最後のSOF吐き出しのところでライセンスがどうこう、でコケる。まあこれはボード買えばライセンスついてくるんだろう、とタカをくくり。SOPC Builderも問題なし。ちなみに私はそっぷくびるだと発音してますが何か。SEPCだと怖いよなこれ。

EDSも立ち上げ、これもtutorialをなぞる。count_binaryは無事動作。ヘルプとかをあれこれ見てるうちに、Host Based Filesystemなるものを発見。これはNiosからホストPCのファイルをJTAG経由でオープンするというもので、あ、これがcygwinでnamed pipeで対戦ソフトと通信できれば…などと考えたのですが。さっそくhostfsのサンプルアプリをビルドして、Run as... (w/ ISS)すると、「hostfs はRunはできません、Debugのみ」とのこと。ふん、けち。で、Debug as... (w/ ISS)すると。

hostfs_open() (だったかな)中の "break 1" で止まって動かなくなってしまいました。

うーん、よくわからんが…Run asだとstdin/out動くんだけど、DebugだとJTAGは使えないのかな?それとも、ISSはそもそもhostfsは使えない、とか?いろいろ疑問はあるんですが、机上で考えてても答え出んし、とにかくまずボード買って、ISSでなく実機で動かしてみよう、と思っております。ちなみに3C120Nボード発注かけてしまいました。

« 2007年12月 | トップページ | 2008年2月 »