FPGAの部屋

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

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ご利用ください。 http://marsee101.web.fc2.com/index.html

2021年01月

”IMX219 MIPI sensor to Ultra96-V2 FPGA DisplayPort”をやってみる8”の続き。

Raspberry Pi のソニー製Ver. 2 カメラを Ultra96V2 に接続して、 DisplayPort で表示するプロジェクトをやってみることにしたということで、前回は、正常に動作した Vivado 2019.2 のプロジェクトを Vivado 2020.1 に変換して、カメラ画像がディスプレイに表示できるかどうか?確かめてみたところ、正常に画像を表示できた。今回は、更に Vivado 2020.2 に変換してカメラ画像がディスプレイに表示できるか?確かめてみよう。

結論から言うと Vivado 2020.1 プロジェクトを Vivado 2020.2 に変換しても、正常にカメラ画像を表示することができた。
3cc13d0f.png


f578235c.png


これで、無料になった MIPI CSI-2 Rx Subsystem を使うことができるようなった。

次に自分で新規の Vivado 2020.2 プロジェクトを作成して IP を追加して、ブロックデザインを作ってみた(ultra96v2_picam2_dp_202_2)が、こちらはカメラ画像をディスプレイに表示することができなかった。何かが足りないようだ。

File メニューから Export -> Export Block Design... を選択して、 design_1.tcl ファイルを作成した。

新規の Vivado 2020.2 プロジェクトをもう一度作成して、 design_1.tcl ファイルでブロックデザインを再生して、やってみたところカメラ画像をディスプレイに表示することができた。
0dd9129e.png


b0332c17.png


gtkterm の表示内容を示す。
b3fd6c88.png


ディスプレイのカメラ画像を示す。(使いまわしだ)
9605fc9e.jpg

”IMX219 MIPI sensor to Ultra96-V2 FPGA DisplayPort”をやってみる7”の続き。

Raspberry Pi のソニー製Ver. 2 カメラを Ultra96V2 に接続して、 DisplayPort で表示するプロジェクトをやってみることにしたということで、前回は、Vivado の他のバージョンではどうなんだろう?ということで、Vivado 2019.2 を使ってやってたところ、正常にカメラ画像がディスプレイに表示できた。今回は、正常に動作した Vivado 2019.2 のプロジェクトを Vivado 2020.1 に変換して、カメラ画像がディスプレイに表示できるかどうか?確かめてみよう。

Vivado 2019.2 の前回のプロジェクトを Vivado 2020.1 で読み込むと IP をアップグレードするかを聞いてくるので、アップグレードを選択して、IP をアップグレードした。
プロジェクトを示す。
2dd1e5df.png


ブロックデザインを示す。
044e0735.png


論理合成、インプリメンテーション、ビデオストリームの生成を行った。結果を示す。
479da82a.png


Vitis 2020.1 の画面を示す。Vitis プロジェクトは作り直した。
59774fa7.png


Ultra96V2 で試したところ、正常にカメラ画像をディスプレイに表示することができた。
9605fc9e.jpg


gtkterm の表示を示す。
ce714aeb.png


ただし、Vitis 2019.2 のプロジェクトもそうだけど、画面がほんの少し揺れるときがある。昨日の晩は少し揺れたけど、今朝はピッタリ止まって表示されている。何らかの原因があるのだろうか?

”IMX219 MIPI sensor to Ultra96-V2 FPGA DisplayPort”をやってみる6”の続き。

Raspberry Pi のソニー製Ver. 2 カメラを Ultra96V2 に接続して、 DisplayPort で表示するプロジェクトをやってみることにしたということで、前回は、Mini DisplayPort のポートがあるディスプレイを購入したので、カメラ画像が映るかどうか?確かめた。カメラ画像は映ったのだが、チラチラしていて正常に表示されない。今回は、Vivado の他のバージョンではどうなんだろう?ということで、Vivado 2019.2 を使ってやってみることにした。

まずは、 source tools/Xilinx/Vitis/2019.2/settings64.sh を実行して、 Vivado 2019.2 の環境を整える。

ultra96v2_imx219_to_displayport/fpga ディレクトリに行って、 make clean を行った。
63340658.png


ultra96v2_imx219_to_displayport/fpga ディレクトリの Makefile を下のように修正した。
805bfa87.png


make build/design_1/design_1.bd を実行した。
3170af6f.png

fdbe2fc7.png


design_1 ブロックデザインが生成された。
29c065a3.png


Vivado 2019.2 を立ち上げて、 ultra96v2_picam2_dp_192 プロジェクトを作成した。
design_1 ブロックデザインをインポートして、Create HDL Wrapper で Verilog HDL のラッパーファイルを生成した。
Ulra96_V2_constraints_190430.xdc をインポートした。
9303799a.png


ブロックデザインを示す。
e1023a86.png


Address Editor を示す。
6aadb8a0.png


論理合成、インプリメンテーション、ビデオストリームの生成を行った。
Project Summary を示す。
5329237e.png


Export Hardware を行った。
c5256f0b.png


Vivado 2020.2 の Tools メニューから Launch Vitis IDE を選択して Vitis 2020.2 を立ち上げる。

Vitis IDE Launcher ダイアログが表示される。
Workspace を選択するのに Brows... ボタンをクリックする。

ultra96v2_picam2_dp_192 ディレクトリで vitis_work 新規フォルダーを作成する。

ltra96v2_picam2_dp_192/vitis_work ディレクトリに入る。”開く”ボタンをクリックする。

Vitis IDE Launcher ダイアログに戻って、ultra96v2_picam2_dp_192/vitis_work ディレクトリが選択されているので、Launch ボタンをクリックする。

Vitis IDE が開いた。
PROJECT から Create Application Project をクリックする。

New Application Project ダイアログが開く。

Platform 画面で Create a new platform from hardware (XSA) タブをクリックする。

XSA File の Brows... ボタンをクリックする。

ultra96v2_picam2_dp_192/design_1_wrapper.xsa ファイルを選択し、”開く”ボタンをクリックする。

XSA File が指定され、Platfom name には design_1_wrapper が表示された。

Application Project Details 画面では、Application project name に ultra96v2_picam2_dp を指定した。

Domain 画面。デフォルトのまま。

Templetes 画面では、Empty Application を選択する。

プラットフォームとアプリケーション・プロジェクトが作成された。

ultra96v2_picam2_dp_system -> ultra96v2_picam2_dp -> src を選択して、右クリックし右クリックメニューから Import Sources... を選択する。

Import Sources ダイアログが開く。
lscript.ld 以外のすべてのファイルにチェックを入れて、Finish ボタンをクリックする。

ultra96v2_picam2_dp_system -> ultra96v2_picam2_dp -> src に選択したファイルがインポートされた。

design_1_wrapper プラットフォームを展開して、 platform.spr をクリックする。
design_1_wrapper -> psu_cortexa53_0 -> zynqmp_fsbl -> Board Support Package をクリックする。
Modify BSP Settings ボタンをクリックする。

Board Support Package Settings ダイアログで standalone をクリックすると、stdin, stdout が psu_uart_0 に設定されているのが分かる。
それを psu_uart_1 に変更する。

同様に、standalone _psu_cortex53_0 -> Board Support Package の Modify BSP Settings ボタンをクリックする。
Board Support Package Settings ダイアログで standalone をクリックし、stdin, stdout を psu_uart_1 に変更する。

psu_pmu_0 -> zynqmp_pmufw -> Board Support Package の Modify BSP Settings ボタンをクリックする。
Board Support Package Settings ダイアログで standalone をクリックし、stdin, stdout を psu_uart_1 に変更する。

ultra96v2_picam2_dp_system を右クリックし右クリックメニューから Build Project を選んだらビルドが始まって、成功した。
688cfec7.png


Ultra96V2 + Picam2 と MIPI Adapter Mezzanine を用意し、Ultra96V2 を JTAG モードにして、電源をON した。

Vitis 2020.2 IDE の Assistant ウインドウで ultra96v2_picam2_dp_system -> ultra96v2_picam2_dp -> Debug を右クリックし右クリックメニューから Launch on Hardware (Single Application Debug) を選択した。
ZynqMP がコンフィギュレーションされて、カメラ画像が正常に表示された。成功だ。。。
9605fc9e.jpg


gtkterm の画面を示す。
49baaf0d.png

”IMX219 MIPI sensor to Ultra96-V2 FPGA DisplayPort”をやってみる5”の続き。

Raspberry Pi のソニー製Ver. 2 カメラを Ultra96V2 に接続して、 DisplayPort で表示するプロジェクトをやってみることにしたということで、前回は、Vivado プロジェクトにデバック用の ILA IP が実装されているので、Vivado Analyzer で実機の波形を確認したが波形が出ていて動作していそうだった。今回は、Mini DisplayPort のポートがあるディスプレイを購入したので、カメラ画像が映るかどうか?確かめてみる。

購入したディスプレイはいっとうさんと同じ13.3インチのモバイル・ディスプレイだ。
このディスプレイにはネイティブに Mini DisplayPort の入力端子がある。

Vitis から Ultra96V2 をコンフィギュレーションして、アプリケーション・ソフトウェアを起動した。
ターミナルの表示を示す。
2d380206.png


今度は

、Lane count = 2
Link rate = 540Gbps

になっている。

表示はカメラ画像は映っているようなのだが、チラチラして、画像位置もおかしいようだ。
dc89295b.jpg


う〜ん。何処が悪いのだろうか?
148.5 MHz の HD 解像度のビデオストリーム出力を 100 MHz で出力しているということで、AXI4-Stream to Video Out IP が underflow しているんじゃないだろうか?ということで、Vivado Analyzer で AXI4-Stream to Video Out IP の underflow の Rise をトリガにしてみたが、トリガかからなかった。つまり underflow していない。。。
dce4708e.png


あれ?もしかして、Zynq UltraScale MPSoC の DisplayPort って dp_video_out の hsync と vsync 、 de_out に同期させる必要があったんじゃなかったかな?
(追記)もしかすると、ベアメタルだとDPDMAとか設定されていないから、こちらから供給してもOKとかあるのかな?
(更に追記)PLから入れるクロックと切り替えができると教えてもらった。調べてみると、displayport.c の中で、

XAVBuf_SetAudioVideoClkSrc(&avbuf, XAVBUF_PL_CLK, XAVBUF_PS_CLK);

を実行しているので、PLからのクロックに切り替わっているようだ。

Ultra96のDisplayPortを使用するためのテスト3(XGA解像度のdisplay_cont)
Ultra96のDisplayPortを使用するためのプロジェクトを作成する1(DisplayPort_test_XGA1_sync)

MX219 MIPI sensor to Ultra96-V2 FPGA DisplayPort”では、 dp_video_out_hsync と dp_video_out_vsync が使われていないので、画像が流れるのは、もしかして当たり前なんじゃないだろうか?
5735e500.png

IMX219 MIPI sensor to Ultra96-V2 FPGA DisplayPort”については、いっとうさんがカメラ画像が写ったということなので、同じディスプレイを購入した。今日届くので、試してみようと思う。

MIPI について調べたいと思っていたので、MIPI CS-2 Receiver Subsystem IP を見てみよう。
IMX219 MIPI sensor to Ultra96-V2 FPGA DisplayPort”のブロックデザインでの MIPI CS-2 Receiver Subsystem IP を示す。
7a623a75.png


MIPI CS-2 Receiver Subsystem IP をダブルクリックして設定を確認する。
現在のカメラは Raspberry Pi Camera Ver.2.1 のソニー製のカメラだ。

MIPI CS-2 Receiver Subsystem IP の設定ダイアログの Configuration タブを示す。
544dcb99.png


Pixel Format は RAW10 Serial Data Lanes は 2 レーンだった。
Include Video Format Bridge にチェックが入っている。
DPHY の Line Rate (Mbps) は 912 Mbps だった。
CSI-2 Option は CSI2 Conroller Registor Interface にチェックが入っている。
Line Buffer Depth は 4096 だった。(2021/01/30:追記)動作した Vivado 2019.2 では 512 だった。
VFB Options の Allowed VC は All 、 Pixels Per Clock は 1 、 TUSER Width は 1 だった。

Shared Login タブを示す。
1a17a59d.png


Select whether the MMCM and PLL are included in the core itself or in the example design は Include Shared Logic in core のラジオボタンにチェックが入っている。

Pin Assignment タブを示す。
ad258832.png


Clock Lane や Data Lane のピン配置の設定がある。
このピン配置は、特定の位置のピンに決まっているようで、例えば、 Clock Lane の選択肢を示すが、これらから選択となるようだ。
7cc42ceb.png


Application Example Design タブを示す。
458737f9.png


Target Board は ZCU102 、 FCM Model は LI-IMX274MIPI-FMC V1.0 Single Sensor 、 Design Topology は MIPI Video Pipe Camera to Display だった。

ここで Target Board の選択肢を見てみよう。
6f567666.png


他に SP701 と VCK190 がある。
SP701 は Spartan-7 SP701 FPGA 評価キット で 7 シリーズ用の MIPI CS-2 Receiver Subsystem IP のようだ。
VCK190 は Versal AI コア シリーズ VCK190 評価キット で、Versal 用の MIPI CS-2 Receiver Subsystem IP のようだ。

(2021/01/29:追記)
すべてのバスを展開した MIPI CS-2 Receiver Subsystem IP を示す。
video_out_tdata[15:0] と 16 ビット幅となっている。
a9ad8d8a.png

↑このページのトップヘ