DE0にBitblit機能を組込んでみた

130905a1DE0で、いろいろ実験して遊ぶベースとして長船さんのCinerariaのCPUをNoisII/eに変えて使用している。PS/2キーボードをつなぎ、自作のコマンド・インタプリタを走らせ、これで、いろいろ実験できるぞと思ったのだが、画面のスクロールの遅さが気になる。

文字の描画は8×16のフォントを読み出し、1pixelづつ書き込むという動作をソフトウェアで行っており速度的に不満は無い。画面のスクロールでは、ほぼ画面全体(640x480x2byte = 614.4Kbyte)をmemmove関数で転送していて、これが目に見えて遅い。

1pixelごとに何命令かかかるわけだし、SDRAMを1ワードづつ読み書きすると時間がかかるのは仕方ないが、ハードウェアで連続した番地のメモリを、ある程度まとめて読み書きすれば速そうだ。つまりbitblit機能、DE0の練習としては面白そうなので作ってみることにした。

ModelSimやSOPC Builder, Signal TapIIの使い方を覚えつつ動かすことができた。効果は抜群で転送は一瞬で終わる。恐れていたVGA表示機能との干渉もなく、画面が乱れることも無い。

速くなったということを、説明するために動画も撮影。

これでAvalon-MMインターフェースの使い方も分かった。さらにDE0で遊んで行きたい。

ちなみに、VGA出力は自分でも作ったものもあったが、メモリーアクセス時に画面の乱れが酷く使い物にならなかった。

Leave a Reply

メールアドレスが公開されることはありません。