FC2カウンター FPGAの部屋 ikwzm さんの fclkcfg による Zynq のPS の fclk の設定2
FC2ブログ

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

FPGAの部屋

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

ikwzm さんの fclkcfg による Zynq のPS の fclk の設定2

ikwzm さんの fclkcfg による Zynq のPS の fclk の設定”の続き。

前回は、ZYBO_BOOT つまり、ブート用のFAT32 フォーマットのMicro SD カードのパーティションで、uEnv.txt (u-boot の設定ファイル)を編集して、各 fclk の Clock Source を設定した。そのため、デバイスツリーで fclk を設定したときに正しい値を設定することができた。
今回は、新しく ikwzm さんにバージョンアップして頂いた新しい fclkcfg (fclkcfg-4.14.34-armv7-fpga_1.1.0-1_armhf.deb)を使用して、デバイスツリーから Clock Source を変更することができるかどうか?を確かめる。

最初に今までの uEnv.txt に戻した。
ZYBOt_22_180819.png

リブートして、
sudo dtbocfg.rb -i --dts devicetree.dts wl_tracing_cnn
すると、以前同様に、ずれたクロック周波数が設定される。
ZYBOt_23_180819.png

ZYBOt_24_180819.png

ずれたクロック周波数が設定されているということを覚えておいて欲しい。

ikwzm/FPGA-SoC-Linux を git clone して比べてみると、fclkcfg-4.14.34-armv7-fpga_1.1.0-1_armhf.deb が新しくなっていたけれど、dtbocfg-4.14.34-armv7-fpga_0.0.6-1_armhf.deb と udmabuf-4.14.34-armv7-fpga_1.2.3-1_armhf.deb も新しくなっていた。
ZYBOt_25_180819.png

この3つを ZYBOt の ~/debian ディレクトリに SFTP した。
ZYBOt_26_180819.png


sudo dpkg -i dtbocfg-4.14.34-armv7-fpga_0.0.6-1_armhf.deb
ZYBOt_27_180819.png

sudo dpkg -i fclkcfg-4.14.34-armv7-fpga_1.1.0-1_armhf.deb
sudo dpkg -i udmabuf-4.14.34-armv7-fpga_1.2.3-1_armhf.deb

ZYBOt_28_180819.png

FPGA Clock Configuration Device Driver を見ながら devicetree.dts を変更した。
"armpll" は <&clkc 0>、"ddrpll" は <&clkc 1>、"iopll" は <&clkc 2> だそうだ。
ZYBOt_29_180819.png

/dts-v1/;/plugin/;
/ {
    fragment@0 {
        target-path = "/amba/fpga-region0";
        #address-cells = <0x1>;
        #size-cells = <0x1>;

        __overlay__ {
            #address-cells = <0x1>;
            #size-cells = <0x1>;

            firmware-name = "ZYBO_0_wrapper.bin";

            mt9d111_axi_iic@41600000 {
                compatible = "generic-uio";
                reg = < 0x41600000 0x10000>;
            };
            dmaw4gabor_0@43cb0000 {
                compatible = "generic-uio";
                reg = < 0x43cb0000 0x10000 >;
            };
            axis_switch_0@43c10000 {
                compatible = "generic-uio";
                reg = < 0x43c10000 0x10000 >;
            };
            axis_switch_1@43c20000 {
                compatible = "generic-uio";
                reg = < 0x43c20000 0x10000 >;
            };
            lap_filter_axis_0@43c30000 {
                compatible = "generic-uio";
                reg = < 0x43c30000 0x10000>;
            };    
            mt9d111_inf_axis_0@43C40000 {
                compatible = "generic-uio";
                reg = < 0x43C40000 0x10000>;
            };
            bitmap_disp_cntrler_axi_master_0@43c00000 {
                compatible = "generic-uio";
                reg = < 0x43c00000 0x10000>;
            };
            bitmap_disp_cntrler_axi_master_1@43c50000 {
                compatible = "generic-uio";
                reg = < 0x43c50000 0x10000>;
            };
            axi_gpio_0@41200000 {
                compatible = "generic-uio";
                reg = < 0x41200000 0x10000>;
            };
            frame_buffer_bmdc@17800000 {
                compatible = "generic-uio";
                reg = < 0x17800000 0x1000000>;
            };
            pwm_0@43c60000 {
                compatible = "generic-uio";
                reg = < 0x43c60000 0x10000>;
            };
            pwm_1@43c70000 {
                compatible = "generic-uio";
                reg = < 0x43c70000 0x10000>;
            };
            motor_monitor_0@43c80000 {
                compatible = "generic-uio";
                reg = < 0x43c80000 0x10000>;
            };
            motor_monitor_1@43c90000 {
                compatible = "generic-uio";
                reg = < 0x43c90000 0x10000>;
            };
            dmar4resize_gray_0@43ca0000 {
                compatible = "generic-uio";
                reg = < 0x43ca0000 0x10000>;
            };
            rgb2hsv_0@43cc0000 {
                compatible = "generic-uio";
                reg = < 0x43cc0000 0x10000>;
            };
            ultrasoninc_sensor_inf_0@43cd0000 {
                compatible = "generic-uio";
                reg = < 0x43cd0000 0x10000>;
            };
            resize_gray_0@43ce0000 {
                compatible = "generic-uio";
                reg = < 0x43ce0000 0x10000>;
            };
            curve_conv_nn2_axis3_0@43cf0000 {
                compatible = "generic-uio";
                reg = < 0x43cf0000 0x10000>;
            };

            pow2-udmabuf0 {
                compatible  = "ikwzm,udmabuf-0.10.a";
                device-name = "udmabuf0";
                size = <0x00600000>;
            };

            fclk0 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&clkc 15>, <&clkc 2>;
                insert-rate    = "100000000";
                insert-enable = <1>;
            };
            fclk1 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&clkc 16>, <&clkc 2>;
                insert-rate    = "40000000";
                insert-enable = <1>;
            };
            fclk2 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&clkc 17>, <&clkc 2>;
                insert-rate    = "72000000";
                insert-enable = <1>;
            };
            fclk3 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&clkc 18>, <&clkc 0>;
                insert-rate    = "65000000";
                insert-enable = <1>;
            };
        };
    } ;
} ;


最初は fclk* のところの &clkc がエラーになってしまっていたのだが、ikwzm さんに教えてもらって、devicetree.dts の最初の「/dts-v1/;」を「/dts-v1/;/plugin/;」に変更したら、&clkc が通るようになった。
ikwzm さんによると

「大元のデバイスツリーを作るときに dtc に -@ か --symbols を付けるとシンボル情報を含んだ dtb が出来ます。/plugin/; はそのシンボル情報を使うことを意味します。昔は dtc に -@ が無かったので出来なかったのですが。」

だそうだ。いつもありがとうございます。

さて、
sudo dtbocfg.rb -i --dts devicetree.dts wl_tracing_cnn
を行った。
ZYBOt_30_180819.png

シリアル・コンソールを見ると、正常な周波数が設定されている。成功だ。
ZYBOt_31_180819.png

なお、
sudo dtbocfg.rb -r wl_tracing_cnn
で、デバイスツリーに書かれたデバイス・ドライバが外れて、もう一度、sudo dtbocfg.rb -i できるようになる。

つまり、Debian が起動中にいろいろなハードウェアを取替えて試すことができる。とっても便利だと思う。

(追加)
cd /sys/devices/soc0/amba/amba\:fpga-region0/
ls

すると、デバイスツリーに書いたデバイスが見える。
ZYBOt_16_180818.png

cd /sys/class
ls

すると、fclkcfg, udamebuf, uio が見える。
ZYBOt_17_180818.png
  1. 2018年08月19日 08:31 |
  2. Zynq
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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