FC2カウンター FPGAの部屋
fc2ブログ

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

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる7

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる6”の続き。

MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみようということで、前回は、ブロック・デザインでのデータの流れを確認した。今回は、ブロック・デザインの各部のストリーム・データを Vivado Analyzer で確認してみよう。

カメラから DDR メモリへのデータパスでは、すでに ILA が入っている。 ila 番号と入っている位置を示す。

ila_0 : mipi_csi2_rx_subsys_st_0 の video_out 出力
ila_1 : v_axi4s_vid_out_0 の vtg_ce, locked, overflow, underflow, fifo_read_level[12:0], status[31:0]
ila_2 : v_demosaic_0 の m_axis_video 出力
ila_3 : v_gamma_lut_0 の m_axis_video 出力


これらの ila のメモリ長を 1024 個から 2048 個に変更した。

DDR メモリから Display Port 出力へのデータパスに 1 つも ILA が入っていないので、 axi_vdma_0 の M_AXI_S2MM 出力に Debug を設定して、system_ila0 を実装した。
Kria_PCAM_75_211018.png

これで、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
Project Summary を示す。相変わらず、 TIming の Slack はマイナスだ。
Kria_PCAM_65_211017.png

Kira_PCAM/Vivado/myporj ディレクトリに design_1_wrapper.xsa が生成された。
Kria_PCAM_66_211017.png

新しい design_1_wrapper.xsa ができたので、 kria_n プラットフォームをアップデートする。
Explorer ウインドウの kria_n プラットフォームを右クリックし右クリックメニューから Update Hardware Specification を選択する。
kria_n プラットフォームがアップデートされた。
Kria_PCAM_67_211017.png

Explorer ウインドウの display_port_appn アプリケーション・プロジェクトをクリックして、ビルド・ボタン(トンカチ・ボタン)をクリックして、ビルドを行った。成功した。
Kria_PCAM_68_211017.png

Assistant ウインドウの display_port_appn_system -> display_port_appn -> Debug を右クリックし右クリックメニューから Run -> Debugger_display_port_appn-Default を選択して、 FPGA をコンフィギュレーションし、アプリケーション・ソフトウェアを起動した。

アプリケーション・ソフトウェアを起動した後で、Vivado の Flow Navigator で PROGRAM AND DEBUG -> Generate Bitstream -> Open Hardware Manager -> Open Target をクリックして、 Auto Connect を選択した。
波形ビューアーが表示された。

ila の波形を表示する用意が整ったので、トリガ信号を決定して、波形を観測した。

ila_0 (mipi_csi2_rx_subsys_st_0 の video_out 出力)(波形ビューアーでは、 ila の番号が +1 されいているようだ)
Kria_PCAM_70_211017.png

ビデオのピクセル・クロックが 74.25 MHz で AXI4-Stream の動作周波数が 150 MHz なので、 TVALID がずっと 1 ではなく、0 がかなり見受けられる。
TUSER も画像の最初のフレームの最初のデータのときに 1 になっているようだ。 

ila_2 (v_demosaic_0 の m_axis_video 出力)
Kria_PCAM_71_211017.png

ここで、 24 ビット・データになっている。

ila_3 (v_gamma_lut_0 の m_axis_video 出力)
Kria_PCAM_72_211017.png

system_ila0 (axi_vdma_0 の M_AXI_S2MM 出力)
Kria_PCAM_73_211017.png

やはり、ビデオのピクセル・クロックが 74.25 MHz で AXI4-Stream の動作周波数が 150 MHz なので、 TREADY がずっと 1 ではなく、0 がかなり見受けられる。途中でずーと 0 になっていた。

波形を拡大してみた。
Kria_PCAM_74_211017.png

TREADY は 1 クロック毎に 1 と 0 を繰り返している。
Kria_PCAM_74_211017.png

画像フィルタは axi_vdma_0 の M_AXI_S2MM 出力に入れてみよう。
  1. 2021年10月18日 04:33 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる6

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる5”の続き。

MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみようということで、前回は、””MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2”で自分でブロック・デザインを修正して作成した XSA ファイルでカメラ画像がディスプレイに表示されるか?を確かめたところ、問題なくカメラ画像をディスプレイに表示することができた。今回は、ブロック・デザインでのデータの流れを確認してみよう。

カメラから DDR メモリへの経路のデータの流れ方を説明する。

1. カメラからの入力を受ける mipi_csi2_rx_subsyst_0 は 16 ビット AXI4-Stream 出力となっている。
2. axis_subset_converter_1 に入って、 tdata[9:2] を抽出して、 8 ビット AXI4-Stream 出力として出力される。
3. v_domosaic_0 に入って、 8 ビット AXI4-Stream 入力が 24 ビット AXI4-Stream 出力として出力される。ここで、デモザイクされる。ベイヤー・パターンが RBG (Red, Blue, Green) パターンに変換される。
4. v_gmma_lut_0 では、 24 ビット AXI4-Stream 入出力となっていて、ガンマ補正が行われる。
5. axi_vdma_0 (S_AXIS_S2MM) で 24 ビット AXI4-Stream 入力データを DDR メモリに書いている。


DDR メモリから Display Port 出力のデータの流れを説明する。

1. DDR メモリからデータを読んで、 axi_vdma_0 (M_AXIS_MM2S) から 24 ビット AXI4-Stream が出力される。
2. axis_suset_converter_0 で 24 ビット AXI4-Stream を以下のように置き換えている。
tdata[15:8],tdata[23:16],tdata[7:0] つまり RBG を BRG に置き換えているようだ。これは、Zynq UltraScale+ MPSoC のDisplayPort のLiveVideo のピクセルデータの色のビットフィールドが BRG だからだろう?(”Zynq UltraScale+ MPSoC のDisplayPort のLiveVideo のピクセルデータ”参照)
3. v_axi4s_vid_out_0 で BRG に変換された 24 ビット AXI4-Stream を入力して、 vid_data[35:0] に変換している。その他、ビデオ用の信号を主力して、 Zynq UltraScale+ MPSoC の dp_live_video に入力している。


Kria_PCAM_5_211009.png
Kria_PCAM_6_211009.png
  1. 2021年10月17日 04:34 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる5

SD カード・ブートモードの Zynq UltraScale+ MPSoC で Vitis を使用してコンフィギュレーション、ソフトウェアを起動する”の続き。

前回は、SD カード・ブートモードでの KV260 での Vitis での FPGA コンフィギュレーション+アプリケーション・ソフトウェアの起動方法を探って、それを解明することができた。今回は、””MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2”で自分でブロック・デザインを修正して作成した XSA ファイルでカメラ画像がディスプレイに表示されるか?を確かめよう。

まずは、新しく kria_n プラットフォームを作成する。
Vitis 2021.1 の File メニューから New -> Platform Project... を選択する。
New Platform Project ダイアログが表示された。最初の画面は Create new platform project だ。
Platform project name に kria_n と入力した。
Kria_PCAM_48_211015.png

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2”で作成した design_1_wrapper.xsa ファイルを指定した。
Kria_PCAM_49_211015.png

Finish ボタンをクリックすると、 kria_n プラットフォーム・プロジェクトが生成された。
Kria_PCAM_50_211015.png

kria_n プラットフォームを元にしたアプリケーション・プロジェクトを作成する。
Vitis 2021.1 の File メニューから New -> Application Project... を選択する。
New Application Project ダイアログが表示された。最初の画面は、 Create a New Application Project だ。
Kria_PCAM_51_211015.png

Platform 画面では、 kria_n プラットフォームを選択した。
Kria_PCAM_52_211015.png

Application Project Details 画面では、 Application project name に diaplay_port_appn を入力した。
現在の画面では、 Show all processors in the hardware specification のチェックボックスにチェックを入れてある。
Kria_PCAM_53_211015.png

Domain 画面。
デフォルトの standalone_domain のままとする。
Kria_PCAM_54_211015.png

Template 画面。
デフォルトの Hello World とした。
Finish ボタンをクリックする。
Kria_PCAM_55_211015.png

Vitis IDE 画面に display_port_appn アプリケーション・プロジェクトが生成された。
Kria_PCAM_56_211015.png

ソース・コードをインポートする。
Explorer の display_port_appn_system -> display_port_appn の src を右クリックし、右クリックメニューから Import Sources... を選択する。
Import Sources ダイアログが表示された。
Browse ボタンをクリックして、 display_port_app/src ディレクトリを選択する。
右のウインドウに display_port_app/src ディレクトリにあるファイルが全て表示されるので、全てのファイルにチェックを入れて、インポートする。
Kria_PCAM_57_211015.png

Explorer の display_port_appn_system -> display_port_appn -> src ディレクトリにソース・コードがインポートされた。
Kria_PCAM_58_211015.png

Explorer の display_port_appn_system -> display_port_appn を右クリックし、右クリックメニューから Properties を選択する。
Properties for display_port_appn ダイアログが開く。
左のウインドウで、 C/C++ Build -> Setiings をクリックする。
Tool Settings タブをクリックし、ARM v8 gcc linker -> Libraries をクリックする。
右の Libraries (-l) に m を追加する。
Kria_PCAM_59_211015.png

Explorer の display_port_appn_system をクリックして、ビルド・ボタンをクリックするとビルドが成功した。
Kria_PCAM_60_211015.png

Assistant ウインドウの display_port_appn_system -> display_port_appn を右クリックし、右クリックメニューから Run -> Run Configurations... を選択する。
Run Configurations ダイアログが表示された。
Main タブ。
Kria_PCAM_61_211015.png

Target Setup タブをクリックして、 Use FSBL flow for initialization のチェックボックスのチェックを外した。
Run ボタンをクリックした。
Kria_PCAM_62_211015.png

FPGA コンフィギュレーションとアプリケーション・ソフトウェアが起動して、カメラ画像がディスプレイに表示された。
成功だ。
  1. 2021年10月15日 04:38 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

SD カード・ブートモードの Zynq UltraScale+ MPSoC で Vitis を使用してコンフィギュレーション、ソフトウェアを起動する

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる4”で Adam Taylor さんが用意してくれた Viits 2021.1 の display_port_app アプリケーション・プロジェクトは動作した。しかし、自分で作成した Vitis のアプリケーション・プロジェクトを動かしてみたい。しかし、KV260 には PS_MODE の切り替えスイッチが無いので、JTAG モードに設定できない。そこで、 KV260 の Vitis での制御方法を探ってみた。

まずは、””MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる4”の Vitis プロジェクトに display_port_app2 アプリケーション・プロジェクトを作成した。これは、 kira プラットフォームをベースとするアプリケーション・プロジェクトだ。つまり、既存の display_port_app と同じアプリケーション・プロジェクトを作成した。
display_port_app の src からソフトウェア・コードもそのまま Import Sources... してある。
Kria_PCAM_42_211014.png

display_port_app2 アプリケーション・プロジェクトをビルドすると、

undefined reference to `pow'

というエラーが出た。
Kria_PCAM_38_211013.png

このバグは、 math ライブラリを追加すると直るようだ。
Explorer の display_port_app2_system -> display_port_app2 を右クリックし、右クリックメニューから Properties を選択する。
Properties for display_port_app2 ダイアログが開く。
左のウインドウで、 C/C++ Build -> Setiings をクリックする。
Tool Settings タブをクリックし、ARM v8 gcc linker -> Libraries をクリックする。
右の Libraries (-l) に m を追加する。
Kria_PCAM_39_211013.png

もう一度、ビルドすると成功した。
Kria_PCAM_40_211013.png

さて、 KV260 から MicroSD カードを抜いて、Vitis の Assistant ウインドウの display_port_app2_system -> display_port_app2 を右クリックし、右クリックメニューから Run -> Launch Hardware (Single Application Debug) を選択して FPGA をコンフィギュレーションし、アプリケーション・ソフトウェアを起動する。

すると Overwrite Boot Mode のダイアログが表示された。
ターゲットが JTAG モードじゃないと言われている。ブートモードのレジスタにオーバーライトするのかと聞かれている。
Yes ボタンをクリックした。
Kria_PCAM_43_211014.png

カメラ画像はディスプレイに表示されなかった。

それじゃ何で、既存の display_port_app はカメラ画像が表示されるんだろう?
Run Configuration を比べてみると、違いがあった。それは、 Target Setup タブで Use FSBL flow for initialization にチェックが入っているかどうか?だった。
私の作った display_port_app2 は Use FSBL flow for initialization にチェックが入っている。
Kria_PCAM_44_211014.png

既存の display_port_app は Use FSBL flow for initialization のチェックが外れている。
Kria_PCAM_45_211014.png

display_port_app2 も Use FSBL flow for initialization のチェックを外した。
Kria_PCAM_47_211014.png

Use FSBL flow for initialization のチェックを外した後で、Apply ボタンをクリックして設定を反映し、 Run ボタンをクリックして、FPGA をコンフィギュレーションし、アプリケーション・ソフトウェアを起動したところ、 Overwrite Boot Mode のダイアログが表示されずにカメラ画像がディスプレイに表示された。
これだった。。。

考えてみれば FSBL が SD カード・モードの時は走って、 JTAG の時は走らないので、 SD カード・モードの時は FSBL を起動する必要が無いのではないだろうか?
それでオーバーライトと言われちゃったんだな。。。一つ勉強になった。 Adam Taylor さん、ありがとうございます。
  1. 2021年10月14日 04:39 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる4

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる3”の続き。

MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみるということで、前回は、ハードウェアをエクスポートして、 XSA ファイルを生成した。そして、Vitis 2021.1 を起動して、プロジェクトをインポートした。今回は、Vitis のプロジェクトをビルドして、KV260 でカメラ画像をディスプレイに表示されることを確認する。そして、自分で修正した XSA ファイルでアップデートして、もう一度、KV260 でカメラ画像をディスプレイに表示されることを確認する。

Explorer で display_port_app_system をクリックし、ビルド・ボタンをクリックしてビルドを行った。
display_port_app.elf が生成された。
Kria_PCAM_23_211010.png

KV260 に Pcam5C を接続した。
MicroSD カードは抜いた。
Kria_PCAM_34_211013.jpg

Assistant ウインドウで display_port_app_system -> display_port_app -> Debug を右クリックし、右クリックメニューから Run -> Debugger_display_port_app-Default (Single Application Debug) を選択して、ビットファイルのダウンロードとアプリケーション・ソフトウェアの起動を行った。
Kria_PCAM_31_211012.png

ディスプレイ・ポートに接続したディスプレイにカメラ画像が表示された。
Kria_PCAM_35_211013.jpg
  1. 2021年10月13日 05:03 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる3

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2”の続き。

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみるということで、前回は、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハードウェアをエクスポートして、 XSA ファイルを生成する。そして、Vitis 2021.1 を起動して、プロジェクトをインポートする。

最初にハードウェアをエクスポートしよう。
File メニューから Export -> Export Hardware... を選択する。
Export Hardware Platform ダイアログが開く。
Next > ボタンをクリックする。

Output 画面が開く。
Include bitstream のラジオボタンをチェックして、Next > ボタンをクリックする。
Kria_PCAM_14_211009.png

Files 画面が開く。
XSA ファイルの名前やエクスポートするディレクトリを指定する。
今回はデフォルトのままとする。
Kria_PCAM_15_211009.png

Exporting Hardware Platform 画面が開く。
Finish ボタンをクリックする。

Kira_PCAM/Vivado/myproj ディレクトリに design_1_wrapper.xsa が生成された。
Kria_PCAM_16_211009.png

Vitis 2021.1 を起動するのだが、 Kira_PCAM/Vitis ディレクトリには、 vitis_export_archive.ide.zip があるだけだ。
この ZIP ファイルは Vitis のプロジェクトをエクスポートしたファイルのようだ。
Kria_PCAM_17_211010.png

Vivado 2021.1 から Vitis 2021.1 を起動する。
Vivado 2021.1 の Tools メニューから Launch Vitis IDE を選択して、 Vitis 2021.1 を起動する。
Vitis IDE Launcher が起動する。
Kira_PCAM/Vitis ディレクトリの下に vitis_work ディレクトリを作成して、それを指定した。
Kria_PCAM_18_211010.png

Vitis 2021.1 が起動した。
Import Project をクリックする。
Kria_PCAM_19_211010.png

Import Projects ダイアログが開いた。
Viits project exported zip file のラジオボタンをクリックする。(デフォルト)
Kria_PCAM_20_211010.png

Import Vitis Projects でプロジェクトを選択するが全て選択した状態にした。
Finish ボタンをクリックする。
Kria_PCAM_21_211010.png

Vitis にプロジェクトがインポートされた。
Kria_PCAM_22_211010.png
  1. 2021年10月12日 05:22 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる1”の続き。

MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみるということで、前回は、Vivado ディレクトリの bd.tcl を実行して、design_1 プロジェクトを作成し、 io.xdc をインポートした。今回は、論理合成、インプリメンテーション、ビットストリームの生成を行った。

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

マイナス・スラックが出ている。
Flow Navigator から Open Implementation Design をクリックして、 Implementation Design を開いた。
Kria_PCAM_13_211009.png

Inter-Clock Paths で clk_out2_design_1_clk_wiz_1_0 to clk_out1_design_1_clk_wiz_0_0_1 がタイミング・エラーのようだ。
Kria_PCAM_11_211009.png

一番上のパスは、design_1_i/rst_ps8_0_100M/U0/PR_OUT_DFF[0].FDRE_PER_replica/C から design_1_i/v_axi4s_vid_out_0/inst/SYNC_INST/vtg_lag_reg[10]/R へのパスがタイミング違反だった。

Reports メニューから Timing -> Report CDC... を選択して、 safe かどうかを確認する。
Unsafe が 5 個あった。
Kria_PCAM_12_211009.png

一番上の Unsafe は design_1_i/rst_ps8_0_100M/U0/ACTIVE_LOW_PR_OUT_DFF[0].FDRE_PER_N/C から design_1_i/v_tc_0/U0/U_VIDEO_CTRL/AXI4_LITE_INTERFACE.read_ack_d_reg[0]/R へのパスが Unsafe だそうだ。
このままで、あまり好ましくないので、ブロック・デザインの修正を試みる。

clk_wiz1 の clk_out2 は 150 MHz で、 clk_wiz_0 の clk_out1 は 74.250 MHz の設定で実際の周波数が 74.25299 MHz だった。
clk_wiz1 の clk_out2 は 全体のデータパスの駆動用クロックで、 clk_wiz_0 の clk_out1 は ビデオ用のクロックだ。
Kria_PCAM_24_211011.png
Kria_PCAM_25_211011.png

ブロック・デザインを見ると、 rst_ps8_0_100M のリセットが v_tc_0 の resetn と v_axi4s_vid_out_0 の vid_io_out_reset に行っているのが原因だと思う。
Kria_PCAM_26_211011.png

Processor _system_reset を追加して、 clk_wiz_0 の clk_out1 を slow_sync_clk に接続した。その proc_sys_reset_74_25M から v_tc_0 の resetn と v_axi4s_vid_out_0 の vid_io_out_reset に接続した。
Kria_PCAM_27_211011.png

これでもう一度、論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。
Kria_PCAM_28_211011.png

値は少なくなったが、わずかにマイナス・スラックが出ている。
Flow Navigator から Open Implementation Design をクリックして、 Implementation Design を開いた。

やはり、Inter-Clock Paths で clk_out2_design_1_clk_wiz_1_0 to clk_out1_design_1_clk_wiz_0_0_1 がタイミング・エラーだった。
ソースは design_1_i/v_axi4s_vid_out_0/inst/COUPLER_INST/generate_async_fifo.FIFO_INST/XPM_FIFO_ASYNC_INST/gnuram_async_fifo.xpm_fifo_base_inst/gof.overflow_i_reg/C で ディスティネーションは hidden ってどういうこと?
Kria_PCAM_29_211011.png

Report CDC も Unsafe が 1 個だったが、同様だ。
Kria_PCAM_30_211011.png

hidden じゃ直せないので、そのままにする。
  1. 2021年10月11日 05:09 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0
»