FC2カウンター FPGAの部屋 2020年05月04日
FC2ブログ

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

FPGAの部屋

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

Vitis で作られたアクセラレーション・プラットフォームのハードウェアを自作の制御用ソフトウェアで制御する1

Vitis のアクセラレーション・プラットフォームの IP は独自の制御用ソフトウェアで制御できた。そして、そのアクセラレーション・プラットフォーム上のアクセラレーション・ハードウェアは Vitis 上で作った OpenCL のホスト・アプリケーションで制御できた。しかし、その 2 つを合わせて制御することが私にとっては難しい。そこで、独自の制御用ソフトウェアでアクセラレーション・プラットフォーム上のアクセラレーション・ハードウェアも制御しようということでやってみた。

まずは、Vivado HLS のAXI4 Lite インターフェースのレジスタを確認しよう。
Vivado HLS のAXI4 Lite インターフェースのレジスタは、IP のドライバのソースの xxxxx_hw.h に書いてある。
ここでは、ワークスペースからのパスで言うと、lap_axis_dma_cam_dp/Hardware/lap_axis_dma_cam_dp.build/lap_filter_axis_dma/lap_filter_axis_dma/lap_filter_axis_dma/solution/impl/ip/drivers/lap_filter_axis_dma_lap_filter_axis_dma_v1_0/src ディレクトリだ。
そこの xlap_filter_axis_dma_lap_filter_axis_dma_hw.h を見てみよう。最初の部分にレジスタ・マップが書いてある。最初のコメント部分を引用する。

// ==============================================================
// Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC v2019.2 (64-bit)
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// ==============================================================
// control
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read)
//        bit 7  - auto_restart (Read/Write)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x10 : Data signal of inm
//        bit 31~0 - inm[31:0] (Read/Write)
// 0x14 : Data signal of inm
//        bit 31~0 - inm[63:32] (Read/Write)
// 0x18 : reserved
// 0x1c : Data signal of outm
//        bit 31~0 - outm[31:0] (Read/Write)
// 0x20 : Data signal of outm
//        bit 31~0 - outm[63:32] (Read/Write)
// 0x24 : reserved
// 0x28 : Data signal of x_size
//        bit 31~0 - x_size[31:0] (Read/Write)
// 0x2c : reserved
// 0x30 : Data signal of y_size
//        bit 31~0 - y_size[31:0] (Read/Write)
// 0x34 : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


これで、C++ の関数の引数のレジスタ・マップが分かった。

次は、レジスタのアドレスを確認しよう。これは Vivado の IP インテグレータの Address Editor 画面で確認することができる。
Vivado 2019.2 を起動して、 lap_axis_dma_cam_dp/Hardware/lap_axis_dma_cam_dp.build/link/vivado/vpl/prj/prj.xpr を読み込む。
ultra96v2_cam_dp_122_200504.png

これを見ると、lap_filter_axis_dma_1 のアドレスは 0x00_B000_0000 にマップされていて、 64 K バイトの領域がマップされていることが分かる。これでデバイスツリーを修正することができる。
ikwzm さんの Ultra96-V2 用のUbuntu 18.04 LTS 上でカメラ画像を DisplayPort に出力する2(正常動作した)”のデバイス・ツリー・ソース・ファイルの zocl_laps_dma_cam_dp.dts に lap_filter_axis_dma-uio のエントリを追加する。

/dts-v1/; /plugin/;
/ {
    fragment@0 {
        target-path = "/fpga-full";
        __overlay__ {
                firmware-name = "lap_axis_dma_cam_dp.bit";
        };
    };
    fragment@1 {
        target-path = "/amba_pl@0";
        __overlay__ {
            #address-cells = <2>;
            #size-cells = <1>;
            zyxclmm_drm {
                compatible = "xlnx,zocl";
                status = "okay";
                reg = <0x0 0xB0000000 0x10000>;
            };
           fclk0 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&zynqmp_clk 0x47>;
                insert-rate   = "100000000";
                insert-enable = <1>;
                remove-rate   = "1000000";
                remove-enable = <0>;
            };
            
            mt9d111_inf_axis-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0010000 0x1000>;
            };
            
            axi_iic-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0011000 0x1000>;
            };
            
            disp_dmar_axis-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0000000 0x10000>;
            };

            vflip_dma_write-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0020000 0x10000>;
            };

            axi_gpio_0-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0012000 0x1000>;
            };
            
            axi_gpio_1-uio {
                compatible = "generic-uio";
                reg = <0x0 0xA0013000 0x1000>;
            };
            
            lap_filter_axis_dma-uio {
                compatible = "generic-uio";
                reg = <0x0 0xB0000000 0x10000>;
            };
            
            cam_dp-udmabuf4 {
                compatible  = "ikwzm,udmabuf-0.10.a";
                device-name = "udmabuf4";
                size = <0x02000000>;
            };
        };
    };
};

  1. 2020年05月04日 04:42 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0