FPGAの部屋FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。今回はキャラクタ生成コントローラの仕様を書いていこうと思う。CPUからのキャラクタ描画の方法だが、コマンドレジスタとステータスレジスタをCPUにアドレスマップする。コマンドレジスタに、CPUからキャラクタデータを書きこむことによって、キャラクタを描画するものとする。CPUからのキャラクタ描画コマンドは、16深度のコマンドFIFOにためられて、キャラクタグラフィックプロセッサ(名前負けかもしれないけど。SDRAMのアドレスを計算しながら画像データに変換して、画像データ書き込み用FIFOに送る。その際に、キャラクタグラフィックプロセッサは、フォントのデータとして、キャラクタジェネレータROMを参照する。画像データ書き込み用FIFOは、画像データが入ってきたらアービタに画像データのデータ転送を要求して、データ転送を行う。ブロック図を下図に示す。(2010/01/19:追記)クロックドメインを分けるのを忘れていた。画像データ書き込み用FIFOまでの回路はCPUの動作希望周波数の65MHz動作となり、画像データ書き込み用FIFOは非同期FIFOとして、アービタの出口は150MHz動作とする。次に下図にキャラクタ生成コントローラのアドレスマップを示す。オフセット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ビットに拡張しました。URLhttps://marsee101.blog.fc2.com/tb.php/1355-436ec461この記事にトラックバックする(FC2ブログユーザー)プロフィールAuthor:marseeFPGAの部屋へようこそ!FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。WEBブログデザイナ。