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

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

FPGAの部屋

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

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる9(ディスプレイに出力できない)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる8(マイナス・スラックを解消する)”の続き。

ラプラシアン・フィルタを”High Performance Imaging”の Vivado 2019.1 プロジェクトに追加し、前回はそのマイナス・スラックを解消した。今回は、実機で動作を確認したが、動作しなかった。昨日中、いろいろと試していたのだが、動作しなかった。

最初にやることは、AXI4-Stream Switch IP の設定を行って、ラプラシアン・フィルタを通さずにスルーにして、画像がDisplayPort に出力されるか見ることだ。
まずは、 xparameters.h を見た。AXIS_SWITCH を探した。
genasys_zu_filter_44_200830.png

AXIS_SWITCH_0 も AXIS_SWITCH_1 もアドレスマップされている。
AXIS_SWITCH_0 から AXIS_SWITCH_1 にスルーになるように設定した。

     // axis_switch0
     Xil_Out32(((uint32_t)XPAR_AXIS_SWITCH_0_BASEADDR+(uint32_t)0x40), 0);
     Xil_Out32(((uint32_t)XPAR_AXIS_SWITCH_0_BASEADDR+(uint32_t)0x44), 0x80000000);
     Xil_Out32(XPAR_AXIS_SWITCH_0_BASEADDR, 0x2); // Comit registers

     // axis_switch1
     Xil_Out32(((uint32_t)XPAR_AXIS_SWITCH_1_BASEADDR+(uint32_t)0x40), 0);
     Xil_Out32(XPAR_AXIS_SWITCH_1_BASEADDR, 0x2); // Comit registers


これで、ディスプレイにカメラ画像を出力できなかった。

Vivado Analyzer を使用して、データを見たところ、v_gamma_lut_0 の m_axis_video 出力と同じデータが axis_switch_0 と axis_switch_1 に流れているのが確認できた。
genasys_zu_filter_45_200830.png

また ila を追加して、PS の dp_live_video_in にデータが流れているが確認できたが、やはりディスプレイに出力できない。

追加した axis_switch_0 と axis_switch_1 、ラプラシアン・フィルタ IP を除けば、カメラ画像をディスプレイに出力することができている。とっても謎だ?

ラプラシアン・フィルタ IP をスルー出力できるように変更して、ガンマ補正 IP と VDMA の間に入れてみたが、やはりダメだった。
現在は、ラプラシアン・フィルタ IP を VDMA の後に入れて見たが、やはり、同様にディスプレイにカメラ画像が出力できなかった。

現在のラプラシアン・フィルタ IP のソースコードを示す。

// lap_filter_RBG10.cpp
// 2020/08/24 by marsee
// RBG 10ビットずつ
// 2020/08/30: 引数に pass を追加。pass = 0 の時入力をスルー出力する
//

#include <stdio.h>
#include <string.h>
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>

#include "lap_filter_RBG10.h"

int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2);
int conv_rgb2y(int rgb);

int lap_filter_rbg10(hls::stream<ap_axis<32,1,1,1> >& ins, hls::stream<ap_axis<32,1,1,1> >& outs, int pass){
#pragma HLS INTERFACE s_axilite port=pass
#pragma HLS INTERFACE axis register both port=ins
#pragma HLS INTERFACE axis register both port=outs
#pragma HLS INTERFACE s_axilite port=return

    ap_axis<32,1,1,1> pix;
    ap_axis<32,1,1,1> lap;

    unsigned int line_buf[2][HORIZONTAL_PIXEL_WIDTH];
#pragma HLS array_partition variable=line_buf block factor=2 dim=1
#pragma HLS resource variable=line_buf core=RAM_2P

    int pix_mat[3][3];
#pragma HLS array_partition variable=pix_mat complete

    int lap_fil_val;

    Loop1 : do {    // user が 1になった時にフレームがスタートする
#pragma HLS LOOP_TRIPCOUNT min=1 max=1 avg=1
        ins >> pix;
    } while(pix.user == 0);

    Loop2 : for (int y=0; y<VERTICAL_PIXEL_WIDTH; y++){
        Loop3 : for (int x=0; x<HORIZONTAL_PIXEL_WIDTH; x++){
#pragma HLS PIPELINE II=1
            if (!(x==0 && y==0))    // 最初の入力はすでに入力されている
                ins >> pix; // AXI4-Stream からの入力

            Loop4 : for (int k=0; k<3; k++){
                Loop5 : for (int m=0; m<2; m++){
#pragma HLS UNROLL
                    pix_mat[k][m] = pix_mat[k][m+1];
                }
            }
            pix_mat[0][2] = line_buf[0][x];
            pix_mat[1][2] = line_buf[1][x];

            int y_val = conv_rgb2y(pix.data);
            pix_mat[2][2] = y_val;

            line_buf[0][x] = line_buf[1][x];    // 行の入れ替え
            line_buf[1][x] = y_val;

            lap_fil_val = laplacian_fil(    pix_mat[0][0], pix_mat[0][1], pix_mat[0][2],
                                            pix_mat[1][0], pix_mat[1][1], pix_mat[1][2],
                                            pix_mat[2][0], pix_mat[2][1], pix_mat[2][2]);
            lap.data = (lap_fil_val<<20)+(lap_fil_val<<10)+lap_fil_val; // RBG同じ値を入れる

            if (x<2 || y<2) // 最初の2行とその他の行の最初の2列は無効データなので0とする
                lap.data = 0;

            if (x==0 && y==0) // 最初のデータでは、TUSERをアサートする
                lap.user = 1;
            else
                lap.user = 0;

            if (x == (HORIZONTAL_PIXEL_WIDTH-1))    // 行の最後で TLAST をアサートする
                lap.last = 1;
            else
                lap.last = 0;

            if (pass == 0){ // 画像をそのまま出力
                lap.data = pix.data;
                lap.last = pix.last;
                lap.user = pix.user;
            }

            outs << lap;    // AXI4-Stream へ出力
        }
    }

    return 0;
}

// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y =  0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
// 2020/08/24 : RBG 10ビットずつとした
int conv_rgb2y(int rgb){
    int r, g, b, y_f;
    int y;

    g = rgb & 0x3ff;
    b = (rgb>>10) & 0x3ff;
    r = (rgb>>20) & 0x3ff;

    y_f = 306*r + 601*g + 117*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に1024倍した
    y = y_f >> 10; // 1024で割る

    return(y);
}

// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1  8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2)
{
    int y;

    y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
    if (y<0)
        y = -y;
    else if (y>1023)
        y = 1023;
    return(y);
}


なお、カメラ画像は 1280 x 720 の画像だったので、ヘッダファイルを変更している。

// lap_filter_RBG10.h
// 2020/08/24 by marsee
//

#define HORIZONTAL_PIXEL_WIDTH 1280
#define VERTICAL_PIXEL_WIDTH 720

//#define HORIZONTAL_PIXEL_WIDTH 64
//#define VERTICAL_PIXEL_WIDTH 48

#define ALL_PIXEL_VALUE (HORIZONTAL_PIXEL_WIDTH*VERTICAL_PIXEL_WIDTH)


SDK での ラプラシアン・フィルタ IP の制御用コードを示す。

    XLap_filter_rbg10 lap_f_rbg10;
    XLap_filter_rbg10_Initialize(&lap_f_rbg10, 0);
    XLap_filter_rbg10_Set_pass(&lap_f_rbg10, 0); // 通過
    XLap_filter_rbg10_Start(&lap_f_rbg10);
    XLap_filter_rbg10_EnableAutoRestart(&lap_f_rbg10);


ラプラシアン・フィルタ IP の部分のブロックデザインを示す。
VDMA のすぐ後に入れてある。
genasys_zu_filter_46_200830.png
  1. 2020年08月31日 05:18 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる8(マイナス・スラックを解消する)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる7(Vivado HLSでラプラシアン・フィルタを実装する4)”の続き。

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる7(Vivado HLSでラプラシアン・フィルタを実装する4)”でラプラシアン・フィルタを”High Performance Imaging”の Vivado 2019.1 プロジェクトに追加したのだが、やはりマイナス・スラックが出ている。今回は、これを解消したい。最初に何処でマイナス・スラックが出ているかを確認して、クロック間のタイミング違反だったら Clock Domain Closing 解析を行って問題ないようだったら False Path を設定しよう。

最初に、 Open Implementation Design を開いてタイミング違反を見た。
genasys_zu_filter_25_200828.png

Inter-Clock Paths にタイミング違反があるのが見える。

最初に clk_out1_desgin_1_clk_wiz_1_0 から clk_pl_0 のパスにタイミング違反があるようだ。
genasys_zu_filter_26_200828.png

2番めに clk_out1_desgin_1_clk_wiz_1_0 から mipi_phy_if_0_clk_p_FIFO_WRCLK_OUT のパスにタイミング違反がある。
genasys_zu_filter_27_200828.png

clk_pl_0 から clk_out1_design_1_clk_wiz_0_0 のパスにタイミング違反がある。
genasys_zu_filter_28_200828.png

これらのクロック間の処理が適切かどうかを確認する。
確認方法はVviado の Open Implementation Design を開いている状態で、Reports メニューから Timing -> Report CDC... を選択する。
Report CDC ダイアログが開く。
From に clk_out1_desgin_1_clk_wiz_1_0 を設定し、To に clk_pl_0 を設定した。
genasys_zu_filter_29_200828.png

Unsafe が 1 個あるが ila へのパスだから問題ない。
genasys_zu_filter_30_200828.png

次に、同様に、From に clk_out1_desgin_1_clk_wiz_1_0 を設定し、To に mipi_phy_if_0_clk_p_FIFO_WRCLK_OUT を設定した。
genasys_zu_filter_31_200828.png

このパスには Unsafe が無いので問題ない。
genasys_zu_filter_32_200828.png

最後に、From に clk_pl_0 を設定し、To に clk_out1_desgin_1_clk_wiz_0_0 を設定した。
genasys_zu_filter_33_200828.png

こちらは Unsafe がたんまりあるのだが、ila は関係ないし、リセット回路から vtc への Max Delay の Unsafe なので、(リセットは確かめてないけど、複数クロック・リセットしているだろうし)無視することにした。

更に、クロック間のタイミング・エラーも vtc へのが無いし大丈夫だろう。
genasys_zu_filter_35_200828.png

Open Implementation Design の Edit Timing Constrains をクリックして False Path を設定する。(今は False Path を設定するのが正規な方法ではないかも知れない?)
genasys_zu_filter_36_200828.png

まずは、 clk_out1_desgin_1_clk_wiz_1_0 から clk_pl_0 のパスに False Path を設定する。
genasys_zu_filter_37_200828.png

clk_out1_desgin_1_clk_wiz_1_0 から clk_pl_0 のパスに False Path を設定できた。
genasys_zu_filter_38_200828.png

clk_out1_desgin_1_clk_wiz_1_0 から mipi_phy_if_0_clk_p_FIFO_WRCLK_OUT のパスと clk_pl_0 から clk_out1_design_1_clk_wiz_0_0 のパスに False Path を設定することができた。
genasys_zu_filter_39_200828.png

io.xdc ファイルに制約をセーブした。

もう一度、インプリメンテーション、ビットストリームの生成を行ったところ、マイナス・スラックが無くなった。
genasys_zu_filter_40_200828.png
  1. 2020年08月29日 10:54 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる7(Vivado HLSでラプラシアン・フィルタを実装する4)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる6(Vivado HLSでラプラシアン・フィルタを実装する3)”の続き。

High Performance Imaging”の Vivado 2019.1 プロジェクトにラプラシアン・フィルタを入れたいということで、前回は、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行ってラプラシアン・フィルタ IP を作成した。今回は、Vivado HLS 2019.1 で作成したラプラシアン・フィルタ IP を Vivado 2019.1 のブロックデザインに追加した。

Vivado 2019.1 の diplay_port プロジェクトのディレクトリに lap_filter_rbg10 を作成し、 xilinx_com_hls_lap_filter_rbg10_1_0.zip を解凍して展開した。
genasys_zu_filter_17_200827.png

IP としてブロックデザインで使用するために lap_filter_rbg10 を IP Catalog に追加する。
Vivado 2019.1 の GUI で、左の Flow Navigator の IP Catalog をクリックする。

IP Catalog が表示されるので、そのウインドウで右クリックし、右クリックメニューから Add Repository... を選択した。
Repositories ダイアログが表示された。
lap_fitler_rbg10 ディレクトリを選択した。
genasys_zu_filter_18_200827.png

Add Repository ダイアログが表示された。
IP として lap_filter_rbg10 が登録された。
genasys_zu_filter_19_200827.png

IP Catalog にも lap_filter_rbg10 が登録された。
genasys_zu_filter_20_200827.png

ブロックデザインに AXI4-Stream Switch を 2 個、 lap_filter_rbg10 を 1 個、実装した。
1 つのパスは画像データをそのまま通して、もう 1 つのパスは lap_filter_rbg10 を通して出力する。
ブロックデザインを示す。
genasys_zu_filter_21_200827.png
genasys_zu_filter_22_200827.png

Address Editor を示す。
genasys_zu_filter_23_200827.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。
結果を示す。
genasys_zu_filter_24_200827.png

しかし、回路は動作しているのだが、赤いマイナス・スラックがどうしても気になる。次回はこのマイナス・スラックを解析して、解消したい。
  1. 2020年08月28日 05:10 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる6(Vivado HLSでラプラシアン・フィルタを実装する3)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる5(Vivado HLSでラプラシアン・フィルタを実装する2)”の続き。

High Performance Imaging”の Vivado 2019.1 プロジェクトにラプラシアン・フィルタを入れたいということで、 Gamma LUT の m_axis_video の出力に入れることにした。そのAXI4-Stream の画像フォーマットを調査した。
前回は、 Gamma LUT の m_axis_video の出力に入れるためのラプラシアン・フィルタの Vivado HLS 2019.2 プロジェクトを作成し、C シミュレーションを行った。今回は、その続きで、ラプラシアン・フィルタの C コードの合成、C/RTL 協調シミュレーション、Export RTL を行ってラプラシアン・フィルタ IP を作成した。

さて、C コードの合成を行った。結果を示す。
genasys_zu_filter_10_200826.png
genasys_zu_filter_11_200826.png

Latency が 3078 クロックとなっている。総ピクセル数は 64 x 48 ピクセル = 3072 ピクセルなので、 6 クロック余計なだけである。性能的には問題ない。
Loop2_Loop3 の Iteration Latency は 5 クロックで Initiation Interval が 1 クロックとなった。
さて、Analysis ウインドウを見てみよう。Loop2_Loop3 の Iteration Latency が 5 クロックというのが視覚的に分かる。
genasys_zu_filter_12_200826.png

C/RTL協調 シミュレーションを行った。
Latency は 3103 クロックだった。ここでも大きく増えてはいないので、問題ない。
genasys_zu_filter_13_200826.png

C/RTL協調 シミュレーションの波形を観察した。
genasys_zu_filter_14_200826.png

Export RTL を行った。結果を示す。
genasys_zu_filter_15_200826.png

CP achieved post-implementation は 5.792 ns で目標値を満たしている。
lap_filter_rbg10 IP は lap_filter_RBG10/solution1/impl/ip にある。 xilinx_com_hls_lap_filter_rbg10_1_0.zip が圧縮されている IP となる。
genasys_zu_filter_16_200827.png
  1. 2020年08月27日 04:50 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる5(Vivado HLSでラプラシアン・フィルタを実装する2)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる4(Vivado HLSでラプラシアン・フィルタを実装する1)”の続き。

High Performance Imaging”の Vivado 2019.1 プロジェクトにラプラシアン・フィルタを入れたいということで、 Gamma LUT の m_axis_video の出力に入れることにした。そのAXI4-Stream の画像フォーマットを調査した。
今回は、 Gamma LUT の m_axis_video の出力に入れるためのラプラシアン・フィルタの Vivado HLS 2019.2 プロジェクトを作成し、C シミュレーションを行った。

ヘッダ・ファイルの lap_filter_RBG10.h を示す。

// lap_filter_RBG10.h
// 2020/08/24 by marsee
//

//#define HORIZONTAL_PIXEL_WIDTH    1920
//#define VERTICAL_PIXEL_WIDTH    1080

#define HORIZONTAL_PIXEL_WIDTH    64
#define VERTICAL_PIXEL_WIDTH    48

#define ALL_PIXEL_VALUE    (HORIZONTAL_PIXEL_WIDTH*VERTICAL_PIXEL_WIDTH)


ラプラシアン・フィルタのソースコードの lap_filter_RBG10.cpp を示す。

// lap_filter_RBG10.cpp
// 2020/08/24 by marsee
// RBG 10ビットずつ
//

#include <stdio.h>
#include <string.h>
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>

#include "lap_filter_RBG10.h"

int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2);
int conv_rgb2y(int rgb);

int lap_filter_rbg10(hls::stream<ap_axis<32,1,1,1> >& ins, hls::stream<ap_axis<32,1,1,1> >& outs){
#pragma HLS INTERFACE axis register both port=ins
#pragma HLS INTERFACE axis register both port=outs
#pragma HLS INTERFACE s_axilite port=return

    ap_axis<32,1,1,1> pix;
    ap_axis<32,1,1,1> lap;

    unsigned int line_buf[2][HORIZONTAL_PIXEL_WIDTH];
#pragma HLS array_partition variable=line_buf block factor=2 dim=1
#pragma HLS resource variable=line_buf core=RAM_2P

    int pix_mat[3][3];
#pragma HLS array_partition variable=pix_mat complete

    int lap_fil_val;

    Loop1 : do {    // user が 1になった時にフレームがスタートする
#pragma HLS LOOP_TRIPCOUNT min=1 max=1 avg=1
        ins >> pix;
    } while(pix.user == 0);

    Loop2 : for (int y=0; y<VERTICAL_PIXEL_WIDTH; y++){
        Loop3 : for (int x=0; x<HORIZONTAL_PIXEL_WIDTH; x++){
#pragma HLS PIPELINE II=1
            if (!(x==0 && y==0))    // 最初の入力はすでに入力されている
                ins >> pix; // AXI4-Stream からの入力

            Loop4 : for (int k=0; k<3; k++){
                Loop5 : for (int m=0; m<2; m++){
#pragma HLS UNROLL
                    pix_mat[k][m] = pix_mat[k][m+1];
                }
            }
            pix_mat[0][2] = line_buf[0][x];
            pix_mat[1][2] = line_buf[1][x];

            int y_val = conv_rgb2y(pix.data);
            pix_mat[2][2] = y_val;

            line_buf[0][x] = line_buf[1][x];    // 行の入れ替え
            line_buf[1][x] = y_val;

            lap_fil_val = laplacian_fil(    pix_mat[0][0], pix_mat[0][1], pix_mat[0][2],
                                            pix_mat[1][0], pix_mat[1][1], pix_mat[1][2],
                                            pix_mat[2][0], pix_mat[2][1], pix_mat[2][2]);
            lap.data = (lap_fil_val<<20)+(lap_fil_val<<10)+lap_fil_val; // RBG同じ値を入れる

            if (x<2 || y<2) // 最初の2行とその他の行の最初の2列は無効データなので0とする
                lap.data = 0;

            if (x==0 && y==0) // 最初のデータでは、TUSERをアサートする
                lap.user = 1;
            else
                lap.user = 0;

            if (x == (HORIZONTAL_PIXEL_WIDTH-1))    // 行の最後で TLAST をアサートする
                lap.last = 1;
            else
                lap.last = 0;

            outs << lap;    // AXI4-Stream へ出力
        }
    }

    return 0;
}

// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y =  0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
// 2020/08/24 : RBG 10ビットずつとした
int conv_rgb2y(int rgb){
    int r, g, b, y_f;
    int y;

    g = rgb & 0x3ff;
    b = (rgb>>10) & 0x3ff;
    r = (rgb>>20) & 0x3ff;

    y_f = 306*r + 601*g + 117*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に1024倍した
    y = y_f >> 10; // 1024で割る

    return(y);
}

// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1  8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2)
{
    int y;

    y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
    if (y<0)
        y = -y;
    else if (y>1023)
        y = 1023;
    return(y);
}


テストベンチの lap_filter_RBG10_tb.cpp を示す。

// lap_filter_RBG10_tb.cpp
// 2020/08/24 by marsee
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ap_int.h>
#include <hls_stream.h>
#include <iostream>
#include <fstream>
#include <ap_axi_sdata.h>

#include "lap_filter_RBG10.h"
#include "bmp_header.h"

int lap_filter_rbg10(hls::stream<ap_axis<32,1,1,1> >& ins, hls::stream<ap_axis<32,1,1,1> >& outs);

int laplacian_fil_soft(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2);
int conv_rgb2y_soft(int rgb);
int lap_filter_rbg10_soft(hls::stream<ap_axis<32,1,1,1> >& ins, hls::stream<ap_axis<32,1,1,1> >& outs, int width, int height);

#define CLOCK_PERIOD 10

int main()
{
    using namespace std;

    hls::stream<ap_axis<32,1,1,1> > ins;
    hls::stream<ap_axis<32,1,1,1> > ins_soft;
    hls::stream<ap_axis<32,1,1,1> > outs;
    hls::stream<ap_axis<32,1,1,1> > outs_soft;
    ap_axis<32,1,1,1> pix;
    ap_axis<32,1,1,1> vals;
    ap_axis<32,1,1,1> vals_soft;

    BITMAPFILEHEADER bmpfhr; // BMPファイルのファイルヘッダ(for Read)
    BITMAPINFOHEADER bmpihr; // BMPファイルのINFOヘッダ(for Read)
    FILE *fbmpr, *fbmpw;
    int *rd_bmp, *hw_lapd;
    int blue, green, red;

    if ((fbmpr = fopen("test.bmp", "rb")) == NULL){ // test.bmp をオープン
        fprintf(stderr, "Can't open test.bmp by binary read mode\n");
        exit(1);
    }
    // bmpヘッダの読み出し
    fread(&bmpfhr.bfType, sizeof(uint16_t), 1, fbmpr);
    fread(&bmpfhr.bfSize, sizeof(uint32_t), 1, fbmpr);
    fread(&bmpfhr.bfReserved1, sizeof(uint16_t), 1, fbmpr);
    fread(&bmpfhr.bfReserved2, sizeof(uint16_t), 1, fbmpr);
    fread(&bmpfhr.bfOffBits, sizeof(uint32_t), 1, fbmpr);
    fread(&bmpihr, sizeof(BITMAPINFOHEADER), 1, fbmpr);

    // ピクセルを入れるメモリをアロケートする
    if ((rd_bmp =(int *)malloc(sizeof(int) * (bmpihr.biWidth * bmpihr.biHeight))) == NULL){
        fprintf(stderr, "Can't allocate rd_bmp memory\n");
        exit(1);
    }
    if ((hw_lapd =(int *)malloc(sizeof(int) * (bmpihr.biWidth * bmpihr.biHeight))) == NULL){
        fprintf(stderr, "Can't allocate hw_lapd memory\n");
        exit(1);
    }

    // rd_bmp にBMPのピクセルを代入。その際に、行を逆転する必要がある
    for (int y=0; y<bmpihr.biHeight; y++){
        for (int x=0; x<bmpihr.biWidth; x++){
            blue = fgetc(fbmpr);
            green = fgetc(fbmpr);
            red = fgetc(fbmpr);
            rd_bmp[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x] = ((green<<2) & 0x3ff) |
                    (((blue<<2) & 0x3ff)<<10) | (((red<<2) & 0x3ff)<<20);
        }
    }
    fclose(fbmpr);

    // ins に入力データを用意する
    for(int i=0; i<5; i++){ // dummy data
        pix.user = 0;
        pix.data = i;
        ins << pix;
    }

    for(int j=0; j < bmpihr.biHeight; j++){
        for(int i=0; i < bmpihr.biWidth; i++){
            pix.data = (ap_int<32>)rd_bmp[(j*bmpihr.biWidth)+i];

            if (j==0 && i==0)   // 最初のデータの時に TUSER を 1 にする
                pix.user = 1;
            else
                pix.user = 0;

            if (i == bmpihr.biWidth-1) // 行の最後でTLASTをアサートする
                pix.last = 1;
            else
                pix.last = 0;

            ins << pix;
            ins_soft << pix;
        }
    }

    lap_filter_rbg10(ins, outs);
    lap_filter_rbg10_soft(ins_soft, outs_soft, bmpihr.biWidth, bmpihr.biHeight);

    // ハードウェアとソフトウェアのラプラシアン・フィルタの値のチェック
    cout << endl;
    cout << "outs" << endl;
    for(int j=0; j < bmpihr.biHeight; j++){
        for(int i=0; i < bmpihr.biWidth; i++){
            outs >> vals;
            outs_soft >> vals_soft;
            ap_int<32> val = vals.data;
            ap_int<32> val_soft = vals_soft.data;

            hw_lapd[(j*bmpihr.biWidth)+i] = (int)val;

            if (val != val_soft){
                printf("ERROR HW and SW results mismatch i = %ld, j = %ld, HW = %d, SW = %d\n", i, j, (int)val, (int)val_soft);
                return(1);
            }
            if (vals.last)
                cout << "AXI-Stream is end" << endl;
        }
    }
    cout << "Success HW and SW results match" << endl;
    cout << endl;

    // ハードウェアのラプラシアンフィルタの結果を temp_lap.bmp へ出力する
    if ((fbmpw=fopen("temp_lap.bmp", "wb")) == NULL){
        fprintf(stderr, "Can't open temp_lap.bmp by binary write mode\n");
        exit(1);
    }
    // BMPファイルヘッダの書き込み
    fwrite(&bmpfhr.bfType, sizeof(uint16_t), 1, fbmpw);
    fwrite(&bmpfhr.bfSize, sizeof(uint32_t), 1, fbmpw);
    fwrite(&bmpfhr.bfReserved1, sizeof(uint16_t), 1, fbmpw);
    fwrite(&bmpfhr.bfReserved2, sizeof(uint16_t), 1, fbmpw);
    fwrite(&bmpfhr.bfOffBits, sizeof(uint32_t), 1, fbmpw);
    fwrite(&bmpihr, sizeof(BITMAPINFOHEADER), 1, fbmpw);

    // RGB データの書き込み、逆順にする
    for (int y=0; y<bmpihr.biHeight; y++){
        for (int x=0; x<bmpihr.biWidth; x++){
            green = (hw_lapd[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x] & 0x3ff)>>2;
            blue = ((hw_lapd[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x] >> 10) & 0x3ff)>>2;
            red = ((hw_lapd[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x]>> 20) & 0x3ff)>>2;

            fputc(blue, fbmpw);
            fputc(green, fbmpw);
            fputc(red, fbmpw);
        }
    }
    fclose(fbmpw);
    free(rd_bmp);
    free(hw_lapd);

    return 0;
}

int lap_filter_rbg10_soft(hls::stream<ap_axis<32,1,1,1> >& ins, hls::stream<ap_axis<32,1,1,1> >& outs, int width, int height){
    ap_axis<32,1,1,1> pix;
    ap_axis<32,1,1,1> lap;
    unsigned int **line_buf;
    int pix_mat[3][3];
    int lap_fil_val;
    int i;

    // line_buf の1次元目の配列をアロケートする
    if ((line_buf =(unsigned int **)malloc(sizeof(unsigned int *) * 2)) == NULL){
        fprintf(stderr, "Can't allocate line_buf[3][]\n");
        exit(1);
    }

    // メモリをアロケートする
    for (i=0; i<2; i++){
        if ((line_buf[i]=(unsigned int *)malloc(sizeof(unsigned int) * width)) == NULL){
            fprintf(stderr, "Can't allocate line_buf[%d]\n", i);
            exit(1);
        }
    }

    do {    // user が 1になった時にフレームがスタートする
        ins >> pix;
    } while(pix.user == 0);

    for (int y=0; y<height; y++){
        for (int x=0; x<width; x++){
            if (!(x==0 && y==0))    // 最初の入力はすでに入力されている
                ins >> pix; // AXI4-Stream からの入力

            for (int k=0; k<3; k++){
                for (int m=0; m<2; m++){
                    pix_mat[k][m] = pix_mat[k][m+1];
                }
            }
            pix_mat[0][2] = line_buf[0][x];
            pix_mat[1][2] = line_buf[1][x];

            int y_val = conv_rgb2y_soft(pix.data);
            pix_mat[2][2] = y_val;

            line_buf[0][x] = line_buf[1][x];    // 行の入れ替え
            line_buf[1][x] = y_val;

            lap_fil_val = laplacian_fil_soft(    pix_mat[0][0], pix_mat[0][1], pix_mat[0][2],
                                        pix_mat[1][0], pix_mat[1][1], pix_mat[1][2],
                                        pix_mat[2][0], pix_mat[2][1], pix_mat[2][2]);
            lap.data = (lap_fil_val<<20)+(lap_fil_val<<10)+lap_fil_val; // RGB同じ値を入れる

            if (x<2 || y<2) // 最初の2行とその他の行の最初の2列は無効データなので0とする
                lap.data = 0;

            if (x==0 && y==0) // 最初のデータでは、TUSERをアサートする
                lap.user = 1;
            else
                lap.user = 0;

            if (x == (HORIZONTAL_PIXEL_WIDTH-1))    // 行の最後で TLAST をアサートする
                lap.last = 1;
            else
                lap.last = 0;

            outs << lap;    // AXI4-Stream へ出力
        }
    }

    for (i=0; i<2; i++)
        free(line_buf[i]);
    free(line_buf);

    return 0;
}

// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y =  0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
int conv_rgb2y_soft(int rgb){
    int r, g, b, y_f;
    int y;

    g = rgb & 0x3ff;
    b = (rgb>>10) & 0x3ff;
    r = (rgb>>20) & 0x3ff;

    y_f = 306*r + 601*g + 117*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に1024倍した
    y = y_f >> 10; // 1024で割る

    return(y);
}

// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1  8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int laplacian_fil_soft(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2)
{
    int y;

    y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
    if (y<0)
        y = -y;
    else if (y>1023)
        y = 1023;
    return(y);
}


bmp_header.h は”ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる8(ソーベル・フィルタ編1)”を参照ください。

さて、Vivado HLS 2019.1 で lap_filter_RBG10 プロジェクトを作成した。
New Vivado HLS Project ダイアログの Project Configuration 画面を示す。
genasys_zu_filter_1_200824.png

New Vivado HLS Project ダイアログの Solution Configuration 画面を示す。
Clock Period は 6.667 ns つまり 150 MHz にして、Prat は xczu3eg-sfvc784-1-e に設定した。
genasys_zu_filter_2_200824.png

Vivado HLS 2019.1 で lap_filter_RBG10 プロジェクトを示す。
genasys_zu_filter_4_200825.png

C シミュレーションを実行した。
genasys_zu_filter_5_200825.png

成功した。問題ないようだ。
lap_filter_RBG10/solution1/csim/build ディレクトリを示す。
genasys_zu_filter_6_200825.png

temp_lap.bmp を見るとエッジが表示されているのが分かる。
なお、今回はシャープにエッジが出ていない様に見えるが、これは、今までは、マイナス側のエッジを切ってしまっていたが、今回は絶対値としたことで、マイナス側のエッジが表示されているからだ。
具体的には、 laplacian_fil() 関数の
if (y<0)
  y = -y;
の部分となる。以前は
 y = 0;
と書いてあった。
  1. 2020年08月26日 04:48 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる4(Vivado HLSでラプラシアン・フィルタを実装する1)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる3(Vivado 2019.2 編その2)”の続き。

High Performance Imaging”の Vivado 2019.1 プロジェクトは 2019.2 に変換することができなかった。最初から構築して見る方法もあるが、とりあえずは 2019.1 のままで使用しよう。Vivado 2019.1 のプロジェクトに今までいろいろと実装してきたフィルタを実装したい。最初にラプラシアン・フィルタを実装してみよう。

ラプラシアン・フィルタを入れる場所だが、カメラからの MIPI 信号をを受信して、Sensor Demosaic IP に入ってベイヤパターンを RBG 信号に変換後にガンマ補正をする Gamma LUT IP に入るが、その出力にラプラシアン・フィルタを入れようと思う。下の図の Gamma LUT の m_axis_video の出力に入れよう。
genasys_zu_filter_3_200825.png

さて、画像のフォーマットだが、Gamma LUT IP のパラメータを見ると、Sample per Clock が 1 クロックで、 Maximum Data Width が 10 ビットになっている。
genasys_zu_filter_7_200825.png

Gamma LUT v1.0 LogiCORE IP Product Guide PG285 December 6, 2019”の 11 , 12 ページの”Video Data”を見ると画像データのフォーマットが分かる。
12 ページの Figure 2-2: Dual Pixels per Clock, 10 bits per Component Mapping for RGB を引用する。
genasys_zu_filter_9_200825.png

これは Sample per Clock が 2 クロックで、 Maximum Data Width が 10 ビットの場合なので、Sample per Clock が 1 クロックで、 Maximum Data Width が 10 ビットの場合は、AXI4-Stream のデータ幅は 32 ビットでその内の [29:20] が Red , [19:10] が Blue, [9:0] が Green となる。 [31:30] は 0 パッディングだ。

Gamma LUT v1.0 LogiCORE IP Product Guide PG285 December 6, 2019”の 16 ページの VIDEO_FORMAT (0x0020) Register を引用する。

VIDEO_FORMAT (0x0020) Register
This register specifies the video format of the AXI4-Stream Video data.
• 0x0 RGB video format
• 0x1 YUV 4:4:4 video format


RGB と YUV の設定があるが、SDK の helloworld.c の XV_gamma_lut_Set_HwReg_video_format() で 0 を入れているので、RGB 確定だ。
genasys_zu_filter_8_200825.png

AXI4-Stream の画像データは 32 ビットでその内の [29:20] が Red , [19:10] が Blue, [9:0] が Green となる。 [31:30] は 0 パッディングということがわかったので、このデータ構造に合わせて、ラプラシアン・フィルタのデータ構造を作っていく。
  1. 2020年08月25日 04:15 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

ACRi ルームの Alveo U50 を使ってみた4(CNN を動作させてみた)

ACRi ルームの Alveo U50 を使ってみた3(ラプラシアンフィルタ)”の続き。

前回は、ACRi ルームの Alveo U50 を使用して、ラプラシアンフィルタを実装して動作させることができた。今回は、CNN を ACRi ルームの Alveo U50 で動作させてみよう。

今回実装する CNN は横 56 ピクセル x 10 行の画像から白線を検出して、右に行くか、直進するか左に行くの 3 出力を出力する CNN だ。これは、以前 Ultra96 ボードでカーネルを RTL カーネルとして使用したプロジェクトをそのまま使用している。つまり、Vivao HLS で作成した XO ファイルをVitis プロジェクトでカーネルとして使用しているわけだ。詳しくは、”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する5(Vitis 編)”辺りを参照して欲しい。

なお、余談になるが、今回のブログに書くに当たって、デバックしている途中で、ソースコードのバグも発見した。それは、任意精度固定データ型の量子化モードとオーバーフローモードが2番めの全結合層の重みとバイアスで関数の定義と違っていたことだ。Ultra96用のプロジェクトではこれでも通ってしまったようだが、今回の Alveo U50 ではエラーになった。

以前のUltra96 ボードでカーネルを RTL カーネルとして使用した Vivado HLS プロジェクトは”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する1(Vivado HLS 編 1)”を参照して欲しい。

さて、ACRi ルームの Alveo U50 が搭載されたマシンにログインして、進めていこう。この辺りの手順は”ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)”を参照して欲しい。

まずは、リモートデスクトップ接続した状態で、XRT の環境を設定する。
source /opt/xilinx/xrt/setup.sh

Vitis 2019.2 の環境を設定する。
source /tools/Xilinx/Vitis/2019.2/settings64.sh

ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)”のVivado HLS プロジェクトを ACRi ルームのファイルサーバーに SFTP でアップロードした。

Vivado HLS で新しいSolution を作成し、FPGA の型番を xcvu35p-fsvh2014-2-e に設定した。( IDA さん、教えていただいて、ありがとうございます)
C コードの合成をしたところ成功した。なお、動作周波数は 300 MHz とした。
ACRi_U50_66_200822.png
ACRi_U50_67_200822.png

すごい。。。ほとんどリソース消費していない。これだと、だいぶ大きな CNN でもいけるんじゃないだろうか?楽しみだ。マシンの性能も不安が無いし、とっても心強い。

Export RTL を行うと、all_layers_dnn.xo ファイルが生成された。
ACRi_U50_68_200822.png

all_layers_dnn.xo ファイルをカーネルに指定した Vitis 2019.2 のプロジェクトを作成した。やはり、vector addition のテンプレートを使用しないと実行時に失敗するので、使用した。もうビルドまで終了している。
ACRi_U50_69_200822.png

Vitis 2019.2 のプロジェクト all_layers_template2/src ディレクトリの中身を示す。
ACRi_U50_70_200822.png

Run Configuration を作成した。なお、[Run Configurations] ウィンドウで [Environment] タブに移動し、テーブルに設定されている LD_LIBRARY_PATH 変数を削除してある。
ACRi_U50_71_200822.png

実行したところ、成功した。
ACRi_U50_72_200822.png

ログを示す。

[Console output redirected to file:/home/u_marsee101/Vitis_Work/U50/2019.2/all_layers_template2/Hardware/all_layers_template2-Default.launch.log]
Using FPGA binary file specfied through the command line: ../binary_container_1.xclbin
Found Platform
Platform Name: Xilinx
Loading: '../binary_container_1.xclbin'
hw_error: i = 0 output = 0 t_test_num = 1
dot2[0] = 0.00000000 dot2_soft[0] = -6.89110470
dot2[1] = 0.00000000 dot2_soft[1] = 3.03815722
dot2[2] = 0.00000000 dot2_soft[2] = -3.19690108

hw_error: i = 25 output = 2 t_test_num = 1
sw_error: i = 25 output_soft = 2 t_test_num = 1
dot2[0] = 0.25000000 dot2_soft[0] = -3.77501726
dot2[1] = 0.12500000 dot2_soft[1] = -0.13269189
dot2[2] = 0.25000000 dot2_soft[2] = 1.61074853

hw_error: i = 30 output = 2 t_test_num = 1
sw_error: i = 30 output_soft = 2 t_test_num = 1
dot2[0] = 0.43750000 dot2_soft[0] = -4.67336369
dot2[1] = 0.40625000 dot2_soft[1] = 0.12951475
dot2[2] = 0.43750000 dot2_soft[2] = 1.71587336

sw_error: i = 31 output_soft = 2 t_test_num = 1
dot2[0] = -0.25000000 dot2_soft[0] = -5.31440449
dot2[1] = 0.90625000 dot2_soft[1] = 0.69655895
dot2[2] = -0.25000000 dot2_soft[2] = 1.00723171

sw_error: i = 35 output_soft = 2 t_test_num = 1
dot2[0] = 0.43750000 dot2_soft[0] = -5.15462875
dot2[1] = 0.50000000 dot2_soft[1] = 0.19586089
dot2[2] = 0.43750000 dot2_soft[2] = 1.79063916

sw_error: i = 36 output_soft = 2 t_test_num = 1
dot2[0] = -0.25000000 dot2_soft[0] = -5.64889669
dot2[1] = 1.03125000 dot2_soft[1] = 0.69646239
dot2[2] = -0.25000000 dot2_soft[2] = 1.09402716

sw_error: i = 40 output_soft = 2 t_test_num = 1
dot2[0] = 0.09375000 dot2_soft[0] = -5.31394196
dot2[1] = 0.59375000 dot2_soft[1] = 0.30034199
dot2[2] = 0.09375000 dot2_soft[2] = 1.52586949

sw_error: i = 41 output_soft = 2 t_test_num = 1
dot2[0] = 0.06250000 dot2_soft[0] = -5.94443941
dot2[1] = 0.87500000 dot2_soft[1] = 0.61903512
dot2[2] = 0.06250000 dot2_soft[2] = 1.28180122

sw_error: i = 42 output_soft = 2 t_test_num = 1
dot2[0] = 0.37500000 dot2_soft[0] = -7.44187164
dot2[1] = 1.31250000 dot2_soft[1] = 1.10615981
dot2[2] = 0.37500000 dot2_soft[2] = 1.35738707

sw_error: i = 45 output_soft = 2 t_test_num = 1
dot2[0] = 0.18750000 dot2_soft[0] = -5.92508411
dot2[1] = 0.68750000 dot2_soft[1] = 0.44851223
dot2[2] = 0.18750000 dot2_soft[2] = 1.43742454

sw_error: i = 46 output_soft = 2 t_test_num = 1
dot2[0] = 0.90625000 dot2_soft[0] = -7.76649952
dot2[1] = 1.06250000 dot2_soft[1] = 0.82863915
dot2[2] = 0.90625000 dot2_soft[2] = 1.88942850

sw_error: i = 47 output_soft = 2 t_test_num = 1
dot2[0] = 0.75000000 dot2_soft[0] = -9.50911713
dot2[1] = 1.75000000 dot2_soft[1] = 1.48399019
dot2[2] = 0.75000000 dot2_soft[2] = 1.85759318

hw_error: i = 75 output = 2 t_test_num = 1
sw_error: i = 75 output_soft = 2 t_test_num = 1
dot2[0] = 2.12500000 dot2_soft[0] = -4.04238653
dot2[1] = -1.03125000 dot2_soft[1] = -1.22402656
dot2[2] = 2.12500000 dot2_soft[2] = 3.36929369

hw_error: i = 76 output = 2 t_test_num = 1
sw_error: i = 76 output_soft = 2 t_test_num = 1
dot2[0] = 0.40625000 dot2_soft[0] = -4.09871578
dot2[1] = -0.21875000 dot2_soft[1] = -0.46985394
dot2[2] = 0.40625000 dot2_soft[2] = 1.61257589

hw_error: i = 80 output = 2 t_test_num = 1
sw_error: i = 80 output_soft = 2 t_test_num = 1
dot2[0] = 1.78125000 dot2_soft[0] = -4.33292818
dot2[1] = -0.75000000 dot2_soft[1] = -0.96692348
dot2[2] = 1.78125000 dot2_soft[2] = 2.98383069

hw_error: i = 81 output = 2 t_test_num = 1
sw_error: i = 81 output_soft = 2 t_test_num = 1
dot2[0] = 0.09375000 dot2_soft[0] = -4.40864801
dot2[1] = 0.06250000 dot2_soft[1] = -0.15780880
dot2[2] = 0.09375000 dot2_soft[2] = 1.26864278

hw_error: i = 85 output = 2 t_test_num = 1
sw_error: i = 85 output_soft = 2 t_test_num = 1
dot2[0] = 1.21875000 dot2_soft[0] = -4.16326904
dot2[1] = -0.59375000 dot2_soft[1] = -0.84592772
dot2[2] = 1.21875000 dot2_soft[2] = 2.42255425

sw_error: i = 86 output_soft = 2 t_test_num = 1
dot2[0] = -0.28125000 dot2_soft[0] = -4.36515617
dot2[1] = 0.09375000 dot2_soft[1] = -0.08813666
dot2[2] = -0.28125000 dot2_soft[2] = 0.97706115

hw_error: i = 90 output = 2 t_test_num = 1
sw_error: i = 90 output_soft = 2 t_test_num = 1
dot2[0] = 0.46875000 dot2_soft[0] = -4.02276182
dot2[1] = -0.53125000 dot2_soft[1] = -0.66237617
dot2[2] = 0.46875000 dot2_soft[2] = 1.72938108

sw_error: i = 91 output_soft = 2 t_test_num = 1
dot2[0] = -0.78125000 dot2_soft[0] = -3.85103607
dot2[1] = 0.15625000 dot2_soft[1] = -0.09844255
dot2[2] = -0.78125000 dot2_soft[2] = 0.42963967

sw_error: i = 95 output_soft = 2 t_test_num = 1
dot2[0] = -0.43750000 dot2_soft[0] = -4.07760668
dot2[1] = -0.03125000 dot2_soft[1] = -0.30057180
dot2[2] = -0.43750000 dot2_soft[2] = 0.90393031

hw_err_cnt = 9 sw_err_cnt = 20

  1. 2020年08月23日 08:31 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる3(Vivado 2019.2 編その2)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる2(Vivado 2019.2 編その1)”の続き。

”Genasys ZU で Adam Taylor さんの”High Performance Imaging”では、Vivado 2019.1 と SDK 2019.1 を使用したが、 Vivado 2019.2 と Vitis 2019.2 を使用して実装してみよう。ということで、前回は、Vivado 2019.2 を使用して、エラーがでる部分を修正しながら、論理合成、インプリメンテーション、ビットストリームの生成を行って、XSA ファイルを生成した。今回は、XSA ファイルを使用して、Vitis 2019.2 でアプリケーション・ソフトウェアをビルドして、実機確認してみよう。

Vivado 2019.2 の Tools メニューから Launch Vitis を選択して Vitis 2019.2 を立ち上げる。
Eclipse Launcher ダイアログの Select a directory as workspace が立ち上げるので、 Browse... ボタンをクリックして、ワークスペースを選択する。
genesys_zu_91_200819.png

Genesys_ZU_MIPI_PCAM/display_port.xpr/display_port/ ディレクトリの下に vitis_work ディレクトリを新規作成して、そこをワークスペースに選択した。
genesys_zu_92_200819.png

Eclipse Launcher ダイアログの Select a directory as workspace で、 Workspace に Genesys_ZU_MIPI_PCAM/display_port.xpr/display_port/vitis_work を指定して、Launch ボタンをクリックした。
genesys_zu_93_200819.png

Vitis 2019.2 が立ち上げる。
Create Application Project をクリックして、アプリケーション・プロジェクトを作成する。
genesys_zu_94_200819.png

New Application Project ダイアログが表示された。
Project name: に dispport2 と入力した。
genesys_zu_95_200819.png

Platform 画面では、Create a new platform form hardware (XSA) タブをクリックして、+ アイコンをクリックして、前回作成した XSA ファイルを指定する。
genesys_zu_96_200819.png

design_1_wrapper.xsa を選択した。
genesys_zu_97_200819.png

design_1_wrapper [custom] が追加された。
design_1_wrapper [custom] を選択して、Next > ボタンをクリックした。
genesys_zu_98_200819.png

Domain はデフォルトのままとした。
genesys_zu_99_200819.png

Templates では、Empty Application を選択して、Finish ボタンをクリックした。
genesys_zu_100_200819.png

design_1_wrapper プラットフォームと dispport2 アプリケーション・プロジェクトが生成された。
genesys_zu_101_200819.png

SDK にあるソフトウェアのソースコードをインポートした。
genesys_zu_102_200819.png

dispport2 プロジェクトの src にソフトウェアのソースコードがインポートされた。
genesys_zu_103_200819.png

トンカチマークをクリックして、ビルドした。
ビルドが失敗した。
genesys_zu_104_200819.png

これは、”Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる”と同じ状況だ。

Vitis 2019.2 の Explorer ウインドウで、dispport2_system -> dispport2 を選択して、右クリックし、右クリックメニューから Properties を選択する。
Properties for dispport2 ダイアログが開く。
C/C++ Build の Settings を開いて、ARM v8 gcc linker -> Libraries を選択して、Libraries (-l) の Add... ボタンをクリックする。

Enter Value ダイアログが開く。
m を入力する。OKボタンをクリックする。

Libraries (-l) に m が入力された。
OKボタンをクリックする。
genesys_zu_105_200820.png

ビルドが成功して、elf ファイルができた。
genesys_zu_106_200820.png

Genesys ZU の電源をON した。
FPGA をコンフィグレーションし、アプリケーション・ソフトウェアを起動するために、dispport2 プロジェクトを選択して、 Run ボタンをクリックした。

FPGA がコンフィグレーションされて、アプリケーション・ソフトウェアが起動したが、残念がらカメラの画像はディスプレイに表示されなかった。
  1. 2020年08月21日 05:31 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する9(改良した生基板が届いた)

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する8(基板を改版した)”の続き。

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する8(基板を改版した)”で発注した基板が届いた。

表面
Ultra96expb_PMOD_VGA_84_200821.jpg

裏面
Ultra96expb_PMOD_VGA_85_200821.jpg

この生基板に部品を乗せていこう。
  1. 2020年08月21日 04:47 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる2(Vivado 2019.2 編その1)

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる”の続き。

Genasys ZU で Adam Taylor さんの”High Performance Imaging”では、Vivado 2019.1 と SDK 2019.1 を使用したが、 Vivado 2019.2 と Vitis 2019.2 を使用して実装してみよう。

まずは、 2019.1 の Genesys_ZU_MIPI_PCAM プロジェクトをコピーした。
genesys_zu_77_200818.png

Vivado 2019.2 を立ち上げて、コピーした Genesys_ZU_MIPI_PCAM プロジェクトを読み込むと Older Project Version ダイアログ表示された。
Automatically upgrade to the current version のラジオボタンがクリックされた状態で、OKボタンをクリックする。
genesys_zu_78_200818.png

Project Upgrade ダイアログが表示された。
Report IP Status をクリックする。
genesys_zu_79_200818.png

下のウインドウに IPStatus が表示された。
Upgrade Selected ボタンをクリックする。
genesys_zu_80_200818.png

Upgrade IP ダイアログが表示された。OKボタンをクリックする。
genesys_zu_81_200818.png

Upgrade IP が開始された。
genesys_zu_82_200818.png

IP Upgrade が成功した。クリティカル・ワーニングがでている。
genesys_zu_83_200818.png

Generate Output Products ダイアログが表示された。
そのまま、Generate ボタンをクリックする。
genesys_zu_84_200818.png

IP の関連ファイルの生成が始まるが、その途中でクリティカル・ワーニングが出た。
genesys_zu_85_200818.png

IP の関連ファイルの生成が終了した。
ブロックデザインを表示して、Vivado 2019.2 でエラーが出ている部分を修正する。エラーが出ている部分は、emio_gpio_o[94:0] が全て、dout_0[94:0] に出力されているが、使用するために XDC ファイルで出力ピンが設定されているのは、 dout_0[0] の 1 本のみというところだ。つまり、後の 94 本は使用していないので、それを削除する必要がある。
削除するために Slice IP を Add IP して 1 本だけ出力する。
emio_gpio_o[94:0] を Slice に入れて、 0 番目だけを Dout_0[0:0] に出力した。
genesys_zu_86_200818.png

XDC ファイルも dout_0 から Dout_0 に変更した。
genesys_zu_87_200818.png

これで、論理合成、インプリメンテーション、ビットストリームの生成を行ったところ成功した。
genesys_zu_88_200818.png

相変わらず、タイミングはクロック間のタイミング違反が出ている。

File メニューから Export -> Export Hardware... をクリックする。
Export Hardware ダイアログが表示された。
Include bitstream にチェックを入れて、OKボタンをクリックする。
genesys_zu_89_200818.png

design_1_wrapper.xsa ファイルが出力された。
genesys_zu_90_200818.png
  1. 2020年08月20日 05:10 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

ZynqBerryZero が来ました

今日注文した ZynqBerryZero が来ました。

ZynqBerryZero の謳い文句を引用します。

ZynqBerryZeroは、ザイリンクスZynq-7010 FPGAとRaspberry Pi Zeroのフォームファクターを統合したSoCモジュールです。さらに、3 x 6.5 cmの小さなボードには、512MByte DDR3L SDRAM、16MByte Flash、および2つのmicroUSBコネクタ、micro SDカードスロット、ミニHDMI、CSI-2コネクタ(カメラ)などのさまざまなコネクタが装備されています。



外箱の中には、特殊電子回路株式会社と MITOUJTAG のパフレットと写真に示すものが入ってました。漫画も入ってました。
ZynqBerryZero_1_200819.jpg

ZynqBerryZero が入っている箱を開けると、緩衝材が入ってます。
ZynqBerryZero_2_200819.jpg

緩衝材を退けると、袋が見えます。
ZynqBerryZero_3_200819.jpg

ZynqBerryZero の表面です。
ZynqBerryZero_4_200819.jpg

ZynqBerryZero の裏面です。
ZynqBerryZero_5_200819.jpg
  1. 2020年08月19日 21:35 |
  2. ZynqBerryZero
  3. | トラックバック:0
  4. | コメント:0

Genasys ZU で Adam Taylor さんの”High Performance Imaging”をやってみる

Genasys ZU を使用して Adam Taylor さんの”High Performance Imaging”をやってみることにした。

Vivado 2019.1 を使用する。 Vivado 2019.2 ではビットファイルを生成する時にDRC エラーが出てしまう。この辺りを対処しないと(たぶん出力する信号を削れば良いと思うのだが)行けないようだ。

まずは Vivado 2019.1 のプロジェクトを git clone した。
git clone https://github.com/ATaylorCEngFIET/Genesys_ZU_MIPI_PCAM.git
genesys_zu_52_200817.png

Vivado 2019.1 を立ち上げて display_port.xpr を読み込んだ。
4 つほど IP をアップグレードするかも知れない?一度やったら IP をアップグレードする必要がないのかも知れない?今回でブログ書くのに 2 回目なのだが、今回は IP のアップグレードが無かった。
プロジェクトを示す。
genesys_zu_53_200817.png

ブロックデザインを開いた。
genesys_zu_54_200817.png

ブロックデザインを見やすいように書き換えた。
genesys_zu_55_200817.png

Address Editor を示す。
genesys_zu_76_200818.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。なお、タイミングはメットしていないが、クロック間のタイミングが違反しているので、動かしても大丈夫だろう?
genesys_zu_56_200817.png

File メニューから Export -> Export Hardware... を選択した。
Export Hardware ダイアログが開いた。
Include bitstream にチェックを入れて、OKボタンをクリックした。
genesys_zu_57_200817.png

File メニューから Launch SDK を選択した。
Launch SDK ダイアログが開いた。
デフォルトのまま、OKボタンをクリックした。
genesys_zu_58_200817.png

SDK が立ち上がった。(懐かしい。。。)
すでにハードウェア・プラットフォームの design_1_wrapper_hw_platform_0 が存在しているが、今回の Export Hardware により、ハードウェア・プラットフォームの design_1_wrapper_hw_platform_1 が生成された。
genesys_zu_59_200817.png

ハードウェア・プラットフォームの design_1_wrapper_hw_platform_1 を使用して dispport2 アプリケーション・プロジェクトを作成する。
SDK の File メニューから New -> Application Project を選択した。
New Project ダイアログが開いた。
Application Project 画面で Project name: に dispport2 と入力した。Next > ボタンをクリックした。
genesys_zu_60_200817.png

Templates 画面では、Empty Application を選択して、 Finish ボタンをクリックした。
genesys_zu_61_200817.png

dispport2 アプリケーション・プロジェクトが生成された。
dispport アプリケーション・プロジェクトの src の内容を dispport2 アプリケーション・プロジェクトの src にコピーする。
dispport アプリケーション・プロジェクトの src ディレクトリの lscript.ld 以外のファイルをすべて選択して dispport2 アプリケーション・プロジェクトの src にドラック&ドロップした。
genesys_zu_62_200817.png

File Operation ダイアログが表示された。
コピーでOK なので、そのまま OK ボタンをクリックした。
genesys_zu_63_200817.png

ビルドでエラーが表示された。
genesys_zu_64_200817.png

エラー内容を示す。

Invoking: ARM v8 gcc linker
aarch64-none-elf-gcc -Wl,-T -Wl,../src/lscript.ld -L../../dispport2_bsp/psu_cortexa53_0/lib -o "dispport2.elf" ./src/helloworld.o ./src/platform.o ./src/xdpdma_video_example.o ./src/xdppsu_interrupt.o -Wl,--start-group,-lxil,-lgcc,-lc,--end-group
/media/masaaki/Ubuntu_Disk/tools/Xilinx/SDK/2019.1/gnu/aarch64/lin/aarch64-none/bin/../lib/gcc/aarch64-none-elf/8.2.0/../../../../aarch64-none-elf/bin/ld: ./src/helloworld.o: in function `gamma_calc':
makefile:36: recipe for target 'dispport2.elf' failed
/media/masaaki/Ubuntu_Disk/HDL/Genesys_zu/2019.1/Genesys_ZU_MIPI_PCAM/display_port.xpr/display_port/display_port.sdk/dispport2/Debug/../src/helloworld.c:260: undefined reference to `pow'
collect2: error: ld returned 1 exit status
make: *** [dispport2.elf] Error 1

21:20:07 Build Finished (took 840ms)


pow リファレンスが無いということらしい。
genesys_zu_65_200817.png

検索したところ、”AR# 52971 14.4 - SDK - sin、cos、tan 関数を含むアプリケーションをSDK の ARM コンパイラでコンパイルするとエラーになる”が引っかかった。これによると、

演算 (math) の -m オプションを C/C++ Build 設定のライブラリに次のように指定する必要があります。

とのことだった。

SDK の Project Explorer で dispport2 を選択して、右クリックし、右クリックメニューから Properties を選択する。
Properties for dispport2 ダイアログが開く。
C/C++ Build の Settings を開いて、ARM v8 gcc linker -> Libraries を選択して、Libraries (-l) の Add... ボタンをクリックする。
genesys_zu_66_200817.png

Enter Value ダイアログが開く。
m を入力する。OKボタンをクリックする。
genesys_zu_67_200817.png

Libraries (-l) に m が入力された。
OKボタンをクリックする。
genesys_zu_68_200817.png

ビルドが成功して、elf ファイルができた。
genesys_zu_69_200817.png

SDK の Xilinx メニューから Program FPGA を選択する。
Program FPGA ダイアログが開く。
Program ボタンをクリックした。
genesys_zu_70_200818.png

FPGA のコンフィグレーションが成功した。

SDK の Project Explorer で dispport2 を選択して、Run As ボタンをクリックした。
genesys_zu_71_200818.png

Run As ダイアログが表示された。
Launch on Hardware (System Debugger) のまま、OKボタンをクリックした。
genesys_zu_72_200818.png

dispport2 アプリケーションが起動した。
genesys_zu_73_200818.png

カメラの画像が Display Port に表示された。成功だ。
Genesys ZU ボードを撮影している。
genesys_zu_74_200818.jpg

現在の Genesys ZU ボードの様子を示す。
コンフィグレーション・ケーブルとして、JTAG-HS1 が接続されている。MIPI A に PCam 5C が接続されている。
genesys_zu_75_200818.jpg
  1. 2020年08月18日 05:00 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genesys ZU Vitis Accleration Platform を使用して、Vector Addition サンプルを実行する3(実機確認編2)

Genesys ZU Vitis Accleration Platform を使用して、Vector Addition サンプルを実行する2(実機確認編)”の続き。

Genesys ZU Vitis Accleration Platform”で配布されている Vitis 2019.2 の Vitis アクセラレーション・プラットフォームを使用して、Vector Addition サンプルをビルドした。前回は、その成果物を MicroSD カードに書いて、Genesys ZU に挿入して電源ON。 PetaLinux を起動して Vector Addition サンプルを実行することができた。
前回は CUI から Vector Addition を実行したのだが、今回は、Vitis IDE からのリモートアクセスを使用して、Vector Addition サンプルを実行してみよう。

最初に前回のログを調べる。何を調べるかと言うと、 tcf-agent がスタートしているかどうか?を調べる。これがあると、Vitis からリモートアクセスをすることができる。

Starting tcf-agent: [ 31.757879] random: crng init done

があったので大丈夫そうだ。

それじゃ最初に Vitis IDE で Run Configuration を作成する。
Assistant ウインドウの vadd_system -> vadd -> Hardware を右クリックし、右クリックメニューから Run -> Run Configurations... を選択する。
genesys_zu_36_200815.png

Run Configurations ダイアログが表示された。
左のウインドウの Single Application Debug をダブルクリックする。
genesys_zu_37_200815.png

Create, manage, and run configurations 画面が開く。
Connection を作成する。New ボタンをクリックする。
genesys_zu_38_200815.png

Target Connection Details ダイアログが表示された。
Target Name を入力した。
Host に Genesys ZU の PetaLinux の iP アドレスを入力した。
Test Connection をクリックした。
genesys_zu_39_200815.png

Connection successful! ダイアログが表示された。大丈夫そうだ。
genesys_zu_40_200815.png

Connection にいま入力したコネクションが表示されている。
genesys_zu_41_200815.png

Application タブを表示してみた。
genesys_zu_42_200815.png

Apply ボタンをクリックし、Run ボタンをクリックすると、Vector Addition が実行されて、TEST PASSED が表示されて成功した。
genesys_zu_43_200815.png

さて、次はプロファイルを取って見てみよう。
Run Configuration 画面で、Enable profiling にチェックが入っているのを確認する。
更に、Generate timeline trace report: を Yes に、Collect Data Transfer Trace を Fine に、Collect Strall Trace を All に変更した。
genesys_zu_45_200815.png

これで、Apply ボタンをクリックし、Run ボタンをクリックすると、Vector Addition が実行されて、TEST PASSED が表示された。
Assistant ウインドウの Vadd_system -> vadd -> Hardware -> Debugger_vadd-Default -> Run Summary (xclbin) をダブルクリックして起動した。
genesys_zu_46_200815.png

Vitis Analyer が起動した。
genesys_zu_47_200815.png

Run Guidance を表示した。
genesys_zu_48_200815.png

Profile Summary を表示した。
genesys_zu_49_200815.png

Appliction Timeline を表示した。
genesys_zu_50_200815.png

Appliction Timeline の後ろ部分を拡大した。
krnl_vadd の実行時間は、501.2 us のようだ。
genesys_zu_51_200816.png
  1. 2020年08月16日 04:36 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genesys ZU Vitis Accleration Platform を使用して、Vector Addition サンプルを実行する2(実機確認編)

Genesys ZU Vitis Accleration Platform を使用して、Vector Addition サンプルを実行する1(Vitis ビルド編)”の続き。

前回は、”Genesys ZU Vitis Accleration Platform”で配布されている Vitis 2019.2 の Vitis アクセラレーション・プラットフォームを使用して、Vector Addition サンプルをビルドし、成功した。今回は、ビルドされた Vector Addition サンプルを MicroSD カードに書いて、Genesys ZU に挿入して電源ON。 PetaLinux を起動して Vector Addition サンプルを実行してみよう。

Vitis_work/2019.2/genesys_zu/vadd/Hardware/sd_card ディレクトリに MicroSD に書き込むファイルがある。
genesys_zu_33_200814.png

image.ub が 468.6 MB あるので、RAM ディスクによる実装のようだ。つまり、このファイルを FAT32 フォーマットの MicroSD カードにそのまま書けば PetaLinux が起動するはずだ。

32 GB の MicroSD カードにファイルを書いて、Genesys ZU に挿して電源ON をした。
すると PetaLinux が起動した。
root, root でログインした。
ifconfig すると IP が割り振られている。
genesys_zu_44_200815.png

割り振られた IP アドレスに ssh でログインした。
ssh 192.168.3.36 -X -l root

MicroSD カードをマウントしたディレクトリに入った。
cd run/media/mmcblk0p1/

vadd アクセラレーション・アプリケーションを起動したがエラーになってしまった。
./vadd.exe binary_container_1.xclbin

root@petalinux:/run/media/mmcblk0p1# ./vadd.exe binary_container_1.xclbin
XRT build version: 2.3.0
Build hash: 1eb61547b241c1a5a7aaee4645d6d481fb0f25d6
Build date: 2020-04-30 10:03:10
Git branch: 2019.2
PID: 2631
UID: 0
[Fri Aug 14 06:09:23 2020]
HOST: petalinux
EXE: /run/media/mmcblk0p1/vadd.exe
[XRT] ERROR: XILINX_XRT must be set
Error: Unable to find Target Device [XRT] ERROR: device is nullptr


何が悪いか? 考えたが XRT のパスが無いのが原因だろうということで追加し、再度 vadd アクセラレーション・アプリケーションを起動した。
export XILINX_XRT=/usr
./vadd.exe binary_container_1.xclbin


TEST PASSED 表示されて成功した。
genesys_zu_34_200814.png

vadd アクセラレーション・アプリケーション動作時のターミナルのメッセージを貼っておく。
genesys_zu_35_200814.png

最後に起動ログを貼っておく。

468566588 bytes read in 30286 ms (14.8 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:  uncompressed
     Data Start:   0x10000104
     Data Size:    18782720 Bytes = 17.9 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x00080000
     Entry Point:  0x00080000
     Hash algo:    sha1
     Hash value:   05853503d3cc7626d21a571e2c02660d23cdfc21
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 10000000 ...
   Using 'conf@system-top.dtb' configuration
   Trying 'ramdisk@1' ramdisk subimage
     Description:  petalinux-user-image
     Type:         RAMDisk Image
     Compression:  gzip compressed
     Data Start:   0x111f361c
     Data Size:    449742479 Bytes = 428.9 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   180260695745c9d753865b6accaa9c82a578e991
   Verifying Hash Integrity ... sha1+ 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:   0x111e9c08
     Data Size:    39246 Bytes = 38.3 KiB
     Architecture: AArch64
     Hash algo:    sha1
     Hash value:   3ec245d229069abeb17ef8bd698ed8e9e4be5e4c
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x111e9c08
   Loading Kernel Image ... OK
   Loading Ramdisk to 5e317000, end 78fff68f ... OK
   Loading Device Tree to 0000000007ff3000, end 0000000007fff94d ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 4.19.0-xilinx-v2019.2 (oe-user@oe-host) (gcc version 8.2.0 (GCC)) #1 SMP Thu Apr 30 10:02:08 UTC 2020
[    0.000000] Machine model: xlnx,zynqmp
[    0.000000] earlycon: cdns0 at MMIO 0x00000000ff000000 (options '115200n8')
[    0.000000] bootconsole [cdns0] enabled
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] cma: Reserved 256 MiB at 0x000000004e000000
[    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] random: get_random_bytes called from start_kernel+0x94/0x3f8 with crng_init=0
[    0.000000] percpu: Embedded 23 pages/cpu @(____ptrval____) s53656 r8192 d32360 u94208
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: enabling workaround for ARM erratum 845719
[    0.000000] Speculative Store Bypass Disable mitigation not required
[    0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 1033987
[    0.000000] Kernel command line: earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/ram rw
[    0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
[    0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
[    0.000000] software IO TLB: mapped [mem 0x7beff000-0x7feff000] (64MB)
[    0.000000] Memory: 3342944K/4193280K available (11004K kernel code, 806K rwdata, 5652K rodata, 832K init, 314K bss, 588192K 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: 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] irq-xilinx: /amba_pl@0/interrupt-controller@80000000: num_irq=8, edge=0xff
[    0.000000] arch_timer: cp15 timer(s) running at 30.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xdd67c8a60, max_idle_ns: 881590406601 ns
[    0.000003] sched_clock: 56 bits at 30MHz, resolution 33ns, wraps every 4398046511088ns
[    0.008211] Console: colour dummy device 80x25
[    0.012391] Calibrating delay loop (skipped), value calculated using timer frequency.. 60.00 BogoMIPS (lpj=120000)
[    0.022668] pid_max: default: 32768 minimum: 301
[    0.027358] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.033924] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.041682] ASID allocator initialised with 32768 entries
[    0.046417] rcu: Hierarchical SRCU implementation.
[    0.052721] EFI services will not be available.
[    0.055742] smp: Bringing up secondary CPUs ...
[    0.060405] Detected VIPT I-cache on CPU1
[    0.060438] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.060740] Detected VIPT I-cache on CPU2
[    0.060759] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.061048] Detected VIPT I-cache on CPU3
[    0.061067] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.061110] smp: Brought up 1 node, 4 CPUs
[    0.095585] SMP: Total of 4 processors activated.
[    0.100258] CPU features: detected: 32-bit EL0 Support
[    0.106995] CPU: All CPU(s) started at EL2
[    0.109436] alternatives: patching kernel code
[    0.114742] devtmpfs: initialized
[    0.121221] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.126824] futex hash table entries: 1024 (order: 4, 65536 bytes)
[    0.138410] xor: measuring software checksum speed
[    0.177021]    8regs     :  2375.000 MB/sec
[    0.217051]    8regs_prefetch:  2052.000 MB/sec
[    0.257081]    32regs    :  2725.000 MB/sec
[    0.297108]    32regs_prefetch:  2309.000 MB/sec
[    0.297149] xor: using function: 32regs (2725.000 MB/sec)
[    0.301454] pinctrl core: initialized pinctrl subsystem
[    0.307228] NET: Registered protocol family 16
[    0.311341] audit: initializing netlink subsys (disabled)
[    0.316489] audit: type=2000 audit(0.264:1): state=initialized audit_enabled=0 res=1
[    0.324133] cpuidle: using governor menu
[    0.328141] vdso: 2 pages (1 code @ (____ptrval____), 1 data @ (____ptrval____))
[    0.335359] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.342785] DMA: preallocated 256 KiB pool for atomic allocations
[    0.362224] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.430780] raid6: int64x1  gen()   445 MB/s
[    0.498848] raid6: int64x1  xor()   453 MB/s
[    0.566908] raid6: int64x2  gen()   680 MB/s
[    0.634917] raid6: int64x2  xor()   599 MB/s
[    0.702949] raid6: int64x4  gen()   981 MB/s
[    0.770993] raid6: int64x4  xor()   736 MB/s
[    0.839032] raid6: int64x8  gen()  1163 MB/s
[    0.907065] raid6: int64x8  xor()   759 MB/s
[    0.975182] raid6: neonx1   gen()   736 MB/s
[    1.043177] raid6: neonx1   xor()   879 MB/s
[    1.111225] raid6: neonx2   gen()  1128 MB/s
[    1.179261] raid6: neonx2   xor()  1171 MB/s
[    1.247292] raid6: neonx4   gen()  1476 MB/s
[    1.315336] raid6: neonx4   xor()  1416 MB/s
[    1.383406] raid6: neonx8   gen()  1530 MB/s
[    1.451433] raid6: neonx8   xor()  1459 MB/s
[    1.451471] raid6: using algorithm neonx8 gen() 1530 MB/s
[    1.455426] raid6: .... xor() 1459 MB/s, rmw enabled
[    1.460356] raid6: using neon recovery algorithm
[    1.465863] SCSI subsystem initialized
[    1.468840] usbcore: registered new interface driver usbfs
[    1.474146] usbcore: registered new interface driver hub
[    1.479415] usbcore: registered new device driver usb
[    1.484468] media: Linux media interface: v0.10
[    1.488923] videodev: Linux video capture interface: v2.00
[    1.494374] pps_core: LinuxPPS API ver. 1 registered
[    1.499282] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    1.508375] PTP clock support registered
[    1.512274] EDAC MC: Ver: 3.0.0
[    1.515749] zynqmp-ipi-mbox mailbox@ff990400: Probed ZynqMP IPI Mailbox driver.
[    1.522895] FPGA manager framework
[    1.526182] Advanced Linux Sound Architecture Driver Initialized.
[    1.532341] Bluetooth: Core ver 2.22
[    1.535628] NET: Registered protocol family 31
[    1.540024] Bluetooth: HCI device and connection manager initialized
[    1.546341] Bluetooth: HCI socket layer initialized
[    1.551183] Bluetooth: L2CAP socket layer initialized
[    1.556211] Bluetooth: SCO socket layer initialized
[    1.561386] clocksource: Switched to clocksource arch_sys_counter
[    1.567180] VFS: Disk quotas dquot_6.6.0
[    1.571032] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    1.582211] NET: Registered protocol family 2
[    1.582595] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes)
[    1.589979] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
[    1.597314] TCP bind hash table entries: 32768 (order: 7, 524288 bytes)
[    1.604062] TCP: Hash tables configured (established 32768 bind 32768)
[    1.610238] UDP hash table entries: 2048 (order: 4, 65536 bytes)
[    1.616215] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes)
[    1.622689] NET: Registered protocol family 1
[    1.627086] RPC: Registered named UNIX socket transport module.
[    1.632756] RPC: Registered udp transport module.
[    1.637423] RPC: Registered tcp transport module.
[    1.642094] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.648812] Trying to unpack rootfs image as initramfs...
[   22.249357] Freeing initrd memory: 439200K
[   22.249932] hw perfevents: no interrupt-affinity property for /pmu, guessing.
[   22.255106] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[   22.263523] Initialise system trusted keyrings
[   22.267107] workingset: timestamp_bits=62 max_order=20 bucket_order=0
[   22.274131] NFS: Registering the id_resolver key type
[   22.278452] Key type id_resolver registered
[   22.282595] Key type id_legacy registered
[   22.286578] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[   22.293246] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[   23.386784] NET: Registered protocol family 38
[   23.446133] Key type asymmetric registered
[   23.446171] Asymmetric key parser 'x509' registered
[   23.449482] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[   23.456791] io scheduler noop registered
[   23.460681] io scheduler deadline registered
[   23.464956] io scheduler cfq registered (default)
[   23.469592] io scheduler mq-deadline registered
[   23.474088] io scheduler kyber registered
[   23.479659] xilinx-frmbuf b0020000.v_frmbuf_wr: Probe deferred due to GPIO reset defer
[   23.512203] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[   23.516028] cacheinfo: Unable to detect cache hierarchy for CPU 0
[   23.523471] brd: module loaded
[   23.527376] loop: module loaded
[   23.528147] mtdoops: mtd device (mtddev=name/number) must be supplied
[   23.532916] libphy: Fixed MDIO Bus: probed
[   23.536838] tun: Universal TUN/TAP device driver, 1.6
[   23.540711] CAN device driver interface
[   23.545340] usbcore: registered new interface driver asix
[   23.549813] usbcore: registered new interface driver ax88179_178a
[   23.555847] usbcore: registered new interface driver cdc_ether
[   23.561641] usbcore: registered new interface driver net1080
[   23.567266] usbcore: registered new interface driver cdc_subset
[   23.573146] usbcore: registered new interface driver zaurus
[   23.578690] usbcore: registered new interface driver cdc_ncm
[   23.584807] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[   23.590782] ehci-pci: EHCI PCI platform driver
[   23.595435] usbcore: registered new interface driver uas
[   23.600492] usbcore: registered new interface driver usb-storage
[   23.606937] rtc_zynqmp ffa60000.rtc: rtc core: registered ffa60000.rtc as rtc0
[   23.613663] i2c /dev entries driver
[   23.617409] xilinx-video amba_pl@0:vcap_sdirx: /amba_pl@0/vcap_sdirx/ports/port@0 initialization failed
[   23.626409] xilinx-video amba_pl@0:vcap_sdirx: DMA initialization failed
[   23.633525] xilinx-csi2rxss b0000000.mipi_csi2_rx_subsystem: Xilinx CSI2 Rx Subsystem device found!
[   23.643186] usbcore: registered new interface driver uvcvideo
[   23.647773] USB Video Class driver (1.1.1)
[   23.652250] Bluetooth: HCI UART driver ver 2.3
[   23.656255] Bluetooth: HCI UART protocol H4 registered
[   23.661353] Bluetooth: HCI UART protocol BCSP registered
[   23.666650] Bluetooth: HCI UART protocol LL registered
[   23.671733] Bluetooth: HCI UART protocol ATH3K registered
[   23.677115] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   23.683362] Bluetooth: HCI UART protocol Intel registered
[   23.688704] Bluetooth: HCI UART protocol QCA registered
[   23.693907] usbcore: registered new interface driver bcm203x
[   23.699530] usbcore: registered new interface driver bpa10x
[   23.705065] usbcore: registered new interface driver bfusb
[   23.710511] usbcore: registered new interface driver btusb
[   23.715935] Bluetooth: Generic Bluetooth SDIO driver ver 0.1
[   23.721601] usbcore: registered new interface driver ath3k
[   23.727129] EDAC MC: ECC not enabled
[   23.730786] EDAC DEVICE0: Giving out device to module zynqmp-ocm-edac controller zynqmp_ocm: DEV ff960000.memory-controller (INTERRUPT)
[   23.743345] sdhci: Secure Digital Host Controller Interface driver
[   23.748805] sdhci: Copyright(c) Pierre Ossman
[   23.753128] sdhci-pltfm: SDHCI platform and OF driver helper
[   23.759042] ledtrig-cpu: registered to indicate activity on CPUs
[   23.764768] zynqmp_firmware_probe Platform Management API v1.1
[   23.770519] zynqmp_firmware_probe Trustzone version v1.0
[   23.799485] zynqmp_clk_mux_get_parent() getparent failed for clock: lpd_wdt, ret = -22
[   23.802179] alg: No test for xilinx-zynqmp-aes (zynqmp-aes)
[   23.807416] zynqmp_aes zynqmp_aes: AES Successfully Registered
[   23.807416] 
[   23.814824] alg: No test for xilinx-keccak-384 (zynqmp-keccak-384)
[   23.820952] alg: No test for xilinx-zynqmp-rsa (zynqmp-rsa)
[   23.826604] usbcore: registered new interface driver usbhid
[   23.831859] usbhid: USB HID core driver
[   23.837962] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[   23.842429] usbcore: registered new interface driver snd-usb-audio
[   23.849062] pktgen: Packet Generator for packet performance testing. Version: 2.75
[   23.856109] Initializing XFRM netlink socket
[   23.860036] NET: Registered protocol family 10
[   23.864734] Segment Routing with IPv6
[   23.868103] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[   23.874222] NET: Registered protocol family 17
[   23.878316] NET: Registered protocol family 15
[   23.882729] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[   23.895647] can: controller area network core (rev 20170425 abi 9)
[   23.901782] NET: Registered protocol family 29
[   23.906161] can: raw protocol (rev 20170425)
[   23.910397] can: broadcast manager protocol (rev 20170425 t)
[   23.916022] can: netlink gateway (rev 20170425) max_hops=1
[   23.921700] Bluetooth: RFCOMM TTY layer initialized
[   23.926320] Bluetooth: RFCOMM socket layer initialized
[   23.931441] Bluetooth: RFCOMM ver 1.11
[   23.935140] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   23.940412] Bluetooth: BNEP filters: protocol multicast
[   23.945604] Bluetooth: BNEP socket layer initialized
[   23.950532] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[   23.956416] Bluetooth: HIDP socket layer initialized
[   23.961468] 9pnet: Installing 9P2000 support
[   23.965596] Key type dns_resolver registered
[   23.970242] registered taskstats version 1
[   23.973893] Loading compiled-in X.509 certificates
[   23.978974] Btrfs loaded, crc32c=crc32c-generic
[   23.989554] ff000000.serial: ttyPS0 at MMIO 0xff000000 (irq = 47, base_baud = 6250000) is a xuartps
[   23.999428] console [ttyPS0] enabled
[   23.999428] console [ttyPS0] enabled
[   24.003173] bootconsole [cdns0] disabled
[   24.003173] bootconsole [cdns0] disabled
[   24.011206] ff010000.serial: ttyPS1 at MMIO 0xff010000 (irq = 48, base_baud = 6250000) is a xuartps
[   24.023980] of-fpga-region fpga-full: FPGA Region probed
[   24.029877] nwl-pcie fd0e0000.pcie: Link is DOWN
[   24.034529] nwl-pcie fd0e0000.pcie: host bridge /amba/pcie@fd0e0000 ranges:
[   24.041507] nwl-pcie fd0e0000.pcie:   MEM 0xe0000000..0xefffffff -> 0xe0000000
[   24.048734] nwl-pcie fd0e0000.pcie:   MEM 0x600000000..0x7ffffffff -> 0x600000000
[   24.056328] nwl-pcie fd0e0000.pcie: PCI host bridge to bus 0000:00
[   24.062516] pci_bus 0000:00: root bus resource [bus 00-ff]
[   24.068007] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xefffffff]
[   24.074885] pci_bus 0000:00: root bus resource [mem 0x600000000-0x7ffffffff pref]
[   24.085253] pci 0000:00:00.0: PCI bridge to [bus 01-0c]
[   24.091069] xilinx-dpdma fd4c0000.dma: Xilinx DPDMA engine is probed
[   24.097644] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
[   24.104747] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
[   24.111850] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
[   24.118944] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
[   24.126056] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
[   24.133157] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
[   24.140259] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
[   24.147353] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
[   24.154527] xilinx-zynqmp-dma ffa80000.dma: ZynqMP DMA driver Probe success
[   24.161625] xilinx-zynqmp-dma ffa90000.dma: ZynqMP DMA driver Probe success
[   24.168727] xilinx-zynqmp-dma ffaa0000.dma: ZynqMP DMA driver Probe success
[   24.175828] xilinx-zynqmp-dma ffab0000.dma: ZynqMP DMA driver Probe success
[   24.182930] xilinx-zynqmp-dma ffac0000.dma: ZynqMP DMA driver Probe success
[   24.190029] xilinx-zynqmp-dma ffad0000.dma: ZynqMP DMA driver Probe success
[   24.197131] xilinx-zynqmp-dma ffae0000.dma: ZynqMP DMA driver Probe success
[   24.204229] xilinx-zynqmp-dma ffaf0000.dma: ZynqMP DMA driver Probe success
[   24.211320] xilinx-frmbuf b0020000.v_frmbuf_wr: Xilinx AXI frmbuf DMA_DEV_TO_MEM
[   24.218761] xilinx-frmbuf b0020000.v_frmbuf_wr: Xilinx AXI FrameBuffer Engine Driver Probed!!
[   24.227637] xilinx-psgtr fd400000.zynqmp_phy: Lane:3 type:8 protocol:4 pll_locked:yes
[   24.238335] zynqmp_clk_divider_set_rate() set divider failed for spi0_ref_div1, ret = -13
[   24.246949] xilinx-dp-snd-codec fd4a0000.zynqmp-display:zynqmp_dp_snd_codec0: Xilinx DisplayPort Sound Codec probed
[   24.257650] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm0: Xilinx DisplayPort Sound PCM probed
[   24.265685] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm1: Xilinx DisplayPort Sound PCM probed
[   24.274374] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[   24.286812] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[   24.299487] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: Xilinx DisplayPort Sound Card probed
[   24.309678] OF: graph: no port node found in /amba/zynqmp-display@fd4a0000
[   24.316691] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[   24.323300] [drm] No driver support for vblank timestamp query.
[   24.329276] xlnx-drm xlnx-drm.0: bound fd4a0000.zynqmp-display (ops 0xffffff8008bfe870)
[   25.413401] [drm] Cannot find any crtc or sizes
[   25.418156] [drm] Initialized xlnx 1.0.0 20130509 for fd4a0000.zynqmp-display on minor 0
[   25.426261] zynqmp-display fd4a0000.zynqmp-display: ZynqMP DisplayPort Subsystem driver probed
[   25.436431] m25p80 spi0.0: unrecognized JEDEC id bytes: 8c, 20, 08
[   25.442941] macb ff0b0000.ethernet: Not enabling partial store and forward
[   25.450347] libphy: MACB_mii_bus: probed
[   25.459213] TI DP83867 ff0b0000.ethernet-ffffffff:0f: attached PHY driver [TI DP83867] (mii_bus:phy_addr=ff0b0000.ethernet-ffffffff:0f, irq=62)
[   25.472085] macb ff0b0000.ethernet eth0: Cadence GEM rev 0x50070106 at 0xff0b0000 irq 30 (00:0a:35:00:22:01)
[   25.482283] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[   25.488835] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[   25.495327] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[   25.501800] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[   25.508705] dwc3 fe200000.dwc3: Failed to get clk 'ref': -2
[   25.514555] xilinx-psgtr fd400000.zynqmp_phy: Lane:1 type:0 protocol:3 pll_locked:yes
[   25.524715] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[   25.530207] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
[   25.538151] xhci-hcd xhci-hcd.0.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000202010810
[   25.547565] xhci-hcd xhci-hcd.0.auto: irq 63, io mem 0xfe200000
[   25.553698] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
[   25.561960] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   25.569177] usb usb1: Product: xHCI Host Controller
[   25.574045] usb usb1: Manufacturer: Linux 4.19.0-xilinx-v2019.2 xhci-hcd
[   25.580737] usb usb1: SerialNumber: xhci-hcd.0.auto
[   25.585901] hub 1-0:1.0: USB hub found
[   25.589667] hub 1-0:1.0: 1 port detected
[   25.593778] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[   25.599270] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
[   25.606926] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0  SuperSpeed
[   25.613650] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 4.19
[   25.621911] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   25.629130] usb usb2: Product: xHCI Host Controller
[   25.633998] usb usb2: Manufacturer: Linux 4.19.0-xilinx-v2019.2 xhci-hcd
[   25.640690] usb usb2: SerialNumber: xhci-hcd.0.auto
[   25.645805] hub 2-0:1.0: USB hub found
[   25.649568] hub 2-0:1.0: 1 port detected
[   25.653988] dwc3-of-simple ff9e0000.usb1: dwc3_simple_set_phydata: Can't find usb3-phy
[   25.662331] dwc3 fe300000.dwc3: Failed to get clk 'ref': -2
[   25.668113] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[   25.673599] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 3
[   25.681546] xhci-hcd xhci-hcd.1.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000202010010
[   25.690959] xhci-hcd xhci-hcd.1.auto: irq 66, io mem 0xfe300000
[   25.697068] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
[   25.705329] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   25.712545] usb usb3: Product: xHCI Host Controller
[   25.717417] usb usb3: Manufacturer: Linux 4.19.0-xilinx-v2019.2 xhci-hcd
[   25.724114] usb usb3: SerialNumber: xhci-hcd.1.auto
[   25.729240] hub 3-0:1.0: USB hub found
[   25.733008] hub 3-0:1.0: 1 port detected
[   25.737111] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[   25.742602] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 4
[   25.750257] xhci-hcd xhci-hcd.1.auto: Host supports USB 3.0  SuperSpeed
[   25.756905] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[   25.765075] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 4.19
[   25.773333] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   25.780545] usb usb4: Product: xHCI Host Controller
[   25.785413] usb usb4: Manufacturer: Linux 4.19.0-xilinx-v2019.2 xhci-hcd
[   25.792104] usb usb4: SerialNumber: xhci-hcd.1.auto
[   25.797227] hub 4-0:1.0: USB hub found
[   25.800992] hub 4-0:1.0: 1 port detected
[   25.806162] ov5640 3-003c: 3-003c supply DOVDD not found, using dummy regulator
[   25.813503] ov5640 3-003c: Linked as a consumer to regulator.0
[   25.819330] ov5640 3-003c: 3-003c supply DVDD not found, using dummy regulator
[   25.826568] ov5640 3-003c: 3-003c supply AVDD not found, using dummy regulator
[   25.834009] ov5640 3-003c: ov5640_read_reg: error: reg=300a
[   25.839581] ov5640 3-003c: ov5640_check_chip_id: failed to read chip identifier
[   25.846970] i2c i2c-0: Added multiplexed i2c bus 3
[   25.851892] i2c i2c-0: Added multiplexed i2c bus 4
[   25.856810] i2c i2c-0: Added multiplexed i2c bus 5
[   25.861953] i2c i2c-0: Added multiplexed i2c bus 6
[   25.894750] i2c i2c-0: Added multiplexed i2c bus 7
[   25.925418] i2c i2c-0: Added multiplexed i2c bus 8
[   25.930334] i2c i2c-0: Added multiplexed i2c bus 9
[   25.935249] i2c i2c-0: Added multiplexed i2c bus 10
[   25.940119] pca954x 0-0070: registered 8 multiplexed busses for I2C switch pca9548
[   25.947703] cdns-i2c ff020000.i2c: 400 kHz mmio ff020000 irq 32
[   25.954113] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 33
[   25.960319] xilinx-video amba_pl@0:vcap_sdirx: Entity type for entity b0000000.mipi_csi2_rx_subsystem was not initialized!
[   25.971362] xilinx-video amba_pl@0:vcap_sdirx: device registered
[   25.977622] xilinx-video amba_pl@0:vcap_sdirx: Entity type for entity b0010000.v_proc_ss was not initialized!
[   25.987529] xilinx-vpss-csc b0010000.v_proc_ss: VPSS CSC 8-bit Color Depth Probe Successful
[   25.996166] cpufreq: cpufreq_online: CPU0: Running at unlisted freq: 1200000 KHz
[   26.003571] cpu cpu0: dev_pm_opp_set_rate: failed to find current OPP for freq 1200000000 (-34)
[   26.012316] cpufreq: cpufreq_online: CPU0: Unlisted initial frequency changed to: 1199999 KHz
[   26.020850] cpu cpu0: dev_pm_opp_set_rate: failed to find current OPP for freq 1200000000 (-34)
[   26.061011] mmc0: SDHCI controller on ff170000.mmc [ff170000.mmc] using ADMA 64-bit
[   26.076687] rtc_zynqmp ffa60000.rtc: setting system clock to 2020-08-14 18:06:33 UTC (1597428393)
[   26.085555] of_cfs_init
[   26.088009] of_cfs_init: OK
[   26.090921] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[   26.157889] usb 3-1: new high-speed USB device number 2 using xhci-hcd
[   26.186046] mmc0: new ultra high speed SDR104 SDHC card at address aaaa
[   26.193198] mmcblk0: mmc0:aaaa SB32G 29.7 GiB 
[   26.201767]  mmcblk0: p1
[   26.235765] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[   26.242295] clk: Not disabling unused clocks
[   26.246563] 1v5: disabling
[   26.249257] ALSA device list:
[   26.252212]   #0: DisplayPort monitor
[   26.256184] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[   26.264796] cfg80211: failed to load regulatory.db
[   26.270610] Freeing unused kernel memory: 832K
[   26.293414] Run /init as init process
INIT: version 2.88 booting
[   26.337564] usb 3-1: New USB device found, idVendor=0424, idProduct=2513, bcdDevice= b.b3
[   26.345749] usb 3-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[   26.397123] hub 3-1:1.0: USB hub found
[   26.400955] hub 3-1:1.0: 3 ports detected
Starting udev
[   26.426050] udevd[1831]: starting version 3.2.5
[   26.430863] random: udevd: uninitialized urandom read (16 bytes read)
[   26.437351] random: udevd: uninitialized urandom read (16 bytes read)
[   26.443838] random: udevd: uninitialized urandom read (16 bytes read)
[   26.470934] udevd[1832]: starting eudev-3.2.5
[   26.534203] zocl: loading out-of-tree module taints kernel.
[   26.537586] mali: loading out-of-tree module taints kernel.
[   26.545987] [drm] Probing for xlnx,zocl
[   26.549980] [drm] FPGA programming device pcap founded.
[   26.555210] [drm] PR Isolation addr 0x0
[   26.563937] [drm] Initialized zocl 2018.2.1 20180313 for amba:zyxclmm_drm on minor 1
[   26.579947] [drm] Cannot find any crtc or sizes
Configuring packages on first boot....
 (This may take several minutes. Please do not power off the machine.)
Running postinst /etc/rpm-postinsts/100-libmali-xlnx...
[   27.258675] update-alternatives: Linking /usr/lib/libMali.so.9.0 to /usr/lib/x11/libMali.so.9.0
[   27.303415] update-alternatives: Linking /usr/lib/libMali.so.9.0 to /usr/lib/x11/libMali.so.9.0
[   27.334522] Warn: update-alternatives: libmali-xlnx has multiple providers with the same priority, please check /usr/lib/opkg/alternatives/libmali-xlnx for details
[   27.362947] update-alternatives: Linking /usr/lib/libMali.so.9.0 to /usr/lib/x11/libMali.so.9.0
[   27.407266] update-alternatives: Linking /usr/lib/libMali.so.9.0 to /usr/lib/x11/libMali.so.9.0
Running postinst /etc/rpm-postinsts/101-xrt...
[   27.482976] INFO: Creating ICD entry for Xilinx Platform
Running postinst /etc/rpm-postinsts/102-sysvinit-inittab...
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
INIT: Entering runlevel: 5
Configuring network interfaces... [   27.590558] pps pps0: new PPS source ptp0
[   27.594586] macb ff0b0000.ethernet: gem-ptp-timer ptp clock registered.
[   27.601287] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
udhcpc: started, v1.29.2
udhcpc: sending discover
[   28.990699] macb ff0b0000.ethernet eth0: link up (1000/Full)
[   28.996372] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
udhcpc: sending discover
udhcpc: sending select for 192.168.3.36
udhcpc: lease of 192.168.3.36 obtained, lease time 86400
/etc/udhcpc.d/50default: Adding DNS 192.168.3.1
done.
Starting system message bus: dbus.
Starting haveged: haveged: listening socket at 3
haveged: haveged starting up


Starting Xserver
Starting Dropbear SSH server: 
Generating 2048 bit rsa key, this may take a while...

X.Org X Server 1.20.1
X Protocol Version 11, Revision 0
Build Op[   31.003429] [drm] Pid 2393 opened device
erating System: Linux 3.10.0-327.el7.x86_64 x86_64 
Current Op[   31.010927] [drm] Pid 2393 closed device
erating System: Linux petalinux 4.19.0-xilinx-v2019.2 #1 SMP Thu Apr 30 10:02:08 UTC 2020 aarch64
Kernel command line: earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/ram rw
Build Date: 24 October 2019  07:22:49AM
 
Current version of pixman: 0.34.0
 Before reporting problems, check http://wiki.x.org
 to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
 (++) from command line, (!!) notice, (II) informational,
 (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Fri Aug 14 18:06:37 2020
(==) Using config file: "/etc/X11/xorg.conf"
(==) Using system[   31.075780] random: fast init done
 config directory "/usr/share/X11/xorg.conf.d"
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxlpWfR9AKmzC9bMfF6vKbHGYtaow58GGkJVI2L/CJPrxV2J1x+L1g/87UQBMUXZUVZ4zoHargdY05dAW2Sb2VDjXZjNg4sHhEvkzdNxJTIpyeWrQ1v/iRgPqfbwKUfAR6H9YBJtxuuTQnh4XzcJQFqXHuZcgyL1nwrm8dcO9XBu1xXkndQ5ezK/XXGXAlVp96KvIgDjf/Sri6LxSx25N3k0vq30lbP2PreVnOE0XwW2yMbWnMF2NAclD+DlMeT1wt0oXRY/5tMU5Eo75eG9EY7qle+snEw4KzGstJWm1JRhnocrvAa9d3VwROEt0PQ0L3rzIyCvf/6COGEOg8pu4J root@petalinux
Fingerprint: sha1!! 53:56:a8:63:48:2c:8a:66:a0:76:2e:18:70:50:82:eb:23:73:a8:e9
dropbear.
Starting bluetooth: bluetoothd.
Starting internet superserver: inetd.
Starting syslogd/klogd: done
 * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon                       [ ok ]
Starting Telephony daemon
Starting tcf-agent: [   31.757879] random: crng init done
[   31.761275] random: 7 urandom warning(s) missed due to ratelimiting
OK

PetaLinux 2019.2 petalinux /dev/ttyPS0

petalinux login: The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Unsupported high keycode 372 for name <I372> ignored
>                   X11 cannot support keycodes above 255.
>                   This warning only shows for the first high keycode.
Errors from xkbcomp are not fatal to the X server
D-BUS per-session daemon address is: unix:abstract=/tmp/dbus-LsHScu4eDy,guid=3d241d22dab4507b9c5f111d5f36d2af
matchbox: Cant find a keycode for keysym 269025056
matchbox: ignoring key shortcut XF86Calendar=!$contacts

matchbox: Cant find a keycode for keysym 2809
matchbox: ignoring key shortcut telephone=!$dates

matchbox: Cant find a keycode for keysym 269025050
matchbox: ignoring key shortcut XF86Start=!matchbox-remote -desktop

Failed to launch bus: Failed to execute child process ?/usr/bin? (Permission denied)[settings daemon] Forking. run with -n to prevent fork

(matchbox-panel:2477): dbind-WARNING **: 18:06:40.109: Error retrieving accessibility bus address: org.a11y.Bus.Error: Failed to execute child process ?/usr/bin? (Permission denied)

(matchbox-desktop:2476): dbind-WARNING **: 18:06:40.110: Error retrieving accessibility bus address: org.a11y.Bus.Error: Failed to execute child process ?/usr/bin? (Permission denied)

PetaLinux 2019.2 petalinux /dev/ttyPS0

petalinux login: root
Password: 
root@petalinux:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0A:35:00:22:01  
          inet addr:192.168.3.36  Bcast:192.168.3.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:35ff:fe00:2201/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:12 overruns:0 frame:0
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1704 (1.6 KiB)  TX bytes:8013 (7.8 KiB)
          Interrupt:30 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@petalinux:~# 

  1. 2020年08月15日 04:04 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

Genesys ZU の電源を入れたら Linux がブートした

Genesys ZU の電源を入れた。
SDカードブートに設定して、付属の MicroSD カードでブートしたらLinux が立ち上がった。

MicroUSB ケーブルを PROG/UART ポートに接続して、もう片方をパソコンに接続した。
USB0 〜 USB3 までの 4 ポートあったが、 UART は USB1 だった。
電源をONするとLinux が立ち上がった。
Genesys ZU の写真を示す。フラッシュON で撮影したので、LED ランプが光っているのが良く分からない。
genesys_zu_32_200814.jpg

Linux が起動した。
例によって root ; root で入れた。
genesys_zu_29_200814.png

LAN ケーブルを挿すと、IP アドレスが割り振られた。
genesys_zu_30_200814.png

Ubuntu のターミナルから
ssh 192.168.3.35 -X -l root
では入れた。
genesys_zu_31_200814.png

起動ログを示す。

Xilinx Zynq MP First Stage Boot Loader 
Release 2019.1   Apr 15 2020  -  16:54:13
Reset Mode : System Reset
Platform: Silicon (4.0), Cluster ID 0x80000000
Running on A53-0 (64-bit) Processor, Device Name: XCZU3EG
Proc: A53-0 Freq: 1200000000 Hz Arch: 64 
Digilent Genesys ZU board-specific init
Processor Initialization Done 
================= In Stage 2 ============ 
SD1 with level shifter Boot Mode 
SD: rc= 0
File name is BOOT.BIN
SD/eMMC, Freq: 187500000 Hz 
Multiboot Reg : 0x0 
Image Header Table Offset 0x8C0 
*****Image Header Table Details******** 
Boot Gen Ver: 0x1020000 
No of Partitions: 0x4 
Partition Header Address: 0x440 
Partition Present Device: 0x0 
Initialization Success 
174.417400 ms. : Boot Dev. Init. Time
======= In Stage 3, Partition No:1 ======= 
UnEncrypted data Length: 0x107858 
Data word offset: 0x107858 
Total Data word length: 0x107858 
Destination Load Address: 0xFFFFFFFF 
Execution Address: 0x0 
Data word offset: 0xFDB0 
Partition Attributes: 0x26 
568.984933 ms.: P1 Copy time, Size: 4317536 
Destination Device is PL, changing LoadAddress
Non authenticated Bitstream download to start now
DMA transfer done 
12.201966 ms.: P1 (nsec. bitstream) dwnld Time 
PL Configuration done successfully 
Partition 1 Load Success 
======= In Stage 3, Partition No:2 ======= 
UnEncrypted data Length: 0x31DE 
Data word offset: 0x31DE 
Total Data word length: 0x31DE 
Destination Load Address: 0xFFFEA000 
Execution Address: 0xFFFEA000 
Data word offset: 0x117610 
Partition Attributes: 0x117 
9.221000 ms.: P2 Copy time, Size: 51064 
Partition 2 Load Success 
======= In Stage 3, Partition No:3 ======= 
UnEncrypted data Length: 0x39BEA 
Data word offset: 0x39BEA 
Total Data word length: 0x39BEA 
Destination Load Address: 0x8000000 
Execution Address: 0x8000000 
Data word offset: 0x11A7F0 
Partition Attributes: 0x114 
118.851466 ms.: P3 Copy time, Size: 946088 
Partition 3 Load Success 
All Partitions Loaded 
1101.494766 ms.: Total Time 
Note: Total execution time includes print times 
================= In Stage 4 ============ 
PM Init Success
Protection configuration applied
Running ���UjT�'$HP�� running on XCZU3EG/silicon v4/RTL5.1 at 0xfffea000
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x8000000
NOTICE:  BL31: v2.0(release):xilinx-v2018.3-720-g80d1c790
NOTICE:  BL31: Built : 18:19:45, Oct 24 2019
mmc_bind: alias ret=-2, devnum=-1
PMUFW: v1.1


U-Boot 2019.01 (Apr 15 2020 - 16:54:18 +0000)

Board: Xilinx ZynqMP
DRAM:  4 GiB
mmc_bind: alias ret=-2, devnum=-1
EL Level: EL2
Chip ID: zu3eg
MMC:   arasan_sdhci_probe: CLK 187500000
mmc@ff170000: 0
Loading Environment from SPI Flash... SF: Detected is25lp256d with page size 256 Bytes, erase size 64 KiB, total 32 MiB
*** Warning - bad CRC, using default environment

In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Board: Xilinx ZynqMP
Bootmode: LVL_SHFT_SD_MODE1
Reset reason: SOFT 
Net:   ZYNQ GEM: ff0b0000, phyaddr f, interface rgmii-id
eth0: ethernet@ff0b0000
U-BOOT for Zuca TEST
Hit any key to stop autoboot:  0 
clock is disabled (0Hz)
clock is enabled (91642Hz)
arasan_sdhci_set_tapdelay, host:mmc@ff170000 devId:1, bank:1, mode:0
clock is disabled (91642Hz)
arasan_sdhci_set_tapdelay, host:mmc@ff170000 devId:1, bank:1, mode:0
arasan_sdhci_set_tapdelay, host:mmc@ff170000 devId:1, bank:1, mode:0
clock is enabled (91642Hz)
arasan_sdhci_set_tapdelay, host:mmc@ff170000 devId:1, bank:1, mode:0
arasan_sdhci_set_tapdelay, host:mmc@ff170000 devId:1, bank:1, mode:0
clock is enabled (187500000Hz)
arasan_sdhci_set_tapdelay, host:mmc@ff170000 devId:1, bank:1, mode:3
sdhci_execute_tuning
arasan_sdhci_execute_tuning
65621556 bytes read in 4921 ms (12.7 MiB/s)
SF: Detected is25lp256d with page size 256 Bytes, erase size 64 KiB, total 32 MiB
## 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:  uncompressed
     Data Start:   0x10000104
     Data Size:    18614784 Bytes = 17.8 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x00080000
     Entry Point:  0x00080000
     Hash algo:    sha1
     Hash value:   8cabc1f48b449100c3c658575ebc4b143c7aa298
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 10000000 ...
   Using 'conf@system-top.dtb' configuration
   Trying 'ramdisk@1' ramdisk subimage
     Description:  petalinux-user-image
     Type:         RAMDisk Image
     Compression:  gzip compressed
     Data Start:   0x111caf14
     Data Size:    46963088 Bytes = 44.8 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   1adb19a2b854694daee5e77dfef92c8d7df0f9e1
   Verifying Hash Integrity ... sha1+ 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:   0x111c0c08
     Data Size:    41541 Bytes = 40.6 KiB
     Architecture: AArch64
     Hash algo:    sha1
     Hash value:   873fa2bef6f18efd3a7e51787c41d1da07689aeb
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x111c0c08
   Loading Kernel Image ... OK
   Loading Ramdisk to 76336000, end 78fff990 ... OK
   Loading Device Tree to 0000000007ff2000, end 0000000007fff244 ... OK
   Loading Device Tree to 0000000007fe1000, end 0000000007ff1244 ... OK
device 0 offset 0x1fff000, size 0x6
SF: 6 bytes @ 0x1fff000 Read: OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 4.19.0-xilinx-v2019.1 (oe-user@oe-host) (gcc version 8.2.0 (GCC)) #1 SMP Wed Apr 15 16:54:52 UTC 2020
[    0.000000] Machine model: xlnx,zynqmp
[    0.000000] earlycon: cdns0 at MMIO 0x00000000ff000000 (options '115200n8')
[    0.000000] bootconsole [cdns0] enabled
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] cma: Reserved 1000 MiB at 0x0000000037800000
[    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] random: get_random_bytes called from start_kernel+0x94/0x3f8 with crng_init=0
[    0.000000] percpu: Embedded 22 pages/cpu @(____ptrval____) s53016 r8192 d28904 u90112
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: enabling workaround for ARM erratum 845719
[    0.000000] Speculative Store Bypass Disable mitigation not required
[    0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 1033987
[    0.000000] Kernel command line: earlycon console=ttyPS0,115200 clk_ignore_unused
[    0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
[    0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
[    0.000000] software IO TLB: mapped [mem 0x7beff000-0x7feff000] (64MB)
[    0.000000] Memory: 2974584K/4193280K available (11068K kernel code, 642K rwdata, 5568K rodata, 832K init, 315K bss, 194696K reserved, 1024000K 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: 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] arch_timer: cp15 timer(s) running at 30.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xdd67c8a60, max_idle_ns: 881590406601 ns
[    0.000003] sched_clock: 56 bits at 30MHz, resolution 33ns, wraps every 4398046511088ns
[    0.008214] Console: colour dummy device 80x25
[    0.012391] Calibrating delay loop (skipped), value calculated using timer frequency.. 60.00 BogoMIPS (lpj=120000)
[    0.022668] pid_max: default: 32768 minimum: 301
[    0.027360] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.033924] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.041713] ASID allocator initialised with 32768 entries
[    0.046420] rcu: Hierarchical SRCU implementation.
[    0.051402] EFI services will not be available.
[    0.055737] smp: Bringing up secondary CPUs ...
[    0.060395] Detected VIPT I-cache on CPU1
[    0.060424] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.060729] Detected VIPT I-cache on CPU2
[    0.060747] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.061032] Detected VIPT I-cache on CPU3
[    0.061051] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.061096] smp: Brought up 1 node, 4 CPUs
[    0.095586] SMP: Total of 4 processors activated.
[    0.100259] CPU features: detected: 32-bit EL0 Support
[    0.106993] CPU: All CPU(s) started at EL2
[    0.109437] alternatives: patching kernel code
[    0.114725] devtmpfs: initialized
[    0.121340] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.126824] futex hash table entries: 1024 (order: 4, 65536 bytes)
[    0.153838] xor: measuring software checksum speed
[    0.193083]    8regs     :  2375.000 MB/sec
[    0.233111]    8regs_prefetch:  2052.000 MB/sec
[    0.273141]    32regs    :  2725.000 MB/sec
[    0.313168]    32regs_prefetch:  2309.000 MB/sec
[    0.313198] xor: using function: 32regs (2725.000 MB/sec)
[    0.317517] pinctrl core: initialized pinctrl subsystem
[    0.323289] NET: Registered protocol family 16
[    0.327355] audit: initializing netlink subsys (disabled)
[    0.332545] audit: type=2000 audit(0.280:1): state=initialized audit_enabled=0 res=1
[    0.340173] vdso: 2 pages (1 code @ (____ptrval____), 1 data @ (____ptrval____))
[    0.340177] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.354945] DMA: preallocated 256 KiB pool for atomic allocations
[    0.374890] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.442864] raid6: int64x1  gen()   445 MB/s
[    0.510904] raid6: int64x1  xor()   455 MB/s
[    0.578929] raid6: int64x2  gen()   680 MB/s
[    0.646959] raid6: int64x2  xor()   600 MB/s
[    0.715044] raid6: int64x4  gen()   981 MB/s
[    0.783087] raid6: int64x4  xor()   722 MB/s
[    0.851102] raid6: int64x8  gen()  1163 MB/s
[    0.919139] raid6: int64x8  xor()   759 MB/s
[    0.987244] raid6: neonx1   gen()   735 MB/s
[    1.055244] raid6: neonx1   xor()   880 MB/s
[    1.123320] raid6: neonx2   gen()  1129 MB/s
[    1.191343] raid6: neonx2   xor()  1173 MB/s
[    1.259384] raid6: neonx4   gen()  1484 MB/s
[    1.327413] raid6: neonx4   xor()  1418 MB/s
[    1.395462] raid6: neonx8   gen()  1540 MB/s
[    1.463504] raid6: neonx8   xor()  1459 MB/s
[    1.463531] raid6: using algorithm neonx8 gen() 1540 MB/s
[    1.467494] raid6: .... xor() 1459 MB/s, rmw enabled
[    1.472424] raid6: using neon recovery algorithm
[    1.477255] xilinx-gpio 80009000.gpio: Input clock not found
[    1.482677] xilinx-gpio 80002000.gpio: Input clock not found
[    1.488285] xilinx-gpio 80003000.gpio: Input clock not found
[    1.493906] xilinx-gpio 80004000.gpio: Input clock not found
[    1.499529] xilinx-gpio 80006000.gpio: Input clock not found
[    1.505156] xilinx-gpio 80007000.gpio: Input clock not found
[    1.510773] xilinx-gpio 80001000.gpio: Input clock not found
[    1.516397] xilinx-gpio 80005000.gpio: Input clock not found
[    1.522021] xilinx-gpio 80044000.gpio: Input clock not found
[    1.527642] xilinx-gpio 80045000.gpio: Input clock not found
[    1.533265] xilinx-gpio 80043000.gpio: Input clock not found
[    1.539464] SCSI subsystem initialized
[    1.542750] usbcore: registered new interface driver usbfs
[    1.548057] usbcore: registered new interface driver hub
[    1.553340] usbcore: registered new device driver usb
[    1.558379] media: Linux media interface: v0.10
[    1.562837] videodev: Linux video capture interface: v2.00
[    1.568289] pps_core: LinuxPPS API ver. 1 registered
[    1.573196] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    1.582289] PTP clock support registered
[    1.586191] EDAC MC: Ver: 3.0.0
[    1.589686] zynqmp-ipi-mbox mailbox@ff990400: Probed ZynqMP IPI Mailbox driver.
[    1.596801] FPGA manager framework
[    1.600101] Advanced Linux Sound Architecture Driver Initialized.
[    1.606256] Bluetooth: Core ver 2.22
[    1.609541] NET: Registered protocol family 31
[    1.613939] Bluetooth: HCI device and connection manager initialized
[    1.620256] Bluetooth: HCI socket layer initialized
[    1.625098] Bluetooth: L2CAP socket layer initialized
[    1.630129] Bluetooth: SCO socket layer initialized
[    1.635262] clocksource: Switched to clocksource arch_sys_counter
[    1.641092] VFS: Disk quotas dquot_6.6.0
[    1.644949] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    1.655987] NET: Registered protocol family 2
[    1.656406] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes)
[    1.663890] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
[    1.671227] TCP bind hash table entries: 32768 (order: 7, 524288 bytes)
[    1.677976] TCP: Hash tables configured (established 32768 bind 32768)
[    1.684150] UDP hash table entries: 2048 (order: 4, 65536 bytes)
[    1.690129] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes)
[    1.696608] NET: Registered protocol family 1
[    1.700990] RPC: Registered named UNIX socket transport module.
[    1.706672] RPC: Registered udp transport module.
[    1.711338] RPC: Registered tcp transport module.
[    1.716008] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.722756] Trying to unpack rootfs image as initramfs...
[    3.664189] Freeing initrd memory: 45860K
[    3.664558] hw perfevents: no interrupt-affinity property for /pmu, guessing.
[    3.669819] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[    3.678334] Initialise system trusted keyrings
[    3.681840] workingset: timestamp_bits=62 max_order=20 bucket_order=0
[    3.688860] NFS: Registering the id_resolver key type
[    3.693198] Key type id_resolver registered
[    3.697336] Key type id_legacy registered
[    3.701320] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    3.707988] ntfs: driver 2.1.32 [Flags: R/W DEBUG].
[    3.712841] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[    4.806496] NET: Registered protocol family 38
[    4.866959] Key type asymmetric registered
[    4.866987] Asymmetric key parser 'x509' registered
[    4.870309] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[    4.877623] io scheduler noop registered
[    4.881511] io scheduler deadline registered
[    4.885780] io scheduler cfq registered (default)
[    4.890423] io scheduler mq-deadline registered
[    4.894919] io scheduler kyber registered
[    4.900137] xilinx-vdma 80008000.dma: failed to get axi_aclk (-517)
[    4.905161] xilinx-vdma 8000a000.dma: failed to get axi_aclk (-517)
[    4.938423] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    4.942900] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    4.949436] brd: module loaded
[    4.953237] loop: module loaded
[    4.954088] mtdoops: mtd device (mtddev=name/number) must be supplied
[    4.959152] libphy: Fixed MDIO Bus: probed
[    4.963074] tun: Universal TUN/TAP device driver, 1.6
[    4.966933] CAN device driver interface
[    4.971741] usbcore: registered new interface driver asix
[    4.976023] usbcore: registered new interface driver ax88179_178a
[    4.982066] usbcore: registered new interface driver cdc_ether
[    4.987862] usbcore: registered new interface driver net1080
[    4.993484] usbcore: registered new interface driver cdc_subset
[    4.999364] usbcore: registered new interface driver zaurus
[    5.004903] usbcore: registered new interface driver sierra_net
[    5.010791] usbcore: registered new interface driver cdc_ncm
[    5.017079] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    5.022874] ehci-pci: EHCI PCI platform driver
[    5.027597] usbcore: registered new interface driver uas
[    5.032592] usbcore: registered new interface driver usb-storage
[    5.038586] usbcore: registered new interface driver qcserial
[    5.044254] usbserial: USB Serial support registered for Qualcomm USB modem
[    5.051176] usbcore: registered new interface driver sierra
[    5.056708] usbserial: USB Serial support registered for Sierra USB modem
[    5.063957] rtc_zynqmp ffa60000.rtc: rtc core: registered ffa60000.rtc as rtc0
[    5.070682] i2c /dev entries driver
[    5.075964] usbcore: registered new interface driver uvcvideo
[    5.079787] USB Video Class driver (1.1.1)
[    5.084306] Bluetooth: HCI UART driver ver 2.3
[    5.088268] Bluetooth: HCI UART protocol H4 registered
[    5.093367] Bluetooth: HCI UART protocol BCSP registered
[    5.098663] Bluetooth: HCI UART protocol LL registered
[    5.103747] Bluetooth: HCI UART protocol ATH3K registered
[    5.109127] Bluetooth: HCI UART protocol Three-wire (H5) registered
[    5.115378] Bluetooth: HCI UART protocol Intel registered
[    5.120723] Bluetooth: HCI UART protocol QCA registered
[    5.125923] usbcore: registered new interface driver bcm203x
[    5.131541] usbcore: registered new interface driver bpa10x
[    5.137076] usbcore: registered new interface driver bfusb
[    5.142528] usbcore: registered new interface driver btusb
[    5.147949] Bluetooth: Generic Bluetooth SDIO driver ver 0.1
[    5.153617] usbcore: registered new interface driver ath3k
[    5.159147] EDAC MC: ECC not enabled
[    5.162709] EDAC DEVICE0: Giving out device to module edac controller cache_err: DEV edac (POLLED)
[    5.171658] EDAC DEVICE1: Giving out device to module zynqmp-ocm-edac controller zynqmp_ocm: DEV ff960000.memory-controller (INTERRUPT)
[    5.184059] sdhci: Secure Digital Host Controller Interface driver
[    5.189728] sdhci: Copyright(c) Pierre Ossman
[    5.194051] sdhci-pltfm: SDHCI platform and OF driver helper
[    5.199994] ledtrig-cpu: registered to indicate activity on CPUs
[    5.205689] zynqmp_firmware_probe Platform Management API v1.1
[    5.211443] zynqmp_firmware_probe Trustzone version v1.0
[    5.239228] zynqmp_clk_mux_get_parent() getparent failed for clock: lpd_wdt, ret = -22
[    5.241934] alg: No test for xilinx-zynqmp-aes (zynqmp-aes)
[    5.247130] zynqmp_aes zynqmp_aes: AES Successfully Registered
[    5.247130] 
[    5.254582] alg: No test for xilinx-keccak-384 (zynqmp-keccak-384)
[    5.260703] alg: No test for xilinx-zynqmp-rsa (zynqmp-rsa)
[    5.266284] usbcore: registered new interface driver usbhid
[    5.271606] usbhid: USB HID core driver
[    5.277829] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[    5.282218] usbcore: registered new interface driver snd-usb-audio
[    5.288896] pktgen: Packet Generator for packet performance testing. Version: 2.75
[    5.295849] Initializing XFRM netlink socket
[    5.299789] NET: Registered protocol family 10
[    5.304486] Segment Routing with IPv6
[    5.307845] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    5.313973] NET: Registered protocol family 17
[    5.318061] NET: Registered protocol family 15
[    5.322476] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    5.335389] can: controller area network core (rev 20170425 abi 9)
[    5.341542] NET: Registered protocol family 29
[    5.345909] can: raw protocol (rev 20170425)
[    5.350145] can: broadcast manager protocol (rev 20170425 t)
[    5.355770] can: netlink gateway (rev 20170425) max_hops=1
[    5.361414] Bluetooth: RFCOMM TTY layer initialized
[    5.366069] Bluetooth: RFCOMM socket layer initialized
[    5.371185] Bluetooth: RFCOMM ver 1.11
[    5.374890] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    5.380160] Bluetooth: BNEP filters: protocol multicast
[    5.385353] Bluetooth: BNEP socket layer initialized
[    5.390281] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[    5.396163] Bluetooth: HIDP socket layer initialized
[    5.401211] 9pnet: Installing 9P2000 support
[    5.405347] Key type dns_resolver registered
[    5.409950] registered taskstats version 1
[    5.413642] Loading compiled-in X.509 certificates
[    5.418722] Btrfs loaded, crc32c=crc32c-generic
�    5.428973] fR����S�&Si��k׋��+W/�*LW�Y�X��edf000000 (irq = 46, base_baud = 6250000) is a xuartps
[    5.437936] console [ttyPS0] enabled
[    5.441620] bootconsole [cdns0] disabled
[    5.441620] bootconsole [cdns0] disabled
[    5.449532] ff010000.serial: ttyPS1 at MMIO 0xff010000 (irq = 47, base_baud = 6250000) is a xuartps
[    5.462286] GPIO IRQ not connected
[    5.465698] XGpio: gpio@80009000: registered, base is 488
[    5.471290] GPIO IRQ not connected
[    5.474688] XGpio: gpio@80002000: registered, base is 487
[    5.480262] GPIO IRQ not connected
[    5.483673] XGpio: gpio@80003000: registered, base is 470
[    5.489076] GPIO IRQ not connected
[    5.492596] XGpio: gpio@80003000: dual channel registered, base is 453
[    5.499324] GPIO IRQ not connected
[    5.502724] XGpio: gpio@80004000: registered, base is 436
[    5.508131] GPIO IRQ not connected
[    5.511659] XGpio: gpio@80004000: dual channel registered, base is 419
[    5.518371] GPIO IRQ not connected
[    5.521777] XGpio: gpio@80006000: registered, base is 416
[    5.527178] GPIO IRQ not connected
[    5.530693] XGpio: gpio@80006000: dual channel registered, base is 413
[    5.537406] GPIO IRQ not connected
[    5.540811] XGpio: gpio@80007000: registered, base is 410
[    5.546213] GPIO IRQ not connected
[    5.549727] XGpio: gpio@80007000: dual channel registered, base is 407
[    5.556434] GPIO IRQ not connected
[    5.559839] XGpio: gpio@80001000: registered, base is 396
[    5.565241] GPIO IRQ not connected
[    5.568763] XGpio: gpio@80001000: dual channel registered, base is 385
[    5.575467] GPIO IRQ not connected
[    5.578865] XGpio: gpio@80005000: registered, base is 373
[    5.584269] GPIO IRQ not connected
[    5.587790] XGpio: gpio@80005000: dual channel registered, base is 361
[    5.594624] XGpio: gpio@80044000: registered, base is 356
[    5.600210] GPIO IRQ not connected
[    5.603614] XGpio: gpio@80045000: registered, base is 352
[    5.609281] XGpio: gpio@80043000: registered, base is 348
[    5.615084] of-fpga-region fpga-full: FPGA Region probed
[    5.620915] nwl-pcie fd0e0000.pcie: Link is DOWN
[    5.625573] nwl-pcie fd0e0000.pcie: host bridge /amba/pcie@fd0e0000 ranges:
[    5.632547] nwl-pcie fd0e0000.pcie:   MEM 0xe0000000..0xefffffff -> 0xe0000000
[    5.639777] nwl-pcie fd0e0000.pcie:   MEM 0x600000000..0x7ffffffff -> 0x600000000
[    5.647371] nwl-pcie fd0e0000.pcie: PCI host bridge to bus 0000:00
[    5.653559] pci_bus 0000:00: root bus resource [bus 00-ff]
[    5.659052] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xefffffff]
[    5.665925] pci_bus 0000:00: root bus resource [mem 0x600000000-0x7ffffffff pref]
[    5.676402] pci 0000:00:00.0: PCI bridge to [bus 01-0c]
[    5.682206] xilinx-dpdma fd4c0000.dma: Xilinx DPDMA engine is probed
[    5.688776] xilinx-vdma 80008000.dma: Xilinx AXI DMA Engine Driver Probed!!
[    5.695946] xilinx-vdma 8000a000.dma: Xilinx AXI DMA Engine Driver Probed!!
[    5.703140] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
[    5.710243] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
[    5.717347] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
[    5.724452] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
[    5.731549] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
[    5.738655] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
[    5.745763] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
[    5.752861] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
[    5.760032] xilinx-zynqmp-dma ffa80000.dma: ZynqMP DMA driver Probe success
[    5.767133] xilinx-zynqmp-dma ffa90000.dma: ZynqMP DMA driver Probe success
[    5.774232] xilinx-zynqmp-dma ffaa0000.dma: ZynqMP DMA driver Probe success
[    5.781329] xilinx-zynqmp-dma ffab0000.dma: ZynqMP DMA driver Probe success
[    5.788436] xilinx-zynqmp-dma ffac0000.dma: ZynqMP DMA driver Probe success
[    5.795541] xilinx-zynqmp-dma ffad0000.dma: ZynqMP DMA driver Probe success
[    5.802644] xilinx-zynqmp-dma ffae0000.dma: ZynqMP DMA driver Probe success
[    5.809754] xilinx-zynqmp-dma ffaf0000.dma: ZynqMP DMA driver Probe success
[    5.817067] xilinx-psgtr fd400000.zynqmp_phy: Lane:3 type:8 protocol:4 pll_locked:yes
[    5.827047] zynqmp_clk_divider_set_rate() set divider failed for spi0_ref_div1, ret = -13
[    5.835661] xilinx-dp-snd-codec fd4a0000.zynqmp-display:zynqmp_dp_snd_codec0: Xilinx DisplayPort Sound Codec probed
[    5.846333] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm0: Xilinx DisplayPort Sound PCM probed
[    5.854369] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm1: Xilinx DisplayPort Sound PCM probed
[    5.863045] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[    5.875485] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[    5.888159] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: Xilinx DisplayPort Sound Card probed
[    5.898338] OF: graph: no port node found in /amba/zynqmp-display@fd4a0000
[    5.905307] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    5.911913] [drm] No driver support for vblank timestamp query.
[    5.917887] xlnx-drm xlnx-drm.0: bound fd4a0000.zynqmp-display (ops 0xffffff8008c12160)
[    7.003275] [drm] Cannot find any crtc or sizes
[    7.008028] [drm] Initialized xlnx 1.0.0 20130509 for fd4a0000.zynqmp-display on minor 0
[    7.016133] zynqmp-display fd4a0000.zynqmp-display: ZynqMP DisplayPort Subsystem driver probed
[    7.026005] WILC_SPI spi1.0: spiModalias: wilc1000, spiMax-Speed: 48000000
[    7.032891] Registering wifi device
[    7.036377] Max scan ids= 10,Max scan IE len= 1000,Signal Type= 1,Interface Modes= 844
[    7.044457] Initializing Locks ...
[    7.048331] wifi_pm : 0
[    7.050781] WILC_SPI spi1.0: succesfully got gpio_reset
[    7.056100] WILC_SPI spi1.0: succesfully got gpio_chip_en
[    7.061649] wifi_pm : 1
[    7.064099] WILC_SPI spi1.0: succesfully got gpio_reset
[    7.069416] WILC_SPI spi1.0: succesfully got gpio_chip_en
[    7.080042] WILC_SPI spi1.0: WILC SPI probe success
[    7.085237] zynqmp-qspi ff0f0000.spi: rx bus width not found
[    7.090894] zynqmp-qspi ff0f0000.spi: tx bus width not found
[    7.100086] m25p80 spi0.0: is25lp256d (32768 Kbytes)
[    7.105059] 3 fixed-partitions partitions found on MTD device spi0.0
[    7.111400] Creating 3 MTD partitions on "spi0.0":
[    7.116185] 0x000000000000-0x000000100000 : "boot"
[    7.121424] 0x000000100000-0x000000140000 : "bootenv"
[    7.126865] 0x000000140000-0x000001740000 : "kernel"
[    7.132589] macb ff0b0000.ethernet: Not enabling partial store and forward
[    7.139974] libphy: MACB_mii_bus: probed
[    7.148832] TI DP83867 ff0b0000.ethernet-ffffffff:0f: attached PHY driver [TI DP83867] (mii_bus:phy_addr=ff0b0000.ethernet-ffffffff:0f, irq=68)
[    7.161703] macb ff0b0000.ethernet eth0: Cadence GEM rev 0x50070106 at 0xff0b0000 irq 29 (00:18:3e:03:47:fb)
[    7.171879] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[    7.178435] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[    7.184920] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[    7.191405] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[    7.198293] dwc3 fe200000.dwc3: Failed to get clk 'ref': -2
[    7.204150] xilinx-psgtr fd400000.zynqmp_phy: Lane:1 type:0 protocol:3 pll_locked:yes
[    7.214179] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    7.219760] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
[    7.227712] xhci-hcd xhci-hcd.0.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000202010810
[    7.237120] xhci-hcd xhci-hcd.0.auto: irq 69, io mem 0xfe200000
[    7.243245] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
[    7.251502] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.258719] usb usb1: Product: xHCI Host Controller
[    7.263592] usb usb1: Manufacturer: Linux 4.19.0-xilinx-v2019.1 xhci-hcd
[    7.270280] usb usb1: SerialNumber: xhci-hcd.0.auto
[    7.275434] hub 1-0:1.0: USB hub found
[    7.279193] hub 1-0:1.0: 1 port detected
[    7.283310] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    7.288877] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
[    7.296539] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0  SuperSpeed
[    7.303270] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 4.19
[    7.311530] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.318740] usb usb2: Product: xHCI Host Controller
[    7.323610] usb usb2: Manufacturer: Linux 4.19.0-xilinx-v2019.1 xhci-hcd
[    7.330302] usb usb2: SerialNumber: xhci-hcd.0.auto
[    7.335423] hub 2-0:1.0: USB hub found
[    7.339177] hub 2-0:1.0: 1 port detected
[    7.343614] dwc3-of-simple ff9e0000.usb1: dwc3_simple_set_phydata: Can't find usb3-phy
[    7.351945] dwc3 fe300000.dwc3: Failed to get clk 'ref': -2
[    7.357769] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[    7.363346] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 3
[    7.371302] xhci-hcd xhci-hcd.1.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000202010010
[    7.380716] xhci-hcd xhci-hcd.1.auto: irq 72, io mem 0xfe300000
[    7.386825] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
[    7.395086] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.402304] usb usb3: Product: xHCI Host Controller
[    7.407172] usb usb3: Manufacturer: Linux 4.19.0-xilinx-v2019.1 xhci-hcd
[    7.413864] usb usb3: SerialNumber: xhci-hcd.1.auto
[    7.418980] hub 3-0:1.0: USB hub found
[    7.422740] hub 3-0:1.0: 1 port detected
[    7.426841] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[    7.432402] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 4
[    7.440061] xhci-hcd xhci-hcd.1.auto: Host supports USB 3.0  SuperSpeed
[    7.446718] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[    7.454878] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 4.19
[    7.463135] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.470348] usb usb4: Product: xHCI Host Controller
[    7.475215] usb usb4: Manufacturer: Linux 4.19.0-xilinx-v2019.1 xhci-hcd
[    7.481907] usb usb4: SerialNumber: xhci-hcd.1.auto
[    7.487023] hub 4-0:1.0: USB hub found
[    7.490786] hub 4-0:1.0: 1 port detected
[    7.495786] i2c i2c-1: Added multiplexed i2c bus 4
[    7.500702] i2c i2c-1: Added multiplexed i2c bus 5
[    7.505614] i2c i2c-1: Added multiplexed i2c bus 6
[    7.510753] i2c i2c-1: Added multiplexed i2c bus 7
[    7.543944] i2c i2c-1: Added multiplexed i2c bus 8
[    7.575532] i2c i2c-1: Added multiplexed i2c bus 9
[    7.580448] i2c i2c-1: Added multiplexed i2c bus 10
[    7.585452] i2c i2c-1: Added multiplexed i2c bus 11
[    7.590325] pca954x 1-0070: registered 8 multiplexed busses for I2C switch pca9548
[    7.597920] cdns-i2c ff020000.i2c: 400 kHz mmio ff020000 irq 31
[    7.604291] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 32
[    7.610976] cpufreq: cpufreq_online: CPU0: Running at unlisted freq: 1200000 KHz
[    7.618378] cpu cpu0: dev_pm_opp_set_rate: failed to find current OPP for freq 1200000000 (-34)
[    7.627107] cpufreq: cpufreq_online: CPU0: Unlisted initial frequency changed to: 1199999 KHz
[    7.635639] cpu cpu0: dev_pm_opp_set_rate: failed to find current OPP for freq 1200000000 (-34)
[    7.675689] mmc0: SDHCI controller on ff170000.mmc [ff170000.mmc] using ADMA 64-bit
[    7.691385] rtc_zynqmp ffa60000.rtc: setting system clock to 2020-08-14 05:40:08 UTC (1597383608)
[    7.700266] of_cfs_init
[    7.702719] of_cfs_init: OK
[    7.705638] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    7.763169] random: fast init done
[    7.771696] usb 3-1: new high-speed USB device number 2 using xhci-hcd
[    7.810127] mmc0: new ultra high speed SDR104 SDHC card at address aaaa
[    7.817291] mmcblk0: mmc0:aaaa SL16G 14.8 GiB 
[    7.826716]  mmcblk0: p1 p2
[    7.849900] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    7.856431] clk: Not disabling unused clocks
[    7.860697] ALSA device list:
[    7.863653]   #0: DisplayPort monitor
[    7.867561] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    7.876167] cfg80211: failed to load regulatory.db
[    7.881187] Freeing unused kernel memory: 832K
[    7.903296] Run /init as init process
INIT: version 2.88 booting[    7.927405] usb 3-1: New USB device found, idVendor=0424, idProduct=2513, bcdDevice= b.b3
[    7.935582] usb 3-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0

[    7.990901] hub 3-1:1.0: USB hub found
[    7.994716] hub 3-1:1.0: 3 ports detected
Starting udev
[    8.041243] udevd[1952]: starting version 3.2.5
[    8.046065] random: udevd: uninitialized urandom read (16 bytes read)
[    8.052555] random: udevd: uninitialized urandom read (16 bytes read)
[    8.059044] random: udevd: uninitialized urandom read (16 bytes read)
[    8.069607] udevd[1953]: starting eudev-3.2.5
[    8.122372] mali: loading out-of-tree module taints kernel.
[    8.143769] [drm] Cannot find any crtc or sizes
[    8.176640] <1>Digilent pwm module loaded.
[    8.182567] pwm-rgb-led 80000000.pwm_rgb: Device Tree Probing
[    8.188404] pwm-rgb-led 80000000.pwm_rgb: pwm-rgb-led at 0x80000000 mapped to 0x095c5000
[    8.482093] EXT4-fs (mmcblk0p2): warning: mounting fs with errors, running e2fsck is recommended
[    8.494945] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    8.497036] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
Configuring packages on first boot....
 (This may take several minutes. Please do not power off the machine.)
Running postinst /etc/rpm-postinsts/100-libmali-xlnx...
/usr/sbin/run-postinsts: line 70: update-alternatives:: command not found
Running postinst /etc/rpm-postinsts/101-sysvinit-inittab...
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
 Removing any system startup links for run-postinsts ...
  /etc/rcS.d/S99run-postinsts
 Starting zuca-test-suite
INIT: Entering runlevel: 5
BT SERVER IS RUNNING
Configuring network interfaces... [    9.082637] pps pps0: new PPS source ptp0
[    9.086665] macb ff0b0000.ethernet: gem-ptp-timer ptp clock registered.
[    9.093374] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
udhcpc: started, v1.29.2
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: no lease, forking to background
done.
Starting system message bus: dbus.
Starting Dropbear SSH server: Generating 2048 bit rsa key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1wFSr5o8iLaOxGKBxO5D+tDo59cRbAj0xLd0Wn0iEd6JHPsEz3oZPIT2ytmqIGsMQzSSeD2uOCCW6iyMm2fQXpZl73ZH9/z9sdSxitkGFrFtPkmueXSRJgbhyHE50wfyYm+/+Zx6QQzGifr4IijVklipKXQ0YlRJmyV1eLNCiw4Z9kFTdDiqJBDRge12Ye9o9sVQW+h+LPVh+ZBgawRK64Hf7paRcCJQqq5ZifBAhRWJtYJQ3RGoV+jzC71/TN3f034MfUCuz04hAeilYgImzrMp0djOyILBzAYZs11Z04MLSn0orUp0xpwGaU1I6l7TIkodZYSswu1WPcnHim2nn root@Zuca
Fingerprint: sha1!! c0:62:dc:ec:71:d6:c8:c2:11:32:56:6c:9e:06:e6:f3:c1:47:d1:9b
dropbear.
Starting internet superserver: inetd.
Starting syslogd/klogd: done
Starting tcf-agent: OK

PetaLinux 2019.1 Zuca /dev/ttyPS0

Zuca login: root
Password: 
root@Zuca:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:18:3E:03:47:FB  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:29 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@Zuca:~# [   59.999815] macb ff0b0000.ethernet eth0: link up (1000/Full)
[   60.005492] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
ifconfig
eth0      Link encap:Ethernet  HWaddr 00:18:3E:03:47:FB  
          inet6 addr: fe80::218:3eff:fe03:47fb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:4 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:276 (276.0 B)  TX bytes:960 (960.0 B)
          Interrupt:29 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@Zuca:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:18:3E:03:47:FB  
          inet addr:192.168.3.35  Bcast:192.168.3.255  Mask:255.255.255.0
          inet6 addr: fe80::218:3eff:fe03:47fb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:8 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2188 (2.1 KiB)  TX bytes:1726 (1.6 KiB)
          Interrupt:29 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


  1. 2020年08月14日 16:00 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

ACRi ルームの Alveo U50 を使ってみた3(ラプラシアンフィルタ)

ACRi ルームの Alveo U50 を使ってみた2(Vitis Ai の実行)”の続き。

前回は、ACRi ルームの Alveo U50 を使ってみるということで Vitis AI を使用して、いろいろなサンプルを実行してみた。今回は、自分で作ったラプラシアンフィルタの Vitis 実装コードを ACRi ルームの Alveo U50 を使って実行させてみよう。

”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン2”の lap_filter_axis_dma.cpp と lap_filter_axis_dma_host.cpp を使用する。それに画像ファイルを SFTP で ACRi のファイル・サーバーに送ろう。

WinSCP を起動して、ACRi に接続して、4 つのファイルをアップロードした。
ACRi_U50_35_200809.png

as004 上で Vitis 2019.2 のプロジェクトを作成する。
New Applilcation Project の Create a New Application Project ダイアログで、Project name を lap_filter_axis_dma とした。
ACRi_U50_36_200809.png

Platform では、 xilinx_u50_gen3x16_xdma_201920_3 のプラットフォームを選択した。
ACRi_U50_37_200809.png

Templates では、Empty Application を選択し、Finishボタンをクリックした。
ACRi_U50_39_200809.png

Vitis 2019.2 の lap_filter_axis_dma プロジェクトが生成された。
ACRi_U50_40_200809.png

ソースコードが入っていないので、ソースコードをインポートしよう。
lap_filter_axis_dma_system -> lap_filter_axis_dma -> src を右クリックし、右クリックメニューから Import Sources... を選択した。
ACRi_U50_41_200809.png

lap_filter_axis_dma.cpp と lap_filter_axis_dma_host.cpp , bmp_header.h , test.bmp をインポートした。
ACRi_U50_42_200809.png

lap_filter_axis_dma.cpp と lap_filter_axis_dma_host.cpp , bmp_header.h , test.bmp を src にインポートできた。
ACRi_U50_44_200809.png

Add Hardware Functions のボタンをクリックして、ハードウェアにする関数を選択する。lap_filter_axis_dma を選択した。
ACRi_U50_45_200809.png

バイナリ・コンテナの名前を lap_filter_axis_dma に変更した。
ACRi_U50_46_200809.png

Assistant ウインドウの lap_filter_axis_dma_system -> lap_filter_axis_dma -> Hardware を右クリックし、右クリックメニューから Build を選択して、ビルドを行った。
ACRi_U50_47_200809.png

ビルドが開始された。
ACRi_U50_48_200809.png

ビルド中の CPU 使用状況。
ACRi_U50_49_200809.png

ビルドが成功した。
ACRi_U50_50_200809.png

Hardware/lap_filter_axis_dma-Default ディレクトリに test.bmp を入れた。
ACRi_U50_52_200810.png

早速、実行したところエラーになった。
ACRi_U50_51_200810.png

Git branch: 2020.1
PID: 1861
UID: 50255
[Mon Aug 10 06:32:22 2020]
HOST: as004
EXE: /home/u_marsee101/Vitis_Work/U50/2019.2/lap_filter_axis_dma/Hardware/lap_filter_axis_dma
[XRT] ERROR: bad magic header in xclbin
[XRT] ERROR: program is nullptr


vadd の実行には成功しているので、何か環境が違うのではないだろうか?
もしかして、Template を Vector Addition にしておいて、ソースコードを lap_filter_axis_dma に入れ替えれば動くんじゃないだろうか?
ということで、Template を Vector Addition にした lap_filter_axis_dma2 プロジェクトを作成して、ビルド成功した。
そして、実行すると動作した。
ACRi_U50_53_200811.png

[Console output redirected to file:/home/u_marsee101/Vitis_Work/U50/2019.2/lap_filter_axis_dma2/Hardware/lap_filter_axis_dma2-Default.launch.log]
Using FPGA binary file specfied through the command line: ../binary_container_1.xclbin
Found Platform
Platform Name: Xilinx
Loading: '../binary_container_1.xclbin'
lap_filter_axis_dma: 307005 ns
Success HW and SW results match


Hardware/lap_filter_axis_dma2-Default ディレクトリに 、temp_lap.bmp ファイルができていた。
ACRi_U50_54_200811.png

temp_lap.bmp ファイルを見たところ、確かにエッジの画像になっていた。
ACRi_U50_55_200811.png
  1. 2020年08月13日 04:25 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

Genesys ZU Vitis Accleration Platform を使用して、Vector Addition サンプルを実行する1(Vitis ビルド編)

Genesys ZU Vitis Accleration Platform”で配布されている Vitis 2019.2 の Vitis アクセラレーション・プラットフォームを使用して、Vector Addition サンプルをビルドしてみよう。

Genesys ZU Vitis Accleration Platform”から Vitis アクセラレーション・プラットフォームの genesys_zu.tar.gz をダウンロードした。

genesys_zu.tar.gz を展開すると genesys_zu プラットフォームがあった。 3.6 GB と大きい。
genesys_zu_10_200809.png

genesys_zu プラットフォームを Vitis 2019.2 のプラットフォーム・ディレクトリ(tools/Xilinx/Vitis/2019.2/platform)にコピーした。
genesys_zu_11_200809.png

Vitis 起動の前に Genasys ZU のボード・ファイルをダウンロードする。
ボード・ファイルのインストールの仕方は”Installing Vivado, Xilinx SDK, and Digilent Board Files”に書いてある。その中のDigilent 社のボード・ファイルリンクでダウンロードした。
すると、 vivado-board-master.zip がダウンロードされたので、展開する。 /vivado-board-master/new/board_files/ の下に genesys-zu-3eg があった。
genesys_zu_20_200810.png

genesys-zu-3eg を tools/Xilinx/Vivado/2019.2/data/boards/board_files ディレクトリにコピーした。
genesys_zu_21_200810.png

Vitis を起動し、workspace を選択するダイアログで、Vitis_work/2019.2/genesys_zu を指定した。
genesys_zu_12_200810.png

Vitis IDE が立ち上がった。
Create Application Project をクリックした。
genesys_zu_13_200810.png

New Application Project ダイアログの Create a New Application Project 画面で、Project name に vadd と入力した。
genesys_zu_14_200810.png

platform 画面では、genesys_zu を選択した。
genesys_zu_15_200810.png

Domain 画面では、デフォルトのままとした。
genesys_zu_16_200810.png

Template 画面では Vector Addition を選択した。
genesys_zu_17_200810.png

Genesys ZU 用の vadd プロジェクトが作成された。
genesys_zu_18_200810.png

Assistant ウインドウの Vadd_system -> vadd -> Hardware を右クリックし、右クリックメニューから Build を選択して、Hardware をビルドする。
genesys_zu_19_200810.png

ビルドはエラー終了してしまった。
genesys_zu_22_200810.png

エラーログを示す。

Creating Vivado project.
[17:55:54] Run vpl: Step create_project: Failed
[17:55:55] Run vpl: FINISHED. Run Status: create_project ERROR
ERROR: [VPL 60-773] In '/media/masaaki/Ubuntu_Disk/Vitis_work/2019.2/genesys_zu/vadd/Hardware/binary_container_1.build/link/vivado/vpl/runme.log', caught Tcl error: ERROR: [Board 49-71] The board_part definition was not found for digilentinc.com:genesys-zu-3eg:part0:1.0. The project's board_part property was not set, but the project's part property was set to xczu3eg-sfvc784-1-e. Valid board_part values can be retrieved with the 'get_board_parts' Tcl command. Check if board.repoPaths parameter is set and the board_part is installed from the tcl app store.
ERROR: [VPL 60-773] In '/media/masaaki/Ubuntu_Disk/Vitis_work/2019.2/genesys_zu/vadd/Hardware/binary_container_1.build/link/vivado/vpl/vivado.log', caught Tcl error: ERROR: [Board 49-71] The board_part definition was not found for digilentinc.com:genesys-zu-3eg:part0:1.0. The project's board_part property was not set, but the project's part property was set to xczu3eg-sfvc784-1-e. Valid board_part values can be retrieved with the 'get_board_parts' Tcl command. Check if board.repoPaths parameter is set and the board_part is installed from the tcl app store.
ERROR: [VPL 60-704] Integration error, Failed to rebuild a project required for hardware synthesis. The project is 'prj'. The rebuild script is '.local/hw_platform/prj/rebuild.tcl'. The rebuild script was delivered as part of the hardware platform. Consult with the hardware platform provider to investigate the rebuild script contents. An error stack with function names and arguments may be available in the 'vivado.log'.
ERROR: [VPL 60-1328] Vpl run 'vpl' failed
ERROR: [VPL 60-806] Failed to finish platform linker
INFO: [v++ 60-1442] [17:55:55] Run run_link: Step vpl: Failed
Time (s): cpu = 00:00:04 ; elapsed = 00:00:15 . Memory (MB): peak = 677.902 ; gain = 0.000 ; free physical = 9652 ; free virtual = 40371
ERROR: [v++ 60-661] v++ link run 'run_link' failed
ERROR: [v++ 60-626] Kernel link failed to complete
ERROR: [v++ 60-703] Failed to finish linking
makefile:86: recipe for target 'binary_container_1.xclbin' failed
make: *** [binary_container_1.xclbin] Error 1

17:55:55 Build Finished (took 1m:629ms)


digilentinc.com:genesys-zu-3eg:part0:1.0 というボード・ファイルが無いと言っているようだ。

tools/Xilinx/Vivado/2019.2/data/boards/board_files ディレクトリの genesys-zu-3eg を見てみよう。
genesys-zu-3eg ディレクトリの下には、 board.xml があるので、それを開いた。
name="gzu_3eg" になっている。
genesys_zu_23_200810.png

これを name="genesys-zu-3eg" に変更した。
genesys_zu_25_200810.png

これで、Clean して、もう一度ビルドしたところ、ビルドに成功した。
genesys_zu_26_200810.png

Vivado プロジェクトのブロック・デザインを示す。
genesys_zu_27_200812.png

MIPI のインターフェースが付いている。

Vivado HLS の合成結果を示す。
genesys_zu_28_200812.png
  1. 2020年08月12日 04:10 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

ACRi ルームの Alveo U50 を使ってみた2(Vitis Ai の実行)

ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)”の続き。

前回は、ACRi ルームの Alveo U50 を使ってみるということで、Vitis 2019.2 を使用して、Vector Addition サンプルを作って、ビルドし、実行できた。今回は、前回の続きで Vitis AI をやってみよう。

なお、”ACRi ルームの使い方デモ”を参照している。

もうすでに、XRT と Vitis の環境は設定を行ったので、Vitis AI の環境を設定する。
source /opt/vitis_ai/setup.sh

/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/multitask/ ディレクトリに行って、test_video_multitask を起動した。
cd /opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/multitask/
./build.sh
./test_video_multitask multi_task ../../demo/segs_and_roadline_detect/lane_640_480.avi -t 8

すると、別ウインドウが開いて、車の認識のデモ?が実行された。
ACRi_U50_11_200808.png

元のビデオは、車からの走行シーンを撮影した動画のようだ。
ACRi_U50_58_200811.png

/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/multitask/ ディレクトリのファイルを示す。
ACRi_U50_56_200811.png

readme を見て、test_jpeg_multitask を試してみた。
./test_jpeg_multitask multi_task sample_multitask.jpg
ACRi_U50_59_200811.png

ログを貼っておく。

(base) u_marsee101@as004:/opt/vitis_ai/workspace/Vitis-AI-Library/overview/sames/multitask$ ./test_jpeg_multitask multi_task sample_multitask.jpg
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0811 04:19:41.812407 16728 process_result.hpp:57] 2 0.333344 0.499921 0.122619 0.234968 93.5763
I0811 04:19:41.812588 16728 process_result.hpp:57] 2 0.274168 0.559145 0.0788227 0.0899649 -108.435
I0811 04:19:41.812613 16728 process_result.hpp:57] 2 0.688132 0.557123 0.161432 0.18072 129.289
I0811 04:19:41.812646 16728 process_result.hpp:57] 2 0 0.511859 0.078728 0.224802 0
I0811 04:19:41.812669 16728 process_result.hpp:57] 2 0.208173 0.572655 0.0530752 0.061687 -123.69
I0811 04:19:41.812696 16728 process_result.hpp:57] 2 0.45969 0.583376 0.0239042 0.0345972 106.39
I0811 04:19:41.812719 16728 process_result.hpp:57] 2 0.152777 0.570406 0.0236073 0.0197128 -123.69
I0811 04:19:41.812738 16728 process_result.hpp:57] 2 0.647809 0.56265 0.0722189 0.0700647 77.4712
I0811 04:19:41.812759 16728 process_result.hpp:57] 2 0.511904 0.57834 0.0385703 0.0527384 116.565
I0811 04:19:41.812779 16728 process_result.hpp:57] 2 0.797958 0.329459 0.193313 0.649231 135
I0811 04:19:41.812809 16728 process_result.hpp:57] 6 0.469489 0.513496 0.0103455 0.0113734 -93.3665


sample_multitask_result.jpg が生成された。
ACRi_U50_61_200811.png

/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples ディレクトリを示す。
ACRi_U50_57_200811.png

たくさんサンプルがあるようだ。

追加で Yolo3 をやってみた。
yolov3 ディレクトリに入った。
sh build.sh でビルドした。
./test_jpeg_yolov3 yolov3_adas_pruned_0_9 sample_yolov3.jpg を実行した。
ACRi_U50_62_200811.png

ログを貼っておく。

(base) u_marsee101@as004:/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/yolov3$ ./test_jpeg_yolov3 yolov3_adas_pruned_0_9 sample_yolov3.jpg
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0811 04:37:56.257900 18617 process_result.hpp:46] RESULT: 0 -1.49536 132.509 121.505 226.451 0.96233
I0811 04:37:56.258023 18617 process_result.hpp:46] RESULT: 0 111.502 139.693187.502 179.079 0.943011
I0811 04:37:56.258064 18617 process_result.hpp:46] RESULT: 0 397.368 131.843512 231.843 0.850293
I0811 04:37:56.258088 18617 process_result.hpp:46] RESULT: 0 352.674 144.348413.023 165.955 0.843594
I0811 04:37:56.258114 18617 process_result.hpp:46] RESULT: 0 337.352 144.322362.9 159.324 0.807779
I0811 04:37:56.258139 18617 process_result.hpp:46] RESULT: 0 150.182 139.843194.335 161.45 0.320707
I0811 04:37:56.258165 18617 process_result.hpp:46] RESULT: 1 191.029 134.979205.76 159.021 0.348052



sample_yolov3_result.jpg が生成された。
ACRi_U50_63_200811.png

ACRi_U50_64_200811.png

もう 1 つ追加で、openpose をやってみた。
ACRi_U50_65_200811.jpg

segmentation のサンプルを追加する。
ACRi_U50_66_200811.jpg
  1. 2020年08月11日 04:29 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

Genesys ZU: Zynq UltraScale+ MPSoC Development Board が届いた

Genesys ZU: Zynq UltraScale+ MPSoC Development Board がAvnet Japan 社から届いた。基板を貸してもらえるということで基板を借りられたので、いろいろと試してみたい。

$1,149 、日本円で約 12 万円位の高額ボードで自分では買えないが、いろいろと試してみるつもりだ。

搭載されているZynq UltraScale+ MPSoC は XCZU3EG-SFVC784-1-E で Ultra96-V2 のとピン数は違うが同じ型番で、少し物足りなさは残る。

ストレージは mSATA スロットがあるのが良いな。SSD が搭載できる。
2 x Pcam Dual-Lane も良いな。ステレオカメラがやれそうだ。
4 個の PMOD があるのも良いな。Ultra96-V2 に拡張ボード付けなくても秋月電子カメラと Pmod VGA が接続できる。

大きなボードなので、置き場所に困るが、なんとしよう。。。

Genesys ZU の箱。
genesys_zu_1_200810.jpg

基板の表
genesys_zu_2_200810.jpg

基板の裏
genesys_zu_3_200810.jpg

大きい。

とりあえずは、Adam Taylor さんの”Genesys ZU Vitis Accleration Platform”と”High Performance Imaging”をやって見る予定だ。
  1. 2020年08月10日 05:09 |
  2. Genesys_ZU
  3. | トラックバック:0
  4. | コメント:0

ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)

ACRi ルームの Alveo U50 を使ってみた。

ACRi ルームの解説は、”ACRiルーム紹介ウェビナー”のイベント資料を参照のこと。使用するには申請が必要だ。

申請すると 2 つ ID とパスワードが送られてくる。 1 つはWeb へのログイン用、もう 1 つは ACRi ルームのマシンへのログイン用だ。これが分からなくて、マシンのログインに Web のログイン用のパスワードを使用していた。ツィッターでアドバイスしてもらって、ようやく分かった。ありがとうございました。

さて、Web で予約した Alveo U50 が搭載されている as004 に Tera Term でログインしてみよう。
Tera Term を立ち上げて gw.acri.c.titech.ac.jp に接続する。
ACRi_U50_20_200809.png

SSH認証を行う。
ACRi_U50_21_200809.png

ACRi に接続できたが、fserv4 に接続できていて、 as004 じゃなかった。
ACRi_U50_22_200809.png

リモートデスクトップ接続する。
Tera Term の設定メニューから SSH 転送を選択した。
ACRi_U50_23_200809.png

SSH ポート転送で追加ボタンをクリックする。
ACRi_U50_25_200809.png

ローカルのポートに 13389 、リモート側ホストに Alveo U50 の as004 、ポートに 3389 を設定した。この辺りは”ACRi ルームの FPGA 利用環境の予約・使用方法”を参照した。
ACRi_U50_26_200809.png

ACRi_U50_27_200809.png

リモートデスクトップ接続を立ち上げて、コンピューターに localhost:13389 を入力した。
ACRi_U50_28_200809.png

リモートデスクトップ接続が立ち上がった。password に ACRi ルームのマシンへのログイン用パスワードを入力した。これはコピペが効かなかったので、自分で入力した。
ACRi_U50_29_200809.png

これで、as004 に入れた。
ACRi_U50_30_200809.png

Activities をクリックして、ファイル・ブラウザとターミナルを起動した。
ACRi_U50_2_200808.png

Terminal で XRT を起動して、xbmgmt scan で U50 が刺さっているか?を確認した。
source /opt/xilinx/xrt/setup.sh
xbmgmt scan

ACRi_U50_31_200809.png

U50 は刺さっている。大丈夫そうだ。

Vitis 2019.2 の環境を設定して、Vitis を起動した。
source /tools/Xilinx/Vitis/2019.2/settings64.sh
vitis

ACRi_U50_3_200808.png

U50 のアクセラレーション・プラットフォームを指定して、examples の Vector Addition (vadd)アクセラレーション・アプリケーションを作成した。
ACRi_U50_4_200808.png

Hardware を Build し、成功した。
ACRi_U50_5_200808.png

Run Configuration を作成した。
ACRi_U50_9_200808.png

Run したらエラーだった。

[Console output redirected to file:/home/u_marsee101/Vitis_Work/U50/2019.2/vadd/Hardware/vadd-Default.launch.log]
/home/u_marsee101/Vitis_Work/U50/2019.2/vadd/Hardware/vadd: /tools/Xilinx/Vitis/2019.2/lib/lnx64.o/Default/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by /opt/xilinx/xrt/lib/libxilinxopencl.so.2)
/home/u_marsee101/Vitis_Work/U50/2019.2/vadd/Hardware/vadd: /tools/Xilinx/Vitis/2019.2/lib/lnx64.o/Default/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by /opt/xilinx/xrt/lib/libxrt++.so.2)
/home/u_marsee101/Vitis_Work/U50/2019.2/vadd/Hardware/vadd: /tools/Xilinx/Vitis/2019.2/lib/lnx64.o/Default/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by /opt/xilinx/xrt/lib/libxrt_coreutil.so.2)


ACRi_U50_10_200808.png

ググると、”AR# 72130 「/libstdc++.so.6: version `CXXABI_1.3.11' not found」というエラー メッセージが表示される”がヒットした。

[Run Configurations] ウィンドウで [Environment] タブに移動し、テーブルに設定されている LD_LIBRARY_PATH 変数を削除します。

だそうだ。早速やってみよう。
ACRi_U50_32_200809.png

Remove ボタンをクリックする。

Apply ボタンをクリックし、 Run ボタンをクリックする。
ACRi_U50_33_200809.png

TEST PASSED 出た。。。成功した。
ACRi_U50_34_200809.png
  1. 2020年08月09日 09:23 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する8(基板を改版した)

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する7(信号が出なかった)”の続き。

高速、低速コネクタ用PMOD 拡張基板のPMOD に接続する Pmod VGA を使用するためのディスプレイ・コントローラを作成して、高速、低速コネクタ用PMOD 拡張基板のPMOD のテストをしている。前回は、高速コネクタのピン配置が左右逆で信号が出ていなかった。今回は、基板を改版して正しい位置に修正した。

まずは、高速コネクタの基板のフットプリントを左右(上下)逆にした。これが一番手っ取り早いと思ったからだ。
Ultra96expb_PMOD_VGA_78_200808.png

次に、PMOD-E を削除した。それに合わせて PMOD-F の接続信号も入れ替えた。
Ultra96expb_PMOD_VGA_77_200808.png

オートルーターにかけて、自分で電源周りだけ修正した配線パターン。
Ultra96expb_PMOD_VGA_79_200808.png

GND ベタを乗せた表面。
Ultra96expb_PMOD_VGA_80_200808.png

GND ベタを乗せた裏面。
Ultra96expb_PMOD_VGA_81_200808.png

裏表面。
Ultra96expb_PMOD_VGA_82_200808.png

高速コネクタは上下入れ替わっている。
Ultra96expb_PMOD_VGA_83_200808.png

今日、FusionPCB に発注した。楽しみだ。
  1. 2020年08月08日 21:33 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する7(信号が出なかった)

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する6(Vivado Analyzerでビデオ信号を確認)”の続き。

高速、低速コネクタ用PMOD 拡張基板のPMOD に接続する Pmod VGA を使用するためのディスプレイ・コントローラを作成して、高速、低速コネクタ用PMOD 拡張基板のPMOD のテストをしている。前回は、ビデオ信号が出ているかどうか?をVivado Analyzer で見たところ出力されていた。今回は、オシロスコープで信号が出ているか?を確認ししたところ信号は出力されていなかった。

久々にオシロスコープを引っ張り出して、HS(水平同期信号)(PMOD-D の 7番ピン)を見たが、 +3.3V に張り付いていて、信号が出ていなかった。

高速コネクタのパターンをよく見てみると、コネクタの信号配置が左右逆だった。orz

まずは、Pmod VGA の HS の Ultra96-V2 での信号名は CSI1_D1_P だった。
Ultra96expb_PMOD_VGA_200_200730.png

高速コネクタの CSI1_D1_P は切り欠きの無い方に出力されている。Ultra96-V2 の回路図から引用する。
Ultra96expb_PMOD_VGA_75_200807.png

基板の図面での CSI1_D1_P は高速コネクタの上側に来ている。
Ultra96expb_PMOD_VGA_76_200807.png

写真で見ると、高速コネクタの上側は切り欠きのある方だった。
Ultra96expb_PMOD_VGA_74_200807.jpg

ということで、高速コネクタの左右が入れ替わっているので、基板は作り直しとなった。
  1. 2020年08月07日 04:23 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Vitis のエンベデッド・ソフトウェア開発フローで Vivado の回路の更新をVitis に反映する

Vitis のエンベデッド・ソフトウェア開発フロー、つまり、Vivado で作成したハードウェアのアプリケーション・ソフトウェアを作成して、実行する時に、Vivado で作成した XSA ファイルを使用して、Vitis でプラットフォームを作り、そこからアプリケーション・ソフトウェアを作成する。一旦、それらのファイルを作成した後で、Vivado で回路を変更したら、Vitis に Vivado の変更を反映する必要がある。その方法を探っていこう。
前回、Vivado Analyzer を入れたビットファイルを Vitis に反映できなかったので、その方法を探っていきたいと言うのが動機だ。

使用する Vivado と Vitis のバージョンは 2019.2 とする。

Vivado 2019.2 のブロックデザインを変更して、論理合成、インプリメンテーション、ビットストリームの生成を行った。ビットファイルと XSA ファイルが今日の日時に変更されている。
Ultra96expb_PMOD_VGA_61_200806.png

Ultra96expb_PMOD_VGA_62_200806.png

起動済みの Vitis 2019.2 を見ると何も変わっていない。
Ultra96expb_PMOD_VGA_63_200806.png

Vitis のプラットフォーム・ディレクトリの hw ディレクトリ内のビットファイルと XSA ファイルも日時が変更されていない。
Ultra96expb_PMOD_VGA_64_200806.png

Vitis で Explorer 上の display_cont_platform を右クリックし、右クリックメニューから Update Hardware Specification を選択する。
Ultra96expb_PMOD_VGA_65_200806.png

Update Hardware Specification ダイアログが表示された。
XSA ファイルを確認して、OK ボタンをクリックする。
Ultra96expb_PMOD_VGA_66_200806.png

Update Hardware Specification が成功した。
Ultra96expb_PMOD_VGA_67_200806.png

ビットファイルと XSA ファイルが更新されている。
Ultra96expb_PMOD_VGA_69_200806.png

Vitis で Explorer 上の display_cont_platform のビルドが必要との表示が出ているので、ビルドを行った。トンカチマークをクリック。
Ultra96expb_PMOD_VGA_68_200806.png

display_cont_platform のビルドが成功した。
Ultra96expb_PMOD_VGA_70_200806.png

まだ、display_cont アプリケーション・プロジェクトのビットファイルは古いままだ。
Ultra96expb_PMOD_VGA_71_200806.png

Vitis で Explorer 上の display_cont_system を右クリックし、右クリックメニューから Clean Project を選択した。プロジェクトをクリーンした。
その後、Vitis で Explorer 上の display_cont_system を右クリックし、右クリックメニューから Build Project を選択した。プロジェクトをビルドした。
そうすると、ビットファイルも更新された。
Ultra96expb_PMOD_VGA_73_200806.png

これで、Vitis でアプリケーションを起動して、Vivado で Viado Analyzer が起動できるようになった。 Vivado の回路の更新が Vitis に反映されるようになった。
  1. 2020年08月06日 04:30 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する6(Vivado Analyzerでビデオ信号を確認)

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する5(Vitis 2019.2 だったら動いた)”の続き。

高速、低速コネクタ用PMOD 拡張基板のPMOD に接続する Pmod VGA を使用するためのディスプレイ・コントローラを作成して、高速、低速コネクタ用PMOD 拡張基板のPMOD のテストをしようとしている。 バージョン 2020.1 でやってみたところ、Vitis 2020.1 でプロセッサが起動しないようだった。前回は、 Vivado HLS 2019.2, Vivad 2019.2, Vitis 2019.2 で実行したが、VGA 画面は表示されなかったものの、Hello World は表示することができた。今回は、ビデオ信号が出ているかどうか?をVivado Analyzer で見てみよう。

まずは、Vivado 2019.2 でブロックデザインのビデオ信号ラインに Debug を設定して、自動配線した。
Ultra96expb_PMOD_VGA_57_200805.png

system_ila_0 が挿入された。
ブロックデザインをセーブしてから、論理合成、インプリメンテーション、ビットストリームの生成を行った。
結果を示す。タイミングも 40 MHz だから当たり前だが、メットしている。
Ultra96expb_PMOD_VGA_58_200805.png

Vitis 2019.2 で Hello World を動作させてから(そうでないとPS からクロックが出ない)、Open Hardware Manager を起動して、Vivado Analyzer で波形を確認した。
Ultra96expb_PMOD_VGA_59_200805.png

どの信号も良さそうだ。 vsyncx だけ見えないので、立ち上がりでトリガかけると、変化が見えた。
Ultra96expb_PMOD_VGA_60_200805.png

信号波形に問題は無いようだ。オシロスコープで波形を見てみよう。
  1. 2020年08月05日 20:54 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する5(Vitis 2019.2 だったら動いた)

”Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する4(Vitis 2020.1 で実機確認も動作せず)”の続き。

高速、低速コネクタ用PMOD 拡張基板のPMOD に接続する Pmod VGA を使用するためのディスプレイ・コントローラを作成して、高速、低速コネクタ用PMOD 拡張基板のPMOD のテストをしようとしている。しかし、前回は、Vivado 2020.1 から Vitis 2020.1 を立ち上げて、プラットフォームを作成、ビルドして、アプリケーション・ソフトウェアを作成、ビルドしてから実機確認したが、Hello World も出なかった。今回は同様の作業を Vivado HLS 2019.2, Vivad 2019.2, Vitis 2019.2 で実行したが、VGA 画面は表示されなかったものの、Hello World は表示することができた。

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する2(Vitis HLS 2020.1 でディスプレイ・コントローラを作成)”と同様に Vivado HLS 2019.2 で display_cont_sub IP を作成した。
Ultra96expb_PMOD_VGA_52_200804.png

Vivado 2019.2 で exbhl_display_cont_192 プロジェクトを作って、ブロックデザインを生成した。
Ultra96expb_PMOD_VGA_54_200804.png

Ultra96expb_PMOD_VGA_53_200804.png

Vitis 2019.2 でプラットフォームとアプリケーション・プロジェクトを作成して、Hello World アプリを起動した。
Ultra96expb_PMOD_VGA_55_200804.png

2 回実行したが、 2 回とも Hello World が表示されている。
Ultra96expb_PMOD_VGA_56_200804.png

ただし、Vivado 2019.2 のブロックデザインで Zynq MPSoC の IRQ は除いてある。Vivado 2020.1 で同様に IRQ を除いて、もう一度やってみたが、やはり実行できなかった。
とりあえず、 2019.2 でやったほうが良さそうだ。

結果を書くのを忘れたが VGA 信号が出力されていなかったので、デバックする。
  1. 2020年08月04日 05:16 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する4(Vitis 2020.1 で実機確認も動作せず)

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する3(Vivado 2020.1 でディスプレイ・コントローラを作成)”の続き。

前回は、高速、低速コネクタ用PMOD 拡張基板のPMOD に接続する Pmod VGA を使用するためのディスプレイ・コントローラを Vitis HLS 2020.1 で作成したディスプレイ・コントローラ IP を Vivado 2020.1 で実装し成功した。今回は、Vivado 2020.1 から Vitis 2020.1 を立ち上げて、プラットフォームを作成、ビルドして、アプリケーション・ソフトウェアを作成、ビルドしてから実機確認する。

Tools メニューから Launch Vitis IDE を選択して、Vitis 2020.1 を立ち上げる。
Select a directory as workspace ダイアログが表示される。Workspace をBrows... ボタンで選択して、 Launch ボタンをクリックする。
Ultra96expb_PMOD_VGA_36_200730.png

Vitis 2020.1 が立ち上げる。
File メニューから New -> Platform Project... を選択する。

Create new platform project ダイアログが表示された。 Next > ボタンをクリックする。
Ultra96expb_PMOD_VGA_37_200803.png

Plagform で XSA File を Brows... ボタンをクリックして、exbhl_displaty_cont_wrapper.xsa を選択した。
Ultra96expb_PMOD_VGA_38_200803.png

display_cont_platform が生成された。
stdin, stdout のポートをシリアル 0 からシリアル 1 に変更する。
Borad Support Package を選択して、Modify BSP Settings... ボタンをクリックした。
Ultra96expb_PMOD_VGA_39_200803.png

stdin, stdout を psu_uart_1 に変更した。
Ultra96expb_PMOD_VGA_40_200803.png

ビルド・ボタンをクリックして、ビルドし成功した。
Ultra96expb_PMOD_VGA_41_200803.png

次にアプリケーション・プロジェクトを生成する。
File メニューから New -> Application Project... を選択した。

Create a New Application Project ダイアログが表示された。
Ultra96expb_PMOD_VGA_42_200803.png

Platform では、先ほど作成した display_cont_platform を選択した。
Ultra96expb_PMOD_VGA_43_200803.png

Application Project Details では、Application project name に dispaly_cont と入力した。
Ultra96expb_PMOD_VGA_44_200803.png

Domain はそのままとした。
Ultra96expb_PMOD_VGA_45_200803.png

Template では、 Hello World を選択した。
Ultra96expb_PMOD_VGA_46_200803.png

アプリケーション・プロジェクトが作成された。
下の Assistant ウインドウで display_cont を選択し、ビルド・ボタンをクリックしてビルドを行う。
Ultra96expb_PMOD_VGA_47_200803.png

ビルドが成功した。実機で動作させてみよう。
Ultra96-V2 の電源をON した。USB ケーブルをパソコンに接続済み。
Explorer ウインドウで display_cont を選択して、Run ボタンをクリックする。
Ultra96expb_PMOD_VGA_48_200803.png

Run As ダイアログが表示された。
Launch on Hardware (Single Application Debug) を選択して、OK ボタンをクリックする。
Ultra96expb_PMOD_VGA_49_200803.png

Ultra96-V2 のビットファイルをコンフィグしていたが、Warning ダイアログが表示されあt.
Ultra96expb_PMOD_VGA_50_200803.png

失敗してしまった。
Ultra96expb_PMOD_VGA_51_200803.png

プロセッサが起動していないようだ。
  1. 2020年08月03日 05:10 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

フェースシールドを作りました

今度の月曜日に近所のお葬式があって、受付を頼まれました。受付は大勢の人とやり取りするので、コロナ感染の危険が高いですよね。
葬儀屋に電話したら、透明仕切りは無いということで、フェースシールドを購入しようとしたのですが、購入できませんでした。
そこで材料を買ってきて、自分で作りました。
材料です。

フェースシールド材料
コクヨ ソフトカードケース<軟質タイプ>
クケ-3063N 2枚取り
マジックテープ、オスメス各15cm ホチキス止め
隙間テープ 幅3cm x 高さ2cmx長さ 33cm


作り方
1. ソフトカードケースの端を切って、2枚に分けます。
2. その 1 枚を横長に使い、上から 5 cm のところに隙間テープの上を合わせて張ります。横の中央になるように貼ってください。
3. マジックテープのメスをソフトカードケースの端の隙間テープが貼ってある延長線上にホチキスで止めます。
4. マジックテープのオスをソフトカードケースの端の隙間テープが貼ってある延長線上にホチキスで止めます。その際にメスとくっつくようにメスとは反対面をホチキスで止めてください。

完成したフェースシールドです。5分かからないでできます。
Face_shield_1_200802.jpg

装着例です。下が長ければ、ハサミで切りましょう。
Face_shield_2_200802.jpg
  1. 2020年08月02日 17:29 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する3(Vivado 2020.1 でディスプレイ・コントローラを作成)

Ultra96-V2 の高速、低速コネクタ用PMOD 拡張基板に Pmod VGA を接続する2(Vitis HLS 2020.1 でディスプレイ・コントローラを作成)”の続き。

前回は、高速、低速コネクタ用PMOD 拡張基板のPMOD に接続する Pmod VGA を使用するためのディスプレイ・コントローラを Vitis HLS 2020.1 を使用して作成した。今回は、Vitis HLS 2020.1 で作成したディスプレイ・コントローラ IP を Vivado 2020.1 で実装する。

Vivado 2020.1 で exbhl_display_cont プロジェクトを作成した。ボード・ファイルは Ultra96-V2 用を使用した。
Ultra96expb_PMOD_VGA_19_200730.png

前回、 Vivado の exbhl_display_cont プロジェクトに display_cont_201 ディレクトリを作成して、Vivado HLS で作成した display_cont_sub IP の ZIP ファイルを展開した。
Ultra96expb_PMOD_VGA_20_200730.png

Ultra96expb_PMOD_VGA_21_200730.png

display_cont_sub IP をIP Catalog に登録した。
Ultra96expb_PMOD_VGA_22_200730.png

exbhl_display_cont ブロックデザインを作成した。
zynq_ultra_ps_e_0 をAdd IP した。
Ultra96expb_PMOD_VGA_23_200730.png

zynq_ultra_ps_e_0 を設定する。
PS-PL Configuration で AXI HPM0 FPD , AXI HPM1 FPD のチェックを外した。
Ultra96expb_PMOD_VGA_24_200730.png

Clocking Wizard を Add IP した。 Clocking Wizard の clk_out1 を 40 MHz に設定した。
Ultra96expb_PMOD_VGA_25_200730.png

display_cont_sub IP を Add IP して、Slice を Add IP して 8 ビット信号の上 4 ビットを取り出して出力する。
Ultra96expb_PMOD_VGA_28_200730.png

ブロックデザインができあがった。
Ultra96expb_PMOD_VGA_27_200730.png

制約ファイル exbhl_display_cont.xdc を作成した。
Ultra96expb_PMOD_VGA_29_200730.png

exbhl_display_cont.xdc を示す。

set_property IOSTANDARD LVCMOS12 [get_ports {blue[3]}]
set_property IOSTANDARD LVCMOS12 [get_ports {blue[2]}]
set_property IOSTANDARD LVCMOS12 [get_ports {blue[1]}]
set_property IOSTANDARD LVCMOS12 [get_ports {blue[0]}]
set_property PACKAGE_PIN M4 [get_ports {blue[3]}]
set_property PACKAGE_PIN M5 [get_ports {blue[2]}]
set_property PACKAGE_PIN M1 [get_ports {blue[1]}]
set_property PACKAGE_PIN M2 [get_ports {blue[0]}]
set_property IOSTANDARD LVCMOS12 [get_ports {red[3]}]
set_property IOSTANDARD LVCMOS12 [get_ports {red[2]}]
set_property IOSTANDARD LVCMOS12 [get_ports {red[1]}]
set_property IOSTANDARD LVCMOS12 [get_ports {red[0]}]
set_property PACKAGE_PIN N4 [get_ports {red[3]}]
set_property PACKAGE_PIN N5 [get_ports {red[2]}]
set_property PACKAGE_PIN P1 [get_ports {red[1]}]
set_property PACKAGE_PIN N2 [get_ports {red[0]}]
set_property IOSTANDARD LVCMOS12 [get_ports {green[3]}]
set_property IOSTANDARD LVCMOS12 [get_ports {green[2]}]
set_property IOSTANDARD LVCMOS12 [get_ports {green[1]}]
set_property IOSTANDARD LVCMOS12 [get_ports {green[0]}]
set_property PACKAGE_PIN R3 [get_ports {green[3]}]
set_property PACKAGE_PIN P3 [get_ports {green[2]}]
set_property PACKAGE_PIN L1 [get_ports {green[1]}]
set_property PACKAGE_PIN L2 [get_ports {green[0]}]
set_property IOSTANDARD LVCMOS12 [get_ports {hsyncx[0]}]
set_property PACKAGE_PIN U2 [get_ports {hsyncx[0]}]
set_property IOSTANDARD LVCMOS12 [get_ports {vsyncx[0]}]
set_property PACKAGE_PIN U1 [get_ports {vsyncx[0]}]


論理合成、インプリメンテーション、ビットストリームの生成を行った。結果を示す。
Ultra96expb_PMOD_VGA_30_200730.png

ハードウェアをエクスポートする。
File メニューから Export -> Export Hardware... を選択する。
Export Hardware Platform ダイアログが表示された。
Platform Type は Fixed
Ultra96expb_PMOD_VGA_31_200730.png

Output は Pre-synthesis
Ultra96expb_PMOD_VGA_32_200730.png

Files もデフォルト
Ultra96expb_PMOD_VGA_33_200730.png

Finish ボタンをクリック
Ultra96expb_PMOD_VGA_34_200730.png

exbhl_display_cont_wrapper.xsa が生成された。
Vitis_work ディレクトリを新規作成した。
Ultra96expb_PMOD_VGA_35_200730.png
  1. 2020年08月01日 06:46 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0