Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路1(ブロック図)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路を組んでみようと思っている。ブロック図を用いて、仕様を説明している。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路2(レイテンシの測定)
今度もDDR2 SDRAMコントローラのレイテンシ込みのDDR2 SDRAMのレイテンシを測定してみる。以前のDDR2 SDRAMの動作周波数は150MHzだったが、今回は133MHzに変更してある。(再度変更して、実際は125MHzです)
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路3(FIFOの深度)
VGA DISPLAY CONTROLLERやCAMERA_CONTROLLERの非同期FIFOの深度についてまとめておこうと思う。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路4(Verilogコーディング中)
さて、Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路のVerilogコーディング中だ。暑いので、やる気が失せている。ほんとうに暑い。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路5(テストベンチをコーディング中)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路もインプリメンテーション用のVerilogファイルは書き終えて、一応、XSTで論理合成はできるようになった。(熱中症になりそうになりながらも頑張りました)
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路5(シミュレーション)
CMOSカメラ・ディスプレイ回路のコーディングも終了し、OV7640のモデルを Verilogで作ったので、シミュレーションを行っている。DDR2 SDRAMのモデルはいつものMicron社のモデルを使用している。Veritakでシミュレーションを行っている。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路6(シミュレーション2)
”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路5(シミュレーション)”でシミュレーションをしてみたが、CMOSカメラモデルのデータの出力が遅いため、 (でもそれが通常のタイミング)短いシミュレーション時間では、VGA_Display_Contorller がX以外のRGB値を出力できなかった。
今回は、テストベンチからdefpram を使用して、CMOSカメラの1フレームを極端に短くすることによって、なんとか短いシミュレーション時間でRGBの値を出力できることを目指す。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路7(インプリメント)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路のインプリメントを行った。インプリメントは終了した。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路8(インプリメント2)
いろいろおかしいところを修正した。cam_pclkのGCLKの位置を変える必要があったが変更できないので、CLOCK_DEDICATED_ROUTE = FALSE制約で逃げた。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路9(インプリメント3)
133.33MHzクロックのデータパスの遅延が8.891nsec となって、制約の7.5nsec を満足できない。(分けあってISE12.1) タイミングを満たすために試行錯誤した。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路10(波形観察)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路がうまく動かないので、OV7670からの信号をオシロスコープで観察してみた。(波形の写真あり)
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路11(ChipScope Pro)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路をChipScope Proで観察してみた。
おかしいのは、/cam_cont_afifo_inst/wr_data_countが06から急に3F(青と赤のカーソルで囲まれた部分)になってし まうことだ。それでfullとなって、更に書き込むため overflow してしまうようだ。rd_data_countもおかしい?
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路12(ノイズ?)
前回動作がおかしかったのは、ノイズが原因だったようだ。配線にアルミフォイルをまいたら、改善した。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路13(画像が出てきた)
いろいろうまくいかないSpartan-3A Starter KitでCMOSカメラ・ディスプレイ回路だが、配線にアルミフォイルを巻いたら、だいぶましになってきた。やはり、配線を短くしようと、秋月電子でコネ クタと基板を買ったので、アダプタ基板を作ろうと思っている。秋月電子がお盆休みで休みなので、来週になるとおもう。
いろいろやってみているが、ChipScope Proを入れると、規模によっては上手く動かないことがあるようだ。一旦、ChipScope Proを外すと、テストパターンが出てきた。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路14(カラー化)
やっと、CMOSカメラの画像が出てきて一安心。画像が寄っている原因はわかった。シミュレーション用にVGAコントローラのアドレスを途中から始めているからだった。カラー化してみたが色がおかしかった。ピンクっぽい。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路15(CMOSカメラ搭載基板)
CMOSカメラを接続するケーブルが長すぎるようなので、秋月電子でユニバーサル基板とソケットを買って、基板上で配線することにした。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路16(基板とコネクタ)
”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路15(CMOSカメラ搭載基板)”で頼んだ、ユニバーサル基板とソケットが今日来た。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路17(検証回路)
”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路16(基板とコネクタ)”のユニバーサル基板とソケットを使用して、Spartan-3A Starter KitとCMOSカメラを接続する接続基板を日曜日にFPGA-CAFEで作成した。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路18(DDR2 SDRAMコントローラのバグ)
この前から悩んできた画面のノイズだが、どうやら自作のDDR2 SDRAMコントローラのバグである可能性が大きくなってきた。これでバグのでる条件はわかったので、次はシミュレーション環境で同じバグが出るかどうかを確かめて、バグが出たらバグを修正する。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路19(DDR2 SDRAMコントローラのバグフィック)
”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路18(DDR2 SDRAMコントローラのバグ)”でDDR2 SDRAMコントローラにバグがあることがわかったので修正を試みた。バグがフィックス出来て、画像にノイズが無くなった。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路20(デジカメ機能)
DDR2 SDRAMコントローラのバグフィックができたと思ったが、画像のドットが変化しているのが見える。もしかしたら、まだ、DDR2 SDRAMコントローラがおかしいのか?とおもって、デジタルカメラ機能を付けてみた。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路21(VIO、tcl)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路にChipScope ProのVIOを入れて、tclでデータを取得してみることにした。画像データを21分で取得できた。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路22(ソフトでYUV-RGB変換)
”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路21(VIO、tcl)”で取得したYUVの値を使って、ソフトウェアでRGBに変換し、BMPフォーマットに直して、パソコンで見てみた。やはり、色がおかしかった。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路23(SCCBインタフェース回路)
”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路22(ソフトでYUV-RGB変換)”でVIOで取り込んだデータをBMPファイルにしてみたが、やはり、色が おかしかった。そこで、CMOSカメラの設定を行うSCCBインタフェース回路を実装することになった。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路24(RGB444モード)
今回は、SCCBインターフェース回路を付けて、CMOSカメラを制御できるように なった。そこで、CMOSカメラをRGB444モード(RGBが4ビットずつのデータとして出力されるモード)に設定して、そのRGBをそのまま Spartan-3A Starter KitのVGAポートから出力することにした。
やってみた結果は、やはり、ピンクぽかった。おかしいのは、赤を見ると緑に見える。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路25(カラー画像が見えた)
LinuxのOV7670のドライバの設定を参考に設定したら、うまくカラー化できた。やったー。苦労しただけにうれしいです。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路26(YUV-RGB変換も写った)
CMOSカメラからYUV422で出力されたデータをYUV-RGB変換回路を通し て、ディスプレイに出力する回路をやってみた。LinuxのOV7670のドライバを参考にRGB444の設定部分をYUV422フォーマットの物に入れ 替えた。そうして、インプリメントして表示してみると、今度はYUV422の方もディスプレイに表示することができた。良かった~。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路27(VIOで8ビットのデータを取得)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路でも、現在は4ビット品質の画像しかディスプレイに出力していないので、8ビットの品質を見るためにVIOでYUVのデータを取得して、BMPファイルに変換して、画質を見てみた。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路28(プロジェクトの公開)
Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路をダウンロード公開した。変換基板の作り方とインプリメントの仕方を説明した。割り算器が必要になったので、 ISE12.2のCore GeneratorのDivider Generator を使って割り算コアを生成してみた。
 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路29(シミュレーション方法)
”Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路28(プロジェクトの公開)”のシミュレーション方法を説明する。OVL(Open Verification Library)も入っているので、かなりハードルが高いと思う。

inserted by FC2 system