FC2カウンター FPGAの部屋 KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する8
fc2ブログ

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

FPGAの部屋

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

KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する8

KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する7”の続き。

今までやってきた KR260 の Vitis アクセラレーション・プラットホーム作成を踏まえて、DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成しようということで、前回は、KR260 に MicroSD カードを挿入して Petalinux 2022.1 を起動した。Petalinux に必要なモジュールをインストールして、環境を整えた。今回は、Vitis ディレクトリ構造を作成して、xsct を使用したデバイスツリー・オーバレイを作成し、pl.dtsi 上の動作させる IP の compatible を generic-uio に変更して、コンパイルして pl.dtbo を生成した。

今回は、”KR260 で Vitis アクセラレーション・プラットフォームを作成する6”と”Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる2”を参照している。

KR260/kr260_cam_disp_platform ディレクトリで kr260_cam_disp_platform ディレクトリを作成した。
KR260/kr260_cam_disp_platform/kr260_cam_disp_platform ディレクトリの下に pfm ディレクトリを作成した。
KR260/kr260_cam_disp_platform/kr260_cam_disp_platform/pfm ディレクトリの下に boot, sd_dir ディレクトリを作成した。
mkdir -p kr260_cam_disp_platform
cd kr260_cam_disp_platform
mkdir -p pfm
cd pfm
mkdir -p boot
mkdir -p sd_dir

kr260_cam_disp_68_230414.png

KR260/kr260_cam_disp_platform/linux_os/images/linux ディレクトリの bl31.elf, pmufw.elf, system-zynqmp-sck-kr-g-revB.dtb, u-boot.elf, zynqmp_fsbl.elf のファイルを
kr260_cam_disp_69_230414.png

KR260/kr260_cam_disp_platform/kr260_cam_disp_platform/pfm/boot ディレクトリにコピーした。
kr260_cam_disp_70_230414.png

ただし、system-zynqmp-sck-kr-g-revB.dtb は system.dtb に名前を変更した。

KR260/kr260_cam_disp_platform/linux_os/images/linux ディレクトリで sysroots ディレクトリを KR260/kr260_cam_disp_platform/kr260_cam_disp_platform ディレクトリに展開した。
cd ../../linux_os/images/linux/
./sdk.sh -d ../../../kr260_cam_disp_platform/

kr260_cam_disp_71_230414.png

KR260/kr260_cam_disp_platform/kr260_cam_disp_platform/sysroots ディレクトリが生成され、その下に cortexa72-cortexa53-xilinx-linux, x86_64-petalinux-linux ディレクトリが生成された。
kr260_cam_disp_72_230414.png

xsct コマンドを使用してデバイスツリー・オーバレイの pl.dtsi と pl.dtbo を作成する

KR260/kr260_cam_disp_platform/kr260_cam_disp_platform ディレクトリで xsct コマンドを実行した。
cd ../../../kr260_cam_disp_platform/
xsct
hsi::open_hw_design ../kr260_cam_disp/kr260_cam_disp.xsa
createdts -hw ../kr260_cam_disp/kr260_cam_disp.xsa -zocl -platform-name kr260_cam_disp -git-branch xlnx_rel_v2022.1 -overlay -compile -out ./dtg_output
exit

kr260_cam_disp_73_230414.png

KR260/kr260_cam_disp_platform/kr260_cam_disp_platform/dtg_output/dtg_output/kr260_cam_disp/psu_cortexa53_0/device_tree_domain/bsp ディレクトリに pl.dtsi が生成された。
kr260_cam_disp_74_230414.png

kr260_cam_disp_75_230414.png

pl.dtsi で動作させる可能性のある IP の compatible を generic-uio に変更した。
kr260_cam_disp_76_230414.png

pl.dtsi を示す。

/*
 * CAUTION: This file is automatically generated by Xilinx.
 * Version: XSCT 2022.1
 * Today is: Fri Apr 14 04:56:06 2023
 */


/dts-v1/;
/plugin/;
/ {
    fragment@0 {
        target = <&fpga_full>;
        overlay0: __overlay__ {
            #address-cells = <2>;
            #size-cells = <2>;
            firmware-name = "kr260_cam_disp.bit.bin";
            resets = <&zynqmp_reset 116>, <&zynqmp_reset 117>, <&zynqmp_reset 118>, <&zynqmp_reset 119>;
        };
    };
    fragment@1 {
        target = <&amba>;
        overlay1: __overlay__ {
            afi0: afi0 {
                compatible = "xlnx,afi-fpga";
                config-afi = < 0 0>, <1 0>, <2 0>, <3 0>, <4 0>, <5 0>, <6 0>, <7 0>, <8 0>, <9 0>, <10 0>, <11 0>, <12 0>, <13 0>, <14 0xa00>, <15 0x000>;
            };
            clocking0: clocking0 {
                #clock-cells = <0>;
                assigned-clock-rates = <99999001>;
                assigned-clocks = <&zynqmp_clk 71>;
                clock-output-names = "fabric_clk";
                clocks = <&zynqmp_clk 71>;
                compatible = "xlnx,fclk";
            };
            clocking1: clocking1 {
                #clock-cells = <0>;
                assigned-clock-rates = <23809286>;
                assigned-clocks = <&zynqmp_clk 72>;
                clock-output-names = "fabric_clk";
                clocks = <&zynqmp_clk 72>;
                compatible = "xlnx,fclk";
            };
        };
    };
    fragment@2 {
        target = <&amba>;
        overlay2: __overlay__ {
            #address-cells = <2>;
            #size-cells = <2>;
            axi_intc_0: interrupt-controller@80000000 {
                #interrupt-cells = <2>;
                clock-names = "s_axi_aclk";
                clocks = <&misc_clk_0>;
                compatible = "generic-uio";
                interrupt-controller ;
                interrupt-names = "irq";
                interrupt-parent = <&gic>;
                interrupts = <0 89 4>;
                reg = <0x0 0x80000000 0x0 0x10000>;
                xlnx,kind-of-intr = <0x1>;
                xlnx,num-intr-inputs = <0x20>;
            };
            misc_clk_0: misc_clk_0 {
                #clock-cells = <0>;
                clock-frequency = <199998000>;
                compatible = "fixed-clock";
            };
            camera_axi_iic_0: i2c@80010000 {
                #address-cells = <1>;
                #size-cells = <0>;
                clock-names = "s_axi_aclk";
                clocks = <&misc_clk_0>;
                compatible = "generic-uio";
                reg = <0x0 0x80010000 0x0 0x10000>;
            };
            camera_mt9d111_inf_axis_0: mt9d111_inf_axis@80020000 {
                /* This is a place holder node for a custom IP, user may need to update the entries */
                clock-names = "s_axi_lite_aclk", "m_axis_aclk";
                clocks = <&misc_clk_0>, <&misc_clk_0>;
                compatible = "generic-uio";
                reg = <0x0 0x80020000 0x0 0x10000>;
            };
            camera_vflip_dma_write2_0: vflip_dma_write2@80030000 {
                /* This is a place holder node for a custom IP, user may need to update the entries */
                clock-names = "ap_clk";
                clocks = <&misc_clk_0>;
                compatible = "generic-uio";
                reg = <0x0 0x80030000 0x0 0x10000>;
                xlnx,s-axi-axilites-addr-width = <0x6>;
                xlnx,s-axi-axilites-data-width = <0x20>;
            };
            display_axi_gpio_0: gpio@80040000 {
                #gpio-cells = <2>;
                clock-names = "s_axi_aclk";
                clocks = <&misc_clk_0>;
                compatible = "generic-uio";
                gpio-controller ;
                reg = <0x0 0x80040000 0x0 0x10000>;
                xlnx,all-inputs = <0x0>;
                xlnx,all-inputs-2 = <0x0>;
                xlnx,all-outputs = <0x1>;
                xlnx,all-outputs-2 = <0x0>;
                xlnx,dout-default = <0x00000000>;
                xlnx,dout-default-2 = <0x00000000>;
                xlnx,gpio-width = <0x1>;
                xlnx,gpio2-width = <0x20>;
                xlnx,interrupt-present = <0x0>;
                xlnx,is-dual = <0x0>;
                xlnx,tri-default = <0xFFFFFFFF>;
                xlnx,tri-default-2 = <0xFFFFFFFF>;
            };
            display_disp_dmar_axis_0: disp_dmar_axis@80050000 {
                /* This is a place holder node for a custom IP, user may need to update the entries */
                clock-names = "ap_clk";
                clocks = <&zynqmp_clk 71>;
                compatible = "generic-uio";
                reg = <0x0 0x80050000 0x0 0x10000>;
                xlnx,s-axi-axilites-addr-width = <0x6>;
                xlnx,s-axi-axilites-data-width = <0x20>;
            };
            zyxclmm_drm {
                compatible = "xlnx,zocl";
                interrupts-extended = <&axi_intc_0 0 4>, <&axi_intc_0 1 4>, <&axi_intc_0 2 4>, <&axi_intc_0 3 4>, <&axi_intc_0 4 4>, <&axi_intc_0 5 4>, <&axi_intc_0 6 4>, <&axi_intc_0 7 4>, <&axi_intc_0 8 4>, <&axi_intc_0 9 4>,
<&axi_intc_0 10 4>, <&axi_intc_0 11 4>, <&axi_intc_0 12 4>, <&axi_intc_0 13 4>, <&axi_intc_0 14 4>,
<&axi_intc_0 15 4>, <&axi_intc_0 16 4>, <&axi_intc_0 17 4>, <&axi_intc_0 18 4>, <&axi_intc_0 19 4>,
<&axi_intc_0 20 4>, <&axi_intc_0 21 4>, <&axi_intc_0 22 4>, <&axi_intc_0 23 4>, <&axi_intc_0 24 4>,
<&axi_intc_0 25 4>, <&axi_intc_0 26 4>, <&axi_intc_0 27 4>, <&axi_intc_0 28 4>, <&axi_intc_0 29 4>,
<&axi_intc_0 30 4>, <&axi_intc_0 31 4 >;
            };
        };
    };
};


変更した pl.dtsi をコンパイルして pl.dtbo を生成する。
cd dtg_output/dtg_output/kr260_cam_disp/psu_cortexa53_0/device_tree_domain/bsp
dtc -@ -O dtb -o pl.dtbo pl.dtsi
cd ../../../../../..

kr260_cam_disp_77_230414.png

pl.dtbo が生成された。
kr260_cam_disp_78_230414.png
  1. 2023年04月15日 05:22 |
  2. KR260
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5908-7ab62d97
この記事にトラックバックする(FC2ブログユーザー)