DE0でVGA出力(VRAMを実装)

前回作成したVGAコントローラーにVRAMを実装した.taltalp.hatenablog.jp

前回までに作成したVGA表示回路は表示画像を回路で作成していたため特定の画像以外は表示することができなかった.

今回はVRAMとNIOS2を実装してソフトウェアから画像を変えられるようにした.


1.仕様
・画面サイズ・・・640×480
・描画可能領域・・・150×150
・256色カラーパレット


2.ブロック図
f:id:taltalp:20150713040228p:plain


3.VRAM
今回作成したVRAMはFPGA内のロジックセルを用いた.
MegaWizardの「ROM:2-PORT」を用いれば書き込みと読み出しが別々に行えた.

f:id:taltalp:20150713033848p:plain

VRAMにはそれぞれのドットごとに1byteのカラーパレット番号を記憶できるようにして,150×150ピクセルのデータを保持するために22500byte以上のデータが必要である.今回は32768byteを確保した.


4.カラーパレット
色はそれぞれのドットごとに12bitのデータを保存して8192色を使えるようにしたかったが,それだとオンチップのVRAMではロジックセル不足になってしまうため,カラーパレットを用いて最大で256色を表現できるようにした.

f:id:taltalp:20150713034351p:plain

今回は書き換えすることができないカラーパレットでとりあえず作成した.

5.描画領域
f:id:taltalp:20150713040631p:plain
図のようにカウンタが原点座標に来たら描画をスタートして,それ以外の領域ではパレット番号0(黒)を指定して等倍で表示をした.

6.動作の様子
f:id:taltalp:20150713041045j:plain
Nios2でパターンを描画させた.
(画像だと見えにくいが,青,緑,黄,赤の順に1ピクセルごとに描画した)

DE0でVGA出力

DE0でVGA出力をしてみた. 今回作成した回路はVGAを出力することが目的であるため,VRAM等の実装は今回はしない.


1.仕様
解像度・・・640×480
水平同期周波数・・・31.25kHz
垂直同期周波数・・・59.5Hz


2.タイミング
f:id:taltalp:20150705210359p:plain
HS, VSのタイミングチャートは図のようになる.
※非表示領域ではRGBの出力を0にしないと画面が映らなかったため,RGB出力のイネーブル入力を用意して非表示領域ではRGB出力されないようにした.

3.実行結果

Nios II で Hello World

Qsysを使用してDE0にNios IIを実装してPCに Hello World! を表示させました.
実際には自分でソースコードを書いたりだとかはほとんどしておらず,どちらかと言えばQuartusとQsysの使い方がメインです.


1.使用した環境
Windows7
・Quartus II Ver.13.1 Web Edition
・DE0ボード

続きを読む