FC2カウンター FPGAの部屋 Linux

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

FPGAの部屋

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

ZYBO-Z7-20のDebian上のXクライアントをパソコンのUbuntu上に表示する

ZYBO-Z7-20 の Debian 上の Xクライアントをパソコンの Ubuntu 上に表示したいということで、やってみた。

参考にしたのは、”Xクライアントを別のPCで表示する

Xクライアントを別のPCで表示する”によると

ssh CentOSのIPアドレス -X

で ZYBO-Z7-20 の Debian に入って、Xクライアントのコマンドを入力すれば良いようだ。

ssh 192.168.3.39 -X -l fpga
で、ZYBO-Z7-20 の Debian にログインして nautilus を起動した。
nautilus &
X_window_1_180401.png

ZYBO-Z7-20 の Debian 上の nautilus がパソコンの Ubuntu 上に表示された。
X_window_2_180401.png
  1. 2018年04月01日 06:01 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

Ubuntu 16.04.4 LTS に git-lfs をインストール

Ubuntu 16.04.4 LTS に git-lfs をインストールのに苦労したのでインストール方法を書いておく。

最初に、linuxbrew をインストールして git-lfs をインストールしようとした。
Git LFSの導入方法”辺りを参考にして、次のインストール方法を試してみた。

sudo apt linuxbrew-wapper

brew update
brew install git-lfs
git lfs install

git lfs install コマンドを実行した時に決まって、”git: 'lfs' はgitコマンドではありません。”と言われてしまった。
git-lfs_1_180401.png

いくらやっても同じなので、”Git LFSが1.0になってGitHubで使えるようになったので試してみた”を参考にした。

git-lfs.github.com から git-lfs-linux-amd64-2.4.0.tar.gz をダウンロードした。

git-lfs-linux-amd64-2.4.0.tar.gz を解凍したら、git-lfs-2.4.0 ディレクトリができた。

git-lfs-2.4.0 ディレクトリに入って、install.sh を実行した。
cd git-lfs-2.4.0
sudo bash install.sh

git lfs init は unknown command "init" for "git-lfs" になってしまったが、これが正常に解釈されるということは、git-lfs がインストールできたということだ。良かった。。。
git-lfs_2_180401.png
  1. 2018年04月01日 05:37 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる15(udmabuf を使用する)

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる14(led_on.py を C で書いてみる)”の続き。

前回は、デバイスツリーをロードして、LEDを点灯させるアプリケーションソフトは @ikwzm さんの作成された led_on.py の代わりにじぶんで書いた C 言語のアプリケーションソフトを使用した。今回は、Vivado HLS で作ったプロジェクトで udmabuf を使用してみよう。

今回、参照するのは@ikwzm さんの書かれた、”UltraZed 向け Debian GNU/Linux で Vivado-HLS を使って合成した回路を動かす”まずは、この通りにやってみよう。

fpga ユーザーの examples ディレクトリに移動して、git clone でGitHub の ikwzm/ZynqMP-FPGA-Linux-Example-2-UltraZed を negative という名前でダウンロードして、negative ディレクトリに入る。なお、Vivado HLS の回路は in を AXI4 Master で読んできて、マイナスにして、out へ書くという回路だ。
cd negative
git clone https://github.com/ikwzm/ZynqMP-FPGA-Linux-Example-2-UltraZed negative
cd negative

UltraZed-EG_StKit_Linux_202_180130.png

Python スクリプトでビットファイルをバイナリ・ファイルへ変換し、/lib/firmware へコピー。
python3 fpga-bit-to-bin.py -f negative.bit negative.bin
sudo cp negative.bin /lib/firmware

UltraZed-EG_StKit_Linux_203_180130.png

/lib/firmware ディレクトリを見ると、negative.bin があるのが分かる。
UltraZed-EG_StKit_Linux_204_180130.png

fpga-load.dts をコンパイルして、fpga-load.dtb を生成する。
dtc -I dts -O dtb -o fpga-load.dtb fpga-load.dts
UltraZed-EG_StKit_Linux_205_180130.png

fpga-load.dtb を fpga に登録
sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load.dtb /config/device-tree/overlays/fpga/dtbo

UltraZed-EG_StKit_Linux_206_180130.png

COMポートのTrea Term ウインドウにメッセージが表示された。
UltraZed-EG_StKit_Linux_207_180130.png

FPGA のクロックを設定するための fclk0-zynqmp.dts をコンパイル
dtc -I dts -O dtb -o fclk0-zynqmp.dtb fclk0-zynqmp.dts
UltraZed-EG_StKit_Linux_208_180130.png

fclk0-zynqmp.dts を fclk0 に登録
sudo mkdir /config/device-tree/overlays/fclk0
sudo cp fclk0-zynqmp.dtb /config/device-tree/overlays/fclk0/dtbo

UltraZed-EG_StKit_Linux_209_180130.png

COMポートのTrea Term ウインドウにメッセージが表示された。
UltraZed-EG_StKit_Linux_210_180130.png

UIO と udmabuf のデバイスツリー negative.dts
UltraZed-EG_StKit_Linux_211_180130.png

negative.dts をコンパイル
dtc -I dts -O dtb -o negative.dtb negative.dts
UltraZed-EG_StKit_Linux_212_180130.png

negative.dtb を negative に登録
sudo mkdir /config/device-tree/overlays/negative
sudo cp negative.dtb /config/device-tree/overlays/negative/dtbo
ls -l /dev/uio*
ls -l /dev/udmabuf*

UltraZed-EG_StKit_Linux_213_180130.png

COMポートのTrea Term ウインドウにメッセージが表示された。
UltraZed-EG_StKit_Linux_214_180130.png

negative.py を動作させる
sudo python3 negative.py
UltraZed-EG_StKit_Linux_215_180130.png

今回はスループットが 292 MByte/sec 程度だったが、2回目やると次に示すようにスループットが減っていた。何か?奇数回の方が偶数会よりもスループットが高い気がする。
2 回目の結果を示す。
UltraZed-EG_StKit_Linux_216_180130.png

スループットは、148 MByte/sec 程度と 1 回目よりも少なくなっている。

後始末
デバイスツリーをディレクトリごと削除する。
sudo rmdir /config/device-tree/overlays/netagive
sudo rmdir /config/device-tree/overlays/fclk0
sudo rmdir /config/device-tree/overlays/fpga

UltraZed-EG_StKit_Linux_217_180130.png

COMポートのTrea Term ウインドウに表示されたメッセージを示す。
UltraZed-EG_StKit_Linux_218_180130.png
  1. 2018年02月01日 04:32 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる14(led_on.py を C で書いてみる)

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる12(FPGAのコンフィギュレーション)
@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる13(デバイスツリーの入れ替え)
では、デバイスツリーをロードして、LEDを点灯させるアプリケーションソフトは @ikwzm さんの作成された led_on.py を使用した。Python のコードを使っても良いのだが、いつも書いている C 言語でアプリケーションソフトを書いてみることにした。

関連する @ikzwm さんの記事は”UltraZed 向け Debian GNU/Linux で FPGA をコンフィギュレーション”の”LED を点滅させてみる”だ。

まずは、led_on.c を書いてみた。
UltraZed-EG_StKit_Linux_200_180129.png

// led_on.c
// 2018/01/29 by marsee
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>

int main(){
    int fd1;
    
    volatile unsigned int *led;
    
    unsigned int pattern[14] = {0x010x020x040x080x100x200x400x800x400x200x100x080x040x02};
    int i, j;
    
    // led(uio1)
    fd1 = open("/dev/uio1", O_RDWR); // USER LEDS
    if(fd1 < 1){
        fprintf(stderr, "/dev/uio1 (led) open error\n");
        exit(-1);
    }
    led = (volatile unsigned *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
    if(!led){
        fprintf(stderr, "led mmap error\n");
        exit(-1);
    }
    
    for(i=0; i<10; i++){
        for(j=0; j<14; j++){
            led[0] = pattern[j];
            usleep(100000);
        }
    }
    
    munmap((void *) led, 0x1000);
    
    close(fd1);
    
    return(0);
}


led_on.py と比べて点滅する数は少し多いかもしれないが、大体同じ動作をする。

これをUltraZed-EG Starter Kit のDebian Linux の ~/examples/gpio ディレクトリにおいて、コンパイルを行った。
gcc -o led_on led_on.c

led_on を実行するために、”@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる12(FPGAのコンフィギュレーション)”と同様に sh スクリプトを作成した。exe_led_on_c.sh だ。その内容を示す。
UltraZed-EG_StKit_Linux_201_180129.png

#!/bin/sh

sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load_uzed.dtb /config/device-tree/overlays/fpga/dtbo

sudo mkdir /config/device-tree/overlays/fclk0
sudo cp fclk0-zynqmp.dtb /config/device-tree/overlays/fclk0/dtbo

sudo mkdir /config/device-tree/overlays/uio
sudo cp uio_uzed.dtb /config/device-tree/overlays/uio/dtbo
ls -la /dev/uio*

sudo ./led_on


ただ単に最後の行を入れ替えただけだ。

exe_led_on_c.sh を実行すると、同様にLED が点灯した。これで、従来通りに C で書いても動作するということが分かった。
UltraZed-EG_StKit_Linux_199_180129.png
  1. 2018年01月30日 04:09 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる13(デバイスツリーの入れ替え)

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる12(FPGAのコンフィギュレーション)”の続き。

前回は、Debian を使用して、UltraZed-EG Starter Kit でFPGA のコンフィギュレーション、FPGA のクロック設定、UIO を設定して、アプリケーションソフトを動作させた。今回は、FPGA のコンフィギュレーション、FPGA のクロック設定、UIO を設定を入れ替えてみよう。

今回、参考にするのも、”UltraZed 向け Debian GNU/Linux で FPGA をコンフィギュレーション

最初に私の作ったVivado プロジェクトのビットファイルでコンフィギュレーションを行い、FPGA のクロック設定、UIO を設定してアプリケーションソフトを起動して動作を確認した後で、@ikwzm さんの作ったVivado プロジェクトのビットファイルでコンフィギュレーションを行い、FPGA のクロック設定、UIO を設定してアプリケーションソフトを起動して動作を確認してみようと思う。

さて、FPGA のコンフィギュレーション、FPGA のクロック設定、UIO を設定して、アプリケーションソフトを動作する一連の流れを実行するスクリプトを作成した。もうすでにdtb は作成済みなので、dtc コンパイルは入れていない。
まずは、私のVivado プロジェクトのビットファイルを使用する exe_led_on.sh を貼っておく。

#!/bin/sh

sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load_uzed.dtb /config/device-tree/overlays/fpga/dtbo

sudo mkdir /config/device-tree/overlays/fclk0
sudo cp fclk0-zynqmp.dtb /config/device-tree/overlays/fclk0/dtbo

sudo mkdir /config/device-tree/overlays/uio
sudo cp uio_uzed.dtb /config/device-tree/overlays/uio/dtbo
ls -la /dev/uio*

sudo python3 led_on.py


UltraZed-EG_StKit_Linux_190_180125.png

次に、ikwzm さんのVivado プロジェクトのビットファイルを使用する exe_led_on_org.sh を貼っておく。

#!/bin/sh

sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load.dtb /config/device-tree/overlays/fpga/dtbo

sudo mkdir /config/device-tree/overlays/fclk0
sudo cp fclk0-zynqmp.dtb /config/device-tree/overlays/fclk0/dtbo

sudo mkdir /config/device-tree/overlays/uio
sudo cp uio.dtb /config/device-tree/overlays/uio/dtbo
ls -la /dev/uio*

sudo python3 led_on.py


UltraZed-EG_StKit_Linux_191_180125.png

最後に、”UltraZed 向け Debian GNU/Linux で FPGA をコンフィギュレーション”の”後始末”のDevice Tree Overlay で追加したデバイスツリーを、後から追加した順に削除するスクリプトの rm_dev.sh を貼っておく。

#!/bin/sh

sudo rmdir /config/device-tree/overlays/uio
sudo rmdir /config/device-tree/overlays/fclk0
sudo rmdir /config/device-tree/overlays/fpga


UltraZed-EG_StKit_Linux_192_180125.png

まずは、
./exe_led_on.sh
を実行した。IP ポートのTrea Term ウインドウを示す。
UltraZed-EG_StKit_Linux_184_180125.png

LEDの点滅動作もOKだった。
COMポートのTrea Term ウインドウを示す。
UltraZed-EG_StKit_Linux_185_180125.png

この時の/config/device-tree/overlay は fclk0, fpga, uio の各ディレクトリができている。
UltraZed-EG_StKit_Linux_186_180125.png

初めてデバイスツリーの削除をやるので、rm_dev.sh ではなく、実際にコマンドを打って削除した。
UltraZed-EG_StKit_Linux_187_180125.png

COMポートのTrea Term ウインドウを示す。
UltraZed-EG_StKit_Linux_188_180125.png

/config/device-tree/overlay は fclk0, fpga, uio の各ディレクトリが削除されている。
UltraZed-EG_StKit_Linux_189_180125.png

次に、
./exe_led_on_org.sh
を実行した。
UltraZed-EG_StKit_Linux_193_180125.png

led の点滅動作もOK だった。一度、デバイスツリーを削除してからもう一度、デバイスツリーをロードしても問題なく動作する。

COMポートのTrea Term ウインドウを示す。
UltraZed-EG_StKit_Linux_194_180125.png

/config/device-tree/overlay は fclk0, fpga, uio の各ディレクトリができている。
UltraZed-EG_StKit_Linux_195_180125.png

./rm_dev.sh
を実行した。
UltraZed-EG_StKit_Linux_196_180125.png

COMポートのTrea Term ウインドウを示す。
UltraZed-EG_StKit_Linux_197_180125.png

/config/device-tree/overlay は fclk0, fpga, uio の各ディレクトリが削除されている。
UltraZed-EG_StKit_Linux_198_180125.png

これで一旦ロードしたデバイスツリーを削除して、別のデバイスツリーをロードできることが確認できた。
  1. 2018年01月27日 04:45 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる12(FPGAのコンフィギュレーション)

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる11(パッケージのインストール)”の続き。

前回は、Debian が起動してから、使用するパッケージをインストールした。今回は、そのDebian を使用して、UltraZed-EG Starter Kit でFPGA のコンフィギュレーション、FPGA のクロック設定、UIO を設定して、アプリケーションソフトを動作させてみよう。

参考にするのは、”UltraZed 向け Debian GNU/Linux で FPGA をコンフィギュレーション

今回、FPGA にコンフィギュレーションする回路は@ikwzm さんと同じ回路だが自分で作ったGPIO の回路とする。IP インテグレータで作成するとデフォルトでは、IP のアドレス範囲が 4 k バイトになる。@ikwzm さんの回路ではIP のアドレス範囲は 64 k バイトなので、そこは違っている。

UltraZed-EG Starter Kit で Debian を立ち上げる。

fpga ユーザーでログインする。

fpga ディレクトリの下に examples ディレクトリを作成する。
mkdri examples
cd examples


ファイル一式を gpio ディレクトリにダウンロードする。( git clone です)
git clone https://github.com/ikwzm/ZynqMP-FPGA-Linux-Example-0-UltraZed gpio
cd gpio
ls

UltraZed-EG_StKit_Linux_156_180126.png

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる2(Sample FPGA Design編)”で作成したビットファイルの uzed_eg_ex1_wrapper.bit をUltraZed-EG Starter Kit の /home/fpga/examples/gpio にアップロードした。
UltraZed-EG_StKit_Linux_157_180126.png

Python の fpga-bit-to-bin.py を使って、ビットファイルを変換する。
python3 fpga-bit-to-bin.py -f uzed_eg_ex1_wrapper.bit uzed_eg_ex1_wrapper.bin
UltraZed-EG_StKit_Linux_159_180126.png

uzed_eg_ex1_wrapper.bin が生成された。

uzed_eg_ex1_wrapper.bin を /lib/firmware にコピーした。
sudo cp uzed_eg_ex1_wrapper.bin /lib/firmware
UltraZed-EG_StKit_Linux_160_180126.png

次は、Device Tree Overlay による FPGA のコンフィギュレーションなのだが、独自のビットファイルを使用しているので、dts を書き換える必要がある。
元になる fpga-load.dts を表示した。
UltraZed-EG_StKit_Linux_161_180126.png

fpga-load.dts をコピーして fpga-load_uzed.dts を作成し、ビットファイル名を uzed_eg_ex1_wrapper.bin に変更した。
cp fpga-load.dts fpga-load_uzed.dts
vi fpga-load_uzed.dts

UltraZed-EG_StKit_Linux_162_180126.png

dts をコンパイルして、FPGAのコンフィギュレーションを行う。
dtc -I dts -O dtb -o fpga-load_uzed.dtb fpga-load_uzed.dts (下の図のコマンドは間違っている。以前、コンパイルしておいたのでOKだった)
sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load_uzed.dtb /config/device-tree/overlays/fpga/dtbo

つまり、/config/device-tree/overlays に fpga ディレクトリを作って、そこにデバイスツリーをロードすればビットファイルをFPGA にコンフィギュレーションできるようだ。
UltraZed-EG_StKit_Linux_175_180124.png

このTrea Term のウインドウは、IP で開いているので表示が出ないが、COMポートのTrea Term ウインドウに fpga_manager の表示が出た。
UltraZed-EG_StKit_Linux_176_180124.png

FPGAのクロックを設定する。
fclk0-zynqmp.dts を表示した。これは修正する必要が無い。
UltraZed-EG_StKit_Linux_177_180124.png

dtc -I dts -O dtb -o fclk0-zynqmp.dtb fclk0-zynqmp.dts
sudo mkdir /config/device-tree/overlays/fclk0
sudo cp fclk0-zynqmp.dtb /config/device-tree/overlays/fclk0/dtbo

UltraZed-EG_StKit_Linux_178_180124.png

同様にCOMポートのTrea Term ウインドウを見ると、クロック設定のメッセージが出た。
UltraZed-EG_StKit_Linux_179_180124.png

正常にFPGA のクロックがコンフィギュレーションされたようだ。

UIO の設定。
uio.dts を uio_uzed.dts にコピーして設定を変更する。IP のアドレス範囲が 4k バイトなので、その領域指定とアドレスを変更する。
cp uio.dts uio_uzed.dts
vi uio_uzed.dts

UltraZed-EG_StKit_Linux_180_180124.png

修正済みの uio_uzed.dts
UltraZed-EG_StKit_Linux_181_180124.png

dtc -I dts -O dtb -o uio_uzed.dtb uio_uzed.dts
sudo mkdir /config/device-tree/overlays/uio
sudo cp uio_uzed.dtb /config/device-tree/overlays/uio/dtbo
ls -la /dev/uio*
をすると、/dev/uio0, /dev/uio1, /dev/uio2 の 3 個の UIO を見ることができた。
UltraZed-EG_StKit_Linux_182_180124.png

LED を点滅させる led_on.py を実行する。
sudo python3 led_on.py スーパーユーザー権限で led_on.py を実行すると、LEDが順番に点灯した。
led_on.py を実行するためには、UIO の権限を 666 にする。UIO のオーナーは root なので、一般ユーザーに使えるように 666 にしておこう。
すると、スーパーユーザー権限がなくても led_on.py が実行できた。
sudo chmod 666 /dev/uio*
python3 led_on.py

UltraZed-EG_StKit_Linux_183_180124.png

UltraZed-EG Starter Kit のピンクの四角で囲ったLED が点滅した。
UltraZed-EG_StKit_Linux_183_2_180125.jpg
  1. 2018年01月26日 04:49 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる11(パッケージのインストール)

@ikwzmさんのUltraZed 向け Debian GNU/Linux の構築をやってみる10(実機で試す2)”の続き。

前回は、Debian の起動メッセージにエラーが出ていたので、その修正を行った。今回は、必要なパッケージのインストールを行う。

参考にするのは、”UltraZed 向け Debian GNU/Linux ブートイメージの提供

最初に ip_addr_show で IP アドレスを表示した。
UltraZed-EG_StKit_Linux_152_180126.png

なお、ここから何度もやり直したので、辻褄が合わなくてしまった。ご了承ください。。。

先ほどのIP アドレスから fpga ユーザーでログインする。
debian ディレクトリに行く。
debian ディレクトリにはインストールするべき 4 つのパッケージがある。
UltraZed-EG_StKit_Linux_153_180126.png

まずは、
sudo dpkg -i linux-image-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb
UltraZed-EG_StKit_Linux_153_2_180126.png

sudo dpkg -i linux-headers-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb
UltraZed-EG_StKit_Linux_153_180126.png

sudo dpkg -i fclkcfg-4.9.0-xlnx-v2017.3-zynqmp-fpga_0.0.1-1_arm64.deb
ここは、”arm のDebian でsudo をする時に「ホスト…の名前解決ができません」といわれたときの対処方法”以前に画像をキャプチャしたので、名前解決ができませんと言われている。
UltraZed-EG_StKit_Linux_154_180126.png

sudo dpkg -i udmabuf-4.9.0-xlnx-v2017.3-zynqmp-fpga_0.0.1-1_arm64.deb
ここも、”arm のDebian でsudo をする時に「ホスト…の名前解決ができません」といわれたときの対処方法”以前に画像をキャプチャしたので、名前解決ができませんと言われている。
UltraZed-EG_StKit_Linux_155_180126.png

これで下準備は終了したので、次は、FPGA をコンフィギュレーションして動作させてみよう。
  1. 2018年01月25日 05:06 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0
»