CMOSカメラからの画像データからエッジを検出してみようということになったので、方式を考えている。
8bits X 2KWORDのBRAMを使って、CMOSカメラからのY(輝度)データを保存する。保存しながら2エントリのシフトレジスタに入力しながら、横方向に比較する。1水平ライン分BRAMにたまったら、今度はCMOSカメラからのY(輝度)データを前のデータと比較し、さらにBRAMから出力した1水平ライン前の2つのデータと比較する(下図参照)。比較して、1つでもスレッショルド値を超えていたら、ある値をSRAMに書き込み、そうでなければオール0を書き込む。スレッショルド値を超えた時の値はオール1ではコントラストが強すぎるかな?とりあえず半分の0x80 を書いておくことにしよう。

最初のビットは比較できないし、比較できるときにはデータとは他にValidビットを用意して、Validビットが双方立っていないとその方向の比較は無視するようにする。
後はどのモジュールで比較を担当するかだが、CAMERA_CONTROLLERモジュールにcompareサブモジュールを作る感じで行こうと思う。
BRAMのWRITE_MODEはREAD_FIRSTモードにしておいた方が良いと
Spartan3のユーザーズマニュアルに書いてあった。今回は前の水平ラインのデータを読み出しながら今の水平ラインのデータを書くので、WriteモードとReadモードにアドレスのコンフリクトが生じる可能性がありそうだ。BRAMは2Kバイトあるので、1Kバイトずつ使って、ダブルバッファリングしようかな?それならば、アドレスのコンフリクトは生じない。
ユーザーズマニュアルを読んでいるといろいろ発見があって面白い。Spartan3AのBRAMでは、 RAMB16BWERプリミティブがあって、それを使うとバイトイネーブルが付いているそうだ。512X36bits 構成ではWE0~3まであって、9ビットごとに書き込むレーンを決められる。これだと、今まで、バイトイネーブルが欲しいために、2KX9bits のBRAMを4個並べていた構成で、メモリ容量がいらなければ512X36bits 構成にすることができる。
”1つのブロックRAMを使用した256x72シングルポー トRAM”の例があった。”メモリアレイ を半分に分割 し、一方に下位 36ビッ ト 、も う 一方に上位 36 ビット を保存することによ り 、 72 ビット幅のメ モ リを作成します。”そうか、これは気がつかなかった。覚えておくことにする。
- 2009年10月28日 20:14 |
- 画像処理
-
| トラックバック:0
-
| コメント:0