FC2カウンター FPGAの部屋 2017年04月08日

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

FPGAの部屋

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

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる8(入れ替え1)

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる7(shellスクリプト)”の続き。

前回は、デバイスツリー・オーバーレイとFPGA Manager を使いやすいようにShell スクリプトを作成した。今回は、2つのFPGA回路とデバイスツリーをLinux 起動しながら入れ替えてみようと思う。

まずは、新たなFPGA回路として、以前作ったFASTX コーナー検出、ラプラシアンフィルタ、アンシャープ・マスクキング・フィルタの回路をコンフィギュレーションして、動作を確認する。

まずは、デバイスツリーを作成しよう。
pynq_fastx.dts を作成した。それぞれのデバイスとudmabuf を記述した。udmabuf はSVGA 3画面分のメモリを確保することにした。
PYNQ_Linux_ikwzm_86_170408.png

/dts-v1/;
/ {
    fragment@0 {
        target-path = "/amba";
        __overlay__ {
            #address-cells = <0x1>;
            #size-cells = <0x1>;
            axi_iic_0@41600000 {
                compatible = "generic-uio";
                reg = <0x41600000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            axi_vdma_0@43000000 {
                compatible = "generic-uio";
                reg = <0x43000000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            axis_switch_0@43C10000 {
                compatible = "generic-uio";
                reg = <0x43C10000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            axis_switch_1@43C20000 {
                compatible = "generic-uio";
                reg = <0x43C20000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            bitmap_disp_cntrler_axi_master_0@43C00000 {
                compatible = "generic-uio";
                reg = <0x43C00000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            fastx_corner_det_0@43C30000 {
                compatible = "generic-uio";
                reg = <0x43C30000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            lap_filter_axis_0@43C50000 {
                compatible = "generic-uio";
                reg = <0x43C50000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            mt9d111_inf_axis_0@43C40000 {
                compatible = "generic-uio";
                reg = <0x43C40000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            unsharp_mask_axis_0@43C60000 {
                compatible = "generic-uio";
                reg = <0x43C60000 0x10000>;
                #interrupts = <0x0 0x1d 0x4>;
            };
            udmabuf4 {
                compatible = "ikwzm,udmabuf-0.10.a";
                minor-number = <4>;
                size = <0x00600000>;
            };
        };
    };
};


デバイスツリー・ソースを
dtc -I dts -O dtb -o pynq_fastx.dtbo pynq_fastx.dts
でコンパイルした。
pynq_fastx.dtbo を使用してデバイスツリー・オーバーレイを行う。そのために、前回作成したShell スクリプトを使用する。
まずは、FPGA Manager を使用して、FPGA をコンフィグレーションする。
./fpgamag pynq_fastx_wrapper.bit
次に、デバイスツリー・オーバーレイを行う。
./devtov pynq_fastx
udmabuf がロードされたかどうか?確かめてみよう。
ls -l /dev/udmabuf4
PYNQ_Linux_ikwzm_87_170408.png

/sys/devices/soc0/amba を見ると、各 uio と udmabuf4 が見える。
PYNQ_Linux_ikwzm_88_170408.png
  1. 2017年04月08日 06:57 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0