附録I: VGAビデオインターフェイス / 非公式訳

pp.551-554

1. VGAインターフェイス

最初のVGA (ビデオグラフィクスアレイ)インターフェイスは、コンピューターをアナログCRT (ブラウン管)ビデオモニターに接続する手段として1987年にIBMが発表しました。その後多くのバージョンが発表されました(図I.1b)。これらはまとめて「VGAモード」と呼ばれています。一般的なモニターは現在、フルディジタル制御のできるLCD (液晶ディスプレイ)モニターに置き換わっていて(図I.1a)、そのインターフェイスVGAではなく、附録Jで述べるようにDVI (ディジタルビジュアルインターフェイス)と呼ばれています。しかし多くのモニターは今もVGAインターフェイスをサポートしています。DVIよりずっとシンプルですので、ビデオドライバーについて学びたいときはVGAから始めるのがよいでしょう。

ビデオモニターの主たる仕様のひとつがピクセル数です。数えかたは図I.1cに示しました。最初のVGA規格の解像度は、図I.bに示したように640×480でしたが、現在は1920×1080 (附録Jに示すFull HD)が最も一般的です。

2. VGAインターフェイスの一般的なアーキテクチャ

図I.2にVGAシステム全体のアーキテクチャーを示します。グラフィクスコントローラー(コンピューター側)は下の3つのブロックに分かれています。

  • 画像生成器:
    ピクセル信号(R、G、B)を生成します。この信号(通常6~10ビット)をDACで0~0.7 Vのアナログ電圧に変換したあとモニターへ送信します。当然この信号はアプリケーションによって大きく異なります。

  • 制御信号生成器:
    VGAクロック(clk_vga)を生成します。さらに、Hactive (水平アクティブウィンドウ)、Vactive (垂直アクティブウィンドウ)、dena (ディスプレイイネーブル)、Hsync (水平同期)、Vsync (垂直同期)という実際の制御信号も生成します。このブロックは、VGAモードにのみ依存してアプリケーションには依存しないため、その設計はいつも同じです。

  • DDC (ディスプレイデータチャンネル):
    ディスプレイの各種機能(対応解像度やタイミングなど)はROMに格納されていて、EDID (extended display identification data)形式で読み出せます。最初のVGAモード(640×480×60 Hz)はどのモニターでもデフォルトでサポートされています。この通信にはI2Cプロトコル(附録G)が使われます。このブロックもアプリケーションには依存しません。

HsyncおよびVsyncはそれぞれ、新しいライン、新しいフレームをどのタイミングで開始するのかを決定する役割を担います。そのタイミングによってVGAモードが定義されます。HactiveおよびVactiveは、画像が実際に画面に描かれている時間間隔を表します。denaは、リトレースの最中に各ピクセル信号をオフにする役割を担います。したがってdenaは、HactiveとVactiveとのANDを取るだけで得られます。5つある制御信号のうちモニターへ送信されるのは2つだけです。

3. VGAネクター

図I.3にVGAネクターとその各端子とを示します。主たる信号は5つです。それぞれ端子1~3、13~14から送信されます。端子1~3からは、カラー信号(R、G、B)である0~0.7 Vのアナログ信号がモニターへ送信されます。負荷は、75Ω抵抗が2本並列接続してあります(ほかすべての信号はディジタルです)。端子13~14からは水平同期信号、垂直同期信号(Hsync、Vsync)が送信されます。各端子と図I.2の信号とを比べてみてください。

4. 制御信号の構成

図I.4に、さまざまなVGAモードの仕様を示します。またclk_vgaを基準にしたHsyncおよびHactiveの波形も示します。各波形は、H_LOW (水平同期パルス幅)、HBP (水平バックポーチ)、H_HIGH (アクティブラインディスプレイインターバル)、HFP (水平フロントポーチ)という4つのパートで構成されます。いずれも単位はピクセル数(クロックサイクル数)です。

垂直方向のタイミングダイアグラムを図I.5に示します。これも、V_LOW (垂直同期パルス幅)、VBP (垂直バックポーチ)、V_HIGH (アクティブ化ラムディスプレイインターバル)、VFP (垂直フロントポーチ)という4つのパートで構成されます。いずれも単位はライン数(Hsyncサイクル数)です。

たとえば640×480×60 HzのVGAの場合は、1ラインを描くのにclk_vgaで800サイクルを要します(図I.4)。1フレームを描くのには525ラインぶんの時間が必要です(図I.5)。つまり毎秒60フレームを生成するためには、clk_vgaの周波数は800×525×60 ≈ 25 MHzでなければならないということです(最初のVGAは25.175 MHzであり、リフレッシュレートは59.94 Hzです。これはNTSCテレビジョンシステムから受け継がれたものです)。

実装例はサンプル17.6に示します。