前回は、筑波大学情報学群の実験講座「組み込み技術キャンパスOJT」(以下、COJT)の「ハードウェアコース」(以下、H/Wコース)で行われている5つの「学習課題」のうち、1つめの「導入課題」についてH/W寄りチームの青木が紹介しました(導入課題に関する記事)。今回は、ソフトウエア(S/W)寄りチームの赤崎が「表示回路」についてお伝えします。

 導入課題では、H/W記述言語(HDL:Hardware Description Language)の文法や振る舞いを理解し、FIFO(First In, First Outの略、先入れ先出しのデータ構造)やステートマシンといったこれからの回路設計で欠かすことのできない要素について学習し、実装しました。この導入課題で基礎は身に付いたので、次はディスプレーに画像を表示する回路を設計し、シミュレーションだけではなく実システムとしても正しく動作させるところまでやっていきます。

 導入課題では、自分で設計した回路をシミュレーションによって検証しましたが、実システムとして動作させていませんでした。しかし、シミュレーションはあくまでシミュレーションであって、実際のH/W上で動かなければ意味がありません。従って、表示回路以降の課題はすべて、「実システムでの正しい動作」が課題のクリア条件となっています。さらに、HDLで設計した回路は、シミュレーションで正しく動作したからといって、実システムでも正しく動作するとは限りません。実際、この違いでメンバー全員がかなりの苦労を強いられました。

 今回紹介する表示回路では、「フレームの情報をディスプレーに表示する」ことが可能になります。

ディスプレーの仕組み、ご存知ですか?

 例えば、皆さんのご家庭にあるテレビやディスプレーがどのように画像を表示しているかご存じでしょうか。多くのテレビやディスプレーでは、「ラスタースキャン」という方式で画面上に「走査線」を水平方向に高速に走らせ、その線に沿ってフレームの画素を1つひとつ転送していきます。この走査線を画面の上端から下端まで動かして画素を転送・表示すれば、画像として画面に映し出されるわけです。今回の表示回路では、ラスタースキャン方式で主記憶にフレームのデータをFIFOに取り込み、それをディスプレーに転送する回路を設計していきます。下の図は、ラスタースキャンで画像を表示したときの動作です。

ラスタースキャン方式による画像の表示
[画像のクリックで拡大表示]

 回路設計は、ディスプレーの画像表示期間にあらかじめ課題として与えられたパターンの情報を転送する部分(第1段階)と、主記憶上のフレームの情報をFIFOに転送する部分(第2段階)に分けられます。

 ディスプレーの映像信号には、実際に画像が表示される期間(画像表示機関)と表示されない期間が存在します。この画像表示期間を適切に設定することが、回路設計の第1段階のキモとなります。

 例えば、解像度がVGAのディスプレーだと、画像表示期間、つまり画像を表示する範囲は640×480画素ですが、実際に走査線が走る範囲(映像信号)は800×525画素とそれよりも広いので、走査線が画像表示期間(640×480画素)内を走っているときだけ画素を転送しなければなりません。では、画像表示期間を走っているかどうかはどうやって見極めればよいのでしょうか。