例17.6 ハードウェアで生成する画像のためのVGAビデオインターフェイス / 非公式訳

附録I: VGAビデオインターフェイス / 非公式訳 -の具体的なコード例

pp.454-458

例17.6 ハードウェアで生成する画像のためのVGAビデオインターフェイス

VGAインターフェイスの構成は附録Iにざっとまとめました。以下に示すコード例の主な目的は、制御信号の生成の仕方を示すことにあります。この目的に集中できるよう、簡単な画像を表示することにします。FPGAそのもので生成できるほど簡単な画像です。他の事例については練習問題で扱います。

回路の構成

今回の回路構成を図17.7aに示します(附録Iの図2を少し変えました)。入力は、システムクロック(50 MHzを想定)と、3つの信号です(R_switch、G_switch、B_switch)。この3つの信号は3つのスイッチで生成します。出力はモニターに必要な5つの基本信号です(VGAケーブルを見てください)。この中には、3つのピクセル信号(R、G、Bの各アナログ信号)と、水平、垂直の各同期信号(Hsync、Vsync)とがあります。図に示したように、使用するDACADV7123です。ADV7123は10ビットのビデオDACを3系統備えています(ADV7123のBLANKnとSYNCnはそれぞれVDD、GNDに接続しました)。

640 * 480 * 60 Hzという基本的なVGAモードでの動作を目的としているので、各種のタイミングパラメーターは17.7bのとおりです(附録Iの図4、図5とまったく同じです)。

生成する画像は5本の水平縞というシンプルなものです。

  • 第1行: 赤(R = "11...1" → 赤を表すアナログ電圧 = 0.7 V)
  • 第2~3行および480行: 緑(G = "11...1" → 緑を表すアナログ電圧 = 0.7 V)
  • 第4~6行: 青(B = "11...1" → 青を表すアナログ電圧 = 0.7 V)
  • 他の行: 上に示した3つのスイッチによって決定される色。たとえばR_switch = '1'ならば、R = "11...1"、そうでなければR = "00...0"

VHDLコード

今回のVGAインターフェイスのためのVHDLコードを下に示します。図17.7bに示した制御信号のパラメーターはgenericsとして入力しました(7~14行)。そのため、このコードは他のVGAモードに合わせて簡単に調整できます(クロック周波数は除く)。ポート名(16~21行)は図17.7aのとおりです(BLANKnとSYNCnは変化しないので図には示しませんでした)。

図17.7aに示した2の回路は、28~81行に示した制御信号生成部と、83~119行に示した画像生成部とから成ります。前に述べたように、制御信号生成部はアプリケーションとは無関係ですが、画像生成部は表示する画像によって違ってきます。是非、図17.7と附録Iとを見ながらコードを読み解いて実際にFPGAで試してみてください。