4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Tang-Nano-4KのカメラとHDMI出力の改良

Last updated at Posted at 2021-11-24

目的

 Tang-Nano-4Kを購入した。先ずはサンプルソフトの動作確認。
 Lチカ、まあこんなモノだろうな。
 カメラとHDMI、な、なんだこのショボさは。
 Tang-Nano-4Kの性能、活かせてないじゃないか。
 ◆◆◆ よし、も少し真っ当な画像を表示させよう ◆◆◆
 と言っても、それ程の技術も持ってないので、出来る範囲と言うことで。

経緯

 購入経緯なんかは前回に書いた。
 コスパの良さには驚いたが、サンプルソフトがちと貧弱。
 HDMI出力は1280x768、カメラなんて640x480、しかもモノクロだよ。
 そこで目標として、下記を掲げる。
  ◇カメラ画像のカラー化
  ◇HDMI出力のHD(1920x1080)化
  ◇カメラの高解像化
 実施結果をGithubに上げておいたので、興味あったら見てね。
  ※カメラはHD化出来なかった、残念。

開発環境

 Tang-Nano-4K      ※無ければ話にならないな。
 GOWIN EDA Education版  ※verilogのコンパイルに必要。
 HDMIモニター      ※確認には必要だろう。

カメラ画像のカラー化

 出来上がってみれば意外と簡単。
 元の画像出力はRAW(赤緑青を色毎に8bit)形式に設定されてる。
 出力形式をRGB565(つまり赤5bit、緑6bit、青5bitの16bit)形式に変更する。
 変更はOV2640_Registers.vを書き換えれば出来るが、データの取り込みを16bit単位にする必要が有る。
 カメラからの8bitデータを2byte単位で纏め、クロックも1/2にすればカラー化が完了。
  ※サンプルソフトの作成年は2019年、手間を省いたと言う事だろう。役には立ったが。
  ※OV2640の取説は中身が薄い。データ形式などは過去のOV7670等の方が詳細。

HDMI出力のHD(1920x1080)化

 HD化はパラメーターの設定変更で出来ると思ったが、其れだけではモニターに弾かれた。
 クロックを 74.25MHz -> 148.5MHz に倍化する必要が有る。
 しかし、PLLは2個しかなくてどちらも使用中だよ。
 そこで、DRAMのクロックを 159MHz -> 148.5MHz に変更。7%低下するがそこは我慢の子。
 video_top.vの先頭の`ifdef USE_HD を有効化すればHD表示になります。
  ※画面はHD化出来たが、デジタルなのにノイズが乗るのは何故だ。

PLLの変更方法

 PLLの設定変更に当たり、元の設定が判らないよ。 ※企業なら文書化しているだろうが。
 GW1NSR-LV4CのPLL如き、ご承知の方は承知なんだろうが、
 パラメーターを弄って結果を確認した所、*PLL*.vへの記載のキモは、
  FCLKIN   入力周波数
  IDIV_SEL  入力を分周
  FBDIV_SEL  分周結果を逓倍(多分feedback)
 FCLKIN ÷ IDIV_SEL(+1) × FBDIV_SEL(+1) = 出力周波数だと思う。
 元の設定は 27 8 52 なので、27/(8+1)*(52+1)=159MHzの設定だったと判る。
  ※CLKOUTDはCLKOUTをDYN_SDIV_SELで分周した出力、自由に選べないとは。

カメラの高解像化

 これはパラメーターを設定すれば完了するはずだったのだが...、
 800x600,1024x768は動作したが、それ以上は表示出来なかった。
 OV2640_Registers.v で USE_640,USE_800,USE_1024 の何れかを有効にしてください。
  ※パラメーターはaraduinoのやつを参考にしました。
  ※カメラを1280x1024に設定しても、1280個のデータが送られてこない。
   設定ミスだとは思うが、何処が間違っているか判らん。

追記

 前回は上記迄書いたが、その後多少分かった事が有るので追記する。
 Tang-Nano-4Kに搭載のHyperRAM(名前が大げさだと思うがDRAMの商品名らしい)のカタログスペックは、
  駆動クロック  = 166MHz(200MHzも有るらしい)
  DRAM帯域幅 = 166×2=333MB/S
  理論効率    = 74%(128Byteバーストアクセス)
  理論帯域幅   = 333×0.74=246.42MB/S
 使用するには読み書きが必要なのでその半分、123MB/S当たりが実用上限だろう。
 表示を1280x720 60fps 3Byte/Pixcelとした場合、166MB/Sなので破綻している。
 表示を1280x720 60fps 2Byte/Pixcelとした場合、111MB/Sなので表示可能になる。
 勿論、カメラ側からのアクセスは30fps程度なので、これ以上でも利用の可能性はある。

 カメラを1280x1024に設定した場合、960ラインを超えるあたりで表示不能になったが、ここで帯域オーバーしたのだろう。
 1980×1080(2Byre/Picel)の場合は、帯域が257MB/S必要なので、表示だけで破綻していたわけだ。
  ※だから、デジタルなのに画面にノイズが乗っていた訳だな。
 でも、1Byte/Pixcelにすれば帯域は128MB/Sとなるので、十分表示可能だな。
 

感想

 前回の宿題の回答なのですが、 力及ばす完遂しませんでした。
 もう少しは頑張るつもりですが、多分このまま放置だと思います。
  ※表示が無理な事が判りました。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?