コメを噛め

コメを噛め

rerofumi の電子工作メモ

Archive for 6月, 2009


hatena bookmark

パラレルポート接続のJTAGタウンロードケーブルと決別してWindows7 RC 64bit を使い始めて数週間。結局 Xilinx と Lattice についてはUSB接続ダウンロードケーブルを買ってしまったので、VMwareのXPから特に問題なく利用も開発もできている状態。しかしALTERAデバイスのダウンロードケーブルだけがない。
ALTERA用についてはTERASIC BLASTERが安いし、それ以前にALTERAは使わないから良いかなーと思って後回し。
dsc00897
一応Cyclone2のブレッドボードとか手元にあったりもするので使えるに超したことはない気がする。

そんなとき「USB-Blasterもどきの制作記事」なるものを知る。おー、なんか使用頻度も高くないからこれで良いんじゃねって気がしてきた。
部品箱をあさったら無事全部そろえることができたのでさくっと作ってみようか。
dsc00896
PIC18F2550 は秋月電子のモジュールを使用する。別件でテストしていたものを使い回し。USB接続のシリアルコンバータ+ちょっとしたマイコンが欲しいときに一番使いやすいモジュールなんじゃなかろうか。
水晶や電源周りにUSBコネクタと一通りケアされているので便利。つか、今回の目的だとこれに抵抗とコネクタ付けるだけ。
dsc00898dsc00899
適当に作成。間にバッファでも挟むとより使えるものになりそうだけれども、今回はEasyに作りたかったので省略。

マイコンにファームを書き込んで完成。
dsc00900
おお、本当に USB-Blaster として認識されてコンフィグレーションもできた。もちろん、AS Programing もOK。

いやいや、これはお手軽で良いですなあ。
そいや、xilprg派生でUSB-BlasterをImpactからIP利用するプロキシなんてのがあるんだっけ?それを使えばXilinxもコンフィグレーションできるかもね。


hatena bookmark

GP2X wiz が届いたものの、その後開発マシンのOS入れ替えで開発環境構築し直しにより触れなくなっていたしだい。
GP2X wiz の Toolchain 構築で七転八倒してちょいあきらめた状態(後述)でとりあえず気になっていた Wiz の速度テスト。

スプライトサンプルアプリを動くようビルドして色々とチェックその結果わかったことは……。

私のコードはGP2XとWiz上でもっとも高速に動くよう、16bit depth のフレームバッファモードで動かしているとこはちょいと注意してね。PCの方で32bitで動作させると、倍の負荷がかかったりするから。

wiz_sprite_test

でまあ、このスプライトサンプルアプリではスプライトの数を増やしてどれくらい時間がかかるかをみることができるのです。これでSDLとfbdevの速度をなんとなく見る。
元々の GP2X-200 とかでは、fbdev から液晶に表示させるまでの負荷が異様に重くそれだけで 13~14ms かかっているというのが最大のネック。なので、2Dスプライトでも 60fps で動かすのはほとんど無理。
でも、ピクセルフィルレートは 327680pixel/16ms とそんなに悪いわけでもなく、320x240pixel なら 4画面分とそこそこだった。
なので GP2X-200 では 30fps 以下が基本。
Wiz では、fbdev の処理が 5~6ms と結構高速になっているため色々と軽く見える様だ。
ピクセルフィルレート換算だと 491520pixel/10ms とかなり早くなっている。16ms換算で、786432pixel なので倍を超えている。
その他色々な要素を総合して、CPUクロックが 266MHz から 533MHz にあがった分の数値そのまま高速化されていると考えて良いようだ。画面周りは改善されているので fbdev はそれ以上に早くなった様に見え、それがアプリのスムーズ化に現れている。

んが一つ大きな問題を見つけた。
ファーストインプレッションで「なんか動作が遅い」と言ってた理由がわかった。私がGP2Xの頃使っていた SDL を static で利用していると SDL_tick() の単位が 1ms ではなく 10ms になっているようだ。ハードやカーネルが変わりタイマーの単位が変更となったようだ。なので60fpsを数えるために16msを計測しようとしても、10ms単位なので20msしかわからないということらしい。増えた4msの分だけ遅くなっていたというわけ。
Wiz 内にあるシェアドライブラリではどうかはまだ試せていない。

利用するタイマーを変えるか、シェアドライブラリを試してみるかしないとならないかもなー。
なんとかして、10ms未満で時間を計測できる手法を見つけなくては。


hatena bookmark

dsc06457
さて、せっかくマルツボードとFPGAを手に入れたのでなんか作るか。ということで、以前CPLDで修行したときの「カップラーメンタイマー」を移植することにした。(CPLD版の制作記 2, 3
お試しで作るのにちょうど良い題材。
CPLDのときはゲート数も少なく、なんとか詰め込むような感じだったけれども、今回の Lattice FPGA XP2-5E は単純比較で 30倍くらいの規模があるため余裕ありあり。なので、以前はできなかった「時間がきたらアラームが鳴る仕組み」も追加することにする。
dsc06458
アラームのために圧電スピーカを追加している(左上)。
ボタンはSW2~5 の 4つで左から、5分、4分、3分、1分のスタートとなっている。

完成したラーメンタイマーの ispLEVER7.2 プロジェクト。(余計なファイルも混ざっていたらごめん)
Download: ramen_timer_lattice.zip
VHDLのソースコードのみアーカイブ
Download: ramen_timer_lattice_vhdl.zip


動作しているところの動画など。
Read the rest of this entry »