FC2カウンター FPGAの部屋 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路25(カラー画像が見えた)

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

FPGAの部屋

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

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路25(カラー画像が見えた)

前回、RGB444モードにしたが、やはり、ピンクぽい色は解消されず、また色もあまり出ていないようだった。OV7670でいろいろ検索しているとLinuxのOV7670のドライバを発見した。(くりさんにもコメントで教えていただきました。ありがとうございました。)
ov7670.cのregval_list ov7670_default_regs[]を見たところ強烈に多い設定がされていた。こんなに設定する必要があるの!!!ということで、しょうがないので、がんばって、SCCBレジスタ設定用のデータファイル (SCCB_reg_values.data) に変換した。(全部で、128個のレジスタに値を書き込みました)
最初に全部くらい入れるとディスプレイ画面が真っ暗になってしまう。おかしいということで、1/2法で1/2ずつにしていって原因を特定した。そうしたら、PLLの設定がされているのが原因だということがわかった。input clockX4倍とかになっていたので、バイパスに設定した。これで画面が出るようになった。
今度は少しずつ戻していって、画面の色の様子を確かめた。途中で画像が青くなってしまった。なぜ~?と思って、いろいろなところを写してみたが、どうやら、青が赤と入れ替わっているようだった。そこで、VGA_Display_Controller でRとBのビットフィールドを入れ替えたら、ちゃんと色が出るようになった。やったー!!!うれしいです。苦労しただけに。。。下に画像を示す。
CamDispCntrler_DDR2_pict_18_100912.jpg

家のちらかっているリビングです。まあまあの色が出ていると思います。壁をみるとRGB各4ビットということがわかると思う。その他はまあまあの写りになっているのではないでしょうか?

しかし、まだ疑問が残る。。。OV7670のマニュアルでは、8ビット幅のデータ出力から、4ビットずつxR,GBと出てくるはずなのに、どうもxB,GRと出ているように見える。そこで、赤と青の物を写して、OV7670から出てくる信号がどう変化するかを、ChipScope Proで観測してみることにした。
まずは青いものとして、青い表紙のクリアファイルを写してみた。直接写すと、照明が写って白飛びする。ファイルの表紙が半透明なので、透過させて写すと良い感じになった。(下の写真)
CamDispCntrler_DDR2_pict_19_100912.jpg

これを、CMOSカメラのフレームの最初の部分にトリガをかけてChipScope Proで見た。それを下の図に示す。
CamDispCntrler_DDR2_46_100911.png

上の図でmaster_syncがCMOSカメラのフレームの最初の部分を示す同期信号だ。cam_href_2dが1の時にcam_data_2dに有効なデータが出ている。その8ビットデータは、cam_cont_afifo/dinで16ビットに変換されて、wr_enが1の時に有効な16ビットデータとなって非同期FIFOに書かれている。これを見ると、最初のcam_cont_afifo/dinの有効なデータは4943であるので、xRGB (各4ビット) とすれば、青いものを写しているのに、Rの方がBより値が大きくなっている。やはり、xBGRの順のようだ。やはり、データーシートが間違っているのか?
次に、VGA_Display_Controllerでも見てみた。これは、CMOSカメラで見た時と異なった時間の値を取っているので、値が異なる。
CamDispCntrler_DDR2_47_100911.png

h_v_is_zero_node が1の時にVGA_Display_Controllerのフレームがスタートする。(h_count, v_count = 0) rd_enが1の時にcamd_afifo_inst_doutに画像データが出てくる。最初のデータは3933だ。当然ながら、ここでもxBGRの順番になっているようだ。

次に青だけでは評価できないので、赤もやってみた。なかなか良いのが無かったが、赤っぽいクリアファイルがあったのでやってみた。下に写真を示す。
CamDispCntrler_DDR2_pict_20_100912.jpg

VGA_Display_Controllerで見た時のChipScope Proの波形を下に示す。
CamDispCntrler_DDR2_48_100911.png

最初のデータは7879となっていて、やはり、xBGRを示しているようだ。
ということで、やはり、データーシートがおかしいという結論になった。
応援していただいた皆様、twitterでもいろいろアドバスをいただいて、本当にありがとうございました。下に現在のSpartan3 Starter Kitの様子の写真を示す。
CamDispCntrler_DDR2_pict_21_100912.jpg

SCCBインターフェースへの配線は変換基板のヘッダから接続コードでSpartan3 Starter KitのTXヘッダに接続されている。SCCBインターフェースの動作周波数は100KHzなので、動作に問題はないようだ。

次は、YUV-RGB変換をもう一度試してみるのと、DDR2 SDRAMコントローラにOVLアサーションを入れてみたい。論理合成できるはずなので、それも試してみたい。
DE0に移植してみたい。SOPC Builderのマスタデバイスは、長船さんとかぶるので、次のFPGA技術がでた後の課題として残しておいて、自作のSDR SDRAMコントローラで試してみたい。VHDLでもシミュレーション、インプリメントができることが実証されたので、VHDLでも良いよね?(しまった。これはAlteraの話でしたね。AlteraもコンパイルはVHDL, Verilog混在環境で行けるのでしょうか?ModelSim AEは混在環境だめですよね?)
変換基板をCADで設計してみたいな。需要はあるのだろうか?

ともかく今日は、こんどこそ、ジブリ美術館に奥さんと娘と行ってきます。(8月に一度行こうとしたのだが、娘の具合が悪くなって、飯田橋駅で引き返してきた。。。)
  1. 2010年09月12日 04:38 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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