DE0で12bpp表示

やっとDE0のVGA出力で12bpp表示ができた。FPGA ボードで学ぶ組込みシステム開発入門 ~Altera編~が参考になった。

VGA出力はSOPC builderでsgdma→dc_fifo → pixel_converter → video_sync_generatorと構成し行なっているのだが、pixel_converterが8bppか24bppしか受付けてくれない。メモリー上では32bppで割り当ててpixel_converterとvideo_sync_generatorでは24bppで出力、そこから12bitだけ使うという方法を考えたが、25MHzで32bitを呼び出すことになる。SDRAMは16bit幅、50MHzで接続されているので、間に合うわけがない。そこでSDRAMとCPUを100MHzで動かしてみたが、うまく動いていない… というところまで前回報告した。

SDRAMを100MHzで動かしても、32bpp/25MHzは無理そうなので、メモリー上は16bppにすることを検討する。pixel_converterのverilogファイルをみると、何をしているわけでもない。入力をそのまま出力するだけだ。sopc_builder上では、8 [bit/symbol] x 4 [symbol/beat] を 24bit [bit/symbol] x 1 [symbol/beat]に変換してくれたりしていたりする。pixel_converter無しでは、symbolのサイズが違うとかエラーが出て sgdmaの出力streamをvideo_sync_generatorに接続することができない。

pixel_converter関連のファイルは pixel_converter.vとpixel_converter_hw.tclだけのようで、どちらも簡単なファイルなので、これを改造して16bpp版のpixel_converter16を作ることにした。ファイルは簡単にできた。しかし、SOPC Builderを再起動しても認識されない。pathの指定ぽいファイルをイジってみるが変わらない。諦めてsopc_builderの New… ボタンを押すと、verilogファイルを指定すると、pixel_converter16_hw.tclが作成され、sopc_builderで指定できるようになった。sopc_builderで配置し、接続しようとすると何か信号がおかしい。元の *_hw.tclファイルを参考に修正し、接続できるようになった。

これで回路はできて、DE0にダウンロードできるのだが、ソフトをダウンロードしようとするとエラーになり失敗する。ひつこく何度も試すとダウンロードできることもあるのだが、動作が不安定。ここで、もう少し地味に勉強してみようかと考え、FPGA ボードで学ぶ組込みシステム開発入門 ~Altera編~の評判が良さそうなので買ってみようと考え、実際に買ったのが昨日。

で、ざーと目を通す。コラム(p.262 コラムH)に原因不明のエラーで進めなくなったら、プロジェクトを新規に作り直し、入力したファイルをコピーし、やり直すのが結局速いとか書いてある。そうなのかと、安心したり不安になったりする。

で、電源について書いてあるところがあった。(p.65 「USBのバスパワーでも動作する!?」)。小規模な回路ならバスパワーでも動作するのだが、大規模になると危ないのでACアダプタは忘れずに接続しておきましょう、とある。そう、私はACアダプタを接続していなかった。クロックを100MHzにあげたら動作が不安定になるというのも合点がいく。

で、ACアダプタを接続しためすと、書き込みエラーが完全になくなったわけではないが、かなり減少し、ソフトウェアのデバッグを行うことができて、無事12bppで動かすことができた。 これで、次に進める。

ところで、DE0いじりでQuartusIIとかSOPC Builderとかいじっていると、コンパイルなどに結構時間がかかるので、家でTVを見ながら作業しやすい。

Leave a Reply

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