原始的なお話

4/18 2001

 チョット驚いたので書くけど。
 バリバリPC自作して、どれがどう速くてどんな特徴あって、みたいなの詳しい人が、ビデオカードの動作原理知らない事があるってことにカルチャーショック受けたので原始的な話を。

 まず、どう接続されてるか。
 何でもいいのだが、バスまたはスイッチ、最近ならAGPにグラフィックスコントローラが接続されている(以下コントローラ)。コントローラはメモリバスとRAMDACインタフェースを持っていて、メモリバスの先にはフレームバッファメモリ(以下単にVRAM)、RAMDACインタフェースの先にはRAMDACが接続されている。最近だとRAMDACはコントローラと1チップになっている。ノート用のコントローラだとVRAMも混載していることがある。
 RAMDACの先にはフィルタ回路があり、これを介してCRTなどに接続。
 以上が基本的な構成。

 次にピクセル(画素)の考え方。
 1ピクセルを構成するのに、256色だと8bit=1byte(2^8=256)、65536色なら16bit(=2byte2^16=65536)、1677万色なら24bit=3byte(2^24=16777216)の記憶容量が必要になる。
 65536色の場合はRGBそれぞれ5bit(32)または6bit(64)で、1677万色の場合はRGBそれぞれ8bit(256)の階調数がある。要するに光の三原色それぞれのレベルを掛け合わせて色を作っている。
 256色の場合は1677万色のパレットがあり、その中から任意の256色を選択して同時に使用することができるという意味である。昔はこうしたパレット化の考え方が普通だったが、最近はあまり使われない。
 いわゆる、32768色は各色5bit(15bit)であり、メモリ上では16bitで格納されている。32bit(4byte)というのはたいていの場合は各色10bitなどではなく、24bitに加えてダミーの8bitを加えることで、メモリの転送を32bit単位とすることで効率化するための手法である。最近のVRAM容量であれば、24bitとすることによるメモリの節約効果などたかが知れているため、32bitで格納するのが一般的になっている。

 ピクセルあたりの必要メモリ量にピクセル数をかけたものがその解像度を使用するために必要なメモリ量である。一例だが、1280*1024を32bitで表示するためには、(1280*1024*32/8)/(1024^2)=5.0MBのVRAMを必要とする。

 CRTは電子銃の焦点を高速で移動させることによって、ブラウン管上の光跡を使って画像を表示する装置であり、人間に画像として認識させるためには毎秒50回は像を書き換えなくてはならない。この書き換え回数を一般にリフレッシュレートと呼ぶ。また、光跡の残光の長さによって、長残光、中残光、短残光などといった区分けがされるが、普通は短残光のCRTしか目にすることはない。
 また、リフレッシュ動作を1ライン飛ばしに行って、2回のリフレッシュで全体を描画するものをインターレースといい、一回で全部を描画するものをノンインターレースと呼ぶ。最近はPCでインターレースの画像を目にすることはほとんどない(NTSCなどのTV信号はインターレース)。前述の残光が長いCRTはインターレースで使用したときにちらつきを押さえるために使用される。

 コントローラが描画命令によってVRAMを書き換えた結果を反映させるには、リフレッシュ動作によってRAMDACが映像信号を出力しなくてはならない。RAMDACはVRAMの内容をコントローラを介して知る必要があり、これはメモリの読み込みである。この読み込み動作は毎秒、リフレッシュレートの回数だけ行われる。たとえば、前述の1280*1024/32bitの場合は、リフレッシュレート75Hzの時、375MB/sの速度で常時メモリが読み込まれ続けていることになる。この読み込み動作は、通常のVRAMの場合はコントローラによる描画による入出力と排他であって、RAMDACにVRAMの内容を送出している間、描画などのメモリへのアクセスは行えない。最近の高速メモリの場合はこのリフレッシュ動作よる負荷は軽い(たとえば100MHz動作のSDRAMを128bit接続した場合1.6GB/sの帯域がある)が、昔の物はそうではなかった(リフレッシュレートを高くすれば高くするほど遅くなる)ため、2つの入出力ポートを持つメモリが使用された。これをDualPortRAMといい、狭義でVRAMというとこれのことを指す。これを使用する場合はRAMDACへの出力と切りはなしてコントローラがVRAMへのアクセスが行えるため、高解像度での性能向上(または使用不能だった解像度の使用)につながる。SECのWRAMもDualPortDRAMの一種。

 続けてメモリの話。
 メモリはRAS/CAS制御の通常のメモリと、シリアルプロトコルメモリとに大別できる。
 シリアルプロトコルメモリというのは平たく言えばRambusDRAMのことであり、類似のものとしてSyncLinkDRAMなどもあったが、製品としては目にしたことはない。これの特徴はピン数を削減できることと高速化が行いやすい(とされている)ことである。
 通常のメモリはちゃんと説明するとややこしいのでパス。
 通常のメモリの一部に特殊な命令をサポートした物があり、SDRAMの特殊バージョンとしてBlockWrite命令をサポートしたSGRAMがある。また、DualPortDRAMの特殊版としてWRAMがある。これらはWindowsなどのGDI系描画命令に特化しており、特殊条件での高速化が効能である。最近ではSGRAMのBlockWrite命令は使われない傾向にある。
 FastPageModeDRAM、EDO-DRAM、Sync.DRAM(SDRAM)などの個別説明は長いのでパス。これらはPC用などの記録メモリとして主流の座にあったことがあるため、技術文書は多いはず。DDR-SDRAMは同期信号の両エッジに同期することで、同期タイミングを2倍に増やしたSDRAMのことで、ここ一年ほどの流行なので技術文書は多いと思うのでこれまたパス。

 メモリの接続形態の話。
 メモリは同時に入出力される単位が多ければ多いほど速い。基本的には何bit接続になっているかの問題で、昔は16bitや32bit接続だったりしたが、最近は64bitまたは128bit接続が主流になっている。RambusDRAMの場合はチャンネルという考え方になる。これもチャンネル数が多い方が高速。

 なんか疲れたし時間ないのでここまで。
 書き漏らしや原始的な疑問とかは掲示板によろしく。

Return2Menu