Posts Issued in July, 2018

posted by sakurai on July 30, 2018

前回までで、VRAMの内容を定常的に表示するグラフィックディスプレイコントローラの設計が完了しました。割愛していますが、シミュレーションを駆使し、動作の確認を行っています。

このままでは描画マスタを設計していないため、静止画を表示することしかできませんが、Bitstream中に初期VRAMデータを埋め込むことが可能です。ブロック図でデュアルポートメモリをダブルクリックすると、以下の画面が現れ、"Other Options"の"Memory Initialization"にファイル名を入力します。

図51.1

ここでは、dual port memoryの初期データファイルとして、スペースインベーダーの画像を取り込むことにします。データは以下のようなフォーマットで構成します。Vivadoにはデータがフォーマットに沿っているかの確認を行うコマンドがあり、validateを実行し、正しいデータかどうか確認した後にwrite bitstreamを行います。

図51.2

以下にGDCを起動したところの図を示します。残念ながら、描画マスタを設計しておらず、表示マスタのみが動作しているため、画像は静止しています。

図51.3

左矢前のブログ 次のブログ右矢

posted by sakurai on July 22, 2018

さて、デュアルポートメモリのB側をGDCの読み出し側として、どのようなタイミング設計をするかといえば、FIFOのスループットのつり合いが制約条件となります。

FIFOからみてGDCへの読み出し側は、40MHzクロックで、一ラインは1056クロックでした。この期間で800個のデータを読み出すことになるため、釣り合うためには、同じ期間で800個のデータを書き込めば良いことになります。従って、

40.0 x 800 / 1056 = 19.3939[MHz]

のクロックでVRAMから読み出し、FIFOに書き込めば良いことになります。

デュアルポートメモリのB側のみのブロック図を以下に示します。ブルーは任意のクロック周波数のクロックドメイン、オレンジは上記19.3939MHzのクロックドメイン、グリーンはドットクロックである40.0MHzのクロックドメインとなります。

図50.1

これをVivadoブロックエディタにより作成したものを以下の図に示します。

図50.2

左矢前のブログ 次のブログ右矢

posted by sakurai on July 16, 2018

SVGAのタイミング表を以下に示します。

図49.1

まず、ピクセルクロック(ドットクロックとも呼ばれる)はこの表より40.0MHzとします。これがタイミングの最小単位で、水平ラインの800dotはこのクロックが800クロック分となります。さらに水平期間はこれだけではなく、表示期間以外に3つの期間があり、それぞれフロントポーチ(FP)、同期パルス(SP)、バックポーチ(BP)に分かれます。

水平タイミングを例にとれば、それぞれHFP, HSP, HBPとなります。トータルでは表示期間であるHDPをすべて加えて、HFP+HSP+HBP+HDP=40+128+88+800=1056が水平期間(26.4us)となり、これをラインと呼びます。

垂直タイミングはこのラインがひとつの単位となります。表示期間はVDP=600、その他非表示期間はVFP=1、VSP=4、VBP=23となり、トータルでは628ラインとなります。ラインが集まり一つのフレームを構成します。

図49.2

左矢前のブログ 次のブログ右矢

posted by sakurai on July 1, 2018

高機能なFPGAボードを使って、Lチカではあまりにつまらないため、次にグラフィックディスプレイコントローラの設計を行います。

グラフィックディスプレイの解像度は様々なものがあり、タイミング設計の際に参考になるサイトをご紹介します。
http://tinyvga.com/vga-timing

今回はSVGAのグラフィックディスプレイの設計を行います。
http://tinyvga.com/vga-timing/800x600@60Hz

基本的には、横800dotかける縦600dotかける色深度、例えば8色であれば3bitの情報を記憶するメモリが中心となります。これを通常VRAM (Video RAM)と呼びます。

少々問題になるのは、VRAMは2つのバスマスタによりアクセスされることです。第1にグラフィックディスプレイコントローラ(GDC)、第2に描画マスタであるCPU。ただし、描画マスタはCPUとは限らず、ハードウェアでも構いません。問題は、両者が同時に同じ領域にアクセスすると、VRAMのポートがひとつしかない場合には待たされることになります。GDCはディスプレイのタイミングに合わせて画像を読み出す必要があるため、待たすことができません。従ってCPUを待たすことになります。

一方、VRAMのポートを増やして2つにすれば、この問題は解決することができます。これをデュアルポートメモリと呼びます。以下の図は非同期のデュアルポートメモリを用いたディスプレイ表示装置の例で、ブルーのクロックドメインとグリーンのクロックドメインの周波数は特に関係がありません。グリーンは前記のようにSVGAのタイミングで動作します。

図48.1

シングルポートメモリを2つ並列に実装し、書き込みは同じデータを両方のメモリに書くことでデュアルポートメモリと見せることができます。これは2つのマスタのうち、GDCは読み出しのみを行い、書き込みを行わないことから可能です。

デュアルポートメモリからの読み出しが安定して継続できるようにラインバッファを持つことを考えます。 これはFIFOにより実装します。具体的には2ラインのラインバッファを持ち、1ライン詰めたところで、書き込みと読み出しのスループットが同じになるように釣り合わせれば、FIFOオーバランもアンダーランも起きないと考えられます。


左矢前のブログ 次のブログ右矢