FC2カウンター FPGAの部屋 ikwzm さんの Debian Linux 上で axi timer の割り込みを試す
fc2ブログ

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

FPGAの部屋

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

ikwzm さんの Debian Linux 上で axi timer の割り込みを試す

axi timer の割り込みで axi gpio に接続された LED の点滅をすることで、Debian Linux 上での割り込みを試してみたい。
ikwzm さんの FPGA-SoC-Linux を ZYBO Z7-20 で起動して、その Debian Linux 上で axi timer と axi gpio の PL デザインを動作させて、axi timer の割り込みで LED を点滅させる。

UIO(User space IO)の割り込みの使い方の例”と”ZYBOの割り込みで時間管理してみた”を参考にした。

最初に Vivado 2022.2 で timer_test プロジェクトを作成した。
timer_test_1_230213.png

timer_test ブロック・デザインを作成した。
led_4bits ポートは ZYBO Z7-20 の LD 4 個に接続されている。
timer_test_2_230213.png

axi_gpio_0 の設定を示す。
timer_test_8_230213.png

axi_timer_0 の設定を示す。
timer_test_7_230213.png

Address Editor を示す。
timer_test_3_230213.png

制約ファイルはボードのパラメータを使用しているので、Vivado GUI 上で見える形では無い。
論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
Project Summary を示す。
timer_test_4_230213.png

timer_test/timer_test.runs/impl_1/timer_test_wrapper.bit が生成されていた。
timer_test_wrapper.bit を ZYBO Z7-20 上に SFTP で転送した。
fpga-bit-to-bin.py も転送して bit ファイルを bin ファイルに転送した。
python3 fpga-bit-to-bin.py --flip timer_test_wrapper.bit timer_test.bin

また、bin ファイルを Vivado で直接生成させても良いと思う。””RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる1”参照。(追記)やってみたらだめでした。fpga-bit-to-bin.py でやった方が良さそうです。

timer_test.bin を /lib/firmware ディレクトリにコピーする。
sudo cp timer_test.bin /lib/firmware

device_tree.dts を作成する。

/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 = "timer_test.bin";

            axi_gpio_0@41200000 {
                compatible = "generic-uio";
                reg = <0x41200000 0x10000>;
            };

            axi_timer_0@42800000 {
                compatible = "generic-uio";
                reg = <0x42800000 0x10000>;
                interrupt-parent = <&intc>;
                interrupts = <0 29 4>;
            };
            
            fclk0 {
                compatible  = "ikwzm,fclkcfg-0.10.a";
                clocks      = <&clkc 15>, <&clkc 2>;
                insert-rate = "100000000";
                insert-enable = <1>;
            };
        };
    } ;
} ;


dtgocfg.rb でデバイスツリーやビットストリームをロードする。
sudo dtbocfg.rb -i --dts devicetree.dts timer test

timer_test.bin やクロック設定がロードされている。
timer_test_6_230213.png

timer_test.c を作成した。
timer_test.c のコードは”axi_timer を使う 3 (割り込みを使用する)”に貼ってある。
timer_test.c をコンパイルした。
gcc -o timer_test timer_test.c

timer_test 実行ファイルが生成された。

uio の権限を 666 に変更してユーザーもオープンできるようにする。
sudo chmod 666 /dev/uio*

timer_test を実行したところ、0.5 秒毎に LED が点滅し、正常に動作した。
./timer_test
timer_test_5_230213.png

最後にロードされた bin ファイルや /dev/uio*、クロックなどを外すには、
sudo dtbocfg.rb -r timer_test
  1. 2023年02月16日 05:31 |
  2. FPGAを使用したシステム
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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