DFX(Dynamic Function eXchange)

DFX をやってみよう1(DFX を調べる1)
DFX(Dynamic Function eXchange)をやってみようと思う。初めに DFX とはどんなものか?を調べてみよう。
DFX をやってみよう2(チュートリアル例の説明)
前回は、DFX を調べたのだが、ただ調べていても頭に入らないので、実例をやってみて、その都度マニュアルを調べてみることにしようと思う。
今回は、Vivado 2021.1 から解禁されたブロック・デザイン・コンテナを使用した DFX デザインをやってみたい。具体的には、”Vivado Design Suite User Guide Dynamic Function eXchange UG909 (v2021.1) June 30, 2021”の”Chapter 4 Vivado Project Flow”の 94 ページの”IP Integrator Using Block Design Containers”を参考にやっていきたい。
DFX をやってみよう2(DMA_pow2 IP の作成)
”DFX をやってみよう2(チュートリアル例の説明)”に書いたように、”Vitis HLS 2021.1 を使ってみる(DMA_pow2)”の IP の入出力ポートを少々変更する。
DFX をやってみよう3(DMA_square_root8 IP の作成1)
前回は、DMA_pow2 IP を Vitis HLS 2021.1 で作成した。今回は、8 ビットの整数の平方根を計算する DMA_square_root8 を作成してみよう。
DFX をやってみよう4(DMA_square_root8 IP の作成2)
前回は、8 ビットの整数の平方根を計算する DMA_square_root8 を作成するということで、ソースコードとテストベンチ・コードを貼って、Vitis HLS 2021.1 で DMA_square_root8 プロジェクトを作成した。
今回は、その C シミュレーション、 C コードの合成、 C/RTL 協調シミュレーション、Export RTL、 インプリメンテーションを行っていこう。
DFX をやってみよう5(Vivado 2021.1 で DFX_test プロジェクトを作成)
”DFX をやってみよう2(DMA_pow2 IP の作成)”と”DFX をやってみよう3(DMA_square_root8 IP の作成1)”、”DFX をやってみよう4(DMA_square_root8 IP の作成2)”で DFX で入れ替える 2 つの IP (DMA_pow2 IP、 DMA_square_root8 IP)ができたので、いよいよ Vivado 2021.1 でプロジェクトを作ってブロック・デザイン・コンテナによる DFX を試してみよう。なお、FPGA ボードは ZYBO Z7-20 を使用する。使用する OS は Ubuntu 18.04 LTS だ。
DFX をやってみよう6(ブロック・デザイン・コンテナと DFX イネーブル)
前回は、DFX で入れ替える 2 つの IP (DMA_pow2 IP、 DMA_square_root8 IP)ができたので、Vivado 2021.1 の DFX_test プロジェクトを作成してブロック・デザインを作成した。
今回は、DMA_pow2_0 にブロック・デザイン・コンテナを設定し、DFX をイネーブルしてみよう。
DFX をやってみよう7(2 つ目の RM を設定)
前回は、DMA_pow2_0 にブロック・デザイン・コンテナを設定し、DFX をイネーブルした。今回は、リコンフィギャラブル・モジュール(RM)として、DMA_square_root8 IP を設定してみよう。
DFX をやってみよう8(Generate Output Products と Dynamic Function eXchange Wizard)
前回は、リコンフィギャラブル・モジュール(RM)として、DMA_square_root8 IP を設定した。今回は、Generate Output Products と Dynamic Function eXchange Wizard を実行しよう。
DFX をやってみよう9(Pblock の設定)
前回は、Generate Output Products と Dynamic Function eXchange Wizard を実行した。今回は、リコンフィギャラブル・パーティション(RP)を指定するために Pblock を設定する。
DFX をやってみよう10(インプリメンテーションとビット・ファイル、パーシャル・ビット・ファイルの生成)
前回は、リコンフィギャラブル・パーティション(RP)を指定するために Pblock を設定した。今回は、インプリメンテーションを行って、ビット・ファイルとパーシャル・ビット・ファイルの生成を生成する。
DFX をやってみよう11(ハードウェアのエクスポートとフル・ビット・ファイルの動作確認)
前回は、インプリメンテーションを行って、ビット・ファイルとパーシャル・ビット・ファイルを 生成することができた。今回は、ハードウェアをエクスポートして、Vitis 2021.1 を立ち上げて、フル・ビット・ファイルを ZYBO Z7-20 にコンフィギュレーションし、実機動作を確認する。
DFX をやってみよう12(DMA_square_root8 の実行)
前回は、ハードウェアをエクスポートして、Vitis 2021.1 を立ち上げて、フル・ビット・ファイルを ZYBO Z7-20 にコンフィギュレーションし、実機動作を確認できた。今回は、DMA_pow2 IP の代わりに DMA_square_root8 IP のフル・ビット・ファイルの動作を確認してから、パーシャル・ビット・ファイルをコンフィグレーションして動作を確認する。
うまく行かなかった。
DFX をやってみよう13(Blink1 と Blink05)
前回は、DMA_pow2 IP の代わりに DMA_square_root8 IP のフル・ビット・ファイルの動作を確認してから、パーシャル・ビット・ファイルをコンフィグレーションして動作を確認したが、パーシャル・ビット・ファイルをコンフィグ レーションをしても動作しなかった。今回は、気を取り直して、ソフトウェアを使用しないハードウェアだけをDFX するために Blink1 と Blink05 を作成する。
DFX をやってみよう14(Blink1 と Blink05 を使用した DFX_test2 プロジェクトを作成し、DFXを設定)
前回は、ソフトウェアを使用しないハードウェアだけをDFX するために Vitis HLS 2021.1 で Blink1 と Blink05 を作成した。今回は、Vivado 2021.1 で DFX_test2 プロジェクトを作成し、Blink1, DMA_pow2 IP を使用して、DFX_test2 プロジェクトを作成した。 Blink1 をブロック・デザイン・コンテナにして、DFX を設定し Blink05 を リコンフィギャブル・モジュール(RM)として追加した。
DFX をやってみよう15(Dynamic Function eXchange Wizard と I/O Planing 、 Pblock の指定)
前回は、Vivado 2021.1 で DFX_test2 プロジェクトを作成し、Blink1, DMA_pow2 IP を使用して、DFX_test2 プロジェクトを作成した。 Blink1 をブロック・デザイン・コンテナにして、DFX を設定し Blink05 を リコンフィギャブル・モジュール(RM)として追加した。
今回は、Generate Output Products を実行して、Dynamic Function eXchange Wizard を実行してから、 Synthesized Design で I/O Planing 、 Pblock の指定を行う。
DFX をやってみよう16(DFX の実行と Vitis のソフトウェア実行の影響を調べる)
前回は、Generate Output Products を実行して、Dynamic Function eXchange Wizard を実行してから、 Synthesized Design で I/O Planing 、 Pblock の指定を行った。今回は、 DFX のコンフィギュレーションを確かめて、Vitis のソフトウェアを実行する際の DFX の影響を調べてみよう。
DFX成功した。DFX によるソフトウェア実行の影響は無いようだ。

DFX Decuopler について
今回のブログでは、 DFX Decuopler について学んでいこう。
DFX AXI Shutdown Manager について
”DFX Decuopler について”に続いて、DFX AXI Shutdown Manager について勉強していこう。

AXI Master インターフェースを含む IP を DFX する1
DFX Coupler と DFX Shutdown Manager をブログで勉強してきたが、その内の DFX Coupler を使用して、前回 DFX に失敗した DMA_pow2 IP と DMA_square_root8 IP の DFX をやっていこう。
AXI Master インターフェースを含む IP を DFX する2
DFX Coupler と DFX Shutdown Manager をブログで勉強してきたが、その内の DFX Coupler を使用して、前回 DFX に失敗した DMA_pow2 IP と DMA_square_root8 IP の DFX をやっていこうということで、前回は、Vivado 2021.1 で ZYBO Z7-20 の DFX_test プロジェクトを作成し、 DMA_pow2 IP と DMA_square_root8 IP の DFX のブロック・デザインを作成して、ビット・ファイルを作成できた。そして、ハードウェアをエクスポートして、 XSA ファイルを作成した。
今回は、Vitis 2021.1 でプラットフォームとアプリケーション・プロジェクトを作成し、DMA_pow2 と DMA_square_root8 の DFX を実機で確かめてみよう。
AXI4 Master インターフェースを持つブロック・デザイン・コンテナの DFX が成功した。
やった。。。IDAさんありがとうございました

画像フィルタを DFX する1(概要)
”AXI Master インターフェースを含む IP を DFX する2”で AXI4 Master インターフェースの IP の 2 乗IP と平方根 IP を DFX で切り替えることができた。
今回は AXI4-Stream 入出力のフィルタ IP を切り替えてみよう。
画像フィルタを DFX する2(DFX_filter_test プロジェクト1)
前回は、 AXI4-Stream 入出力のフィルタ IP を切り替えてみようということで、カメラ表示システムのフィルタを DFX で切り替えるシステムを説明した。今回は、Vivado 2021.1 で作成した DFX のベースとなる DFX_filter_test プロジェクトを紹介する。
画像フィルタを DFX する3(DFX_filter_test プロジェクト2)
前回は、Vivado 2021.1 で作成した DFX のベースとなる DFX_filter_test プロジェクトを作成し、ブロック・デザインを作成して論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、ハードウェアをエクスポート し、Vitis 2021.1 を起動して、プラットフォームとアプリケーション・プロジェクトを作成する。そして、アプリケーション・ソフトウェアを記述してビルドし、ZYBO Z7-20 の実機で確認する。
成功だ。
画像フィルタを DFX する4(DFX_filter_test プロジェクト3)
前回は、、ハードウェアをエクスポートし、Vitis 2021.1 を起動して、プラットフォームとアプリケーション・プロジェクトを作成する。そして、アプリケーション・ソフトウェアを記述してビルドし、ZYBO Z7-20 の実機で確認したところ、動作した。今回は、DFX のために、ビデオ側の DMA2axis IP の動作を一度止めて、再起動した時にカメラ画像が表示されるのか?を検証する。
成功した。
画像フィルタを DFX する5(through_axis IP 1)
前回は、DFX のために、ビデオ側の DMA2axis IP の動作を一度止めて、再起動した時にカメラ画像が表示されることを確認できた。今回は、DFX のリコンフィギャブル・モジュール(RM)として、AXI4-Stream の通過 IP の through_axis を作成する。この IP は AXI4-Stream のデータをそのまま AXI4-Stream に出力する。Vitis HLS 2021.1 の through_axis プロジェクトを示し、ソースコードとテストベンチ・コードを貼った。
画像フィルタを DFX する6(through_axis IP 2)
前回は、DFX のリコンフィギャブル・モジュール(RM)として、AXI4-Stream の通過 IP の through_axis を作成する。この IP は AXI4-Stream のデータをそのまま AXI4-Stream に出力する。Vitis HLS 2021.1 の through_axis プロジェクトを示し、ソースコードとテストベンチ・コードを貼って、 C シミュレーションを行った。今回は、その through_axis の Vitis HLS プロジェクトで C コードの合成、 C/RTL 協調シミュレーション、 Export RTL 、 Run Implementation を行う。
画像フィルタを DFX する7(lap_filter_axis IP 1)
前回は、AXI4-Stream インターフェースの通過するだけの IP 、 through_axis を作成した。これはカメラ画像を表示するのに使用する。今回は、 AXI4-Stream インターフェースのラプラシアン・フィルタを作成する。ソースコードとテストベンチ・コードを貼って、 C シミュレーションを行った。
画像フィルタを DFX する8(lap_filter_axis IP 2)
前回は、AXI4-Stream インターフェースのラプラシアン・フィルタを作成するということで、ソースコードとテストベンチ・コードを貼って、 C シミュレーションを行った。今回は、C コードの合成、 C/RTL 協調シミュレーション、 Export RTL 、 Run Implementation を行う。
画像フィルタを DFX する9(sobel_filter_axis IP 1)
前回は、AXI4-Stream インターフェースのラプラシアン・フィルタを作成するということで、 C コードの合成、 C/RTL 協調シミュレーション、 Export RTL 、 Run Implementation を行った。
今回は DFX で切り替えるフィルタの第 2 段として AXI4-Stream インターフェースのソーベル・フィルタを作成する。
画像フィルタを DFX する10(sobel_filter_axis IP 2)
前回は、 DFX で切り替えるフィルタの第 2 段として AXI4-Stream インターフェースのソーベル・フィルタを作成するということで、ソースコードとテストベンチ・コードを貼って、 Vitis HLS 2021.1 の sobel_filter_axis3 プロジェクトを作成し、OpenCV を使用できるように設定を行った。今回は、 C シミュレーション、 C コードの合成、 C/RTL 協調シミュレーション、 Export RTL 、 Run Implementation を行う。
画像フィルタを DFX する11(DFX_filter_test プロジェクト4)
前回で、通過 IP 、ラプラシアン・フィルタ IP 、ソーベル・フィルタ IP の 3 個の AXI4-Stream 入出力、 AXI4-Lite インターフェースのレジスタ設定の IP の作成が完了した。今回は、その 3 個の IP を DFX で切り替えるべく Vivado 2021.1 の DFX_filter_test プロジェクトに追加する。
画像フィルタを DFX する12(DFX_filter_test プロジェクト5)
前回は、通過 IP 、ラプラシアン・フィルタ IP 、ソーベル・フィルタ IP の 3 個の IP を DFX で切り替えるべく Vivado 2021.1 の DFX_filter_test プロジェクトに追加するということで、ブロック・デザイン・コンテナを作成し、RM を設定した。今回は、Generate Output Products、 Dynamic Function eXchange Wizard 、 Pblock の設定、ビットストリームの生成を行った。
画像フィルタを DFX する13(DFX_filter_test プロジェクト6)
前回は、通過 IP 、ラプラシアン・フィルタ IP 、ソーベル・フィルタ IP の 3 個の IP を DFX で切り替えるべく Vivado 2021.1 の DFX_filter_test プロジェクトに追加するということで、Generate Output Products、 Dynamic Function eXchange Wizard 、 Pblock の設定、ビットストリームの生成を行った。今回は、ハードウェアをエクスポートし、Vitis を立ちあげて、ディスプレイに表示した。その後で、表示を止めて再表示させた。再表示はできたのだが、画面の表示がおかしくなってしまった。
画像フィルタを DFX する14(DFX_filter_test プロジェクト7)
回は、通過 IP 、ラプラシアン・フィルタ IP 、ソーベル・フィルタ IP の 3 個の IP を DFX で切り替えるべく Vivado 2021.1 の DFX_filter_test プロジェクトに追加するということで、 Vitis 2021.1 を起動して、プラットフォームとアプリケーション・プロジェクトを作成し、ソースコードを作成した。それをビルドして実機で確認することができた。今回は、そのプロジェク トで DFX として、ラプラシアン・フィルタとソーベル・フィルタを切り替えて動作させてみよう。
手動での DFX はうまく行った。

Zynq の PCAP を使用して DFX する1(情報収集)
いままで、DFX をやってきたが、Vivado で RM をリコンフィギュレーションしてきた。この辺りでソフトウェアから DFX を制御したいということで、Zynq 系で使用できるプロセッサ コンフィギュレーション アクセス ポート (PCAP)について情報収集していこう。
Zynq の PCAP を使用して DFX する2(.bin ファイルの生成)
前回は、ソフトウェアから DFX を制御したいということで、Zynq 系で使用できるプロセッサ コンフィギュレーション アクセス ポート (PCAP)について情報収集を行った。今回は、その内の”Partial Reconfiguration by PCAP: bitstream size not an integer of words?”を参考にして、パーシャル・ビット・ファイルから bin ファイルを生成する。
Zynq の PCAP を使用して DFX する3(embeddedsw/XilinxProcessorIPLib/drivers/devcfg/examples/)
前回は、ソフトウェアから DFX を制御したいということで、”Partial Reconfiguration by PCAP: bitstream size not an integer of words?”を参考にして、パーシャル・ビット・ファイルから bin ファイルを生成した。今回は、”embeddedsw/XilinxProcessorIPLib/drivers/devcfg/examples/”に良いサンプルが あったので、その内の xdevcfg_selftest_example.c と xdevcfg_polled_example.c をやってみる。
Zynq の PCAP を使用して DFX する3(xdevcfg_polled_example.c をマージする1)
前回は、”embeddedsw/XilinxProcessorIPLib/drivers /devcfg/examples/”に良いサンプルがあったので、その内の xdevcfg_selftest_example.c と xdevcfg_polled_example.c をやってみた。今回は、その内の xdevcfg_polled_example.c を”画像フィルタを DFX する14(DFX_filter_test プロジェクト7)”の DFX_filter_test.c にマージして DFX してみよう。
DFX は成功したようだが?表示画像はラプラシアン・フィルタのようだが、止まっていて、カメラの前で手を振っても画像に反映されない。
Zynq の PCAP を使用して DFX する4(Vivado でデバッグできない)
前回は、 xdevcfg_polled_example.c を”画像フィルタを DFX する14(DFX_filter_test プロジェクト7)”の DFX_filter_test.c にマージして DFXできたようなのだが、カメラが動作しなくなった。今回は、カメラが動作しない原因を Vivado で Debug を設定し、System ILA IP を実装して確かめてみようとしたが失敗した。

Vitis でソフトウェアを起動する Vivado ML 2021.1 の DFX ではデバッグできない?
前回は、DFX の設定されていない DFX_filter_test2 プロジェクトと DFX の入っている DFX_filter_test_211 プロジェクトの dbg_hub の接続の違いを比べて、Debug 設定ではなく、直接 System_ILA を Add IP して接続し、今までと違いがあるか?を調べたが、DFX の入っているプロジェクトでは、デバッグできなかった。今回は、IDA さんに DFX でのデバッグのやり方を教えていただいたので、そのやり方でデバッグをやってみよう。



inserted by FC2 system