FPGA:VGA Pmod
FPGAが何ものかを勉強するために手にしたArty A7-35T。多くの事ができるが、FPGAプログラミング大全を読み進めるには、画像出力がないのため、VGAのPmodを購入した。 Pmodは4つのジャンパーを備えているが、高速動作する中央の2か所に差し込む形で使う。 2章のソースコードを試す訳だが、本にはすべてのコードが載っている訳ではないので、 書籍のサポートページからサンプルをDLさせていただく。https://www.shuwasystem.co.jp/support/7980html/6326.html これまでの知識でなんとなく、記載している内容がわかるとところと、わからない部分があるがまずまず動作の確認を進める。 特に困る事もないので、詳細は割愛するが、patten_vgaを実行してみた。 PCのモニターにVGA出力されてくる。いままでマイコンで液晶とかOLEDに文字を表示したりというのばかりで、 こういうの経験がないので感動する。 さて読み進めて第2章の課題としてグラデーショ表示があるのでやってみる。 その前に、完全に理解できなくてもグラデーションする前のソースの理解を進める。 横に8分割、縦に4分割 (横HSIZE=80、縦VSIZE=120) この分割の色を決めている変数rgb_0、とrgb_1は wire [2:0] rgb_0 = (HCNT-HBLANK+10'd1)/HSIZE; HCNTは水平位置で、HBLANKは非表示区間の長さ160にあたる。 HBLANKを引いた値をHSIZEで割り算したが位置によって0から7までの3ビットでrgb_0になる 今度は垂直方向 wire [2:0] rgb_1 = (((VCNT-VBLANK)/VSIZE)&1)==0 ? 3'd7-rgb_0: rgb_0; (VCNT-VBLANK)/VSIZE)は、垂直方向の位置VCNTから非表示区間分VBLANKを引いてVSIZE(120)で割った数になる。&1で論理和をとると、上から000と001と交互に入る事になる。 ==0なのでゼロと等しい時は、7からrgb_0を引いた数が、rgb_1に入り、等しくない時はrgb_0がそのまま入る事になる。 最終的なrgb_1の3ビットは位置より以下になる。 これを24ビットのVGA_R,