FC2カウンター FPGAの部屋 Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路1(ブロック図)
FC2ブログ

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

FPGAの部屋

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

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路1(ブロック図)

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路を組んでみようと思っている。

(仕様)
CMOSカメラはaitendoのOV7670とする。このOV7670に25MHzクロックを入力することにする。標準は24MHzだが、Spartan-3A Starter Kitのクロックは50MHzなので、25MHzだと2分周で作ることができる。
Spartan-3A Starter KitのCMOSカメラのデータ入力は、受信ヘッダ(J2)か、送信ヘッダ(J15)を使う。受信ヘッダの法を優先して使おうと思っているが、使えない場合は送信ヘッダを使う。1つのヘッダの入出力ピンの数が2本足りないので、SCCBは使わないことにする。接続する信号ピンの位置が不規則なので、aitendoのピンヘッダ用接続ケーブ[CB-PH10P-250] を使って、CMOSカメラとSpartan-3A Starter Kitを接続することとする。

全体のブロック図を下に示す。
CamDispCntrler_DDR2_1_100708.png

以前のSRAMをDDR2 SDRAMに変更した。それに伴って、DDR2 SDRAMコントローラを付けるようにした。以前はクロックごとにSRAMへRead, Writeを繰り返していた。今回は、以前に作成してバグがあってお蔵入りのSpartan3A Starter KitのビットマップVGAコントローラの仕様をいただいて、AERBITERを付けて、VGA DISPLAY CONTROLLERからのRead要求とCAMERA CONTROLLERからのWrite要求をアービトレーションしようと思っている。前回作ったキャラクタ描画テスト回路よりはアービタの構造が簡単なので、でバックしやすいと思う。前回作ったが、途中で挫折したキャラクタ描画テスト回路の概要はVGAコントローラのカテゴリの”Spartan3A Starter KitのビットマップVGAコントローラの仕様1”以降を参照のこと。(キャラクタ描画テスト回路は、途中まで、それなりに動いているが時間が経つとおかしくなってしまっている。デバックするのは大変なので、ペンディングになっている)

・データの粒度も考慮する必要がある。DDR2 SDRAMのWriteの粒度は16ビット幅で4バーストとなっていて、つまり8バイト単位でRead, Writeする必要がある。CAMERA CONTROLLERもVGA DISPLAY CONTROLLERも8バイト単位でWrite, Readすることとする。
・DDR2 SDRAMコントローラは前回は150MHz動作だったが、今回は133MHz動作に落として使用することにする。150MHzだとどうしてもタイミングエラーを消すのが難しい。
・VGA DISPLAY CONTROLLERのタイミングの検証は、ビットマップVGAコントローラで行ったものを流用する。”Spartan3A Starter KitのビットマップVGAコントローラの仕様2”、”Spartan3A Starter KitのビットマップVGAコントローラの仕様3(レイテンシの測定)”、”Spartan3A Starter KitのビットマップVGAコントローラの仕様3(レイテンシの測定2)”などに詳しく書いてあるので、それを流用する。ただし、動作周波数が変更になっている。DDR2 SDRAMコントローラが133MHz、入出力回路は25MHz動作となる。前回は150MHz, 65MHzだったので、前回よりも条件は緩くなる。
・VGA DISPLAY CONTROLLERのRGB出力は8ビットだが、Spartan-3A Starter Kitには、抵抗分割のRGBそれぞれ4ビット分しかないので、上位4ビットを使用する。(追記、忘れてました)

・CAMERA CONTROLLER
CAMERA CONTROLLERは、Address生成回路と非同期FIFOを主に持っている。Address生成回路はHREFやVSYNCからアドレスを生成する。アドレスのビット幅は19ビットとなる。
非同期FIFOは、32ビット幅のデータ(2つの画像ビットの情報UYVY)と19ビットのアドレスの幅を持つ。深度は取り敢えず256深度とするが、VGA DISPLAY CONTROLLERのバス占有時間によっては見直すこととする。
下にCAMERA CONTROLLERのブロック図を示す。
CamDispCntrler_DDR2_2_100709.png

・VGA DISPLAY CONTROLLER
VGA DISPLAY CONTROLLERは、前述した以前のビットマップVGAコントローラと同様の構成を取るが、DDR2 SDRAMコントローラからReadされるデータはRGBではなく、UYVYなので、非同期FIFOの後にYUV-RGB変換回路を付けてRGBに変換し、抵抗ラダー回路に送る。
下にVGA DISPLAY CONTROLLERのブロック図を示す。
CamDispCntrler_DDR2_3_100709.png

下にピクセルデータ管理モジュールのブロック図を示す。
CamDispCntrler_DDR2_4_100709.png

・ARBITER
ARBITERは、VGA DISPLAY CONTROLLERの要求を優先して処理する。VGA DISPLAY CONTROLLERの非同期FIFOがFULLになってから、CAMERA CONTROLLERのWrite要求を処理する。CAMERA CONTROLLERがWrite出来る状態を示すためEnable信号を用意する。VGA DISPLAY CONTROLLERの制御信号としてはREQとGNTを使用する。
ARBITERは、CAMERA CONTROLLERとVGA DISPLAY CONTROLLERからアドレスと32ビット幅のデータを受け取って、DDR2 SDRAMコントローラにRead, Write処理を投げる。

・DDR2 SDRAMコントローラ
DDR2 SDRAMコントローラは、Spartan3A Starter KitのDDR2 SDRAMコントローラを流用するが、150MHz動作ではタイミングを満たすことが難しいので、133MHz動作に変更する。もう一度タイミングを検証するか?検証するのが面倒なときは動作周波数のみ133MHzとする。(それでも大丈夫なはず?)

(2010/7/12追記:133MHzでのDDR2 SDRAMコントローラの動作を確認しました。ISE12.1でインプリメントした際にもタイミングの収束が150MHzよりもスムーズのような気がします)
  1. 2010年07月08日 05:57 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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