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

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

FPGAの部屋

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

Vitis 2020.1 で ultra96v2_min2_201 アクセラレーション・プラットフォームを使用したアプリケーション・プロジェクトを試す

Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う2(実機確認)”でVitis 2020.1 で ultra96v2_min2_201 アクセラレーション・プラットフォームを使用した lap_filter_axis_dma アプリケーション・プロジェクトを試したところ、カーネルから来るデータがすべて 0 だったようだ。しかし、Vitis のサンプル・アプリケーションの vadd は”ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる5(libcrypt.so.2 のコピーと vadd の実行)”で試してみたが、テストが通った。
何でだろうか?ということで、他のプロジェクトをやってみた。

square
まずは、自作のアクセラレーション・アプリケーション・プロジェクトの square からやってみた。
square は以下のFPGAの部屋のブログ記事で書かれている。
Vitis 2019.2 アプリケーション・プロジェクト square その1
Vitis 2019.2 アプリケーション・プロジェクト square その2
Vitis 2019.2 アプリケーション・プロジェクト square その3

square を Vitis 2020.1 と ultra96v2_min2_201 アプリケーション・プラットフォームでやってみた。
ZynqMP-FPGA-Linux201_70_200714.png

ビルド成功して、 square_u96v2 と square_c.xclbin を Ultra96V2 の Debian にアップロードした。
dtbocfg.rb と zocl.dts を用意した。
ビットファイルを生成して、 /lib/firmware/ にコピーした。
xclbinutil --input square_c.xclbin --dump-section BITSTREAM:RAW:square.bit
sudo cp square.bit /lib/firmware/

ZynqMP-FPGA-Linux201_71_200714.png

square を動作させる。
source /opt/xilinx/xrt/setup.sh
sudo ./dtbocfg.rb --install zocl --dts zocl.dts
sudo chmod 666 /dev/dri/renderD128
./square_u96v2 square_c.xclbin

ZynqMP-FPGA-Linux201_72_200714.png
ZynqMP-FPGA-Linux201_73_200714.png

fpga@debian-fpga:~/Vitis_work/square$ ./square_u96v2 square_c.xclbin
Using FPGA binary file specfied through the command line: square_c.xclbin
Found Platform
Platform Name: Xilinx
Loading: 'square_c.xclbin'
Error: i = 1 i^2 = 1 square_data = 0
Error: i = 2 i^2 = 4 square_data = 0
Error: i = 3 i^2 = 9 square_data = 0
Error: i = 4 i^2 = 16 square_data = 0
Error: i = 5 i^2 = 25 square_data = 0
Error: i = 6 i^2 = 36 square_data = 0
Error: i = 7 i^2 = 49 square_data = 0
Error: i = 8 i^2 = 64 square_data = 0
Error: i = 9 i^2 = 81 square_data = 0
TEST FAILED


TEST が失敗した。やはり、データが 0 だった。

array_partition
次に、Vitis のサンプル・アプリケーションの array_partition をやってみよう。
array_partition を Vitis 2020.1 と ultra96v2_min2_201 アプリケーション・プラットフォームでやってみた。

ビルド成功して、 array_p と matmul.xclbin を Ultra96V2 の Debian にアップロードした。
dtbocfg.rb と zocl.dts を用意した。
ビットファイルを生成して、 /lib/firmware/ にコピーした。
xclbinutil --input matmul.xclbin --dump-section BITSTREAM:RAW:matmul.bit
sudo cp matmul.bit /lib/firmware/

ZynqMP-FPGA-Linux201_75_200714.png

square と続けてやってので、XRT の環境はセットされているし、 zocl などのドライバはロードされているので、それを外した。
sudo ./dtbocfg.rb --remove zocl
sudo ./dtbocfg.rb --install zocl --dts zocl.dts
sudo chmod 666 /dev/dri/renderD128
./array_p matmul.xclbin

ZynqMP-FPGA-Linux201_76_200714.png
ZynqMP-FPGA-Linux201_77_200714.png

TEST PASSED と表示され成功した。

fpga@debian-fpga:~/Vitis_work/array_p$ ./array_p matmul.xclbin 
A:
   0    1    8    5    5    2    0    7    7   10 …
   7    0    4    0    4    7    6   10    9    5 …
   2    0    8    3    6    8   10    4    2   10 …
   2    4    8    5    2    3    3    1    5    9 …
  10    5    2    0   10    0    5    4    3   10 …
   9    1    0    7    9    6    8    7   10    9 …
   4    9    2    4    5    5    3    1    1    6 …
   6    9    6    9    1    2    7    1    1    3 …
   1    3    9    7    1    7    4    4    5    1 …
  10    4    1    6    2    5    5   10    1    2 …
   …    …    …    …    …    …    …    …    …    … ⋱

B:
   7    7    2    9    7    9    1    0    8    6 …
   4    2    7    3    8    8    4    3    2    0 …
   6    1    9    1   10    2    2    1    2    6 …
   0    6    2    3    7    1    8    5    6    6 …
   8    6    8    3    1    5    3    6    5    4 …
   3    0    4    2    7    7    5    8    7   10 …
   4    6   10    1    7    3    5    5    9    0 …
   2    9    7    5    8    0    1    7    7    4 …
   1    0    5    0    1    9    8    8    4    0 …
   4    6    7    7    5    3    8    4    7    3 …
   …    …    …    …    …    …    …    …    …    … ⋱

Gold:
 196  311  428  206  384  291  305  363  405  243 …
 286  472  448  296  490  425  382  430  500  367 …
 269  439  555  260  529  390  416  425  559  370 …
 231  293  419  231  365  385  361  356  384  235 …
 307  479  484  313  453  477  368  366  529  295 …
 317  474  488  357  472  458  439  457  564  341 …
 246  339  385  272  381  424  364  324  386  263 …
 234  367  312  217  430  307  334  248  314  284 …
 231  370  403  197  453  334  353  410  382  344 …
 246  432  363  321  462  324  291  330  436  322 …
   …    …    …    …    …    …    …    …    …    … ⋱

Found Platform
Platform Name: Xilinx
INFO: Reading matmul.xclbin
Loading: 'matmul.xclbin'
Trying to program device[0]: edge
Device[0]: program successful!
|-------------------------+-------------------------|
| Kernel                  |    Wall-Clock Time (ns) |
|-------------------------+-------------------------|
| matmul:                 |                  237029 |
| matmul: partition       |                   65973 |
|-------------------------+-------------------------|
Note: Wall Clock Time is meaningful for real hardware execution only, not for emulation.
Please refer to profile summary for kernel execution time for hardware emulation.
TEST PASSED



結果
今回も square の自作アクセラレーション・アプリケーション・プロジェクトは結果のデータが 0 で、 array_partition はテストが通った。この違いは何だろう? ホストのOpenCL コードはほとんど一緒なのだが?
プロジェクトの環境変数が違うのだろうか?
  1. 2020年07月14日 04:32 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う2(実機確認)

Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う1(Vitis プロジェクトの生成とビルド)”の続き。

Vitis 2020.1 のアクセラレーション・プラットフォームは ultra96v2_min2_201 を使用して、Vitis 2019.2 で動作している lap_filter_axis_dma を動作させてみようということで、前回は、 Vitis 2020.1 で lap_filter_axis_dma アクセラレーション・アプリケーション・プロジェクトを作成して、ビルドし成功した。今回は、ビルドできたホスト・アプリケーションと xclbin ファイルを使って、 ikwzm さんの ZynqMP-FPGA-Linux で実行させてみよう。

lap_filter_axis_dma/Hardware/package/sd_card ディレクトリに lap_filter_axis_dma アプリケーションと lap_filter_axis_dma.xclbin がある。
ZynqMP-FPGA-Linux201_59_200711.png

Ultra96-V2 の Debian 上の ~/Vitis_work に lap_filter_axis_dma ディレクトリを作成して、 dtbocfg.rb と zocl.dts をコピーした。
そのディレクトリに lap_filter_axis_dma アプリケーションと lap_filter_axis_dma.xclbin を SFTP した。
ZynqMP-FPGA-Linux201_60_200711.png

zocl.dts の firmware-name を

firmware-name = "lap_filter_axis_dma.bit";

に書き換えた。
ZynqMP-FPGA-Linux201_61_200711.png

xclbinutil で lap_filter_axis_dma.xclbin から bit ファイルを抽出し、 /lib/firmware/ ディレクトリにコピーした。
cd Vitis_work/lap_filter_axis_dma/
xclbinutil --input lap_filter_axis_dma.xclbin --dump-section BITSTREAM:RAW:lap_filter_axis_dma.bit
sudo cp lap_filter_axis_dma.bit /lib/firmware/

ZynqMP-FPGA-Linux201_62_200711.png

lap_filter_axis_dma.bit が生成された。
ZynqMP-FPGA-Linux201_63_200711.png

test.bmp を ZynqMP-FPGA-XRT-Example-1-Ultra96 からコピーした。
ZynqMP-FPGA-Linux201_64_200711.png

xrt の環境を設定して、zocl などをロードした。
source /opt/xilinx/xrt/setup.sh
sudo ./dtbocfg.rb --install zocl --dts zocl.dts


zocl などをロード・メッセージを示す。

[ 1822.071446] fpga_manager fpga0: writing lap_filter_axis_dma.bit to Xilinx ZynqMP FPGA Manager
[ 1825.785632] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
[ 1825.824247] fclkcfg: loading out-of-tree module taints kernel.
[ 1825.834937] [drm] Probing for xlnx,zocl
[ 1825.836788] fclkcfg amba_pl@0:fclk0: driver installed.
[ 1825.838900] zocl-drm amba_pl@0:zyxclmm_drm: IRQ index 0 not found
[ 1825.843959] fclkcfg amba_pl@0:fclk0: device name    : amba_pl@0:fclk0
[ 1825.850212] [drm] PR Isolation addr 0x0
[ 1825.850723] [drm] Initialized zocl 2018.2.1 20180313 for amba_pl@0:zyxclmm_drm on minor 1
[ 1825.856484] fclkcfg amba_pl@0:fclk0: clock  name    : pl0_ref
[ 1825.856493] fclkcfg amba_pl@0:fclk0: clock  rate    : 99999999
[ 1825.856522] fclkcfg amba_pl@0:fclk0: clock  enabled : 1
[ 1825.885277] fclkcfg amba_pl@0:fclk0: remove rate    : 1000000
[ 1825.891020] fclkcfg amba_pl@0:fclk0: remove enable  : 0


lap_filter_axis_dma を起動したが、どうやらすべての結果が 0 のようだ。
sudo chmod 666 /dev/dri/renderD128
./lap_filter_axis_dma lap_filter_axis_dma.xclbin

ZynqMP-FPGA-Linux201_65_200711.png
ZynqMP-FPGA-Linux201_66_200711.png

~/Vitis_work に lap_filter_axis_dma ディレクトリに temp_lap.bmp ファイルが生成されていた。
ZynqMP-FPGA-Linux201_67_200711.png

temp_lap.bmp ファイルを見たが、すべて 0 のようだった。
ZynqMP-FPGA-Linux201_68_200711.png

ZynqMP-FPGA-XRT-Example-1-Ultra96 の temp_lap.bmp を見たら、ちゃんとエッジが表示された。Vitis 2019.2 で作成したアプリケーションと xclbin ファイルの実行では問題ないようだ。
ZynqMP-FPGA-Linux201_69_200712.png
  1. 2020年07月12日 06:54 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う1(Vitis プロジェクトの生成とビルド)

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる5(libcrypt.so.2 のコピーと vadd の実行)”で、Vitis 2020.1 で生成した vadd と binary_container_1.xclbin を Ultra96-V2 の ikwzm さんの ZynqMP-FPGA-Linux で実行することができた。使用している Vitis 2020.1 のアクセラレーション・プラットフォームは ultra96v2_min2_201 だった。このアクセラレーション・プラットフォームは生成されたイメージで PetaLinux を起動することはできないものの、生成されたアプリケーションと xclbin ファイルは動作することが確認できた。そこで、 lap_filter_axis_dma を動作させてみよう。

Vitis 2020.1 で lap_filter_axis_dma プロジェクトを作成した。当然、アクセラレーション・プラットフォームは ultra96v2_min2_201 を選択した。

lap_filter_axis_dma プロジェクトが生成されたので、Explorer ウインドウで、 lap_filter_axis_dma_system -> lap_filter_axis_dma -> src で右クリックし、右クリックメニューから import sources... を選択し、出てきたダイアログで”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン3”のソースコードをインポートした。(なお、実際のソースコードは”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン2”を参照のこと)

Hardware Functions で Add Hardware Function... ボタンをクリックし、 lap_filter_axis_dma 関数を指定して、Hardware Function に追加した。

Assistant ウインドウで lap_filter_axis_dma_system -> lap_filter_axis_dma -> Hardware を右クリックし、右クリックメニューから Build を選択してビルドしたところ成功した。
ZynqMP-FPGA-Linux201_50_200711.png

Assistant ウインドウで lap_filter_axis_dma_system -> lap_filter_axis_dma -> Hardware -> lap_filter_axis_dma を右クリックし、右クリックメニューから Open Vivado Project を選択して、Vivado を起動する。
ZynqMP-FPGA-Linux201_54_200711.png

Vivado 2020.1 が起動した。
ZynqMP-FPGA-Linux201_51_200711.png

ブロックデザインを確認した。
ZynqMP-FPGA-Linux201_52_200711.png

プラットフォームに lap_filter_axis_dma_1 が追加されている。

Address Editor を見た。
ZynqMP-FPGA-Linux201_53_200711.png

Assistant ウインドウで lap_filter_axis_dma_system -> lap_filter_axis_dma -> Hardware -> lap_filter_axis_dma -> lap_filter_axis_dma を右クリックし、右クリックメニューから Open HLS Project を選択した。
ZynqMP-FPGA-Linux201_55_200711.png

Launch Vitis HLS ダイアログが出たので、OK ボタンをクリックした。
ZynqMP-FPGA-Linux201_56_200711.png

Vitis HLS 2020.1 が起動した。
ZynqMP-FPGA-Linux201_57_200711.png

タイミング・バイオレーションは出ていないようだ。
Synthesis Details Report を示す。
ZynqMP-FPGA-Linux201_58_200711.png

動作周波数は 200 MHz だった。
  1. 2020年07月11日 05:05 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Wio Terminal をArduino IDE で使う3(Timer を使用して 3 軸加速度センサーを計測する)

Wio Terminal をArduino IDE で使う2(Windows 10 で 3 軸加速度センサーを使う)”の続き。

前回は、Windows 10 に Arduino IDE をインストールして、3 軸加速度センサーの値を LCD に表示することができた。今回は、とりあえず、データを取得するために 3 軸加速度センサーの値をシリアルモニタに表示した。そこで、ループで 3 軸加速度センサーの値を取得すると時間間隔がばらついてしまうためタイマー割り込みを使用して、実装した。

最初に、ブログに”Wio Terminal: ATSAMD51& Realtek RTL8720DN BLE 5.0 & Wi-Fi 2.4G/5G 開発ボード”のリンクを張って、ブログ記事を書くと 10 ドルのクーポンをくれるというオファーがあった。よって、この部分はステマであることに注意されたい。秋月電子でも Wio Terminal の在庫が復活したので、こちらの方が早く来るとは思う。
ブログ記事は、いつか書こうと思っていたので、ステマというわけではない。

さて、最初に前回のプログラムをもとに、シリアルモニタに表示するプログラムを作成した。今回は、micros() 関数を使用して、加速度の取得間隔を計測する。
ime_sample2.ino を示す。

#include"LIS3DHTR.h"
LIS3DHTR<TwoWire> lis;
unsigned long time1, time2;
float x_values, y_values, z_values;

void setup() {
  Serial.begin(115200);
  lis.begin(Wire1);
 
  if (!lis) {
    Serial.println("ERROR");
    while(1);
  }
  lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); //Data output rate
  lis.setFullScaleRange(LIS3DHTR_RANGE_2G); //Scale range set to 2g

  time2 = micros();
}
 
void loop() {
  time1 = micros();
  x_values = lis.getAccelerationX();
  y_values = lis.getAccelerationY();
  z_values = lis.getAccelerationZ();

  Serial.print(time1-time2);
  Serial.print(" "); Serial.print(x_values,3);
  Serial.print(" "); Serial.print(y_values,3);
  Serial.print(" "); Serial.print(z_values,3);
  Serial.println();
  delay(96);

  time2 = time1;
}


プログラムの実行結果の一部を示す。

99656 -0.056 -0.720 -0.564
99556 -0.420 -0.888 -0.812
100069 0.484 -0.744 -0.624
100181 -0.056 -0.820 -0.560
99907 -0.012 -0.700 -0.644
100551 -0.152 -0.780 -0.936
99978 0.040 -0.780 -0.684
100634 0.004 -0.792 -0.676
100858 0.008 -0.676 -0.516


最初の列が 3 軸加速度センサーの取得間隔なのだが、やはりばらついている。全部で 137 個データを取得したので、Excel に入れてグラフを書いてみた。
Wio_Terminal_Arduino_11_200710.png

3 軸加速度センサーの取得間隔の最大値が 101258 us で、最小値が 98559 us 、その差が 2699 us ということになった。
これだけばらついてはまずいということで、@ciniml さんの”ciniml/ISRBlink.ino”を引用させていただいて、タイマー割り込みを使用した 3 軸加速度センサーのデータ取得プログラムを作成した。ほとんど”ciniml/ISRBlink.ino”を引用している。 @ciniml さん、ありがとうございました。

タイマー割り込みの 3 軸加速度センサーのデータ取得プログラム、ime_isr_serial2.ino を示す。

//#include "SAMD51_TC.h"

#include <samd.h>

#include <cstdint>
#include <array>
#include"LIS3DHTR.h"

LIS3DHTR<TwoWire> lis;
unsigned long time1, time2;
float x_values, y_values, z_values;

#define GENERIC_CLOCK_GENERATOR_1M 5u

class SAMD51TCInterruptHelper;

class SAMD51TC
{
public:
    /**
     * @brief Create a new instance of SAM51TC for the TCx peripheral where x == tcUnit.
     * @param [in] tcUnit index of TC peripheral.
     */
    SAMD51TC(std::uint_least8_t tcUnit) : tcUnit(tcUnit), regs(nullptr), isrCallback(nullptr), microseconds(0)
    {
        switch(tcUnit)
        {
            case 0: {this->regs = &TC0->COUNT16; this->irqn = TC0_IRQn; break;}
            case 1: {this->regs = &TC1->COUNT16; this->irqn = TC1_IRQn; break;}
            case 2: {this->regs = &TC2->COUNT16; this->irqn = TC2_IRQn; break;}
            case 3: {this->regs = &TC3->COUNT16; this->irqn = TC3_IRQn; break;}
            case 4: {this->regs = &TC4->COUNT16; this->irqn = TC4_IRQn; break;}
            case 5: {this->regs = &TC5->COUNT16; this->irqn = TC5_IRQn; break;}
            case 6: {this->regs = &TC6->COUNT16; this->irqn = TC6_IRQn; break;}
            case 7: {this->regs = &TC7->COUNT16; this->irqn = TC7_IRQn; break;}
        }
    }

    void initialize(std::uint32_t microseconds = 1000000)
    {
        this->configureClock();

        this->regs->CTRLA.bit.SWRST = 1;
        while(this->regs->SYNCBUSY.bit.SWRST);

        this->setPeriod(microseconds);
    }
    void setPeriod(std::uint32_t microseconds)
    {
        this->microseconds = microseconds;
    }

    void __attribute__((noinline)) start()
    {
        this->regs->CTRLA.bit.ENABLE = 0;
        while(this->regs->SYNCBUSY.bit.ENABLE);

        this->regs->COUNT.reg = 0;
        while(this->regs->SYNCBUSY.bit.COUNT);

        const std::array<uint_fast8_t, 8> prescaler_shifts = { 0, 1, 2, 3, 4, 6, 8, 10 };
        for( std::uint_fast8_t index = 0; index < prescaler_shifts.size(); index++ ) {
            const auto compare_value = this->microseconds >> prescaler_shifts[index];
            if( compare_value <= 65535 ) {
                this->regs->CTRLA.bit.PRESCALER = index;
                this->regs->CC[0].reg = compare_value;
                break;
            }
        }
        while(this->regs->SYNCBUSY.bit.CC0);

        this->regs->WAVE.bit.WAVEGEN = TC_WAVE_WAVEGEN_MFRQ_Val;

        this->regs->INTENSET.bit.MC0 = 1;
        NVIC_EnableIRQ(this->irqn);

        this->regs->CTRLA.bit.MODE = TC_CTRLA_MODE_COUNT16_Val;
        this->regs->CTRLA.bit.ENABLE = 1;
        while(this->regs->SYNCBUSY.bit.ENABLE);

        this->regs->CTRLBSET.bit.CMD = TC_CTRLBCLR_CMD_RETRIGGER_Val;
        while(this->regs->SYNCBUSY.bit.CTRLB);
    }
    void stop()
    {
        this->regs->CTRLA.bit.ENABLE = 0;
        while(this->regs->SYNCBUSY.bit.ENABLE);

        this->regs->INTENCLR.bit.MC0 = 1;
        NVIC_DisableIRQ(this->irqn);
        NVIC_ClearPendingIRQ(this->irqn);
    }

    void restart()
    {
        this->regs->CTRLBSET.bit.CMD = TC_CTRLBCLR_CMD_RETRIGGER_Val;
        while(this->regs->SYNCBUSY.bit.CTRLB);
    }

    void attachInterrupt(void (*isrCallback)())
    {
        this->isrCallback = isrCallback;
        this->start();
    }
    void detachInterrupt()
    {
        this->stop();
        this->isrCallback = nullptr;
    }

private:
    std::uint_least8_t tcUnit;
    TcCount16* regs;
    IRQn_Type irqn;
    std::uint32_t microseconds;
    void (*isrCallback)();

    void configureClock()
    {
        switch(this->tcUnit) {
            case 0: {MCLK->APBAMASK.bit.TC0_ = 1; GCLK->PCHCTRL[TC0_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
            case 1: {MCLK->APBAMASK.bit.TC1_ = 1; GCLK->PCHCTRL[TC1_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
            case 2: {MCLK->APBBMASK.bit.TC2_ = 1; GCLK->PCHCTRL[TC2_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
            case 3: {MCLK->APBBMASK.bit.TC3_ = 1; GCLK->PCHCTRL[TC3_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
            case 4: {MCLK->APBCMASK.bit.TC4_ = 1; GCLK->PCHCTRL[TC4_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
            case 5: {MCLK->APBCMASK.bit.TC5_ = 1; GCLK->PCHCTRL[TC5_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
            case 6: {MCLK->APBDMASK.bit.TC6_ = 1; GCLK->PCHCTRL[TC6_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
            case 7: {MCLK->APBDMASK.bit.TC7_ = 1; GCLK->PCHCTRL[TC7_GCLK_ID].reg = GCLK_PCHCTRL_GEN(GENERIC_CLOCK_GENERATOR_1M) | GCLK_PCHCTRL_CHEN;  break;}
        }
    }
public:
    void processIsr()
    {
        if( this->regs->INTFLAG.bit.MC0 ) {
            this->regs->INTFLAG.bit.MC0 = 1;
            if( this->isrCallback != nullptr ) {
                this->isrCallback();
            }
        }
    }
};

SAMD51TC TimerTC3(3);
void TC3_Handler() { TimerTC3.processIsr(); }

bool isLEDOn = false;
char time = 0;

void setup() 
{
    TimerTC3.initialize(100000); // microseconds
    TimerTC3.attachInterrupt(timerIsr);

    Serial.begin(115200);
    lis.begin(Wire1);
   
    if (!lis) {
      Serial.println("ERROR");
      while(1);
    }
    lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ); //Data output rate
    lis.setFullScaleRange(LIS3DHTR_RANGE_2G); //Scale range set to 2g

    time2 = micros();
}
 
void loop()
{
    /*
    time ++;
    if(time == 10)TimerTc3.detachInterrupt();
    else if(time == 20)
    {
       TimerTc3.attachInterrupt(timerIsr);
       time = 0;
    }
    delay(1000);
    */
}

void timerIsr()
{    
    time1 = micros();
    x_values = lis.getAccelerationX();
    y_values = lis.getAccelerationY();
    z_values = lis.getAccelerationZ();

    Serial.print(time1-time2);
    Serial.print(" "); Serial.print(x_values,3);
    Serial.print(" "); Serial.print(y_values,3);
    Serial.print(" "); Serial.print(z_values,3);
    Serial.println();

    time2 = time1;
}


プログラムの実行結果の一部を示す。

97002 -0.104 -0.276 -1.088
98002 -0.044 -0.260 -0.856
97002 -0.100 -0.212 -0.932
97002 -0.036 -0.004 -1.020
97002 -0.164 -0.192 -0.980
97002 -0.104 -0.160 -0.928
97002 -0.228 0.000 -1.732
97002 -0.080 -0.212 -1.044
97002 -0.060 -0.184 -1.000
97002 -0.052 -0.096 -0.944


最初の列が 3 軸加速度センサーの取得間隔なのだが、大体一定しているが、たまに違う値がある。全部で 105 個データを取得したので、Excel に入れてグラフを書いてみた。
Wio_Terminal_Arduino_12_200710.png

3 軸加速度センサーの取得間隔の最大値が 99002 us で、最小値が 96002 us 、その差が 3000 us ということになった。安定はしているが 3000 us ばらついている。
  1. 2020年07月10日 04:27 |
  2. Wio Terminal
  3. | トラックバック:0
  4. | コメント:0

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる5(libcrypt.so.2 のコピーと vadd の実行)

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる4(vadd の実行)”の続き。

前回は、Vitis 2020.1 で生成した vadd と binary_container_1.xclbin を Ultra96-V2 の ikwzm さんの ZynqMP-FPGA-Linux で実行してみたが、 libcrypt.so.2 が無いと言われて動作しなかった。今回は、libcrypt.so.2 を見つけたので、 Ultra96-V2 の Debian 上にコピーしてから、 vadd と binary_container_1.xclbin を実行したところ成功した。

もしかしたら、Vitis 2020.1 で Ultra96-V2 のアクセラレーション・プラットフォームを作った時の sysroot に libcrypt.so.2 が無いかな?ということで、 ultra96v2_min2_201/images/linux/pkg/pfm/sysroots/aarch64-xilinx-linux を検索したところ、 user/lib にあった。
ZynqMP-FPGA-Linux201_47_200708.png

これを SFTP で Ultra96-V2 の Debian 上にコピーする。なお、直接 /usr/lib にコピーできなかったのでホーム・ディレクトリにコピーした。
ZynqMP-FPGA-Linux201_45_200708.png

Ultra96-V2 の Debian の /usr/lib にコピーした。コピー・コマンドについては後述する。
ZynqMP-FPGA-Linux201_48_200709.png

コマンドを実行する。
sudo cp libcrypt.so.2 /usr/lib
rm libcrypt.so.2
source /opt/xilinx/xrt/setup.sh
cd Vitis_work/vadd201/
sudo ./dtbocfg.rb --install zocl --dts zocl.dts
sudo chmod 666 /dev/dri/renderD128
./vadd binary_container_1.xclbin

成功だ。 TEST PASSED が表示されている。
ZynqMP-FPGA-Linux201_46_200708.png

これで、 ultra96v2_min2_201 の Vitis 2020.1 アクセラレーション・アプリケーション・プラットフォームを使用して作成したアクセラレーション・アプリケーションが動作することが確認できた。。。
ただし、作成した PetaLinux がまだ起動しないが、アクセラレーション・アプリケーションが動けば良いということにしようかな?

zocl などをロードした時のログを示す。

[  312.988519] fpga_manager fpga0: writing vadd.bit to Xilinx ZynqMP FPGA Manager
[  316.935028] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
[  316.974780] fclkcfg: loading out-of-tree module taints kernel.
[  316.982817] fclkcfg amba_pl@0:fclk0: driver installed.
[  316.988018] fclkcfg amba_pl@0:fclk0: device name    : amba_pl@0:fclk0
[  316.990604] [drm] Probing for xlnx,zocl
[  316.994490] fclkcfg amba_pl@0:fclk0: clock  name    : pl0_ref
[  316.998318] zocl-drm amba_pl@0:zyxclmm_drm: IRQ index 0 not found
[  317.004039] fclkcfg amba_pl@0:fclk0: clock  rate    : 99999999
[  317.010217] [drm] PR Isolation addr 0x0
[  317.015977] fclkcfg amba_pl@0:fclk0: clock  enabled : 1
[  317.016791] [drm] Initialized zocl 2018.2.1 20180313 for amba_pl@0:zyxclmm_drm on minor 1
[  317.019815] fclkcfg amba_pl@0:fclk0: remove rate    : 1000000
[  317.038936] fclkcfg amba_pl@0:fclk0: remove enable  : 0


アクセラレーション・アプリケーション vadd 実行時のログを示す。

[  363.816677] [drm] Pid 646 opened device
[  363.820621] [drm] Pid 646 closed device
[  363.825041] [drm] Pid 646 opened device
[  363.829060] [drm] Pid 646 closed device
[  363.833279] [drm] Pid 646 opened device
[  363.837151] [drm] Pid 646 closed device
[  363.841011] [drm] Pid 646 opened device
[  363.844861] [drm] Pid 646 closed device
[  363.848773] [drm] Pid 646 opened device
[  364.105518] [drm] Finding IP_LAYOUT section header
[  364.105522] [drm] Section IP_LAYOUT details:
[  364.110348] [drm]   offset = 0x54fcf8
[  364.114622] [drm]   size = 0x58
[  364.118291] [drm] Finding DEBUG_IP_LAYOUT section header
[  364.121423] [drm] AXLF section DEBUG_IP_LAYOUT header not found
[  364.126735] [drm] Finding CONNECTIVITY section header
[  364.132644] [drm] Section CONNECTIVITY details:
[  364.137687] [drm]   offset = 0x54fd50
[  364.142210] [drm]   size = 0x28
[  364.145873] [drm] Finding MEM_TOPOLOGY section header
[  364.149011] [drm] Section MEM_TOPOLOGY details:
[  364.154062] [drm]   offset = 0x54fc00
[  364.158590] [drm]   size = 0xf8
[  364.162291] [drm] Download new XCLBIN 94A81AE6-CD68-48BE-A851-24FB31E58964 done.
[  364.166616] [drm] -> Hold xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, from ref=0
[  364.174014] [drm] <- Hold xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, to ref=1
[  364.181519] [drm] No ERT scheduler on MPSoC, using KDS
[  364.193982] [drm] request_irq failed on CU 0 error: -22.Fall back to polling mode.
[  364.201552] [drm] scheduler config ert(0)
[  364.201554] [drm]   cus(1)
[  364.205556] [drm]   slots(16)
[  364.208248] [drm]   num_cu_masks(1)
[  364.211208] [drm]   cu_shift(16)
[  364.214696] [drm]   cu_base(0xa0000000)
[  364.217917] [drm]   polling(1)
[  364.221790] [drm] -> Release xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, from ref=1
[  364.224847] [drm] now xclbin can be changed
[  364.232588] [drm] <- Release xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, to ref=0
[  364.237036] [drm] -> Hold xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, from ref=0
[  364.244608] [drm] <- Hold xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, to ref=1
[  364.259443] [drm] -> Release xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, from ref=1
[  364.266778] [drm] now xclbin can be changed
[  364.274525] [drm] <- Release xclbin 94A81AE6-CD68-48BE-A851-24FB31E58964, to ref=0
[  364.283690] [drm] Pid 646 closed device

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

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる4(vadd の実行)

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる3(XRT インストール、Vitis サンプル・デザインの実行)”の続き。

前回は、ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにしたということで、作成した MicroSD カードをUltra96-V2 に挿入して起動し、XRT をインストールして、Vitis アクセラレーション・アプリケーションを動作させることができた。今回は、Vitis 2020.1 でビルドした vadd と xclbin ファイルを動作させてみよう。

binary_container_1.xclbin, vadd を生成した時のブログ記事は”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る4(Vitis 2020.1 でアプリケーション・プロジェクトを作成)”だった。
この、binary_container_1.xclbin, vadd を SFTP で Ultra96-V2 に送って、 ~/Vitis_work の下に vadd201 ディレクトリを作成した。
cd ~/Vitis_work
mkdir vadd201


binary_container_1.xclbin から vadd.bit を抽出した。
xclbinutil --input binary_container_1.xclbin --dump-section BITSTREAM:RAW:vadd.bit
ls

ZynqMP-FPGA-Linux201_33_200705.png

binary_container_1.bif を作成した。
ZynqMP-FPGA-Linux201_40_200707.png

all:
{
    [destination_device = pl] vadd.bit
}


zocl.dts を作成した。
ZynqMP-FPGA-Linux201_41_200707.png

/dts-v1/; /plugin/;
/ {
    fragment@0 {
        target-path = "/fpga-full";
        __overlay__ {
            firmware-name = "vadd.bit";
        };
        };
    fragment@1 {
        target-path = "/amba_pl@0";
        __overlay__ {
            #address-cells = <2>;
            #size-cells = <2>;
            zyxclmm_drm {
                compatible = "xlnx,zocl";
                status = "okay";
            };
            fclk0 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&zynqmp_clk 0x47>;
                insert-rate   = "100000000";
                insert-enable = <1>;
                remove-rate   = "1000000";
                remove-enable = <0>;
            };
        };
    };
};


dtbocfg.rb などをコピーした状態の vadd201 ディレクトリを示す。
ZynqMP-FPGA-Linux201_39_200707.png

前の記事”ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる3(XRT インストール、Vitis サンプル・デザインの実行)”の続きなので、zocl などのドライバを削除する。 vadd.bit を /lib/firmware/ ディレクトリにコピーして、zocl ドライバなどをロードした。
(なお、この記事単独でやる場合には、 XRT のセットアップ source /opt/xilinx/xrt/setup.sh の実行が必要です)
sudo ./dtbocfg.rb --remove zocl
sudo cp vadd.bit /lib/firmware/
sudo ./dtbocfg.rb --install zocl --dts zocl.dts

ZynqMP-FPGA-Linux201_42_200707.png

ドライバ・ロード時のメッセージを見た。
dmesg | tail -15
ZynqMP-FPGA-Linux201_43_200707.png

/dev/dri/renderD128 のパーミッションを 666 に変更して、 vadd を実行した。
sudo chmod 666 /dev/dri/renderD128
./vadd binary_container_1.xclbin

ZynqMP-FPGA-Linux201_44_200707.png

fpga@debian-fpga:~/Vitis_work/vadd201$ ./vadd binary_container_1.xclbin
./vadd: error while loading shared libraries: libcrypt.so.2: cannot open shared object file: No such file or directory


エラー終了してしまったが、そもそも、 vadd.exe が生成される必要があったんじゃないだろうか?
Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る4(Vitis 2020.1 でアプリケーション・プロジェクトを作成)”で vadd のビルドが緑チェック終了で成功した気になっていたが、実はうまく行ってないんじゃないだろうか?
  1. 2020年07月08日 04:58 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる3(XRT インストール、Vitis サンプル・デザインの実行)

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる2(Debian を起動)”の続き。

前回は、ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにしたということで、作成した MicroSD カードをUltra96-V2 に挿入して起動し、GUI の設定などを行った。今回は、XRT をインストールして、Vitis アクセラレーション・アプリケーションを動作させてみよう。

最初にUbuntu 18.04 のパソコンから ssh で Ultra96-V2 にログインした。
ssh 192.168.3.24 -X -l fpga
ZynqMP-FPGA-Linux201_22_200705.png

ikwzm さんの ZynqMP-FPGA-XRT を参照して XRT をインストールしていこう。
まずは、ZynqMP-FPGA-XRT.git をダウンロードする。
git clone https://github.com/ikwzm/ZynqMP-FPGA-XRT.git
cd ZynqMP-FPGA-XRT/
ls

ZynqMP-FPGA-Linux201_23_200705.png

python-pyopencl をインストールした。
sudo apt install -y python-pyopencl
ZynqMP-FPGA-Linux201_24_200705.png

xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb をインストールした。
sudo apt install ./xrt_202010.2.6.0_Ubuntu_18.04-arm64-xrt.deb
ZynqMP-FPGA-Linux201_25_200705.png
ZynqMP-FPGA-Linux201_26_200705.png

xrt-setup_2.6.0-1_arm64.deb をインストールした。
sudo apt install ./xrt-setup_2.6.0-1_arm64.deb
ZynqMP-FPGA-Linux201_27_200705.png
ZynqMP-FPGA-Linux201_28_200705.png

これからは、ikwzm/ZynqMP-FPGA-XRT-Example-1-Ultra96 に従ってやっていく。

Vitis_work を作って、ikwzm/ZynqMP-FPGA-XRT-Example-1-Ultra96 をダウンロードした。
mkdir Vitis_work
cd Vitis_work/
git clone https://github.com/ikwzm/ZynqMP-FPGA-XRT-Example-1-Ultra96.git
cd ZynqMP-FPGA-XRT-Example-1-Ultra96/
ls

ZynqMP-FPGA-Linux201_29_200705.png

XRT をセットアップした。
source /opt/xilinx/xrt/setup.sh
ZynqMP-FPGA-Linux201_30_200705.png

zocl をロード、クロックを設定する。その前に、streaming_lap_filter5.bin を /lib/firmware/ にコピーする
sudo cp streaming_lap_filter5.bin /lib/firmware/
sudo ./dtbocfg.rb --install zocl --dts zocl.dts
dmesg | tail -12

ZynqMP-FPGA-Linux201_31_200705.png

dmesg の tail -12 ではすべてのメッセージが表示されていなかったので、メッセージを貼っておく。

[  291.996977] fpga_manager fpga0: writing streaming_lap_filter5.bin to Xilinx ZynqMP FPGA Manager
[  292.315190] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
[  292.347674] zocl: loading out-of-tree module taints kernel.
[  292.356199] [drm] Probing for xlnx,zocl
[  292.360174] zocl-drm amba_pl@0:zyxclmm_drm: IRQ index 0 not found
[  292.366416] [drm] PR Isolation addr 0x0
[  292.366921] [drm] Initialized zocl 2018.2.1 20180313 for amba_pl@0:zyxclmm_drm on minor 1
[  292.380423] fclkcfg amba_pl@0:fclk0: driver installed.
[  292.385601] fclkcfg amba_pl@0:fclk0: device name    : amba_pl@0:fclk0
[  292.392061] fclkcfg amba_pl@0:fclk0: clock  name    : pl0_ref
[  292.397806] fclkcfg amba_pl@0:fclk0: clock  rate    : 99999999
[  292.403660] fclkcfg amba_pl@0:fclk0: clock  enabled : 1
[  292.408880] fclkcfg amba_pl@0:fclk0: remove rate    : 1000000
[  292.414622] fclkcfg amba_pl@0:fclk0: remove enable  : 0


OF: overlay: WARNING が出ているようだ。

streaming_lap_filter5.exe を実行する。
./streaming_lap_filter5.exe streaming_lap_filter5.xclbin
ZynqMP-FPGA-Linux201_32_200705.png

動作しなかった。
No devices found だった。

(追記)
ikwzm さんに動作させ方を聞いたところ、
sudo chmod 666 /dev/dri/renderD128
でパーミッションを与えてくれということだったので、やってみたところうまく行った。

cd Vitis_work/
cd ZynqMP-FPGA-XRT-Example-1-Ultra96/
source /opt/xilinx/xrt/setup.sh
sudo ./dtbocfg.rb --install zocl --dts zocl.dts
dmesg | tail -15

ZynqMP-FPGA-Linux201_36_200707.png
ZynqMP-FPGA-Linux201_37_200707.png

sudo chmod 666 /dev/dri/renderD128
./streaming_lap_filter5.exe streaming_lap_filter5.xclbin

ZynqMP-FPGA-Linux201_38_200707.png

うまく動作した。良かった。

fpga@debian-fpga:~/Vitis_work/ZynqMP-FPGA-XRT-Example-1-Ultra96$ ./streaming_lap_filter5.exe streaming_lap_filter5.xclbin
Using FPGA binary file specfied through the command line: streaming_lap_filter5.xclbin
Found Platform
Platform Name: Xilinx
Loading: 'streaming_lap_filter5.xclbin'
total time = 0.000614 sec
Success HW and SW results match


実行時間は 614 us なので速い。
  1. 2020年07月07日 04:35 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる2(Debian を起動)

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる1(Micro SD カードの準備)”の続き。

前回は、 ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにしたということで、ブート用の MicroSD カードを作成した。今回は、作成した MicroSD カードをUltra96-V2 に入れて Debian をブートしてみよう。

作成した MicroSD カードをUltra96-V2 に入れて電源 ON した。
Debian がブートして、プロンプトが表示された。
ZynqMP-FPGA-Linux201_15_200702.png

ID: fpga , PASSWORD: fpga でログインして、
ip addr show
で IPアドレスの割り振りを観察した。
無線LAN は 192.168.3.24 に割り振られている。
ZynqMP-FPGA-Linux201_16_200702.png

Ultra96-V2 を見ながら、Linux Image Package などをインストールしていく。
sudo su
cd /home/fpga/debian
dpkg -i linux-image-5.4.0-xlnx-v2020.1-zynqmp-fpga_5.4.0-xlnx-v2020.1-zynqmp-fpga-1_arm64.deb
dpkg -i linux-headers-5.4.0-xlnx-v2020.1-zynqmp-fpga_5.4.0-xlnx-v2020.1-zynqmp-fpga-1_arm64.deb

ZynqMP-FPGA-Linux201_17_200704.png
ZynqMP-FPGA-Linux201_18_200704.png

dpkg -i fclkcfg-5.4.0-xlnx-v2020.1-zynqmp-fpga_1.3.0-1_arm64.deb
dpkg -i u-dma-buf-5.4.0-xlnx-v2020.1-zynqmp-fpga_3.0.1-0_arm64.deb

ZynqMP-FPGA-Linux201_19_200704.png

次に GUI 環境を構築する。
まずは、パソコンのターミナルから Ultra96-V2 の Debian にログインする。
ssh 192.168.3.24 -X -l fpga
そして、そこで、パッケージをインストールしていく。
sudo apt update
sudo apt upgrade
sudo apt install xbase-clients xterm ssh

ここで一旦、ログアウトして、ログインしないと GUI が上がらなかった。
nautilus や geany をインストールする。
sudo apt install natuilus
sudo apt install geany


nautilus &
で起動した。うまく動作した。
ZynqMP-FPGA-Linux201_20_200704.png

geany も起動した。
geany &
ZynqMP-FPGA-Linux201_21_200704.png

更に”sudo: unable to resolve host の表示を止める”の設定を行った。
  1. 2020年07月06日 04:35 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る6(Vitis 2020.1 で作成したアプリを動作されるが動かない! 2)

Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る5(Vitis 2020.1 で作成したアプリを動作されるが動かない!)”の続き。

前回記事のコメントで、yanagi さんに”2020.1 need copy boot.src to sd card”ということを教えていただいたので、MicroSD カードの第 1 パーティションに boot.scr をコピーしてみたところ、 u-boot から Linux は起動したのだが、Linux が途中で止まってしまった。まだ、何処かドライバがおかしいか? あるようだ。

boot.src は ultra96v2_min2_201/images/linux ディレクトリを改めて見てみると、boot.scr が生成されている。
Vitis_Platform_201_100_200704.png

この boot.scr を ultra96v2_min2_201/images/linux/pkg/pfm/boot ディレクトリにコピーした。
Vitis_Platform_201_101_200704.png

これで、もう一度、”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る3(Vitis 2020.1 でアクセラレーション・プラットフォーム作成)”で Vitis アクセラレーション・プラットフォームを作り直して、”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る4(Vitis 2020.1 でアプリケーション・プロジェクトを作成)”で vadd2 アクセラレーション・アプリケーション・プロジェクトを作成した。

Vitis アクセラレーション・プラットフォームは生成に成功したが、 vadd2 アクセラレーション・アプリケーション・プロジェクトを作成するところで、エラーが出てしまった。
Vitis_Platform_201_102_200704.png

エラー内容を示す。

ERROR: [v++ 82-1061] Internal error: SD files options supported only for SD boot mode
ERROR: [v++ 60-702] Failed to finish packaging
INFO: [v++ 60-1653] Closing dispatch client.
makefile:100: recipe for target 'vadd2' failed
make: [vadd2] Error 1 (無視されました)


boot.scr が入っているとダメなようだ。

それでは、ということで、 boot.scr が入っていない状態の vitis アクセラレーション・プラットフォームだと vadd アクセラレーション・アプリケーション・プロジェクトがビルドできるので、それを使用して、sd_card.img を書いた MicroSD カードの第 1 パーティションに boot.scr をコピーしたらどうなるだろう?
第 1 パーティションに boot.scr をコピーした。
Vitis_Platform_201_103_200704.png

この MicroSD カードを Ultra96V2 に入れて電源ON したところ、Linux カーネルは起動したが、途中で止まってしまった。残念。。。
Vitis_Platform_201_104_200704.png

ログを示す。

NOTICE:  ATF running on XCZU3EG/silicon v4/RTL5.1 at 0xfffea000
NOTICE:  BL31: v2.2(release):v1.1-5588-g5918e656e
NOTICE:  BL31: Built : 13:15:27, Jun 11 2020


U-Boot 2020.01 (Jun 11 2020 - 13:14:21 +0000)

Board: Xilinx ZynqMP
DRAM:  2 GiB
usb dr_mode not found
usb dr_mode not found
PMUFW: v1.1
EL Level: EL2
Chip ID: zu3eg
NAND:  0 MiB
MMC:   mmc@ff160000: 0, mmc@ff170000: 1
In:    serial@ff010000
Out:   serial@ff010000
Err:   serial@ff010000
Bootmode: SD_MODE
Reset reason: EXTERNAL 
Net:   No ethernet found.
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
2007 bytes read in 18 ms (108.4 KiB/s)
## Executing script at 20000000
8143156 bytes read in 667 ms (11.6 MiB/s)
## Loading kernel from FIT Image at 10000000 ...
   Using 'conf@system-top.dtb' configuration
   Trying 'kernel@1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x100000e8
     Data Size:    8103786 Bytes = 7.7 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x00080000
     Entry Point:  0x00080000
     Hash algo:    sha256
     Hash value:   05cef73deeb6daa19302778d736d979f0f5bd05f7850775578893f9c0094644b
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 10000000 ...
   Using 'conf@system-top.dtb' configuration
   Trying 'fdt@system-top.dtb' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x107ba964
     Data Size:    37477 Bytes = 36.6 KiB
     Architecture: AArch64
     Hash algo:    sha256
     Hash value:   489eb046a4ac125018a9763e75cc61e5372457d7fd294ca4b061301d1d3a0ba2
   Verifying Hash Integrity ... sha256+ OK
   Booting using the fdt blob at 0x107ba964
   Uncompressing Kernel Image
   Loading Device Tree to 000000000fff3000, end 000000000ffff264 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 5.4.0-xilinx-v2020.1 (oe-user@oe-host) (gcc version 9.2.0 (GCC)) #1 SMP Thu Jun 11 13:12:39 UTC 2020
[    0.000000] Machine model: xlnx,zynqmp
[    0.000000] earlycon: cdns0 at MMIO 0x00000000ff010000 (options '115200n8')
[    0.000000] printk: bootconsole [cdns0] enabled
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] cma: Reserved 256 MiB at 0x000000006fc00000
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.1
[    0.000000] percpu: Embedded 21 pages/cpu s48664 r8192 d29160 u86016
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] Speculative Store Bypass Disable mitigation not required
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 515844
[    0.000000] Kernel command line:  earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 1776376K/2096128K available (11580K kernel code, 668K rwdata, 3612K rodata, 704K init, 518K bss, 57608K reserved, 262144K cma-reserved)
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:  RCU event tracing is enabled.
[    0.000000] rcu:  RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] GIC: Adjusting CPU interface base to 0x00000000f902f000
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] random: get_random_bytes called from start_kernel+0x2a8/0x42c with crng_init=0
[    0.000000] arch_timer: cp15 timer(s) running at 100.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x171024e7e0, max_idle_ns: 440795205315 ns
[    0.000004] sched_clock: 56 bits at 100MHz, resolution 10ns, wraps every 4398046511100ns
[    0.008424] Console: colour dummy device 80x25
[    0.012484] Calibrating delay loop (skipped), value calculated using timer frequency.. 200.00 BogoMIPS (lpj=400000)
[    0.022839] pid_max: default: 32768 minimum: 301
[    0.027598] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.034786] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.043837] ASID allocator initialised with 32768 entries
[    0.047995] rcu: Hierarchical SRCU implementation.
[    0.052893] EFI services will not be available.
[    0.057347] smp: Bringing up secondary CPUs ...
[    0.062083] Detected VIPT I-cache on CPU1
[    0.062130] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.062529] Detected VIPT I-cache on CPU2
[    0.062552] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.062915] Detected VIPT I-cache on CPU3
[    0.062935] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.062984] smp: Brought up 1 node, 4 CPUs
[    0.097142] SMP: Total of 4 processors activated.
[    0.101814] CPU features: detected: 32-bit EL0 Support
[    0.106917] CPU features: detected: CRC32 instructions
[    0.112054] CPU: All CPU(s) started at EL2
[    0.116098] alternatives: patching kernel code
[    0.121908] devtmpfs: initialized
[    0.128198] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.133489] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.147728] xor: measuring software checksum speed
[    0.184438]    8regs     :  2375.000 MB/sec
[    0.224467]    32regs    :  2725.000 MB/sec
[    0.264501]    arm64_neon:  2365.000 MB/sec
[    0.264542] xor: using function: 32regs (2725.000 MB/sec)
[    0.268419] pinctrl core: initialized pinctrl subsystem
[    0.274497] NET: Registered protocol family 16
[    0.279527] DMA: preallocated 256 KiB pool for atomic allocations
[    0.284089] audit: initializing netlink subsys (disabled)
[    0.289513] audit: type=2000 audit(0.228:1): state=initialized audit_enabled=0 res=1
[    0.289950] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.316406] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[    0.317463] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[    0.324132] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.330796] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[    1.411690] DRBG: Continuing without Jitter RNG
[    1.486446] raid6: neonx8   gen()  1541 MB/s
[    1.554491] raid6: neonx8   xor()  1461 MB/s
[    1.622529] raid6: neonx4   gen()  1481 MB/s
[    1.690581] raid6: neonx4   xor()  1419 MB/s
[    1.758643] raid6: neonx2   gen()  1124 MB/s
[    1.826677] raid6: neonx2   xor()  1173 MB/s
[    1.894776] raid6: neonx1   gen()   728 MB/s
[    1.962777] raid6: neonx1   xor()   880 MB/s
[    2.030825] raid6: int64x8  gen()  1162 MB/s
[    2.098882] raid6: int64x8  xor()   760 MB/s
[    2.166935] raid6: int64x4  gen()   977 MB/s
[    2.234982] raid6: int64x4  xor()   733 MB/s
[    2.303083] raid6: int64x2  gen()   678 MB/s
[    2.371080] raid6: int64x2  xor()   591 MB/s
[    2.439133] raid6: int64x1  gen()   449 MB/s
[    2.507180] raid6: int64x1  xor()   450 MB/s
[    2.507221] raid6: using algorithm neonx8 gen() 1541 MB/s
[    2.511174] raid6: .... xor() 1461 MB/s, rmw enabled
[    2.516105] raid6: using neon recovery algorithm
[    2.521144] iommu: Default domain type: Translated 
[    2.525797] SCSI subsystem initialized
[    2.529420] usbcore: registered new interface driver usbfs
[    2.534734] usbcore: registered new interface driver hub
[    2.540005] usbcore: registered new device driver usb
[    2.545048] mc: Linux media interface: v0.10
[    2.549253] videodev: Linux video capture interface: v2.00
[    2.554703] pps_core: LinuxPPS API ver. 1 registered
[    2.559615] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    2.568710] PTP clock support registered
[    2.572602] EDAC MC: Ver: 3.0.0
[    2.576169] zynqmp-ipi-mbox mailbox@ff990400: Registered ZynqMP IPI mbox with TX/RX channels.
[    2.584386] FPGA manager framework
[    2.587690] Advanced Linux Sound Architecture Driver Initialized.
[    2.593944] Bluetooth: Core ver 2.22
[    2.597175] NET: Registered protocol family 31
[    2.601568] Bluetooth: HCI device and connection manager initialized
[    2.607885] Bluetooth: HCI socket layer initialized
[    2.612728] Bluetooth: L2CAP socket layer initialized
[    2.617750] Bluetooth: SCO socket layer initialized
[    2.622970] clocksource: Switched to clocksource arch_sys_counter
[    2.628766] VFS: Disk quotas dquot_6.6.0
[    2.632586] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    2.643702] NET: Registered protocol family 2
[    2.644180] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    2.652200] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    2.660149] TCP bind hash table entries: 16384 (order: 6, 262144 bytes, linear)
[    2.667625] TCP: Hash tables configured (established 16384 bind 16384)
[    2.673911] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    2.680494] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    2.687680] NET: Registered protocol family 1
[    2.692207] RPC: Registered named UNIX socket transport module.
[    2.697763] RPC: Registered udp transport module.
[    2.702427] RPC: Registered tcp transport module.
[    2.707099] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    2.713769] PCI: CLS 0 bytes, default 64
[    2.717941] hw perfevents: no interrupt-affinity property for /pmu, guessing.
[    2.724668] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[    2.733066] Initialise system trusted keyrings
[    2.736717] workingset: timestamp_bits=46 max_order=19 bucket_order=0
[    2.743822] NFS: Registering the id_resolver key type
[    2.748031] Key type id_resolver registered
[    2.752164] Key type id_legacy registered
[    2.756150] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    2.762822] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[    2.782236] NET: Registered protocol family 38
[    2.782281] Key type asymmetric registered
[    2.785108] Asymmetric key parser 'x509' registered
[    2.789972] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[    2.797304] io scheduler mq-deadline registered
[    2.801800] io scheduler kyber registered
[    2.833169] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    2.837375] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    2.844856] brd: module loaded
[    2.850370] loop: module loaded
[    2.851217] mtdoops: mtd device (mtddev=name/number) must be supplied
[    2.855517] libphy: Fixed MDIO Bus: probed
[    2.859387] tun: Universal TUN/TAP device driver, 1.6
[    2.863451] CAN device driver interface
[    2.867934] usbcore: registered new interface driver asix
[    2.872591] usbcore: registered new interface driver ax88179_178a
[    2.878604] usbcore: registered new interface driver cdc_ether
[    2.884405] usbcore: registered new interface driver net1080
[    2.890028] usbcore: registered new interface driver cdc_subset
[    2.895907] usbcore: registered new interface driver zaurus
[    2.901453] usbcore: registered new interface driver cdc_ncm
[    2.907845] usbcore: registered new interface driver uas
[    2.912351] usbcore: registered new interface driver usb-storage
[    2.918971] rtc_zynqmp ffa60000.rtc: registered as rtc0
[    2.923537] i2c /dev entries driver
[    2.928426] usbcore: registered new interface driver uvcvideo
[    2.932652] USB Video Class driver (1.1.1)
[    2.937192] Bluetooth: HCI UART driver ver 2.3
[    2.941132] Bluetooth: HCI UART protocol H4 registered
[    2.946230] Bluetooth: HCI UART protocol BCSP registered
[    2.951525] Bluetooth: HCI UART protocol LL registered
[    2.956608] Bluetooth: HCI UART protocol ATH3K registered
[    2.961984] Bluetooth: HCI UART protocol Three-wire (H5) registered
[    2.968234] Bluetooth: HCI UART protocol Intel registered
[    2.973575] Bluetooth: HCI UART protocol QCA registered
[    2.978779] usbcore: registered new interface driver bcm203x
[    2.984400] usbcore: registered new interface driver bpa10x
[    2.989937] usbcore: registered new interface driver bfusb
[    2.995386] usbcore: registered new interface driver btusb
[    3.000849] usbcore: registered new interface driver ath3k
[    3.006376] EDAC MC: ECC not enabled
[    3.009936] EDAC DEVICE0: Giving out device to module edac controller cache_err: DEV edac (POLLED)
[    3.018882] EDAC DEVICE1: Giving out device to module zynqmp-ocm-edac controller zynqmp_ocm: DEV ff960000.memory-controller (INTERRUPT)
[    3.031055] sdhci: Secure Digital Host Controller Interface driver
[    3.036967] sdhci: Copyright(c) Pierre Ossman
[    3.041291] sdhci-pltfm: SDHCI platform and OF driver helper
[    3.047277] ledtrig-cpu: registered to indicate activity on CPUs
[    3.052933] zynqmp_firmware_probe Platform Management API v1.1
[    3.058681] zynqmp_firmware_probe Trustzone version v1.0
[    3.088759] alg: No test for xilinx-zynqmp-aes (zynqmp-aes)
[    3.088995] zynqmp_aes zynqmp_aes: AES Successfully Registered
[    3.088995] 
[    3.096218] alg: No test for xilinx-keccak-384 (zynqmp-keccak-384)
[    3.102447] alg: No test for xilinx-zynqmp-rsa (zynqmp-rsa)
[    3.108014] usbcore: registered new interface driver usbhid
[    3.113264] usbhid: USB HID core driver
[    3.117291] xlnk xlnk: Major 244
[    3.120371] xlnk xlnk: xlnk driver loaded
[    3.124248] xlnk xlnk: xlnk_pdev is not null
[    3.130898] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[    3.135218] usbcore: registered new interface driver snd-usb-audio
[    3.141902] pktgen: Packet Generator for packet performance testing. Version: 2.75
[    3.149247] Initializing XFRM netlink socket
[    3.152896] NET: Registered protocol family 10
[    3.157711] Segment Routing with IPv6
[    3.160975] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    3.167115] NET: Registered protocol family 17
[    3.171144] NET: Registered protocol family 15
[    3.175558] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    3.188429] can: controller area network core (rev 20170425 abi 9)
[    3.194604] NET: Registered protocol family 29
[    3.198983] can: raw protocol (rev 20170425)
[    3.203221] can: broadcast manager protocol (rev 20170425 t)
[    3.208845] can: netlink gateway (rev 20190810) max_hops=1
[    3.214398] Bluetooth: RFCOMM TTY layer initialized
[    3.219143] Bluetooth: RFCOMM socket layer initialized
[    3.224251] Bluetooth: RFCOMM ver 1.11
[    3.227964] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    3.233233] Bluetooth: BNEP filters: protocol multicast
[    3.238427] Bluetooth: BNEP socket layer initialized
[    3.243356] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[    3.249238] Bluetooth: HIDP socket layer initialized
[    3.254310] 9pnet: Installing 9P2000 support
[    3.258434] Key type dns_resolver registered
[    3.262985] registered taskstats version 1
[    3.266704] Loading compiled-in X.509 certificates
[    3.271933] Btrfs loaded, crc32c=crc32c-generic
[    3.286814] ff000000.serial: ttyPS1 at MMIO 0xff000000 (irq = 40, base_baud = 6249999) is a xuartps
[    3.290752] ff010000.serial: ttyPS0 at MMIO 0xff010000 (irq = 41, base_baud = 6249999) is a xuartps
[    3.299519] of-fpga-region fpga-full: FPGA Region probed
[    3.305872] xilinx-dpdma fd4c0000.dma: Xilinx DPDMA engine is probed
[    3.311069] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
[    3.317883] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
[    3.324799] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
[    3.331722] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
[    3.338643] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
[    3.345559] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
[    3.352483] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
[    3.359401] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
[    3.366417] xilinx-zynqmp-dma ffa80000.dma: ZynqMP DMA driver Probe success
[    3.373239] xilinx-zynqmp-dma ffa90000.dma: ZynqMP DMA driver Probe success
[    3.380165] xilinx-zynqmp-dma ffaa0000.dma: ZynqMP DMA driver Probe success
[    3.387088] xilinx-zynqmp-dma ffab0000.dma: ZynqMP DMA driver Probe success
[    3.394002] xilinx-zynqmp-dma ffac0000.dma: ZynqMP DMA driver Probe success
[    3.400918] xilinx-zynqmp-dma ffad0000.dma: ZynqMP DMA driver Probe success
[    3.407841] xilinx-zynqmp-dma ffae0000.dma: ZynqMP DMA driver Probe success
[    3.414763] xilinx-zynqmp-dma ffaf0000.dma: ZynqMP DMA driver Probe success
[    3.421931] xilinx-psgtr fd400000.zynqmp_phy: Lane:1 type:8 protocol:4 pll_locked:yes
[    3.432398] xilinx-dp-snd-codec fd4a0000.zynqmp-display:zynqmp_dp_snd_codec0: Xilinx DisplayPort Sound Codec probed
[    3.439942] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm0: Xilinx DisplayPort Sound PCM probed
[    3.447691] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm1: Xilinx DisplayPort Sound PCM probed
[    3.456016] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[    3.467650] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[    3.480182] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: Xilinx DisplayPort Sound Card probed
[    3.489952] OF: graph: no port node found in /amba/zynqmp-display@fd4a0000
[    3.496831] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    3.503265] [drm] No driver support for vblank timestamp query.
[    3.509258] xlnx-drm xlnx-drm.0: bound fd4a0000.zynqmp-display (ops 0xffffffc010c97038)
[    3.660422] Console: switching to colour frame buffer device 128x48
[    3.677696] zynqmp-display fd4a0000.zynqmp-display: fb0: xlnxdrmfb frame buffer device
[    3.685831] [drm] Initialized xlnx 1.0.0 20130509 for fd4a0000.zynqmp-display on minor 0
[    3.693645] zynqmp-display fd4a0000.zynqmp-display: ZynqMP DisplayPort Subsystem driver probed
[    3.703510] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[    3.708701] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[    3.714873] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[    3.721102] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[    3.727351] dwc3-of-simple ff9d0000.usb0: dwc3_simple_set_phydata: Can't find usb3-phy
[    3.735436] dwc3 fe200000.dwc3: Failed to get clk 'ref': -2
[    3.740986] dwc3-of-simple ff9e0000.usb1: dwc3_simple_set_phydata: Can't find usb3-phy
[    3.748728] dwc3 fe300000.dwc3: Failed to get clk 'ref': -2
[    3.754852] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 30
[    3.760449] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    3.765255] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
[    3.772985] xhci-hcd xhci-hcd.0.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000202010010
[    3.782214] xhci-hcd xhci-hcd.0.auto: irq 50, io mem 0xfe300000
[    3.788327] cdns-wdt fd4d0000.watchdog: Xilinx Watchdog Timer with timeout 60s
[    3.795543] cdns-wdt ff150000.watchdog: Xilinx Watchdog Timer with timeout 10s
[    3.803541] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.04
[    3.810664] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.817832] usb usb1: Product: xHCI Host Controller
[    3.822674] usb usb1: Manufacturer: Linux 5.4.0-xilinx-v2020.1 xhci-hcd
[    3.829251] usb usb1: SerialNumber: xhci-hcd.0.auto
[    3.834617] hub 1-0:1.0: USB hub found
[    3.837836] hub 1-0:1.0: 1 port detected
[    3.841933] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    3.847165] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
[    3.854777] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0 SuperSpeed
[    3.861383] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[    3.869374] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.04
[    3.877530] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.884697] usb usb2: Product: xHCI Host Controller
[    3.889543] usb usb2: Manufacturer: Linux 5.4.0-xilinx-v2020.1 xhci-hcd
[    3.896113] usb usb2: SerialNumber: xhci-hcd.0.auto
[    3.901065] mmc0: SDHCI controller on ff160000.mmc [ff160000.mmc] using ADMA 64-bit
[    3.910070] hub 2-0:1.0: USB hub found
[    3.912399] hub 2-0:1.0: 1 port detected
[    3.938977] mmc1: SDHCI controller on ff170000.mmc [ff170000.mmc] using ADMA 64-bit
[    3.944277] rtc_zynqmp ffa60000.rtc: setting system clock to 1970-01-01T00:00:07 UTC (7)
[    3.949039] of_cfs_init
[    3.951483] of_cfs_init: OK
[    3.954361] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    3.978543] mmc1: new high speed SDIO card at address 0001
[    4.016658] mmc0: error -110 whilst initialising SD card
[    4.091103] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    4.091983] clk: Not disabling unused clocks
[    4.096225] ALSA device list:
[    4.099161]   #0: DisplayPort monitor
[    4.100978] random: fast init done
[    4.102882] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    4.114735] cfg80211: failed to load regulatory.db
[    4.119494] Warning: unable to open an initial console.
[    4.124851] Waiting for root device /dev/mmcblk0p2...
[    4.190979] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[    4.339471] usb 1-1: New USB device found, idVendor=0424, idProduct=2744, bcdDevice= 2.05
[    4.341991] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    4.349090] usb 1-1: Product: USB2744
[    4.352721] usb 1-1: Manufacturer: Microchip Tech
[    4.405406] hub 1-1:1.0: USB hub found
[    4.405480] hub 1-1:1.0: 4 ports detected
[    4.754976] usb 1-1.1: new high-speed USB device number 3 using xhci-hcd
[    4.867790] usb 1-1.1: New USB device found, idVendor=0b95, idProduct=1780, bcdDevice= 0.01
[    4.870486] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    4.877768] usb 1-1.1: Product: GU-1000T
[    4.881651] usb 1-1.1: Manufacturer: PLANEX COM. Inc.
[    4.886667] usb 1-1.1: SerialNumber: 020707
[    5.299475] asix 1-1.1:1.0 eth0: register 'asix' at usb-xhci-hcd.0.auto-1.1, ASIX AX88178 USB 2.0 Ethernet, 00:22:cf:00:0c:37
[    5.382975] usb 1-1.4: new high-speed USB device number 4 using xhci-hcd
[    5.483665] usb 1-1.4: New USB device found, idVendor=0424, idProduct=2740, bcdDevice= 2.00
[    5.486358] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    5.493639] usb 1-1.4: Product: Hub Controller
[    5.498042] usb 1-1.4: Manufacturer: Microchip Tech

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

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる1(Micro SD カードの準備)

ZynqMP-FPGA-Linux が Linux Kernel Version v5.4.0 になったということで、”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る5(Vitis 2020.1 で作成したアプリを動作されるが動かない!)”でビルドされた sd_card.img を MicroSD カードに書いて、Ultra96V2 で起動してみたが、 PetaLinux がブートしなかった。しかし、”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る4(Vitis 2020.1 でアプリケーション・プロジェクトを作成)”で、 binary_container_1.xclbin, vadd アプリケーションが生成されているので、これらを動かしてみたいということで、 ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにした。

ここからは、ZynqMP-FPGA-Linux/doc/install/ultra96v2.md に従ってやっていこう。

最初に ZynqMP-FPGA-Linux を git clone する。
git clone https://github.com/ikwzm/ZynqMP-FPGA-Linux.git
ZynqMP-FPGA-Linux201_1_200701.png

cd ZynqMP-FPGA-Linux
git checkout v2020.1.1
git lfs pull

ZynqMP-FPGA-Linux201_2_200701.png

次に MicroSD カードをフォーマットする。フォーマットの仕方は”Ultra96-V2 に ikwzm/ZynqMP-FPGA-Linux をインストール1”を参考にした。ただし、 mkfs は以下のコマンドを使用した。
sudo mkfs.msdos -n BOOT /dev/sdf1
sudo mkfs.ext3 -L ROOTFS /dev/sdf2

ZynqMP-FPGA-Linux201_3_200701.png

BOOT, ROOTFS がマウントされた。
ZynqMP-FPGA-Linux201_4_200701.png

ZynqMP-FPGA-Linux/target/Ultra96-V2/boot ディレクトリの内容を /media/masaaki/BOOT にコピーした。
cp target/Ultra96-V2/boot/* /media/masaaki/BOOT/
ls /media/masaaki/BOOT/

ZynqMP-FPGA-Linux201_5_200701.png

ZynqMP-FPGA-Linux201_6_200701.png

/media/masaaki/ROOTFS/ に Root File System をコピーした。
sudo tar xfz debian10-rootfs-vanilla.tgz -C /media/masaaki/ROOTFS/
sync
ls /media/masaaki/ROOTFS/

ZynqMP-FPGA-Linux201_7_200701.png

deb パッケージを MicroSD カードの /home/fpga/debian にコピーする。
sudo mkdir /media/masaaki/ROOTFS/home/fpga/debian
sudo cp linux-image-5.4.0-xlnx-v2020.1-zynqmp-fpga_5.4.0-xlnx-v2020.1-zynqmp-fpga-1_arm64.deb /media/masaaki/ROOTFS/home/fpga/debian
sudo cp linux-headers-5.4.0-xlnx-v2020.1-zynqmp-fpga_5.4.0-xlnx-v2020.1-zynqmp-fpga-1_arm64.deb /media/masaaki/ROOTFS/home/fpga/debian
sudo cp fclkcfg-5.4.0-xlnx-v2020.1-zynqmp-fpga_1.3.0-1_arm64.deb /media/masaaki/ROOTFS/home/fpga/debian
sudo cp u-dma-buf-5.4.0-xlnx-v2020.1-zynqmp-fpga_3.0.1-0_arm64.deb /media/masaaki/ROOTFS/home/fpga/debian

ZynqMP-FPGA-Linux201_8_200702.png

ls /media/masaaki/ROOTFS/home/fpga/debian
ZynqMP-FPGA-Linux201_9_200702.png

MicroSD カードの ROOTFS/mnt/boot ディレクトリを作って、ROOTFS/etc/fstab に 1 行追加するのだが、 sudo cat ではアクセスできなかったので、sudo su で root になって行った。それでも、行のTAB が無くなってしまったので、 vi で修正した。
sudo mkdir /media/masaaki/ROOTFS/mnt/boot
sudo su
cat <<EOT >> /media/masaaki/ROOTFS/etc/fstab
/dev/mmcblk0p1  /mnt/boot   auto    defaults    0   0
EOT
vi /media/masaaki/ROOTFS/etc/fstab

ZynqMP-FPGA-Linux201_10_200702.png

Vi で TAB を入力した。
ZynqMP-FPGA-Linux201_11_200702.png

more /media/masaaki/ROOTFS/etc/fstab
ZynqMP-FPGA-Linux201_12_200702.png

大丈夫そうだ。

次に、 Ultra96-V2 の無線LAN の設定を行う。
wpa_passphrase コマンドで psk を取得する。なお、SSID と PASSWORD は秘密だ。
wpa_passphrase ssssssss ppppppppp
ZynqMP-FPGA-Linux201_13_200702.png

今度は、最初から vi で wlan0 を設定した。
vi /media/masaaki/ROOTFS/etc/network/interfaces.d/wlan0
ZynqMP-FPGA-Linux201_14_200702.png

lsblk で MicroSD カードの情報を見てから、ファイル・マネージャーから BOOT と ROOTFS をアンマウントした。
  1. 2020年07月03日 04:43 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Windows のパスの長さの制限 260 文字を解除

これまで、Windows のパスの長さの制限の 260 文字にどれだけ苦しめられていたか分かりません。仕方ないので、subst コマンドで Vivado プロジェクトのフォルダを z: や y: に割り当て使っていました。Viavdo はとっても深くフォルダを掘ってしまうので、すぐにパスの長さが 260 文字超えちゃってエラーになっちゃうんですよね。

昨日、ittou_ogami さんに教えていただいたのは、”Windows 10で既定の256文字パス制限(MAX_PATH)を変更する方法”でしたが、ちょっとレジストリエディタを使用して面倒なのと、画像が拡大できないので、よく分からなかったため”【Windows】パスの260文字制限の解除方法”を真似してやってみました。

早速やってみましょう。
最初に、Windows 10 で左下のウインドウマークを右クリックして右クリックメニューから Windows PowerShell (管理者)を選択します。
レジストリ「LongPathsEnabled」設定が 0 だと、ロング・パスが無効だそうです。
(Get-Item -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem").GetValue("LongPathsEnabled")
コマンドを実行すると 0 でした。無効です。
win260limit_1_200701.png

(Get-Item -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem")
コマンドを実行すると、レジストリのリストが見えます。確かに、上から 3 つ目の” LongPathsEnable ”は 0 になっているが分かります。
win260limit_2_200701.png

LongPathsEnable を 1 にします。
Set-ItemProperty "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" -Name LongPathsEnabled -value 1
コマンドを実行しました。

もう一度、
(Get-Item -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem")
コマンドを実行すると、上から 3 つ目の” LongPathsEnable ”は 1 になっているのが分かります。
win260limit_3_200701.png

これで、パスの長さが 260 文字の制限は外れたはず。PetaLinux のビルドをもう一度やってみます。
  1. 2020年07月02日 04:20 |
  2. WSL2
  3. | トラックバック:0
  4. | コメント:0