SNSへはこちら

Tang Nanoでお手軽FPGA入門(7) - LCD制御部の自作でハマる

前回まではサンプルプロジェクトのソースコードを改変したのでイチから 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度で出てきたら成功です。

参考

参考にしたサイト等は以下です。