LCDパネルは利用できるようになったので,次はVGA出力をやってみたい. やっぱこーいうきらびやかというか,パッと見で動いていることがわかるものを やってみたいよね.
VGAについても,こちらで説明した ユーザーガイド(ug330.pdf)に詳細がある. Spartan-3Eスタータキットのユーザーガイドの日本語版(j_ug230.pdf)も参考になる. 注意としてSpartan3Eスタータキットでは,VGAはRGBがそれぞれ1ピンしか 割り当てられていないために8色しか出なかったが, Spartan3Aスタータキットでは,RGBにそれぞれ4ピンずつ割り当てられて D/A変換されているので,16×16×16=4096色が出る. このへんがSpartan3AのI/Oピン数の多さの効果といったところかしら.
またCQ出版の Interface誌 とか Design Wave Magazine誌 にもいくつか記事が出ている.さらにネットで検索してもいくつか出てくるので, VGA出力については,情報にあまり困ることは無い.
ただ,資料によって行数などのパラメータが微妙に異なっていたりする (640x480の60Hz表示時の行数が,521行だったり523行だったり). まあディスプレイのほうでてきとうに調節してくれると思われるので, それほど気にすることはないみたい.
あとこれらの資料読んでて気になるのは,front porch とか表示期間とか back porch のタイミングを,ディスプレイはどうやって判断しているの だろうかということ. たぶんRGBになにかが出力されたときを表示期間の開始, なにも出力されなくなったときをブランク期間の開始として, ディスプレイ側でうまいことタイミングを合わせてくれているのだろう. なのであまり気にしないことにする.
ここではユーザーガイドにあるパラメータをもとにして,640x480の60Hzで カラーバーを表示してみる.この場合ユーザーガイドによれば, ブランク期間も含めた上でのタイミング的には,800x521表示になる. これを毎秒60フレーム描画するので,800×521×60=約25MHzのクロックが必要になる (ていうか正確には,50MHzを半分にした25MHzクロックで動作させるために, 行数を521行としている). Spartan3Aスタータキットは50MHzなので,クロックを半分にして25MHzを生成して 利用する.
基本的には,クロックに合わせてhsyncとvsyncを作成するだけ. ただ,hsyncとvsyncの開始タイミングについては,困ったことにどの資料にも 書いていない(ていうかよく読めば書いてあるのかもしれないが, 英語だったりしてきちんと読んでなかったりする). vsyncとhsyncの開始を合わせるべきなのか? それともvsyncとhsyncの終了(つまりback porchの開始)を合わせるべきなのか? それとも表示期間の開始(つまり back porch の終了)を合わせるべきなのか? まあはっきり規定されていなくてどうでもいい (そのへんはディスプレイのほうがうまく調節してくれる) ということなのかもしれない. ユーザーガイドには「hsyncとvsyncの開始タイミングは規定されていない (ので,実装的に都合のいいタイミングにしてしまってよい)」というようなことが 書かれているので,とりあえず水平と垂直の表示期間の開始を合わせるという ポリシーで書いてみる.
で,書いたのがこんなかんじ.Constraints File については, 前回同様こちらを参照.
実行して液晶ディスプレイを接続したら,あっさりカラーバーが表示された. うーん,感動.
4096色可能なので,グラディーションがきれい.うーんSpartan3Aにしてよかった.
ただ,ほんとうは黒も含めて8色を表示しているのだけど, 黒が右端に表示されているため, 液晶ディスプレイのほうがタイミング調整に失敗して (右端が黒のため,出力がオールゼロとなっており,表示期間なのかブランク期間なのか 判断できない),黒が無くなって右端が青になってしまっている. 表示期間とブランク期間を区別するための信号が無いため,しかたがないともいえる. ディスプレイはRGBに何か出力されている場合を表示期間と判断して, クロック調整をしているのだろう.きっと.
ちなみにLEDは一番左が50MHzクロックになっている. 左から2番目は,50MHzクロックから生成した25MHzクロックをカウントすることで, 1秒おきに点滅させている.これは25MHzクロックが正しく生成できていることを 目視確認したいため.
VGAがあっさり表示されてしまったので拍子抜け (まあタイミング生成するだけなので,あまり難しいものでもないのだけど). 次は文字でも出力させるか,それともPS/2キーボードをいじってみるか...
ていうか実験用の液晶ディスプレイが欲しい... 今はメイン利用の液晶ディスプレイをその都度つなぎ直して使っているので とても面倒.中古で安いのを1台買うか...