最初の模様
Spartan-3 基板で VGA に模様を出力する回路を作ってみた。 ソースコードその他は Trac のリポジトリ につっこんである。
640x480@60Hz という解像度で出力している。 残念ながら 8 色しか出せないのでこんな模様しか作れないわけだが、かなり目によろしくない。 暇があったら DAC 回路を外付けしてフルカラー出したり NTSC 出したりできるようにしたいが、 今はこれでがまん。
標準 VESA タイミングでは 640x480@60Hz でのドットクロックは 25.175MHz だが、 Spartan-3 基板では 50MHz のオシレータが載ってる関係から 25MHz を使うことになる。 マニュアルに書いてある推奨タイミングを XFree86 の modeline 風に書くと、以下のようになる。
# VESA industrial standard modeline "640x480" 25.175 640 656 752 800 480 490 492 525 -hsync -vsync # Spartan-3 Starter Kit modeline "640x480" 25 640 656 752 800 480 490 492 521 -hsync -vsync
要するに VESA に比べるとスキャンラインが 4 本ほど少ないだけらしい。 うちの LCD モニタは特に問題なく映してくれたが、タイミングにきびしいモニタだと映らないかもしれない。
今回いちばん苦労したのは、25MHz を作るために Spartan-3 に内蔵されているクロックジェネレータ (DCM) を VHDL から使う方法を調べることと、 ナナメのしましま模様を作るために integer 変数のビット演算をする VHDL を書くこと。 CONV_STD_LOGIC_VECTOR() といった関数を思いだすのに相当時間がかかった。 VHDL はかなり型に厳密なので、 ちょっと凝った計算をしようとするとあっというまに記述がふくらんでしまう。
なお論理合成ツールの吐いたログを見ると、この VHDL がどのように処理されたかわかる。
- xflow.log … XFLOW のログ
- crtc_xst.log … 論理合成プログラム(XST)のログ
- crtc_map.mrp … デバイスマッパのログ
- (他は省略)
crtc_map.mrp によれば Number of Equivalent Gates for Design = 7,624 ということで、けっこうでかくなった。 (しましまのところでなんも考えずに足したり引いたりとかしてるからだが)。 スライス (FPGA 内部のロジック構成部品) 数的には X3S200 デバイスの 1% ほどを使用しているようだ。
次はこういう簡単な模様じゃなくて、 SRAM の中身をフレームバッファとして出力するようにしてみようかな。 というわけで SRAM アクセス回路を作ろう。
カテゴリ
Logic Designトラックバック(0)
このブログ記事を参照しているブログ一覧: 最初の模様
このブログ記事に対するトラックバックURL: http://www.keshi.org/mt/mt-tb.cgi/9
コメントする