モノ創りで国造りを

ハード/ソフト問わず知見をまとめてます

FPGAで画像処理

DE10-Nanoボードで画像処理

IntelFPGAボードとイメージセンサ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ファイルがわんさか出てきた・・・
f:id:yuji2yuji:20190809143109p:plain

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を作成(作成中)

HDMIVGA、USBと方法は色々あれど、どのIFを使うにしても方法が謎。
ちょこちょこ勉強するしかない。

イメージセンサ2つのデータを処理するモジュールを作成(作成中)

トラ技かInterfaceにそれっぽい記事があったので、なんとかなると楽観視している。