SSブログ

VGAペリフェラル(Cinerariaの周辺I/Oその1) [FPGA]

つらつらとCinerariaに組み込んでいるカスタムコンポーネントの説明などを。

DE0用NiosIIプラットフォーム、Cinerariaのダウンロードはこちらから
 → https://t.co/8kMHg0u0


●VGAコンポーネント
・ハードウェア
その名の通り、DE0のVGAコネクタに640x480,60fpsのVGA映像を出力するコンポーネント。
SoPC Builder上ではAvalonMM SlaveとAvalonMM Masterの2つのポートを持つ。
Master側は32bit×320バーストの連続バーストを行うので、メモリはSDRAMを推奨。

・ソフトウェア
VGA_BASEマクロで示されるレジスタアドレスは下記の通り
+0x0 : STATUS
+0x4 : FRAMEADDR
+0x8 : VSCOUNT
+0xC : reserved

・STATUSレジスタ
bit31-16 : reserved
bit15 : VSIRQ_ENA (R/W)
bit14 : VSIRQ (R/W0)
bit13-2 : reserved
bit1 : DITHER (R/W)
bit0 : SCAN_ENA (R/W)

VSIRQ_ENAビット(R/W)
 1 : VSIRQ='1'の時に割り込みを発行を許可する
 0 : 割り込み禁止

VSIRQビット(R/W0)
 1 : VSYNC同期期間を通過した
 0 : VSYNC同期期間を通過していない
   ※書き込みは0書き込みのみ有効。0→1はハードウェアが行う。

DITHERビット(R/W)
 1 : 映像出力にディザリング処理を行う(疑似32768色)
 0 : ディザリング処理を行わない(4096色)

SCAN_ENAビット(R/W)
 1 : 画面出力を行う
 0 : 画面出力を停止する

・FRAMEADDRレジスタ
bit31-0 : FRAME_TOP (R/W)

FRAME_TOPビット(R/W)
 フレームバッファのメモリアドレスを指定する。ただし下位2bitは無視される。
 このコンポーネントではメモリ空間を4Gバイト持つため、NiosII上のキャッシュ空間と非キャッシュ空間を区別するので注意すること。

・VSCOUNTレジスタ
bit31-8 : reserved
bit7-0 : VSCOUNT(R/W)

VSCOUNTビット(R/W)
 保持されている値が0より大きいなら、VSYNC同期期間を通過する度にデクリメントされる


・フレームバッファの論理構造
このコンポーネントでは次のようなフレームバッファ構造を前提とする

・ピクセルカラー構造
16bit/pixel RGB=555フォーマットの32768色データ
バイト格納はリトルエンディアン
ビット並びは0RRRRRGGGGGBBBBB

・バッファサイズ
1024×480ピクセル
(0,0)-(639,479)が表示領域、(640,0)-(1023,479)は非表示領域


・NiosIIからの使用方法

(1)1024×480×2バイトのメモリをmallocで取得する。必要に応じて初期化を行う。
(2)先頭アドレスをFRAMEADDRレジスタにセット。アドレスアライメントに注意。
   非キャッシュ領域をmallocした場合はアドレスのbit31を0にマスクすること。
(3)SCAN_ENAビットを1にセット。

420511275.jpg

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。