VGAモジュールの作成
KITEプロセッサのに接続するVGAモジュールを作成します。
VGAモジュールの仕様
- キャラクタを表示するものとし、表示文字数は80×24文字とする。
- キャラクタの構成は8dot×19lineとし、文字構成は8dot×16lineする。
残りの3ラインはブランクライン(無表示)とする。
- したがって、画面全体の dot 構成は 640dot×475line となる。
画面構成、文字構成、KITEにおけるメモリマップの対応を以下に示す。
VGAモジュールのブロック図
VGAモジュールは、主に以下のブロックからなる。
- Video RAM:画面に表示する文字のJIS8ビットコードを保持しておくメモリ。
表示文字数は80×24文字であるので、8ビットで1,920ワードを記憶できる必
要がある。
今回は7ビットのキャラクタコードを用いることにするので、7ビットで1,920ワードを記憶できればよい。
- Charactor ROM:キャラクタの文字情報を記憶しておくメモリ。JIS8ビット
コードの場合256文字であるので、1文字の構成が8dot×16lineの場合、8ビッ
ト4,096ワード必要となる。7ビットのASCIIコードの場合は、8ビット2,048
ワード必要となる。
今回は7ビットのキャラクタコードを用いることにする。
残りの3ラインのブランクライン(無表示)は次のVGA Controllerで制
御して、無表示を実現すれば良い。
- Shift Register:Char.ROM から読み出した文字のドットデータをドット
クロックに応じてシフトし、シリアルに出力する。
- VGA Controller:Video Memory, Char. ROM, Shift Register の制御および同期
信号の生成を行うモジュールである。内部構成としては、ほとんどがタイ
ミング調整用のカウンタである。
VGA画像表示の考え方
VGAモニタへの画像表示は、通常のテレビと同様にラスタスキャンで表示を行っ
ている。
- 画面の表示は第1ライン(ラスタという)を左から右に向かって逐次的に表示
している。水平のドット構成は480ドットであるが、実際には表示されてい
ない部分がある。640×480構成の一般的VGAでは、実際には800dot×
532line程度で構成される。水平部分の表示されていない期間中に水平同期
信号がモニタに送られており、このタイミングにより次のラスタを表示す
るためのタイミングをモニタは知ることができるようになっている。
同様に、垂直方向についても、表示されていない期間において垂直同期信号が出
力される。
- 図に示すように、水平方向および垂直方向のタイミングを取るために、以
下のようなカウンタを用意する必要がある。
- CNT : 水平文字ドットカウンタ:0〜7までをカウントする。
- HCNT : 水平文字カウンタ:0〜99までをカウントする。
- RCNT : ラスタカウンタ:文字毎のラスタを0〜18までカウントする
- VCNT : 垂直文字カウンタ:0〜27までをカウントする。
この4個のカウンタは以下の様に動作する。
- 1ドットは25MHzの1周期の時間である。水平文字ドットカウンタ(CNT)は
25MHz毎にカウントアップする。
- 水平文字カウンタ(HCNT)は8ドット毎にカウントアップする。つまり、水平
文字ドットカウンタが3'b111から3'b000になるときにカウントアップする。
また、99までカウントするので、99の次は0となるようにする。
- ラスタカウンタ(RCNT)は水平文字カウンタ(HCNT)が99から0になる際にカウ
ントアップする。18までカウントするので18の次は0となる。
- 垂直文字カウンタ(VCNT)はラスタカウンタ(RCNT)が18から0になる際にカウ
ントアップする。27までをカウントするので27の次は0となる。
- 水平同期信号は、84文字目から95文字目の間で出力される。
- 垂直同期信号は、26文字目の間で出力される。
これらのカウンタ等を実現するために、以下のような定義をしておくと良いであ
ろう。
`define HMAX 100 // H total Char.
`define HSIZ 80 // H Size
`define HSP 84 // H Sync. Pos.
`define HSL 12 // H Sync. Len.
`define HCR 8 // H dots per Char.
`define VMAX 28 // V total Char.
`define VSIZ 25 // V Size
`define VSP 26 // V Sync. Pos.
`define VSL 1 // V Sync. Len.
`define VCR 19 // V lines per Char.
また、カウンタの宣言は以下のとおりとなる。
reg [3:0] CNT;
reg [6:0] HCNT; // H Counter 0-99
reg [4:0] VCNT; // V Counter 0-27
reg [4:0] RCNT; // R Counter 0-18
ここで、水平文字ドットカウンタが4ビットで、0〜15までカウントできるように
なっている。実験ボードに供給されているクロックとして50MHzが供給されてい
るため、実際には50MHzの同期回路として設計する必要がある。したがって、
CNT[0] で25MHz に分周し、実際の水平文字ドットカウンタとしてはCNT[3:1] を
使用する。
VideoRAMとChar.ROMのアクセス方法
VGAモニタへの画像表示は、通常のテレビと同様にラスタスキャンで表示を行っ
ている。
- クロックは50MHzが供給されているため50MHzの同期回路とするが、
VGA部はすべて25MHzを基本として動作している。
- 図に示すように1文字の横は3.125MHzとなる。
50MHzを16分周まで分周することで、
25MHzをシフトクロック(1ドット分の表示クロック)、
3.125MHzでデューティ比1/32%のクロックをパイプラインレジスタ用のタイ
ミングクロックとする。
| Back |
CAD Home |