FC2カウンター FPGAの部屋 キャラクタ生成コントローラの仕様
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

キャラクタ生成コントローラの仕様

今回はキャラクタ生成コントローラの仕様を書いていこうと思う。
まずは、CPUからのキャラクタ描画の方法だが、コマンドレジスタとステータスレジスタをCPUにアドレスマップする。そして、コマンドレジスタに、CPUからキャラクタデータを書きこむことによって、キャラクタを描画するものとする。CPUからのキャラクタ描画コマンドは、16深度のコマンドFIFOにためられて、キャラクタグラフィックプロセッサ(名前負けかもしれないけど。。。)に送られる。ここでDDR2 SDRAMのアドレスを計算しながら画像データに変換して、画像データ書き込み用FIFOに送る。その際に、キャラクタグラフィックプロセッサは、フォントのデータとして、キャラクタジェネレータROMを参照する。画像データ書き込み用FIFOは、画像データが入ってきたらアービタに画像データのデータ転送を要求して、データ転送を行う。ブロック図を下図に示す。
Char_Gen_Controller_1_100116.png

(2010/01/19:追記)クロックドメインを分けるのを忘れていた。画像データ書き込み用FIFOまでの回路はCPUの動作希望周波数の65MHz動作となり、画像データ書き込み用FIFOは非同期FIFOとして、アービタの出口は150MHz動作とする。

次に下図にキャラクタ生成コントローラのアドレスマップを示す。
Char_Gen_Controller_2_100116.png

オフセット0番地は漢字も持てるように、16ビット幅のキャラクタコード(とりあえずはアスキーコードのみ)とその色データがある。ビット15には背景を描画するかどうかのビットがある。0を指定すると背景も描画する。その色データは4番地のに書かれている。4番地には倍率の設定もある。等倍にフォントを引き伸ばす。これはスムーズィングできれば良いのだが、今のところ単純に等倍にするので、フォントはでこぼこになるが、とりあえずはこれで行くことにする。
8番地にキャラクタを書くVRAMの先頭番地を書き込む。このアドレスにCPUから書きこむことにより、コマンド用FIFOに入力される。同じ属性の同じキャラクタを異なるVRAMのアドレスに書く場合は0番地、4番地に改めて書き込む必要はなく、8番地にVRAMのアドレスのみを書き込む。
さらに、同じ背景色のキャラクタを並べて書く場合は、0番地のbit14を1にしてキャラクタコードと文字の色を0番地に書き込めば、他の番地の書きこむことなしにコマンド用FIFOに投入される。このように2つのコマンド用FIFO投入パスがある。これによって、CPUのIOアクセス数を減らすことができる。
次にステータスレジスタだが、0番地のみステータスレジスタが実装されている。このbit4~0には、コマンドFIFOの残りの容量が割り当てられていて、Readするとその値が読める。最大値は"1000"である。残り容量をCPUが読んで、残り容量分を連続して書き込むことができる。これはFIFOを実装しないで、busyビットを実装するのに比べてCPUのポーリング負荷を減らせる可能性があるが、CPUの書き込みスピードより、キャラクタグラフィックプロセッサが十分に早いと、FIFOが必要ないという可能性も残る。

次回はさらにもう1つ下の仕様を考えて行きたいと思う。

(2010/01/23:変更)
キャラクタ生成コントローラのアドレスマップを変更しました。

(2010/01/31:変更)
キャラクタ生成コントローラのアドレスマップの8番地、VRAMのアドレスを32ビットに拡張しました。
  1. 2010年01月16日 06:30 |
  2. VGAコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1355-436ec461
この記事にトラックバックする(FC2ブログユーザー)