前回まではサンプルプロジェクトのソースコードを改変したのでイチから LCD 用のプロジェクトを作ったことはありませんでした。
今回はプロジェクトをイチから生成する際にハマったところをご紹介します。
IDEのプロジェクト生成でハマったとこ
このQiita記事に従ってやればいいのですが、以下でハマって丸1日を溶かしたので、掲載しておきます。
そのハマった箇所は1箇所だけなのですが、ピンの機能選択を行うということを忘れていました。そのせいで 赤色の信号を 5'b00000
としていたのにも関わらず、LCD がやや赤く染まる(ことがあった)ということがあって、色々大変でした。結局原因が判明するまでプロジェクトを生成し直したり、制約をいじってみたり散々でした。
実際はこんな感じで(画像のソースは Tang Nano の回路図)、BANK1 にはピン機能を3つ持つピンがあります。この真ん中の機能が特殊機能で、これを使うのか、一般のピンとして使うのかを選択する必要があるのです。
設定方法はメニューバーから Project -> Configurations で設定ウィンドウを出し、以下の2箇所をチェックします。
よくわからないけど、デバッグ用途なのかな?いずれにせよ、マイコンでピン機能を選択するという大事なことを学んだにもかかわらず、FPGA でそれを繰り返すなど何たるたわけ者!と自分を戒めるのでした。グッバイ日曜日。
LCDの仕組みやら動かし方
自分は LCD の知識ゼロなので、調べてやってみました。
ぶっちゃけ、「こんなんでいいの?」って感じでよくわかっていないのですが、まあ動いているからいいっしょという気持ちです。以下が完成したソースコード。
コメントアウトしているパラメータの部分はサンプルプロジェクトにあった値そのままを用いています。
フロントポーチとかバックポーチとかの値を決定する必要があるんですが、どうやら Sipeed のチュートリアルによるとな〜んかどうでもいいみたいですねぇ(中国人特有の単語センスしているのでよく理解できていないですが)。
そして、チュートリアルにあるように PLL の設定をお忘れなく。
ピン配置は回路図を見て、以下のように設定します。
ピン名 | ピン番号 | 備考 |
---|---|---|
clk | 35 | |
rstn | 14 | Aボタン |
lcd_r[0] | 27 | |
lcd_r[1] | 28 | |
lcd_r[2] | 29 | |
lcd_r[3] | 30 | |
lcd_r[4] | 31 | |
lcd_g[0] | 32 | |
lcd_g[1] | 33 | |
lcd_g[2] | 34 | |
lcd_g[3] | 38 | |
lcd_g[4] | 39 | |
lcd_g[5] | 40 | |
lcd_b[0] | 41 | |
lcd_b[1] | 42 | |
lcd_b[2] | 43 | |
lcd_b[3] | 44 | |
lcd_b[4] | 45 |
以下のような、黒字にシアンの線が45度で出てきたら成功です。
参考
参考にしたサイト等は以下です。
- Point LCD tutorial · Tang Nano DOC
- FPGAによるアナログRGB対応のカラー・グラフィックス表示制御 - CQ出版
- FPGA/マイコンでVGA出力をするために | 電子工作と理科実験のエレテック
- SystemVerilog文法メモ - kivantium活動日記
- ソースコードは
.v
なのですが、実は使っている言語は SystemVerilog のよう。だからstruct
とか使える。 - 上のコードでは
Pos
という構造体を作成し使っています。
- ソースコードは
- SystemVerilog: ビット長拡張(符号拡張)の書き方 - プログラムdeタマゴ