FC2カウンター FPGAの部屋 キャラクタ・ディスプレイ・コントローラのまとめ
FC2ブログ

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

FPGAの部屋

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

キャラクタ・ディスプレイ・コントローラのまとめ

やっとVerilog2001版キャラクタ・ディスプレイ・コントローラが出来上がった。思えば怪我をする前からだから、1ヶ月くらいかかっている。
興味がある人はキャラクタ・ディスプレイ・コントローラの本体をここからダウンロードしてほしい。この中には7つのVerilogファイルと1つのUCFファイル、インクルードファイルとして、1つの.vhファイルが入っている。今回はISEプロジェクトは入れていないので自分で作ってください。
尚、例によって、動作の保証は出来ない。自己責任でお使いください。急に公開中止になることもあります。自分でお使いになるのはかまいませんが、他のサイトで公開しないでください。
キャラクタ・ディスプレイ・コントローラの本体はCharDispCtler.vで入出力は以前書いたとおりだ。VGA_はディスプレイにそのままつなぐとして、内部のフレームバッファへの書き込み方法は、processor_addrにアドレスをセットし、processor_dinにセットするキャラクタをセットして、processor_weを1クロックの間'1'にする。
フォーマットはR,G,B,キャラクタコード7ビットだ。合計10ビット。R,G,Bのビットを全て0にすると(キャラクタコードしか書かないと)文字は黒になって表示されないことに注意。
CharDispCtler_5_070621.png

上図の最初のprocessor_dinの 3b0 はR,G,Bが1,1,1でキャラクタコードが 30 つまり白の'0'キャラクタを示す。次の 3C1 はR,G,Bが1,1,1でキャラクタコードが 41 つまり白の'A'キャラクタを示す。
シミュレーション用のテストベンチもCharDispCtler_tb.vとして入れてある。
CharDispCtler.vだけだとそのままでは何も表示しないし、入力クロックが25MHzでSpartan3 Starter Kitの50MHzがそのまま入らないので、CharDispCtlerTest.v, dcm_inst.vファイルを用意してある。CharDispCtlerTest.vはキャラクタコードを+1、色コードも+1しながら全画面にキャラクタを表示する回路だ。
ISEのプロジェクトは下の図の様になる。
CharDispCtler_4_070621.png

Spartan3 Stater Kit用のUCFは用意してあるので、上図のようにプロジェクトに入れると良い。
これをインプリして、iMPACTでコンフィギュレーションして、VGAケーブルをディスプレイにつなぐと下のようにキャラクタが表示されるはずである。
char_disp_ctler_2_070523.jpg

(キャラクタの種類が多くなっているけど。。。)

最後にISEで論理合成する時にはインクルードファイルのパスを指定することになっているのを忘れないほうが良い。ISE
のXSTのプロパティの Verilog Include Directories の設定を忘れないようにしてください。
Verilog2001版DDR SDRAMコントローラーのインプリメント2、この辺をご参考にどうぞ。

更に、Spartan3E Stater KitでもUCFを書き直せば、いけるはずだ。Spartan3Aは各色3ビットあるので、それをマルチすれば同様にいけるはずだ。

2007/06/24:追加
動いたよ。動かない、というレポートをコメントでお知らせください。
  1. 2007年06月23日 13:56 |
  2. VGAコントローラ
  3. | トラックバック:0
  4. | コメント:7

コメント

とりあえずSpartan3 Starter Kitで動きました。元と同じ環境なので動いて当たり前なのですが、一応ご報告まで
  1. 2007/06/26(火) 22:28:07 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

ありがとうございます。
一応、2つのパソコンで動作は確認したのですが、心配でした。
  1. 2007/06/26(火) 22:44:40 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

Starter Kit以外のSpartan-3ボード(http://www.yellowsoft.com/products/ioexp.html)
で動作しました。
クロックの周波数が違うので、DCMのパラメタを修正しましたが。

キャラクタディスプレイ回路の基本はもちろん、
内蔵RAMの使い方や、ROMとしての使い方の具体例として、とても参考になりました。
  1. 2007/10/12(金) 22:49:06 |
  2. URL |
  3. しおん #-
  4. [ 編集 ]

報告ありがとうございます。

このボードはIOボードとして使えるようにSpartan-3が載っているんでしょうか?
参考になったということでうれしいです。Webpack6.3i用なのでプリミティブで書いてありますが、最近ではCoregenが使えるので、そっちでやっても良いと思います。
ブログには載せていませんが、プロセッサのシミュレーションではRAMの初期値を書き換えるために、Rubyを使って、VHDLファイルを書き換えるというようなこともしています。
  1. 2007/10/12(金) 23:45:56 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

はい、本来はH8のI/Oを拡張するためにSpartan-3が載っているのですが、もちろん(?)本来の使い方はしていません。
H8+高速SRAM+FPGAボードとして使っています。
ただ単に自分で配線するのが面倒だったので・・・。
普通だったらCPUもFPGAで組むのでしょうが、チョット理由があってこの構成で使っています。

  1. 2007/10/13(土) 00:13:06 |
  2. URL |
  3. しおん #-
  4. [ 編集 ]

Spartan3Eにて、ucf書き換えたのみで動きました。
  1. 2008/05/14(水) 14:14:53 |
  2. URL |
  3. kuma #-
  4. [ 編集 ]

kumaさん、レポートありがとうございます。

PS2コントローラと組み合わせて、1文字タイプしたらその文字が表示するようにすると面白いですよ。段々マイコンになってきますね。
  1. 2008/05/14(水) 16:47:49 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

コメントの投稿


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

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