FPGAで画像処理
DE10-Nanoボードで画像処理
IntelのFPGAボードとイメージセンサ2つで、深度カメラを構築しようと思います。
大まかな手順は以下を想定。
No | To Do | How |
---|---|---|
1 | イメージセンサとFPGA間の制御信号のIFを作成 | I2C, SCCB |
2 | FPGAとPC間の通信用IFを作成 | UART |
3 | イメージセンサの制御ソフトを作成 | ? |
4 | イメージセンサとFPGA間の画像データ信号のIFを作成 | ? |
5 | FPGAとPC or Display間の画像データ信号用IFを作成 | HDMI, VGA, USB |
6 | イメージセンサ2つのデータを処理するモジュールを作成 | ? |
部品の選定
FPGAボードはDE10-Nano-SoCを使用。理由は、現在手元にあるから。
MAX10の評価ボードもあるので、ひょっとしたらMAX10にするかも。
今回はverilogの勉強を兼ねているので、ARMもNIOSⅡも使わないで行けるところまで行く予定。
イメージセンサは何が適切か不明。なのでとりあえず秋月で安く売っていたOV7675http://akizukidenshi.com/catalog/g/gM-13201/を使用予定。
SCCB(I2C)IFの作成(作成中)
SCCBはオムニビジョン社のイメージセンサの制御によく用いられるIF。基本はI2Cのはず。
I2Cは昔ながらのIFなのでFPGAでも簡単に記述できるでしょう
という考えはちょっと甘く、I2Cはデバイスによって微妙に動作が異なる。
各デバイスに応じてverilogの記述を変える必要がある。
Intel提供のI2CのIPはコードが膨大。
QsysでI2C搭載してHDL生成したら、verilogファイルがわんさか出てきた・・・
UART IFの作成(作成中)
I2Cとは打って変わって、UARTは楽。
QsysでUARTのIP搭載してHDL生成しても、ソースコード1つしか出てこない。
920行もあるけど、それはハードウェア言語の宿命。
イメージセンサの制御ソフトを作成(作成中)
FPGAとPCが通信できたので、PCからFPGAのI2C IFを制御するためのソフトを作成。
主要なレジスタの設定だけできるようにする。
FPGA内部でも、PCから送られるUARTのデータとI2Cのデータを連携させる必要がある。
C言語なら簡単なのにと思いながらもverilogでせっせと作成。
イメージセンサとFPGA間の画像データ信号のIFを作成(作成中)
イメージセンサから送信される画像データは、D0-D8のデータをVSYC、HSYNCによって適切なレジスタに格納する。
難しいかと思ったが、他のIFより簡単かも。
FPGAとPC or Display間の画像データ信号用IFを作成(作成中)
HDMI、VGA、USBと方法は色々あれど、どのIFを使うにしても方法が謎。
ちょこちょこ勉強するしかない。
イメージセンサ2つのデータを処理するモジュールを作成(作成中)
トラ技かInterfaceにそれっぽい記事があったので、なんとかなると楽観視している。