FC2カウンター FPGAの部屋 2016年03月01日
FC2ブログ

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

FPGAの部屋

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

ZYBO_0_2のビットマップ・ディスプレイ・コントローラのバグフィックス

ZYBO_0_2 のビットマップ・ディスプレイ・コントローラのワードレーンがおかしいようなので修正を行った。

ZYBO_0_2 については、
ZYBO_0 を変更1(ブロックデザインの修正)
ZYBO_0 を変更2(インプリメント)
ZYBO_0 を変更3(Ubuntu 14.04 LTSのBOOT.binを変更)
を参照のこと。

ZynqのPSのユニットはすべてリトル・エンディアンだったが、ビットマップ・ディスプレイ・コントローラで使用している入力64ビット幅、出力32ビット幅の非同期FIFOはXilinx社の仕様からビック・エンディアンだった。つまり、ワード(32ビット)単位でレーンがひっくり返る訳である。以前はカメラ・インターフェース・モジュールも64ビット幅でカメラ・データを転送していたので、ワード・レーンはビック・エンディアンだったが、問題が無かった。その時は、ARMプロセッサから画像データを読む際には、4 と排他的論理和を取ったアドレスから読んでいた。つまりワード・レーンをひっくり返していた(32ビット単位で隣のアドレスとひっくり返した)わけだ。
カメラ・インターフェース・モジュールが32ビット幅のAXI4 Stream インターフェースになってからは、今回のワード・レーンの問題が出てきたと思う。なお、出力幅の異なる非同期FIFOのデータ出力順については、
Write側とRead側のデータ幅の異なるFIFOのシミュレーション
Write側とRead側のデータ幅の異なるFIFOのシミュレーション2
Write側とRead側のデータ幅の異なるFIFOのシミュレーション3
を参照のこと。

それでは、ZYBO_0_154_2 フォルダにある ZYBO_0_153 プロジェクトのビットマップ・ディスプレイ・コントローラを変更していこう。
ZYBO_0_153 プロジェクトをVivado 2015.4 で立ち上げて、bitmap_display_cntrler_axi_master を右クリックし、右クリックメニューから Edit in IP Packager を選択して、IP を修正する。

bitmap_display_cntrler_axi_master_v1_0_project で、bitmap_afifo の din のデータの上位32ビットと下位32ビットをひっくり返した。
BMDC_bugfix_1_160229.png

IPを再パッケージして、 ZYBO_0_153 プロジェクトに戻りIP を更新した。
BMDC_bugfix_2_160229.png

論理合成、インプリメント、ビットストリームの生成を行い、成功した。
BMDC_bugfix_3_160301.png

ハードウェアをエクスポートして、SDKを立ち上げ、BOOT.bin を再生成した。
BMDC_bugfix_4_160301.png

出来上がったBOOT.bin を ZYBO 用MicroSDカードにコピーして、ZYBO に実装した。
BMDC_bugfix_5_160301.png

OpenCV 2.4.10 の stereo_match.cpp を自分のカメラ画像でやってみた1”と同様に左目カメラ画像、右目カメラ画像をBMPファイルに変換した。
stereo_calib_44_160301.png

左目カメラ画像を拡大。
stereo_calib_45_160301.jpg

右目カメラ画像を拡大しても、境界は問題ないようだ。
stereo_calib_46_160301.jpg
  1. 2016年03月01日 04:25 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

OpenCV 2.4.10 の stereo_match.cpp を自分のカメラ画像でやってみた1

左目カメラ画像と右目カメラ画像をBMPファイルに変換するアプリケーションを作成した”の RL_capture_bmp アプリケーションを使用して、自分のカメラの画像を右目カメラ画像、左目カメラ画像共に1ペア撮影した。

left0.jpg と right0.jpg だ。
stereo_calib_38_160229.png

stereo_calib_39_160229.png

left0.bmp を表示してみた。
stereo_calib_40_160229.jpg

チェスボードの升目の境界辺りを拡大してみよう。こっちは問題ない。
stereo_calib_42_160229.jpg

どうも前から、カメラ画像を大きな画面で表示させた時におかしいとは思っていたのだが、1ピクセル分、となりのピクセルと入れ替わっているように見える。つまり、64ビット幅のデータパスで32ビット分、上位下位を間違っている感じだ。

カメラ画像をディスプレイに表示したものがおかしく、BMPファイルは正常に見える。
右目カメラ画像は、ビットマップ・ディスプレイ・コントローラからの出力をHDMI経由で送付されているので、マスの境界がおかしい感じだ。rigth0.jpg を示す。
stereo_calib_41_160229.jpg

チェスボードの升目の境界辺りを拡大してみよう。やはり境界がおかしいようだ。
stereo_calib_43_160229.jpg

ちなみに、所々にあるドットは以前から分かっているバグである。
  1. 2016年03月01日 03:38 |
  2. ステレオカメラによる画像解析
  3. | トラックバック:0
  4. | コメント:0