コードのダウンロード
VGAコントローラ
VGAコントローラ VHDL:vga_controller.vhd (5.3 KB)
サポート資料
ハードウェア テストイメージジェネレータの例:hw_image_generator.vhd (2.5 KB)
DE2-115開発ボードを使用したQuartus IIプロジェクトのアーカイブ:
vga_with_hw_test_image_v1_1.qar (27.1 KB)
注)Quartus IIのアーカイブに慣れていない場合:Quartus IIのプロジェクトファイルと同じようにアーカイブファイルを開くことができます。復元するかどうか尋ねられたら、「はい」と答えると、元のQuartus IIプロジェクトのすべてのコンテンツが、指定したフォルダに配置されます。
特長
- VGAインタフェースコントローラのVHDLソースコード
- VGAインターフェースの信号タイミングを生成
- VGAモード(解像度やリフレッシュレートなど)を設定可能
- DE2-115開発ボードを使用した実装例
はじめに
ここでは、CPLDやFPGAで使用するためにVHDLで記述された、VGA信号のタイミングを処理するVGAコントローラ・コンポーネントについて詳しく説明します。図1は、VGAコントローラをシステムに組み込んだ典型的な例を示しています。このように、VGAコントローラは、実装するVGAモードの周波数でピクセルクロックを必要とします。そして、インターフェースの制御に必要なすべての信号タイミングをこのクロックから生成します。現在のピクセル座標を出力し、画像ソースが適切なピクセル値をビデオDACに提供し、ビデオDACがVGAモニタのアナログ入力を駆動することも可能にします。また、VGAモニタの同期信号も提供します。このコンポーネントは、Quartus II, バージョン 12.1を使用して設計されています。
図1. 実装例
背景
VGAはアナログモニタを制御するための標準的なインターフェースです。コンピュータ側からは、水平/垂直同期信号、カラーマグニチュードおよびグランドリファレンスがモニタに供給されます。
水平/垂直同期信号は、0V/5Vのデジタル波形で、信号のタイミングをモニタと同期させるためのものです。デジタルであるため、FPGAから直接供給されます(3.3Vは論理値ハイの最小閾値を満たすため、5Vの代わりに3.3Vを使用することができます)。
カラーマグニチュードは、R、G、Bの各線から送られる0V~0.7Vのアナログ信号です。(あるいは、緑色のワイヤは、水平同期信号と垂直同期信号の両方を組み込んだ0.3V~1Vの信号を使用して、これらのラインを不要にすることができます。これは、sync-on-greenと呼ばれ、ここでは扱いません。)
3色のマグニチュード線は75Ωの抵抗で終端されています。これらのラインもモニタ内部で75Ωで終端されています。これらのアナログ信号を生成するために、FPGAは各色8ビットバスをビデオDAC(この例ではAnalog DevicesのADV7123)に出力します。
また、VGAインターフェースでは、モニタ内のROMとの通信に使用できる4本の配線が規定されています。このROMにはEDID(拡張ディスプレイ識別データ)が含まれており、モニタのパラメータを標準的なフォーマットで構成しています。このデータにアクセスするための通信規格はいくつかありますが、最もシンプルなケースは、これらの線を接続しないままにしておくことです。
接続
VGAの接続には、DB15と呼ばれる15ピンのコネクタが使用されます。図2にDB15のメスレセプタクルを示します。表1は、このコネクタのピン配列を示したものです。
図 2. VGAメスコネクタ(DB15レセプタクル)
表1. VGAコネクタのピン配列と信号
信号のタイミング
標準的なVGAモードは多種多様で、それぞれ特定の解像度とリフレッシュレートが設定されています。各モードにはタイミングパラメータが定義されています。この記事の末尾に示した付録は、多数のVGAモードの信号タイミング仕様の一覧です。VGAコントローラは、ENTITYで宣言されたGENERICパラメータを使用して、ピクセルクロック以外のすべてのタイミング仕様を設定します(ピクセルクロックは供給する必要があります)。
VGAコントローラの実装例では、使用するモニタの最大解像度である1920 x 1200と60Hzのリフレッシュレートを使用しています。
ピクセルクロック
このVGAコントローラは、ユーザーがピクセルクロックを提供する必要があります。このクロックは、専用クロックピンでFPGAに取り込むか、PLLを使用してFPGA内部で作り出すことができます。DE2-115開発ボードのサンプルプロジェクトでは、利用可能な50MHzのクロックをCyclone IV FPGAのPLLの1つに入力し、1920 x 1200、60HzのVGAモードで必要な193.16MHzのピクセルクロックを生成しています。
動作原理
図3は、VGAコントローラが生成するタイミング信号を示したものです。コントローラには2つのカウンタが搭載されています。1つのカウンタはピクセルクロックでインクリメントし、h_sync (水平同期)信号のタイミングを制御します。カウンタ値0から表示時間が始まるように設定することで、カウンタ値は表示時間中の画素の列座標と等しくなります。水平表示時間の後に、水平フロントポーチ、水平同期パルスそのものおよび水平バックポーチの各時間が指定されたブランキングタイムが続きます。行が終わると、カウンタはリセットされ、次の行が始まります。
もう1つのカウンタは、各行が完了するごとにインクリメントされ、v_sync(垂直同期)信号のタイミングを制御します。この場合も、表示時間はカウンタ値0から始まるように設定されているので、カウンタ値は表示時間中の画素の行座標と等しくなります。先ほどと同じく、垂直表示時間の後にブランキングタイムがあり、それに対応したフロントポーチ、同期パルスおよびバックポーチがあります。垂直ブランキングタイムが終了すると、カウンタはリセットされ、次の画面更新を開始します。
ディスプレイイネーブルは、水平表示時間と垂直表示時間の論理和で定義されます。
これらのカウンタを用いて、VGAコントローラは水平同期信号、垂直同期信号、ディスプレイイネーブル信号およびピクセル座標信号を出力します。同期パルスの極性は、VGAモードごとに正負を指定します。GENERICパラメータh_pol(水平極性)およびv_pol(垂直極性)は、VGAコントローラのh_syncおよびv_sync出力の極性をそれぞれ設定します。
図3. 信号のタイミング図
ポートの説明
表2にVGAコントローラのポートについて説明します。
表 2. ポートの説明
VGAコントローラを使用する
VGAコントローラを使用するには、ENTITYのGENERICパラメータを、使用するVGAモー ドに応じた値に設定するだけです。付録には、多くのVGAモードの信号タイミング仕様が記載されています。上記で説明したように、必要なピクセルクロックも用意する必要があります。
VGAコントローラの他に、ユーザーが画像ソースを用意する必要があります。画像は一般的にオフチップメモリのファイルから提供されますが、オンチップメモリのファイルから提供したり、FPGAのハードウェアで生成することもできます。このサンプルプロジェクトでは、hw_image_generator.vhdファイルを使用してハードウェアテストイメージを生成しています。このVHDLは、VGAコントローラから画素座標とディスプレイイネーブル信号を受け取り、正しいタイミングでビデオDACにカラーマグニチュードを出力します。生成されたテスト画像は、画面左上に600 × 478ピクセルの青い長方形が表示され、画面の残りの部分は黄色になっています。図4は、生成されたテスト画像です。
図4. ハードウェアで生成したテスト画像
リセット
VGAコントローラコンポーネントが動作するためには、reset_n入力ポートが論理値ハイである必要があります。このポートをローレベルにすると、コンポーネントは非同期でリセットされます。リセット中、コンポーネントは水平および垂直カウンタをディアサートし、ピクセル座標をクリアし、そしてディスプレイを無効にします。リセットが解除されると、VGAコントローラは動作を再開します。
まとめ
VGAコントローラは、VGAモニタとのインターフェースに必要な信号タイミングを実現するプログラマブルロジックコンポーネントです。ユーザーが提供するのは、ピクセルクロックと、もちろん画像ソースも必要ですが、それだけです。VGAコントローラは、水平/垂直同期信号のほか、画像を適切なタイミングで生成するために必要なピクセル座標とディスプレイイネーブルを提供します。
付録:VGAタイミング仕様
表A1: 各種VGAモードのタイミング仕様
vga_timing_specs.xls (33 KB)