« EZ-USB FX2からAXIにアクセスできるようにした | トップページ | RasPiカメラ2をSpartan-7ボードにつないで画像が撮れた »

2022.08.12

Spartan-7でUSB-AXI-DDR3に成功。次はカメラだ

昨日、FX2からAXIにつなぐコアを作ったので、AXIの先にMIGを置いてDDR3 SDRAMにつなげてみました。

Fx2_axi3

結果は、なんと一発で成功!

Fx2_axi4

512Mバイトの広大な空間を自由自在にUSBからアクセスできるようになりました。しかも、全くのノーエラー。

次にやることは、RaspberryPiカメラ2をつないで、このDDR3 SDRAMのメモリに画像を書き込んでやること。

Sp7mipi

USBとDDR3がAXIでつながっているのだから、メモリ上に画像を入れてやればすぐにデジカメアプリが作れるでしょうというわけです。

そこで、以前作ったMIPI CSIの回路をつないでI2C経由で初期化シーケンスを与えてみると、

Mipiinit

CP/CN、DP0/DN0、DP1/DN1のラインに何らかのデータが出てくるのが見えました。これはMITOUJTAGを使ってFPGAのピンをバウンダリスキャンして見ています。FPGA内蔵のロジアナではないから10秒くらいの間の出来事が記録されています。

バウンダリスキャンだと100MHzで動く信号は見えないあら、次の波形はFPGAに内蔵ロジアナを仕込んで取りました。

Mipidata

MIPIのデータバスをアナログ値で見ていると毎回少しずつ揺れているし、きっと画像なんでしょうね!

いったいどんな画像なのでしょう。楽しみです。

今日のBlockDesignはこんな感じになりました。

Blockdesign

MIPI CSI-2 RX Subsystemという大きなコアはXILINXのIPですが、Vivado 2020.1からは無償で使えるようになりました。

このRX Subsystemが出す信号はいろいろあるのですが、それを右上のvideo-bloganaというコアで解析しています。どういうタイミングで信号が来るのかとかを見るためのコアです。

わかってきたことは、

  • rxbyteclkhsは、MIPIから再生されたクロック。使わなくていい。BUFRで出てくる。
  • ビデオデータはvideo_outというAXI Streamに全部入っているので、これ以外の出力信号(system_rst_out~frame_rcvd_pulse_outまで全部)は基本的に使わない
  • ビデオデータはvideo_aclkに同期して出てくる。今回はMIGが出す83.33MHzを使用している
  • dphy_clk_200Mには200MHzを入れること
  • video_areset_nとctrl_core_enは一緒にアクティブLのリセット信号につなげばいい。I2Cの初期化が終わったら0→1に上げればよいのだと思われる。

ビデオ信号はAXI Streamで出てきますが、tuser(0)がフレームの先頭、tlastがラインの終わりです。

ラインの先頭やフレームの先頭を示す信号はありません。

フレームやラインの先頭を知るには、AXI Streamのtreadyを常に'0'にしておいて、RX Subsystemがtvalidを0→1に上げたときに先頭であるとすればよいでしょう。カウンタのリセットや出力側のAXIの起動をしてからtreadyを1にすればよいのです。RX Subsystemの中にもFIFOは入っているので、数クロックの遅れは余裕で吸収できます。つまり、tvalidの立ち上がりを使ってフレームやラインの先頭を出せばよいのです。

 

|

« EZ-USB FX2からAXIにアクセスできるようにした | トップページ | RasPiカメラ2をSpartan-7ボードにつないで画像が撮れた »

コメント

コメントを書く



(ウェブ上には掲載しません)




« EZ-USB FX2からAXIにアクセスできるようにした | トップページ | RasPiカメラ2をSpartan-7ボードにつないで画像が撮れた »