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

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

FPGAの部屋

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

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる4(System ILA を使用したデバック2)

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる3(System ILA を使用したデバック)”の続き。
ただし、DMA_pow2 IP は”Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する2”を使用している。

(2022/03/01:追記)TKEEP と TSTRB (TSTRB は必要ないかも?)は、入力された信号を出力するか、オール 1 にする必要がありました。詳しくは”axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる3(Jupyter Notebook で動作確認、波形を確認)”を参照ください。

前回は、その原因を探るためにブロック・デザインに System ILA を入れて、波形を観察したところ、S2MM の AXI4-Stream の最後のデータ送出時に TLAST が 1 になっていなかった。そこで、”Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する2”で、TLAST と TUSER を処理した DMA2_pow2 IP を作成した。今回は、この DMA_pow2 IP を使用して、再度 Jupyter Notebook で DMA pow2 を動作させてみたところ、まだ DMA が終了しなかった。

DMA_pow2_axis_i の DMA_pow2_axis IP を入れ替えた。
Kria-PYNQ_97_220226.png

もう一度、論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。
Kria-PYNQ_98_220226.png

Jupyter Notebook で確かめてみたが、やはり終了しない。System ILA で波形を確認した。
S2MM の AXI4-Stream を見ると 最後のデータのときに TLAST が 1 になっているのが分かる。これでだめなのか。。。
Kria-PYNQ_99_220226.png

S2MM の AXI4 Master アクセスはやはり終了していない。WDATA が 81 (Unsigned Decimal)のときに、WLAST が 1 になっていない。
Kria-PYNQ_100_220226.png

MM2S の AXI4 Master アクセスはどうだろうか?
問題ない。RDATA が 9 (Unsigned Decimal)の時に、RLAST が 1 になっている。これは思惑通りだ。
Kria-PYNQ_101_220226.png

それじゃ axi_dma_0 の MM2S_LENGTH と S2MM_LENGTH の設定値はどうだろうか?
まずは、MM2S_LENGTH の設定値を見る。
40 (Unsigned Decimal)だった。バイト単位なので正しい。
Kria-PYNQ_102_220226.png

S2MM_LENGTH の設定値を見ると、MM2S_LENGTH と同様に 40 (Unsigned Decimal)だった。バイト単位なので正しい。
Kria-PYNQ_103_220226.png

それじゃ MM2S と S2MM の AXI4 Master トランザクションのバースト長はどうだろうか?
MM2S の AXI4 Master トランザクションのバースト長は ARLEN の値が 0x09 でつまり、10 バーストなので正しい。
Kria-PYNQ_104_220226.png

S2MM の AXI4 Master トランザクションのバースト長は AWLEN の値が 0x1f で 32 バーストになっている。原因はこれだ。。。
Kria-PYNQ_105_220228.png

しかし、どうして、S2MM_LENGTH が 40 (Unsigned Decimal のバイト単位)なのに、S2MM の AXI4 Msater のトランザクションの AWLEN が 0x1f なんだろうか?
訳が分からない。。。
  1. 2022年02月28日 02:47 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する2

Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する”の続き。

(2022/03/01:追記)TKEEP と TSTRB (TSTRB は必要ないかも?)は、入力された信号を出力するか、オール 1 にする必要がありました。詳しくは”axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる1(Vitis HLS で DMA_pow2_axis IP を作成)”を参照ください。

前回、”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみるために、AXI4-Stream インターフェースの 2 乗する IP 、DMA_pow2_axis を作成したが、””PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる3(System ILA を使用したデバック)”に示すように、AXI4-Stream インターフェース出力で tlast を出力する必要があることが分かったので、ソースコードに tlast を追加しようと思う。

最初にソースコードの DMA_pow2_axis.cpp を貼っておく。

// DMA_pow2_axis.cpp
// 2022/02/22 by marsee
// 2022/02/26 : Added tuser and tlast.
//

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

int DMA_pow2_axis(hls::stream<ap_axis<32,1,1,1> >& data,
        hls::stream<ap_axis<32,1,1,1> >& result){
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=axis register_mode=both port=result register
#pragma HLS INTERFACE mode=axis register_mode=both port=data register
    ap_axis<32,1,1,1> dt, rlt;

    for(int i=0; i<10; i++){
        data >> dt;
        rlt.data = dt.data * dt.data;
        rlt.last = dt.last;
        rlt.user = dt.user;
        result << rlt;
    }
    return(0);
}


テストベンチの DMA_pow2_axis_tb.cpp を貼っておく。

// DMA_pow2_axis_tb.cpp
// 2022/02/22 by marsee
// 2022/02/26 : Added tuser and tlast.
//

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

int DMA_pow2_axis(hls::stream<ap_axis<32,1,1,1> >& data,
        hls::stream<ap_axis<32,1,1,1> >& result);

int main(){
    using namespace std;
    hls::stream<ap_axis<32,1,1,1> > data;
    hls::stream<ap_axis<32,1,1,1> > result;
    ap_axis<32,1,1,1> dt;
    ap_axis<32,1,1,1> rlt;

    for(int i=0; i<10; i++){
        dt.data = i;
        if(i == 0)
            dt.user = 1;
        else
            dt.user = 0;
        if(i == 9)
            dt.last = 1;
        else
            dt.last = 0;
        data << dt;
    }

    DMA_pow2_axis(data, result);

    cout << endl;
    for(int i=0; i<10; i++){
        result >> rlt;
        cout << "data = " << i << " result = " << rlt.data << " user = " << rlt.user
                << " last = " << rlt.last << endl;
    }
    cout << endl;
    return(0);
}


Vitis_HLS 2021.2 で作成した DMA_pow2_axis プロジェクトを示す。
Kria-PYNQ_90_220226.png

C シミュレーションを行った。結果を示す。
Kria-PYNQ_91_220226.png

C コードの合成を行った。結果を示す。
Kria-PYNQ_92_220226.png

C/RTL 協調シミュレーションを行った。結果を示す。
Kria-PYNQ_93_220226.png

C/RTL 協調シミュレーション波形を示す。
tuser と tlast も出力されている。
Kria-PYNQ_94_220226.png

Export RTL を行った。
solution1/impl ディレクトリに export.zip が生成された。
Kria-PYNQ_95_220226.png

Implementation を行った。結果を示す。
Kria-PYNQ_96_220226.png

問題無さそうだ。
  1. 2022年02月26日 04:53 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる3(System ILA を使用したデバック)

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる2(Jupyter Notebook で確認)”の続き。

(2022/03/01:追記)TKEEP と TSTRB (TSTRB は必要ないかも?)は、入力された信号を出力するか、オール 1 にする必要がありました。詳しくは”axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる3(Jupyter Notebook で動作確認、波形を確認)”を参照ください。

PYNQ を使って Python で手軽に FPGA を活用 (5)”を KV260 でやってみるということで、前回は、できあがったビットファイルと hwh ファイルを KV260 のアップロードし、Jupyter Notebook のコードを用意して KV260 で実行した。結果は実行することができなかった。今回は、その原因を探るためにブロック・デザインに System ILA を入れて、波形を見てみよう。

AXI4 インターフェース全てと AXI4-Stream インターフェースに Debug を設定して、System ILA を実装した。
Kria-PYNQ_81_220223.png

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

Flow Navigator の PROGRAM AND DEBUG の Open Hardware Manager を展開して、Open Target をクリックし、Auto Connect を選択した。
ILA ダッシュボードが表示された。
Kria-PYNQ_83_220224.png

slot_4 : ps8_0_axi_periph_M00_AXI: AWVALID (axi_dma_0 の AXI4-Lite インターフェース)が 0 から 1 になる時にトリガを掛けて、表示された画像を示す。
Kria-PYNQ_84_220224.png

画像を拡大した。
Kria-PYNQ_85_220224.png

0x000 番地に 1 を書いているようだ。
LogiCORE IP AXI DMA v7.1 PG021 2014 年 4 月 2 日”によると、0 番地は、MM2S DMA 制御レジスタで、その内の RS ビットを 1 にするようだ。
RS ビットの機能については、”LogiCORE IP AXI DMA v7.1 PG021 2014 年 4 月 2 日”の 14 ページの表 2‐8 : MM2S_DMACR レジス タの詳細 の RS フィールドの説明を引用する。

DMA チャネルの実行 (Run) と停止 (Stop) を制御し ます。
• 0 = 停止 – 現在進行中の DMA 転送があ る場合、その転送が完了する とDMA が停止し ます。 スキャッター /ギャザー モード の場合、 未完了のコマンド /転送は途中で終了する もの と最後まで完了する ものがあります。 AXI4-Stream 出力は途中で終了する可能性があ り ます。 ア ッ プデー ト キ ューに入っているデ ィ ス ク リ プタは リ モー ト メ モ リ への更新が完了し てか らエンジンが停止し ます。
シンプル DMA モー ド の場合、 未完了のコマン ド /転送は途中で終了する も の と最後まで完了する も のがあ り ます。 AXI4-Stream 出力は途中で終了する可能性があ り ます。
DMA エンジンが停止する と 、DMA ステータ ス レジスタの Halted ビ ット が 1 にアサー ト されます。 RS ビ ッ ト は、 エ ラーが発生する と AXI DMA ハー ド ウ ェ アに よ って ク リ ア されます。 CPU でこのビッ ト をク
リアして DMA 動作を停止する こ と もで き ます。
• 1 = 実行 – DMA 動作を開始し ます。 DMA エンジンが動作を開始すると 、 DMA ステータ ス レジスタの Halted ビッ トが 0 にデ ィ アサー ト されます。


次に、slot_5 : ps8_0_axi_periph_M01_AXI: AWVALID (DMA_pow2_axis_0 の AXI4-Lite インターフェース)が 0 から 1 になる時にトリガを掛けて、表示された画像を示す。
Kria-PYNQ_86_220224.png

波形を拡大した。
Kria-PYNQ_87_220224.png

0 番地に 0x81 を書いている。ap_start ビットと auto restart ビットを 1 にしている。
また、その後に、AXI4-Stream にデータが出力されているのが分かる。

AXI4-Stream を拡大した。
Kria-PYNQ_88_220224.png

slot2 : axi_dma0_M_AXIS_MM2S には data のリストの値が流れていて、slot3 : DMA_pow2_result にはその 2 乗した値が流れている。正常だ。と思ったが、
slot3 : DMA_pow2_axis_0_result : TDATA が最後の 81 の時に TLAST が 1 にアサートされていないからじゃないのか?
自分で作成したDMA_pow2_axisで tlast と tuser は何もしていなかった。tlast と tuser はそのまま返せばOKなのかな?


slot1 : axi_dma_0_M_AXI_S2MM を見ると、slot3 : DMA_pow2_result の値が DMA Write されていた。こっちもすこぶる正常だ。
Kria-PYNQ_89_220224.png

ここまで正常ということは、ただ単に終了判定ができないだけなのだろうか?
  1. 2022年02月25日 04:41 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる2(Jupyter Notebook で確認)

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる1(Vivado で DMA_pow2_axis_i プロジェクトを作成する)”の続き。

(2022/03/01:追記)TKEEP と TSTRB (TSTRB は必要ないかも?)は、入力された信号を出力するか、オール 1 にする必要がありました。詳しくは”axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる3(Jupyter Notebook で動作確認、波形を確認)”を参照ください。

PYNQ を使って Python で手軽に FPGA を活用 (5)”を KV260 でやってみるということで、前回は、DMA_pow2_axis IP を使用して、Vivado 2021.2 の DMA_pow2_axis_i プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。今回は、できあがったビットファイルと hwh ファイルを KV260 のアップロードし、Jupyter Notebook のコードを用意して KV260 で実行した。結果は実行することができなかった。

前回作成した DMA_pow2.hwh と DMA_pow2_wrapper.bit を KV260 の Jupyter Notebook の Upload Files ボタンからアップロードした。
DMA_pow2_wrapper.bit は DMA_pow2.bit に名前を変更した。
Jupyter Notebook で新しい Notebook を作成し、DMA_pow2.ipynb に名前を変更した。
Kria-PYNQ_78_220223.png
Kria-PYNQ_79_220223.png
Kria-PYNQ_80_220223.png

run_kernel() を実行したが、DMA が終了しなかったので、手動で停止した。
dma.recvchannel.wait() で待っているようだ。
次にはデバックしてみよう。

コードのみを貼っておく。

from pynq import allocate, Overlay

DMA_pow2_axis_i = Overlay("DMA_pow2.bit")

dma = DMA_pow2_axis_i.axi_dma_0
pow2 = DMA_pow2_axis_i.DMA_pow2_axis_0

import numpy as np
data = allocate(shape=(10), dtype=np.uint32)
result = allocate(shape=(10), dtype=np.uint32)

data[:] = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(data)
print(result)

def run_kernel():
    dma.sendchannel.transfer(data)
    dma.recvchannel.transfer(result)    
    pow2.write(0x00,0x81) # start, Auto Restart
    dma.sendchannel.wait()
    dma.recvchannel.wait()

run_kernel()
print(result)

del data
del result


  1. 2022年02月24日 04:36 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる1(Vivado で DMA_pow2_axis_i プロジェクトを作成する)

Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する”の続き。

(2022/03/01:追記)TKEEP と TSTRB (TSTRB は必要ないかも?)は、入力された信号を出力するか、オール 1 にする必要がありました。詳しくは”axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる3(Jupyter Notebook で動作確認、波形を確認)”を参照ください。

PYNQ を使って Python で手軽に FPGA を活用 (5)”を KV260 でやってみるということで、前回は、AXI4-Stream 版の 2 乗 IP の DMA_pow2_axis を Vitis HLS で作成した。今回は、DMA_pow2_axis IP を使用して、Vivado 2021.2 の DMA_pow2_axis_i プロジェクトを作成した。

Vivado 2021.2 で KV260 用の DMA_pow2_axis_i プロジェクトを作成した。
Kria-PYNQ_66_220222.png

DMA_pow2_axis_i プロジェクトのディレクトリの中に DMA_pow2_axis ディレクトリを作成し、”Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する”の solution1/impl/export.zip を展開して、コピーした。
Kria-PYNQ_67_220222.png

Dma_pow2_axis IP を IP Catalog に登録した。
Kria-PYNQ_68_220222.png

DMA_pow2 ブロック・デザインを新規作成し、IP を追加して配線した。
Kria-PYNQ_69_220222.png

Zynq UltraScale+ MPSoC の設定を示す。
PL Fabric Clocks の設定。 PL0 を 100 MHz にしてある。PL1 のチェックボックスはチェックを外した。
Kria-PYNQ_70_220222.png

PS-PL Configuration では、 AXI HPM0 FPD と AXI HPC FPD にチェックした。
Kria-PYNQ_71_220222.png

AXI Direct Memory Access の設定。
Enable Control/Status Stream のチェックを外した。
Enable Scatter Gather Engine のチェックを外した。
Kria-PYNQ_72_220222.png

Address Editor を示す。
Kria-PYNQ_73_220222.png

HDL Wrapper を作成した。
Kria-PYNQ_74_220222.png

論理合成、インプリメンテーション、ビットストリームを生成した。
Project Summary を示す。
Kria-PYNQ_75_220222.png

DMA_pow2_axis_i/DMA_pow2_axis_i.gen/sources_1/bd/DMA_pow2/hw_handoff ディレクトリに DMA_pow2.hwh が作成された。
Kria-PYNQ_76_220222.png

DMA_pow2_axis_i/DMA_pow2_axis_i.runs/impl_1 ディレクトリに DMA_pow2_wrapper.bit が生成された。
Kria-PYNQ_77_220222.png
  1. 2022年02月23日 03:58 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する

PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみるために、AXI4-Stream インターフェースの 2 乗する IP 、DMA_pow2_axis を作成しよう。

注意: この記事の IP を PYNQ で使用すると終了しません。修正した記事は”Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する2”にあります。

最初にソースコードの DMA_pow2_axis.cpp を貼っておく。

// DMA_pow2_axis.cpp
// 2022/02/22 by marsee
//

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

int DMA_pow2_axis(hls::stream<ap_axis<32,1,1,1> >& data,
        hls::stream<ap_axis<32,1,1,1> >& result){
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=axis register_mode=both port=result register
#pragma HLS INTERFACE mode=axis register_mode=both port=data register
    ap_axis<32,1,1,1> dt, rlt;

    for(int i=0; i<10; i++){
        data >> dt;
        rlt.data = dt.data * dt.data;
        result << rlt;
    }
    return(0);
}


テストベンチの DMA_pow2_axis_tb.cpp を貼っておく。

// DMA_pow2_axis_tb.cpp
// 2022/02/22 by marsee
//

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

int DMA_pow2_axis(hls::stream<ap_axis<32,1,1,1> >& data,
        hls::stream<ap_axis<32,1,1,1> >& result);

int main(){
    using namespace std;
    hls::stream<ap_axis<32,1,1,1> > data;
    hls::stream<ap_axis<32,1,1,1> > result;
    ap_axis<32,1,1,1> dt;
    ap_axis<32,1,1,1> rlt;

    for(int i=0; i<10; i++){
        dt.data = i;
        data << dt;
    }

    DMA_pow2_axis(data, result);

    cout << endl;
    for(int i=0; i<10; i++){
        result >> rlt;
        cout << "data = " << i << " result = " << rlt.data << endl;
    }
    cout << endl;
    return(0);
}


Vitis_HLS 2021.2 で DMA_pow2_axis プロジェクトを作成した。
Kria-PYNQ_57_220222.png

Part には、 xck26-sfvc784-2LV-c を指定した。
Kria-PYNQ_58_220222.png

DMP_pow2_axis プロジェクトを示す。
Kria-PYNQ_59_220222.png

C シミュレーションを行った。
Kria-PYNQ_60_220222.png

C コードの合成を行った。問題無さそうだ。
Kria-PYNQ_61_220222.png

C/RTL 協調シミュレーションを行った。
Kria-PYNQ_62_220222.png

C/RTL 協調シミュレーションの波形を示す。間が空いている部分がある。
Kria-PYNQ_63_220222.png

Export RTL を行った。
solution1/impl ディレクトリに export.zip が生成された。
Kria-PYNQ_64_220222.png

Implementation を行った。結果を示す。
Kria-PYNQ_65_220222.png

問題無さそうだ。
  1. 2022年02月22日 04:54 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

自作した Vivado プロジェクトの DMA_pow2_test を PYNQ で実行する2(制御用 Python コードの書き方を調べる)

自作した Vivado プロジェクトの DMA_pow2_test を PYNQ で実行する1(構想編)”の続き。

Sobel IP などの自分で作成した IP を実装して Kria-PYNQ で動作させてみたいということで、前回は、PYNQ で使用される Vivado の生成ファイルを調べた。今回は、制御用 Python コードの書き方を調べてみた。

pynq-helloworld/resizer_pl.ipynb ファイルを引用する。
この Jupyter Notebook では Zynq MP でなく Zynq を使用して書かれているようだ。ポートは、AXI_GP_0 と AXI_HP_0 が使用されている。ACP ポートは使用されていないので、CPU のキャッシュに直接読み書きすることができない。
resizer_pl.ipynb ファイルの図を引用する。
Kria-PYNQ_56_220221.png

ライブラリのインポート
pynq ライブラリの allocate と Overlay をインポートする必要がある。

from pynq import allocate, Overlay


その他、画像を扱うのに必要なライブラリを読み込んでいる。

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline


IP のビットストリームを FPGA にダウンロードする
Overlay でビットファイルを FPGA にダウンロードして、 resize_design オブジェクトを作成する。

resize_design = Overlay("resizer.bit")


DMA エンジンと Resizer IP のオブジェクトを作成する。

ma = resize_design.axi_dma_0
resizer = resize_design.resize_accel_0


axi_dma_0 と resize_accel_0 は IP インテグレーターで IP を追加した時のインスタンス名だと思う。

PIL を使用して画像オブジェクトを作成する

image_path = "images/sahara.jpg"
original_image = Image.open(image_path)



バッファをアロケートする
新しい画像サイズを元の画像サイズの縦横それぞれ 1/2 に設定する。

resize_factor = 2
new_width = int(old_width/resize_factor)
new_height = int(old_height/resize_factor)


in_buffer と out_buffer を生成する。画像なので、サイズ + RGB 3 チャネルを生成している。 cacheable=1 はキャッシュ禁止なのか?

in_buffer = allocate(shape=(old_height, old_width, 3), 
                           dtype=np.uint8, cacheable=1)
out_buffer = allocate(shape=(new_height, new_width, 3), 
                            dtype=np.uint8, cacheable=1)


in_buffer に画像イメージを代入

in_buffer[:] = np.array(original_image)


ハードウェアをスタートする run_kernel 関数を定義する

def run_kernel():
    dma.sendchannel.transfer(in_buffer)
    dma.recvchannel.transfer(out_buffer)    
    resizer.write(0x00,0x81) # start
    dma.sendchannel.wait()
    dma.recvchannel.wait()


axi_dma の設定手順だが、私の作った DMA_pow2_test は Vitis HLS で作成されているので、resizer の設定方法と同じになる。
resizer は 0x00 番地に 0x81 を書いているので、ap_start + auto_restart となり、動作し続けることになるが良いのだろうか?
なお、IP への引数の設定方法は以下に示す。

Vitis HLS で作成した IP の引数への代入
作成してあった Resizer IP のオブジェクトを使用して、オブジェクトの register_map.(レジスタ名)に値を代入できるようだ。
レジスタ名は、Vitis HLS で作成した IP であれば、C コードの合成レポートの S_AXILITE Registers の Register に書いてある名前を使用する。

resizer.register_map.src_rows = old_height
resizer.register_map.src_cols = old_width
resizer.register_map.dst_rows = new_height
resizer.register_map.dst_cols = new_width


ハードウェアを走らせる

run_kernel()


これで、out_buffer にサイズ変換された画像イメージが入ったはず。。。
  1. 2022年02月21日 05:07 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0

自作した Vivado プロジェクトの DMA_pow2_test を PYNQ で実行する1(構想編)

Kria-PYNQ の pynq-hellowrld に resizer_pl.ipynb ファイルがある。
これは、KV260 の PL に実装した Resize IP を PYNQ の Python から制御するソフトウェアだ。
resizer_pl.ipynb ファイルの一部を引用する。
Kria-PYNQ_52_220220.png
Kria-PYNQ_53_220220.png

上の図で Resize IP の代わりに Sobel IP などの自分で作成した IP を実装して PYNQ で動作させてみたい。

PYNQ で自分で作った Vivado の IP を実装する方法としては、以下の参考文献があった。
PYNQ を使って Python で手軽に FPGA を活用 (4)
PYNQ を使って Python で手軽に FPGA を活用 (5)

上の参考文献によると、PYNQ では、ビットファイルと .hwh ファイルが必要なようだ。

以前、Kria KV260 Vision Starter Kit で動作を確認した ”デバイスツリー・オーバーレイをテストするための KV260 用の Vivado 2021.2 のプロジェクトを作成する4”の DMA_pow2_test”プロジェクトでは、ビットファイルは

DMA_pow2_test/DMA_pow2_test.runs/impl_1

に、
Kria-PYNQ_54_220220.png

.hwh ファイルは、

DMA_pow2_test/DMA_pow2_test.gen/sources_1/bd/DMA_pow2_test/hw_handoff

にあった。
Kria-PYNQ_55_220220.png
  1. 2022年02月20日 09:09 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Kria-PYNQ をやってみる7(Kira-PYNQ の Jupyter Notebook をやってみる4)

Kria-PYNQ をやってみる6(Kira-PYNQ の Jupyter Notebook をやってみる3)”の続き。

前回は、opencv_face_detect_webcam.ipynb と opencv_filters_webcam.ipynb をやってみた。今回は、opencv_filters_webcam.ipynb をちょっと改造して、ジュピター・ノートブックに元画像を表示した。ラプラシアン・フィルタの画像を追加した。ソーベル・フィルタを追加した。

追加したコードを示す。

元画像をジュピター・ノートブック上に表示した。
Step 3-1: Show Webcam

# Output webcam image as JPEG
%matplotlib inline 
from matplotlib import pyplot as plt
import numpy as np

plt.figure(1, figsize=(10, 10))
plt.imshow(frame_vga[:,:,[2,1,0]])
plt.show()


Kria-PYNQ_48_220218.jpg

Step4-1: Show Laplacian filter result

%matplotlib inline 
from matplotlib import pyplot as plt
import numpy as np

plt.figure(1, figsize=(10, 10))
plt.imshow(laplacian_frame[:,:,[2,1,0]])
plt.show()


Kria-PYNQ_49_220218.jpg

Step4-2: Sobel filter

# Sobelフィルタのコードは【Python/OpenCV】Sobelフィルタで輪郭検出(エッジ抽出)の方法まる3を参考にした
# https://algorithm.joho.info/programming/python/opencv-sobel-filter-py/

import time

num_frames = 60
readError = 0

start = time.time()
for i in range (num_frames):   
    # read next image
    ret, frame_vga = videoIn.read()
    if (ret):
        outframe = displayport.newframe()
        frame_vga_gray = cv2.cvtColor(frame_vga, cv2.COLOR_RGB2GRAY)
        sobel_framex = cv2.Sobel(frame_vga_gray, cv2.CV_32F, 1, 0)
        sobel_framey = cv2.Sobel(frame_vga_gray, cv2.CV_32F, 0, 1)
        sobel_frame = np.sqrt(sobel_framex ** 2 + sobel_framey ** 2)
        outframe[:,:,0] = sobel_frame
        outframe[:,:,1] = sobel_frame
        outframe[:,:,2] = sobel_frame
        displayport.writeframe(outframe)
    else:
        readError += 1
end = time.time()

print("Frames per second: " + str((num_frames-readError) / (end - start)))
print("Number of read errors: " + str(readError))


Kria-PYNQ_50_220218.jpg

Step 4-3: Show Sobel filter result

%matplotlib inline 
from matplotlib import pyplot as plt
import numpy as np

plt.figure(1, figsize=(10, 10))
plt.imshow(outframe)
plt.show()


Kria-PYNQ_51_220218.jpg

plt.imshow(outframe) はたぶん色の対応が違っているのと思うのだが、白黒画像を表示しているので、良しとした。
  1. 2022年02月18日 04:32 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Kria-PYNQ をやってみる6(Kira-PYNQ の Jupyter Notebook をやってみる3)

Kria-PYNQ をやってみる5(Kira-PYNQ の Jupyter Notebook をやってみる2)”の続き。

前回やったのは、Jupyter Notebook の kv260/video ディレクトリの display_port_introduction.ipynb と mipi_to_displayport.ipynb をやった時に、失敗した時の解像度は 1280 x 720 ピクセルだったが、640 x 480 ピクセルに設定してやり直してみたところ DisplayPort に出力することができた。今回は、opencv_face_detect_webcam.ipynb と opencv_filters_webcam.ipynb をやってみよう。

最初に opencv_face_detect_webcam.ipynb をやってみる。
OpenCV Face Detection Webcam
Webcam からカメラ画像をキャプチャして、DisplayPort に出力し、OpenCV の顔検出と目検出を行って、DisplayPort に出力するというものだが、結論から言うとWebcam のカメラ画像が悪くて顔検出、目検出できなかった。
”Step 4: Apply the face detection to the input”で顔検出、目検出を行って、四角を書いているのだが、残念ながら検出できなかったようだ。
Kria-PYNQ_39_220217.png
Kria-PYNQ_40_220217.png
Kria-PYNQ_41_220217.png
Kria-PYNQ_42_220217.png

次に opencv_filters_webcam.ipynb をやってみよう。
OpenCV Filters Webcam
次は、Webcam でキャプチャした画像にフィルタを掛ける。ラプラシアン・フィルタと canny フィルタを掛けている。
canny フィルタの画像がとっても怪しい。。。
Kria-PYNQ_43_220217.png
Kria-PYNQ_44_220217.png
Kria-PYNQ_45_220217.png
Kria-PYNQ_46_220217.png

他のフィルタも掛けてみたいな。

(追加)
非常にライティングが難しかったですが、顔検出できました。
Kria-PYNQ_47_220217.png
  1. 2022年02月17日 09:17 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Kria-PYNQ をやってみる5(Kira-PYNQ の Jupyter Notebook をやってみる2)

Kria-PYNQ をやってみる4(Kira-PYNQ の Jupyter Notebook をやってみる1)”の続き。

Jupyter Notebook の kv260/video ディレクトリの display_port_introduction.ipynb と mipi_to_displayport.ipynb をやってみたのだが、Pcam5C カメラの画像はキャプチャできたが、DisplayPort に出力できなかった。今回は、前回失敗した時の解像度は 1280 x 720 ピクセルだったが、640 x 480 ピクセルに設定してやり直してみたところ DisplayPort に出力することができた。

display_port_introduction.ipynb を読み込んだ。
Zynq Ultrascale+ DisplayPort output
DisplayPort に Web カメラ画像を出力する Jupyter Notebookだ。
変更点は DisplayPort オブジェクトを作成するところで、

displayport.configure(VideoMode(640, 480, 24), PIXEL_RGB)

に変更した。
次に、VideoCapture デバイスのインスタンスで

capture.set(3, 640)
capture.set(4, 480)

に変更した。
実行していくと、Webcam の画像が DisplayPort に出力された。
Kria-PYNQ_34_220215.png
Kria-PYNQ_35_220215.png

mipi_to_displayport.ipynb を読み込んだ。
Display MIPI input on Display Port output
この Jupyter Notebook では、MIPI camera (Digilent Pcam 5C) を設定して、DisplayPort に表示する。
VideoMode を設定するところで、

videomode = VideoMode(640, 480, 24)

に変更した。
MIPI camera (Digilent Pcam 5C) の画像が DisplayPort に出力された。
Kria-PYNQ_36_220215.png
Kria-PYNQ_37_220215.jpg
Kria-PYNQ_38_220215.png
  1. 2022年02月16日 04:10 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Vivado の Log4j のパッチ

debugordie さんのツィートで知ったのですが、Vivado 2019.2 〜 Vivado 2021.2 の Log4j のパッチが出ているようです。

Xilinx Product Security Statement: CVE-2021-44228 Apache Log4j Vulnerability in Xilinx Products

"Patch-Log4j-2.4.zip "ファイルをダウンロードします。

Linux (Ubuntu 18.04) の場合
tools/Xilinx ディレクトリにダウンロードして、Patch-Log4j-2.4.zip を解凍します。
log4j_patch ディレクトリが解凍できます。
log4j_1_220215.png

log4j_patch ディレクトリの内容です。
log4j_2_220215.png

log4j_patch/README ファイルを開くと、対象は 2020.2, 2020.3, 2021.1, 2021.2 のようです。
パッチの当て方を引用しますが、間違っている部分は修正してあります。

* 2020.2
  On Windows run:
  Vivado\2020.2\tps\win64\python-3.8.3\python.exe log4j_patch\patch.py

  On Linux run:
  export LD_LIBRARY_PATH=$PWD/Vivado/2020.2/tps/lnx64/python-3.8.3/lib/
  Vivado/2020.2/tps/lnx64/python-3.8.3/bin/python3.8 log4j_patch/patch.py

* 2020.3
  On Windows run:
  Vivado\2020.3\tps\win64\python-3.8.3\python.exe log4j_patch\patch.py

  On Linux run:
  export LD_LIBRARY_PATH=$PWD/Vivado/2020.3/tps/lnx64/python-3.8.3/lib/
  Vivado/2020.3/tps/lnx64/python-3.8.3/bin/python3 log4j_patch/patch.py

* 2021.1
  On all Linux Flavors (Centos, RHEL, Ubuntu 18,… ) where python version 3.8.3 used, follow the  instructions below
     export LD_LIBRARY_PATH=$PWD/Vivado/2021.1/tps/lnx64/python-3.8.3/lib/
     Vivado/2021.1/tps/lnx64/python-3.8.3/bin/python3 log4j_patch/patch.py
  On Windows run:
    Vivado\2021.1\tps\win64\python-3.8.3\python.exe log4j_patch\patch.py


* 2021.2
  On all Linux Flavors (Centos, RHEL, Ubuntu 18,… ) where python version 3.8.3 used, follow the  instructions below
     export LD_LIBRARY_PATH=$PWD/Vivado/2021.2/tps/lnx64/python-3.8.3/lib/
     Vivado/2021.2/tps/lnx64/python-3.8.3/bin/python3 log4j_patch/patch.py
  On Windows run:
    Vivado\2021.2\tps\win64\python-3.8.3\python.exe log4j_patch\patch.py


私の Ubuntu 18.04 パソコンには 2020.3 はインストールしていないので、それ以外をアップデートします。
ターミナルで、tools/Xilinx ディレクトリに行きました。

2020.2
export LD_LIBRARY_PATH=$PWD/Vivado/2020.2/tps/lnx64/python-3.8.3/lib/
Vivado/2020.2/tps/lnx64/python-3.8.3/bin/python3.8 log4j_patch/patch.py

log4j_3_220215.png

2021.1
export LD_LIBRARY_PATH=$PWD/Vivado/2021.1/tps/lnx64/python-3.8.3/lib/
Vivado/2021.1/tps/lnx64/python-3.8.3/bin/python3 log4j_patch/patch.py


2021.2
export LD_LIBRARY_PATH=$PWD/Vivado/2021.2/tps/lnx64/python-3.8.3/lib/
Vivado/2021.2/tps/lnx64/python-3.8.3/bin/python3 log4j_patch/patch.py


Windows11 の場合
Xilinx ディレクトリにダウンロードして、Patch-Log4j-2.4.zip を解凍します。
log4j_patch ディレクトリが解凍できます。
log4j_4_220215.png

Windows ターミナルを開いて、C:\Xilinx に行きます。

今のところ、2021.1、2021.2 共に

PermissionError: [WinError 32] プロセスはファイルにアクセスできません。別のプロセスが使用中です。: 'C:\\Xilinx\\xic\\lib/classes\\log4j-1.2.15.jar'

というエラーでパッチをインストールできません。
log4j_5_220215.png

(追加)
タスクマネージャーで、スタートアップ・タブから xic.exe を無効にして、再起動してから、パッチを当てたらエラーなしでパッチが当たりました。
log4j_6_220215.png

2021.1
Vivado\2021.1\tps\win64\python-3.8.3\python.exe log4j_patch\patch.py
log4j_7_220215.png
log4j_8_220215.png

2021.2
Vivado\2021.2\tps\win64\python-3.8.3\python.exe log4j_patch\patch.py
log4j_9_220215.png
  1. 2022年02月15日 11:31 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Kria-PYNQ をやってみる4(Kira-PYNQ の Jupyter Notebook をやってみる1)

Kria-PYNQ をやってみる3(Kira-PYNQ を git clone)”の続き。

前回は、Kria-PYNQ を git clone してインストールしようとしたがライブラリの依存関係のエラーがでてしまった。そこで、もう一度 KV260 の MicroSD カードを作り直して、再度挑戦したら Kria-PYNQ をインストールすることができた。Jupyter Notebook を表示した。今回は、Jupyter Notebook の kv260/video ディレクトリの display_port_introduction.ipynb と mipi_to_displayport.ipynb をやってみよう。

display_port_introduction.ipynb を読み込んだ。
Zynq Ultrascale+ DisplayPort output
DisplayPort に画像を出力する Jupyter Notebook だが、

ValueError: mode: VideoMode: width=1280 height=720 bpp=24 fps=60 is not support

エラーが出てしまった。
Kria-PYNQ_29_220214.png
Kria-PYNQ_30_220214.png

mipi_to_displayport.ipynb を読み込んだ。
Display MIPI input on Display Port output
この Jupyter Notebook では、MIPI camera (Digilent Pcam 5C) を設定して、DisplayPort に表示する。
Pcam 5C のカメラ画像は Jupyter Notebook 上に表示できたが、やはり、DipslayPort に表示するするところで display_port_introduction.ipynb と同じエラーになってしまった。
Kria-PYNQ_31_220214.png
Kria-PYNQ_32_220214.jpg
Kria-PYNQ_33_220214.png
  1. 2022年02月15日 04:18 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Kria-PYNQ をやってみる3(Kira-PYNQ を git clone)

Kria-PYNQ をやってみる2(KV260 で Ubuntu 20.04 をブート)”の続き。

前回は、KV260 に MicroSD カードを挿入して、Ubuntu 20.04 LTS をブートして、設定を行い、X アプリケーションをホスト・パソコンに表示することができた。今回は、Kria-PYNQ を git clone してインストールしようとしたがライブラリの依存関係のエラーがでてしまった。そこで、もう一度 KV260 の MicroSD カードを作り直して、再度挑戦したら Kria-PYNQ をインストールすることができた。Jupyter Notebook を表示した。

Xilinx/Kria-PYNQ の 2. Install PYNQ を行う。
git clone https://github.com/Xilinx/Kria-PYNQ.git
cd Kria-PYNQ/
sudo bash install.sh

Kria-PYNQ_23_220214.png
Kria-PYNQ_24_220214.png
Kria-PYNQ_25_220214.png

ライブラリの依存関係のエラーが出ている。

libdrm-xlnx-dev : Depends: libdrm-xlnx-amdgpu1 (= 2.4.102-1ubuntu1~20.04.1xilinx1) but it is not going to be installed


検索してみたが、情報がなかった。
もしかして、 sudo apt update, sudo apt upgrade したのが行けなかったのか?
それじゃ MicroSD カードを作り直してみようということで、MicroSD カードを作りおなして、”Kria-PYNQ をやってみる2(KV260 で Ubuntu 20.04 をブート)”をやり直したが、sudo apt update, sudo apt upgrade は止めておいた。

もう一度、
git clone https://github.com/Xilinx/Kria-PYNQ.git
cd Kria-PYNQ/
sudo bash install.sh

したらうまく Kria-PYNQ がインストールできた。
Kria-PYNQ_26_220214.png
Kria-PYNQ_27_220214.png

Chrome で 192.168.3.78:9090/lab に接続すると、Jupyter Notebook が表示された。
Kria-PYNQ_28_220214.png

Kria-PYNQ インストール時のログを貼っておく。

ubuntu@kria:~/Kria-PYNQ$ sudo bash install.sh
Installing PYNQ, this process takes around 25 minutes 
Submodule 'pynq' (https://github.com/Xilinx/PYNQ.git) registered for path 'pynq'
Cloning into '/home/ubuntu/Kria-PYNQ/pynq'...
Submodule path 'pynq': checked out '59515a9b5de6fad0ff0538bfc50010b16f53c9a8'
Executing: /tmp/apt-key-gpghome.CTvI4ZDUBU/gpg.1.sh --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 --verbose 803DDF595EA7B6644F9B96B752150A179A9E84C9
gpg: no running Dirmngr - starting '/usr/bin/dirmngr'
gpg: waiting for the dirmngr to come up ... (5s)
gpg: connection to dirmngr established
gpg: data source: http://162.213.33.9:80
gpg: armor header: Comment: Hostname:
gpg: armor header: Version: Hockeypuck ~unreleased
gpg: pub  rsa4096/52150A179A9E84C9 2020-06-07  Launchpad PPA for Ubuntu Xilinx
gpg: key 52150A179A9E84C9: "Launchpad PPA for Ubuntu Xilinx" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1
Hit:1 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal InRelease
Hit:2 http://ports.ubuntu.com/ubuntu-ports focal InRelease                     
Hit:3 http://oem.archive.canonical.com/updates focal-limerick InRelease        
Hit:4 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
Hit:5 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
Hit:6 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
Reading package lists... Done
Building dependency tree       
Reading state information... Done
146 packages can be upgraded. Run 'apt list --upgradable' to see them.
Hit:1 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal InRelease
Hit:2 http://ports.ubuntu.com/ubuntu-ports focal InRelease                     
Hit:3 http://oem.archive.canonical.com/updates focal-limerick InRelease        
Hit:4 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
Hit:5 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
Hit:6 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libplymouth5
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  javascript-common libann0 libasound2 libasound2-data libasound2-dev
  libavcodec-dev libavformat-dev libavresample-dev libavresample4
  libavutil-dev libblkid-dev libblkid1 libcairo-script-interpreter2 libcdt5
  libcgraph6 libdc1394-22-dev libdrm-xlnx-amdgpu1 libdrm-xlnx-freedreno1
  libdrm-xlnx-nouveau2 libdrm-xlnx-radeon1 libdrm-xlnx-tegra0 libexif-dev
  libexif-doc libffi-dev libfontconfig1-dev libfreetype-dev libfreetype6-dev
  libgdcm-dev libglib2.0-dev libglib2.0-dev-bin libgphoto2-dev libgts-0.7-5
  libgts-bin libgvc6 libgvpr2 libi2c0 libice-dev libilmbase-dev libjack-dev
  libjack0 libjbig-dev libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev
  libjs-jquery liblab-gamut1 liblzma-dev libmount-dev libmount1
  libopencv-calib3d-dev libopencv-contrib-dev libopencv-core-dev
  libopencv-dnn-dev libopencv-features2d-dev libopencv-flann-dev
  libopencv-highgui-dev libopencv-imgcodecs-dev libopencv-imgproc-dev
  libopencv-ml-dev libopencv-objdetect-dev libopencv-photo-dev
  libopencv-shape-dev libopencv-stitching-dev libopencv-superres-dev
  libopencv-ts-dev libopencv-video-dev libopencv-videoio-dev
  libopencv-videostab-dev libopencv-viz-dev libopencv4.2-java libopencv4.2-jni
  libopenexr-dev libpathplan4 libpcre16-3 libpcre2-16-0 libpcre2-dev
  libpcre2-posix2 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpixman-1-dev
  libpng-dev libpng-tools libportaudio2 libportaudiocpp0 libpthread-stubs0-dev
  libpython3.8 libpython3.8-dev libpython3.8-minimal libpython3.8-stdlib
  libraw1394-dev libraw1394-tools libselinux1-dev libsepol1-dev libsm-dev
  libssl1.1 libswresample-dev libswscale-dev libtbb-dev libtiff-dev libtiffxx5
  libuuid1 libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev
  libxcb1-dev libxdmcp-dev libxext-dev libxrender-dev python3-ply
  python3-pycparser python3.8 python3.8-dev python3.8-minimal read-edid
  uuid-dev x11proto-core-dev x11proto-dev x11proto-xext-dev xorg-sgml-doctools
  xtrans-dev
Suggested packages:
  gsfonts graphviz-doc libi2c-dev python-smbus apache2 | lighttpd | httpd
  libasound2-doc libcairo2-doc libcurl4-doc libidn11-dev libkrb5-dev
  libldap2-dev librtmp-dev libssh2-1-dev freetype2-doc libgirepository1.0-dev
  libglib2.0-doc libxml2-utils libice-doc jackd1 liblzma-doc opencv-doc
  libraw1394-doc libsm-doc libssl-doc libtbb-doc libx11-doc libxcb-doc
  libxext-doc portaudio19-doc python-ply-doc python3.8-doc binfmt-support
The following packages will be REMOVED:
  libdrm-amdgpu1 libdrm-nouveau2 libdrm-radeon1 libjack-jackd2-0
The following NEW packages will be installed:
  fswebcam graphviz i2c-tools javascript-common libann0 libasound2-dev
  libavcodec-dev libavformat-dev libavresample-dev libavresample4
  libavutil-dev libblkid-dev libcairo-script-interpreter2 libcairo2-dev
  libcdt5 libcgraph6 libcurl4-openssl-dev libdc1394-22-dev libdrm-xlnx-amdgpu1
  libdrm-xlnx-dev libdrm-xlnx-freedreno1 libdrm-xlnx-nouveau2
  libdrm-xlnx-radeon1 libdrm-xlnx-tegra0 libexif-dev libexif-doc libffi-dev
  libfontconfig1-dev libfreetype-dev libfreetype6-dev libgdcm-dev
  libglib2.0-dev libglib2.0-dev-bin libgphoto2-dev libgts-0.7-5 libgts-bin
  libgvc6 libgvpr2 libi2c0 libice-dev libilmbase-dev libjack-dev libjack0
  libjbig-dev libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libjs-jquery
  liblab-gamut1 liblzma-dev libmount-dev libopencv-calib3d-dev
  libopencv-contrib-dev libopencv-core-dev libopencv-dev libopencv-dnn-dev
  libopencv-features2d-dev libopencv-flann-dev libopencv-highgui-dev
  libopencv-imgcodecs-dev libopencv-imgproc-dev libopencv-ml-dev
  libopencv-objdetect-dev libopencv-photo-dev libopencv-shape-dev
  libopencv-stitching-dev libopencv-superres-dev libopencv-ts-dev
  libopencv-video-dev libopencv-videoio-dev libopencv-videostab-dev
  libopencv-viz-dev libopencv4.2-java libopencv4.2-jni libopenexr-dev
  libpathplan4 libpcre16-3 libpcre2-16-0 libpcre2-dev libpcre2-posix2
  libpcre3-dev libpcre32-3 libpcrecpp0v5 libpixman-1-dev libpng-dev
  libpng-tools libportaudio2 libportaudiocpp0 libpthread-stubs0-dev
  libraw1394-dev libraw1394-tools libselinux1-dev libsepol1-dev libsm-dev
  libssl-dev libswresample-dev libswscale-dev libtbb-dev libtiff-dev
  libtiffxx5 libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev
  libxcb1-dev libxdmcp-dev libxext-dev libxrender-dev portaudio19-dev
  python3-cffi python3-opencv python3-ply python3-pycparser python3.8-venv
  read-edid uuid-dev x11proto-core-dev x11proto-dev x11proto-xext-dev
  xorg-sgml-doctools xtrans-dev
The following packages will be upgraded:
  libasound2 libasound2-data libblkid1 libmount1 libpython3.8 libpython3.8-dev
  libpython3.8-minimal libpython3.8-stdlib libssl1.1 libuuid1 python3.8
  python3.8-dev python3.8-minimal
13 upgraded, 121 newly installed, 4 to remove and 130 not upgraded.
Need to get 37.5 MB/48.2 MB of archives.
After this operation, 191 MB of additional disk space will be used.
Get:1 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libjack0 arm64 1:0.125.0-3build2 [87.8 kB]
Get:2 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal/main arm64 libdrm-xlnx-amdgpu1 arm64 2.4.102-1ubuntu1~20.04.1xilinx1 [28.3 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libssl1.1 arm64 1.1.1f-1ubuntu2.10 [1158 kB]
Get:4 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal/main arm64 libdrm-xlnx-nouveau2 arm64 2.4.102-1ubuntu1~20.04.1xilinx1 [26.2 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 fswebcam arm64 20140113-2 [42.7 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libann0 arm64 1.1.2+doc-7build1 [24.2 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libcdt5 arm64 2.42.2-3build2 [17.6 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libcgraph6 arm64 2.42.2-3build2 [38.8 kB]
Get:9 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libgts-0.7-5 arm64 0.7.6+darcs121130-4 [117 kB]
Get:10 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal/main arm64 libdrm-xlnx-radeon1 arm64 2.4.102-1ubuntu1~20.04.1xilinx1 [29.3 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libpathplan4 arm64 2.42.2-3build2 [20.1 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libgvc6 arm64 2.42.2-3build2 [588 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libgvpr2 arm64 2.42.2-3build2 [156 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 liblab-gamut1 arm64 2.42.2-3build2 [177 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 graphviz arm64 2.42.2-3build2 [545 kB]
Get:16 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 javascript-common all 11 [6066 B]
Get:17 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libasound2 arm64 1.2.2-2.1ubuntu2.5 [304 kB]
Get:18 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libasound2-data all 1.2.2-2.1ubuntu2.5 [20.1 kB]
Get:19 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libasound2-dev arm64 1.2.2-2.1ubuntu2.5 [104 kB]
Get:20 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libavutil-dev arm64 7:4.2.4-1ubuntu0.1 [360 kB]
Get:21 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libswresample-dev arm64 7:4.2.4-1ubuntu0.1 [60.2 kB]
Get:22 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libavcodec-dev arm64 7:4.2.4-1ubuntu0.1 [5060 kB]
Get:23 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal/main arm64 libdrm-xlnx-freedreno1 arm64 2.4.102-1ubuntu1~20.04.1xilinx1 [28.5 kB]
Get:24 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal/main arm64 libdrm-xlnx-tegra0 arm64 2.4.102-1ubuntu1~20.04.1xilinx1 [16.7 kB]
Get:25 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libavformat-dev arm64 7:4.2.4-1ubuntu0.1 [1161 kB]
Get:26 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libavresample4 arm64 7:4.2.4-1ubuntu0.1 [42.7 kB]
Get:27 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libavresample-dev arm64 7:4.2.4-1ubuntu0.1 [51.8 kB]
Get:28 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libcairo-script-interpreter2 arm64 1.16.0-4ubuntu1 [50.7 kB]
Get:29 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpng-dev arm64 1.6.37-2 [172 kB]
Get:30 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libfreetype-dev arm64 2.10.1-2ubuntu0.1 [473 kB]
Get:31 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libfreetype6-dev arm64 2.10.1-2ubuntu0.1 [9812 B]
Get:32 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 uuid-dev arm64 2.34-0.1ubuntu9.3 [33.9 kB]
Get:33 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libfontconfig1-dev arm64 2.13.1-2ubuntu3 [728 kB]
Get:34 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 xorg-sgml-doctools all 1:1.11-1 [12.9 kB]
Get:35 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 x11proto-dev all 2019.2-1ubuntu1 [594 kB]
Get:36 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 x11proto-core-dev all 2019.2-1ubuntu1 [2620 B]
Get:37 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libxau-dev arm64 1:1.0.9-0ubuntu1 [9728 B]
Get:38 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libxdmcp-dev arm64 1:1.1.3-0ubuntu1 [25.1 kB]
Get:39 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 xtrans-dev all 1.4.0-1 [68.9 kB]
Get:40 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpthread-stubs0-dev arm64 0.4-1 [5376 B]
Get:41 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libxcb1-dev arm64 1.14-2 [80.9 kB]
Get:42 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libx11-dev arm64 2:1.6.9-2ubuntu1.2 [635 kB]
Get:43 http://ppa.launchpad.net/ubuntu-xilinx/updates/ubuntu focal/main arm64 libdrm-xlnx-dev arm64 2.4.102-1ubuntu1~20.04.1xilinx1 [141 kB]
Get:44 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libxrender-dev arm64 1:0.9.10-1 [22.9 kB]
Get:45 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 x11proto-xext-dev all 2019.2-1ubuntu1 [2616 B]
Get:46 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libxext-dev arm64 2:1.3.4-0ubuntu1 [82.1 kB]
Get:47 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libice-dev arm64 2:1.0.10-0ubuntu1 [46.2 kB]
Get:48 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libsm-dev arm64 2:1.2.3-1 [16.4 kB]
Get:49 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpixman-1-dev arm64 0.38.4-0ubuntu1 [147 kB]
Get:50 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libxcb-render0-dev arm64 1.14-2 [18.8 kB]
Get:51 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libxcb-shm0-dev arm64 1.14-2 [6892 B]
Get:52 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libffi-dev arm64 3.3-4 [53.5 kB]
Get:53 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libglib2.0-dev-bin arm64 2.64.6-1~ubuntu20.04.4 [108 kB]
Get:54 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libblkid-dev arm64 2.34-0.1ubuntu9.3 [169 kB]
Get:55 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libmount-dev arm64 2.34-0.1ubuntu9.3 [181 kB]
Get:56 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpcre16-3 arm64 2:8.39-12build1 [126 kB]
Get:57 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpcre32-3 arm64 2:8.39-12build1 [118 kB]
Get:58 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpcrecpp0v5 arm64 2:8.39-12build1 [14.7 kB]
Get:59 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpcre3-dev arm64 2:8.39-12build1 [467 kB]
Get:60 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libsepol1-dev arm64 3.0-1 [317 kB]
Get:61 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpcre2-16-0 arm64 10.34-7 [156 kB]
Get:62 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpcre2-posix2 arm64 10.34-7 [5820 B]
Get:63 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpcre2-dev arm64 10.34-7 [595 kB]
Get:64 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libselinux1-dev arm64 3.0-1build2 [152 kB]
Get:65 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libglib2.0-dev arm64 2.64.6-1~ubuntu20.04.4 [1517 kB]
Get:66 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libcairo2-dev arm64 1.16.0-4ubuntu1 [598 kB]
Get:67 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libcurl4-openssl-dev arm64 7.68.0-1ubuntu2.7 [309 kB]
Get:68 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libexif-dev arm64 0.6.21-6ubuntu0.4 [81.6 kB]
Get:69 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libjs-jquery all 3.3.1~dfsg-3 [329 kB]
Get:70 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libexif-doc all 0.6.21-6ubuntu0.4 [256 kB]
Get:71 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libgdcm-dev arm64 3.0.5-1.1ubuntu2 [258 kB]
Get:72 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libgphoto2-dev arm64 2.5.25-0ubuntu0.1 [625 kB]
Get:73 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libgts-bin arm64 0.7.6+darcs121130-4 [38.8 kB]
Get:74 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libi2c0 arm64 4.1-2build2 [6360 B]
Get:75 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libilmbase-dev arm64 2.3.0-6build1 [71.3 kB]
Get:76 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libjack-dev arm64 1:0.125.0-3build2 [202 kB]
Get:77 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libjpeg-turbo8-dev arm64 2.0.3-0ubuntu1.20.04.1 [215 kB]
Get:78 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libjpeg8-dev arm64 8c-2ubuntu8 [1550 B]
Get:79 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libjpeg-dev arm64 8c-2ubuntu8 [1546 B]
Get:80 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libtbb-dev arm64 2020.1-2 [273 kB]
Get:81 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-core-dev arm64 4.2.0+dfsg-5 [1433 kB]
Get:82 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-flann-dev arm64 4.2.0+dfsg-5 [170 kB]
Get:83 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libraw1394-dev arm64 2.1.2-1 [32.8 kB]
Get:84 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libdc1394-22-dev arm64 2.2.5-2.1 [113 kB]
Get:85 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-imgproc-dev arm64 4.2.0+dfsg-5 [1138 kB]
Get:86 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-imgcodecs-dev arm64 4.2.0+dfsg-5 [154 kB]
Get:87 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-videoio-dev arm64 4.2.0+dfsg-5 [202 kB]
Get:88 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libopenexr-dev arm64 2.3.0-6ubuntu0.5 [676 kB]
Get:89 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 libswscale-dev arm64 7:4.2.4-1ubuntu0.1 [149 kB]
Get:90 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libjbig-dev arm64 2.1-3.1build1 [23.3 kB]
Get:91 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 liblzma-dev arm64 5.2.4-1ubuntu1 [144 kB]
Get:92 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libtiffxx5 arm64 4.1.0+git191117-2ubuntu0.20.04.2 [5876 B]
Get:93 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libtiff-dev arm64 4.1.0+git191117-2ubuntu0.20.04.2 [274 kB]
Get:94 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-highgui-dev arm64 4.2.0+dfsg-5 [47.0 kB]
Get:95 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-ml-dev arm64 4.2.0+dfsg-5 [281 kB]
Get:96 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-features2d-dev arm64 4.2.0+dfsg-5 [276 kB]
Get:97 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-calib3d-dev arm64 4.2.0+dfsg-5 [650 kB]
Get:98 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-dnn-dev arm64 4.2.0+dfsg-5 [1187 kB]
Get:99 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-objdetect-dev arm64 4.2.0+dfsg-5 [169 kB]
Get:100 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-photo-dev arm64 4.2.0+dfsg-5 [211 kB]
Get:101 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-video-dev arm64 4.2.0+dfsg-5 [162 kB]
Get:102 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-shape-dev arm64 4.2.0+dfsg-5 [67.3 kB]
Get:103 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-stitching-dev arm64 4.2.0+dfsg-5 [240 kB]
Get:104 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-superres-dev arm64 4.2.0+dfsg-5 [55.4 kB]
Get:105 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-videostab-dev arm64 4.2.0+dfsg-5 [115 kB]
Get:106 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-viz-dev arm64 4.2.0+dfsg-5 [160 kB]
Get:107 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-contrib-dev arm64 4.2.0+dfsg-5 [3927 kB]
Get:108 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-ts-dev arm64 4.2.0+dfsg-5 [306 kB]
Get:109 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv4.2-jni arm64 4.2.0+dfsg-5 [306 kB]
Get:110 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv4.2-java all 4.2.0+dfsg-5 [892 kB]
Get:111 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libopencv-dev arm64 4.2.0+dfsg-5 [84.5 kB]
Get:112 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libpng-tools arm64 1.6.37-2 [25.4 kB]
Get:113 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libportaudio2 arm64 19.6.0-1build1 [59.7 kB]
Get:114 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 libportaudiocpp0 arm64 19.6.0-1build1 [14.6 kB]
Get:115 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libraw1394-tools arm64 2.1.2-1 [15.6 kB]
Get:116 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libssl-dev arm64 1.1.1f-1ubuntu2.10 [1461 kB]
Get:117 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 portaudio19-dev arm64 19.6.0-1build1 [102 kB]
Get:118 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 python3-ply all 3.11-3ubuntu0.1 [46.3 kB]
Get:119 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 python3-pycparser all 2.19-1ubuntu1 [71.0 kB]
Get:120 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 python3-cffi all 1.14.0-1build1 [70.3 kB]
Get:121 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 python3-opencv arm64 4.2.0+dfsg-5 [1032 kB]
Get:122 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 python3.8-venv arm64 3.8.10-0ubuntu1~20.04.2 [5440 B]
Get:123 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 read-edid arm64 3.0.2-1build1 [15.3 kB]
Get:124 http://ports.ubuntu.com/ubuntu-ports focal/universe arm64 i2c-tools arm64 4.1-2build2 [68.6 kB]
Fetched 37.5 MB in 14s (2742 kB/s)                                             
Extracting templates from packages: 100%
Preconfiguring packages ...
dpkg: libdrm-amdgpu1:arm64: dependency problems, but removing anyway as you requested:
 xserver-xorg-video-amdgpu depends on libdrm-amdgpu1 (>= 2.4.73).
 mesa-vulkan-drivers:arm64 depends on libdrm-amdgpu1 (>= 2.4.99).
 mesa-vdpau-drivers:arm64 depends on libdrm-amdgpu1 (>= 2.4.100).
 mesa-va-drivers:arm64 depends on libdrm-amdgpu1 (>= 2.4.100).
 libgl1-mesa-dri:arm64 depends on libdrm-amdgpu1 (>= 2.4.100).

(Reading database ... 145933 files and directories currently installed.)
Removing libdrm-amdgpu1:arm64 (2.4.105-3~20.04.2) ...
Selecting previously unselected package libdrm-xlnx-amdgpu1:arm64.
(Reading database ... 145928 files and directories currently installed.)
Preparing to unpack .../libdrm-xlnx-amdgpu1_2.4.102-1ubuntu1~20.04.1xilinx1_arm64.deb ...
Unpacking libdrm-xlnx-amdgpu1:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
dpkg: libdrm-nouveau2:arm64: dependency problems, but removing anyway as you requested:
 xserver-xorg-video-nouveau depends on libdrm-nouveau2 (>= 2.4.38).
 mesa-vdpau-drivers:arm64 depends on libdrm-nouveau2 (>= 2.4.66); however:
  Package libdrm-nouveau2:arm64 is to be removed.
 mesa-va-drivers:arm64 depends on libdrm-nouveau2 (>= 2.4.66); however:
  Package libdrm-nouveau2:arm64 is to be removed.
 libgl1-mesa-dri:arm64 depends on libdrm-nouveau2 (>= 2.4.66); however:
  Package libdrm-nouveau2:arm64 is to be removed.

(Reading database ... 145933 files and directories currently installed.)
Removing libdrm-nouveau2:arm64 (2.4.105-3~20.04.2) ...
Selecting previously unselected package libdrm-xlnx-nouveau2:arm64.
(Reading database ... 145927 files and directories currently installed.)
Preparing to unpack .../libdrm-xlnx-nouveau2_2.4.102-1ubuntu1~20.04.1xilinx1_arm64.deb ...
Unpacking libdrm-xlnx-nouveau2:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
dpkg: libdrm-radeon1:arm64: dependency problems, but removing anyway as you requested:
 xserver-xorg-video-radeon depends on libdrm-radeon1 (>= 2.4.39).
 mesa-vdpau-drivers:arm64 depends on libdrm-radeon1 (>= 2.4.31); however:
  Package libdrm-radeon1:arm64 is to be removed.
 mesa-va-drivers:arm64 depends on libdrm-radeon1 (>= 2.4.31); however:
  Package libdrm-radeon1:arm64 is to be removed.
 libgl1-mesa-dri:arm64 depends on libdrm-radeon1 (>= 2.4.31); however:
  Package libdrm-radeon1:arm64 is to be removed.

(Reading database ... 145933 files and directories currently installed.)
Removing libdrm-radeon1:arm64 (2.4.105-3~20.04.2) ...
Selecting previously unselected package libdrm-xlnx-radeon1:arm64.
(Reading database ... 145928 files and directories currently installed.)
Preparing to unpack .../libdrm-xlnx-radeon1_2.4.102-1ubuntu1~20.04.1xilinx1_arm64.deb ...
Unpacking libdrm-xlnx-radeon1:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
dpkg: libjack-jackd2-0:arm64: dependency problems, but removing anyway as you requested:
 libfluidsynth2:arm64 depends on libjack-jackd2-0 (>= 1.9.10+20150825) | libjack-0.125; however:
  Package libjack-jackd2-0:arm64 is to be removed.
  Package libjack-0.125 is not installed.
  Package libjack-jackd2-0:arm64 which provides libjack-0.125 is to be removed.
 libasound2-plugins:arm64 depends on libjack-jackd2-0 (>= 1.9.10+20150825) | libjack-0.125; however:
  Package libjack-jackd2-0:arm64 is to be removed.
  Package libjack-0.125 is not installed.
  Package libjack-jackd2-0:arm64 which provides libjack-0.125 is to be removed.
 gstreamer-xilinx1.0-plugins-good:arm64 depends on libjack-jackd2-0 (>= 1.9.10+20150825) | libjack-0.125; however:
  Package libjack-jackd2-0:arm64 is to be removed.
  Package libjack-0.125 is not installed.
  Package libjack-jackd2-0:arm64 which provides libjack-0.125 is to be removed.
 libfluidsynth2:arm64 depends on libjack-jackd2-0 (>= 1.9.10+20150825) | libjack-0.125; however:
  Package libjack-jackd2-0:arm64 is to be removed.
  Package libjack-0.125 is not installed.
  Package libjack-jackd2-0:arm64 which provides libjack-0.125 is to be removed.
 libasound2-plugins:arm64 depends on libjack-jackd2-0 (>= 1.9.10+20150825) | libjack-0.125; however:
  Package libjack-jackd2-0:arm64 is to be removed.
  Package libjack-0.125 is not installed.
  Package libjack-jackd2-0:arm64 which provides libjack-0.125 is to be removed.
 gstreamer-xilinx1.0-plugins-good:arm64 depends on libjack-jackd2-0 (>= 1.9.10+20150825) | libjack-0.125; however:
  Package libjack-jackd2-0:arm64 is to be removed.
  Package libjack-0.125 is not installed.
  Package libjack-jackd2-0:arm64 which provides libjack-0.125 is to be removed.

(Reading database ... 145933 files and directories currently installed.)
Removing libjack-jackd2-0:arm64 (1.9.12~dfsg-2ubuntu2) ...
Selecting previously unselected package libjack0:arm64.
(Reading database ... 145921 files and directories currently installed.)
Preparing to unpack .../0-libjack0_1%3a0.125.0-3build2_arm64.deb ...
Unpacking libjack0:arm64 (1:0.125.0-3build2) ...
Preparing to unpack .../1-python3.8-dev_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking python3.8-dev (3.8.10-0ubuntu1~20.04.2) over (3.8.10-0ubuntu1~20.04.1) ...
Preparing to unpack .../2-libpython3.8-dev_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking libpython3.8-dev:arm64 (3.8.10-0ubuntu1~20.04.2) over (3.8.10-0ubuntu1~20.04.1) ...
Preparing to unpack .../3-libpython3.8_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking libpython3.8:arm64 (3.8.10-0ubuntu1~20.04.2) over (3.8.10-0ubuntu1~20.04.1) ...
Preparing to unpack .../4-libssl1.1_1.1.1f-1ubuntu2.10_arm64.deb ...
Unpacking libssl1.1:arm64 (1.1.1f-1ubuntu2.10) over (1.1.1f-1ubuntu2.8) ...
Preparing to unpack .../5-python3.8_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking python3.8 (3.8.10-0ubuntu1~20.04.2) over (3.8.10-0ubuntu1~20.04.1) ...
Preparing to unpack .../6-libpython3.8-stdlib_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking libpython3.8-stdlib:arm64 (3.8.10-0ubuntu1~20.04.2) over (3.8.10-0ubuntu1~20.04.1) ...
Preparing to unpack .../7-python3.8-minimal_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking python3.8-minimal (3.8.10-0ubuntu1~20.04.2) over (3.8.10-0ubuntu1~20.04.1) ...
Preparing to unpack .../8-libpython3.8-minimal_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking libpython3.8-minimal:arm64 (3.8.10-0ubuntu1~20.04.2) over (3.8.10-0ubuntu1~20.04.1) ...
Preparing to unpack .../9-libuuid1_2.34-0.1ubuntu9.3_arm64.deb ...
Unpacking libuuid1:arm64 (2.34-0.1ubuntu9.3) over (2.34-0.1ubuntu9.1) ...
Setting up libuuid1:arm64 (2.34-0.1ubuntu9.3) ...
(Reading database ... 145932 files and directories currently installed.)
Preparing to unpack .../libblkid1_2.34-0.1ubuntu9.3_arm64.deb ...
Unpacking libblkid1:arm64 (2.34-0.1ubuntu9.3) over (2.34-0.1ubuntu9.1) ...
Setting up libblkid1:arm64 (2.34-0.1ubuntu9.3) ...
(Reading database ... 145932 files and directories currently installed.)
Preparing to unpack .../libmount1_2.34-0.1ubuntu9.3_arm64.deb ...
Unpacking libmount1:arm64 (2.34-0.1ubuntu9.3) over (2.34-0.1ubuntu9.1) ...
Setting up libmount1:arm64 (2.34-0.1ubuntu9.3) ...
Selecting previously unselected package fswebcam.
(Reading database ... 145932 files and directories currently installed.)
Preparing to unpack .../000-fswebcam_20140113-2_arm64.deb ...
Unpacking fswebcam (20140113-2) ...
Selecting previously unselected package libann0.
Preparing to unpack .../001-libann0_1.1.2+doc-7build1_arm64.deb ...
Unpacking libann0 (1.1.2+doc-7build1) ...
Selecting previously unselected package libcdt5:arm64.
Preparing to unpack .../002-libcdt5_2.42.2-3build2_arm64.deb ...
Unpacking libcdt5:arm64 (2.42.2-3build2) ...
Selecting previously unselected package libcgraph6:arm64.
Preparing to unpack .../003-libcgraph6_2.42.2-3build2_arm64.deb ...
Unpacking libcgraph6:arm64 (2.42.2-3build2) ...
Selecting previously unselected package libgts-0.7-5:arm64.
Preparing to unpack .../004-libgts-0.7-5_0.7.6+darcs121130-4_arm64.deb ...
Unpacking libgts-0.7-5:arm64 (0.7.6+darcs121130-4) ...
Selecting previously unselected package libpathplan4:arm64.
Preparing to unpack .../005-libpathplan4_2.42.2-3build2_arm64.deb ...
Unpacking libpathplan4:arm64 (2.42.2-3build2) ...
Selecting previously unselected package libgvc6.
Preparing to unpack .../006-libgvc6_2.42.2-3build2_arm64.deb ...
Unpacking libgvc6 (2.42.2-3build2) ...
Selecting previously unselected package libgvpr2:arm64.
Preparing to unpack .../007-libgvpr2_2.42.2-3build2_arm64.deb ...
Unpacking libgvpr2:arm64 (2.42.2-3build2) ...
Selecting previously unselected package liblab-gamut1:arm64.
Preparing to unpack .../008-liblab-gamut1_2.42.2-3build2_arm64.deb ...
Unpacking liblab-gamut1:arm64 (2.42.2-3build2) ...
Selecting previously unselected package graphviz.
Preparing to unpack .../009-graphviz_2.42.2-3build2_arm64.deb ...
Unpacking graphviz (2.42.2-3build2) ...
Selecting previously unselected package javascript-common.
Preparing to unpack .../010-javascript-common_11_all.deb ...
Unpacking javascript-common (11) ...
Preparing to unpack .../011-libasound2_1.2.2-2.1ubuntu2.5_arm64.deb ...
Unpacking libasound2:arm64 (1.2.2-2.1ubuntu2.5) over (1.2.2-2.1ubuntu2.4) ...
Preparing to unpack .../012-libasound2-data_1.2.2-2.1ubuntu2.5_all.deb ...
Unpacking libasound2-data (1.2.2-2.1ubuntu2.5) over (1.2.2-2.1ubuntu2.4) ...
Selecting previously unselected package libasound2-dev:arm64.
Preparing to unpack .../013-libasound2-dev_1.2.2-2.1ubuntu2.5_arm64.deb ...
Unpacking libasound2-dev:arm64 (1.2.2-2.1ubuntu2.5) ...
Selecting previously unselected package libavutil-dev:arm64.
Preparing to unpack .../014-libavutil-dev_7%3a4.2.4-1ubuntu0.1_arm64.deb ...
Unpacking libavutil-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Selecting previously unselected package libswresample-dev:arm64.
Preparing to unpack .../015-libswresample-dev_7%3a4.2.4-1ubuntu0.1_arm64.deb ...
Unpacking libswresample-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Selecting previously unselected package libavcodec-dev:arm64.
Preparing to unpack .../016-libavcodec-dev_7%3a4.2.4-1ubuntu0.1_arm64.deb ...
Unpacking libavcodec-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Selecting previously unselected package libavformat-dev:arm64.
Preparing to unpack .../017-libavformat-dev_7%3a4.2.4-1ubuntu0.1_arm64.deb ...
Unpacking libavformat-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Selecting previously unselected package libavresample4:arm64.
Preparing to unpack .../018-libavresample4_7%3a4.2.4-1ubuntu0.1_arm64.deb ...
Unpacking libavresample4:arm64 (7:4.2.4-1ubuntu0.1) ...
Selecting previously unselected package libavresample-dev:arm64.
Preparing to unpack .../019-libavresample-dev_7%3a4.2.4-1ubuntu0.1_arm64.deb ...
Unpacking libavresample-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Selecting previously unselected package libcairo-script-interpreter2:arm64.
Preparing to unpack .../020-libcairo-script-interpreter2_1.16.0-4ubuntu1_arm64.deb ...
Unpacking libcairo-script-interpreter2:arm64 (1.16.0-4ubuntu1) ...
Selecting previously unselected package libpng-dev:arm64.
Preparing to unpack .../021-libpng-dev_1.6.37-2_arm64.deb ...
Unpacking libpng-dev:arm64 (1.6.37-2) ...
Selecting previously unselected package libfreetype-dev:arm64.
Preparing to unpack .../022-libfreetype-dev_2.10.1-2ubuntu0.1_arm64.deb ...
Unpacking libfreetype-dev:arm64 (2.10.1-2ubuntu0.1) ...
Selecting previously unselected package libfreetype6-dev:arm64.
Preparing to unpack .../023-libfreetype6-dev_2.10.1-2ubuntu0.1_arm64.deb ...
Unpacking libfreetype6-dev:arm64 (2.10.1-2ubuntu0.1) ...
Selecting previously unselected package uuid-dev:arm64.
Preparing to unpack .../024-uuid-dev_2.34-0.1ubuntu9.3_arm64.deb ...
Unpacking uuid-dev:arm64 (2.34-0.1ubuntu9.3) ...
Selecting previously unselected package libfontconfig1-dev:arm64.
Preparing to unpack .../025-libfontconfig1-dev_2.13.1-2ubuntu3_arm64.deb ...
Unpacking libfontconfig1-dev:arm64 (2.13.1-2ubuntu3) ...
Selecting previously unselected package xorg-sgml-doctools.
Preparing to unpack .../026-xorg-sgml-doctools_1%3a1.11-1_all.deb ...
Unpacking xorg-sgml-doctools (1:1.11-1) ...
Selecting previously unselected package x11proto-dev.
Preparing to unpack .../027-x11proto-dev_2019.2-1ubuntu1_all.deb ...
Unpacking x11proto-dev (2019.2-1ubuntu1) ...
Selecting previously unselected package x11proto-core-dev.
Preparing to unpack .../028-x11proto-core-dev_2019.2-1ubuntu1_all.deb ...
Unpacking x11proto-core-dev (2019.2-1ubuntu1) ...
Selecting previously unselected package libxau-dev:arm64.
Preparing to unpack .../029-libxau-dev_1%3a1.0.9-0ubuntu1_arm64.deb ...
Unpacking libxau-dev:arm64 (1:1.0.9-0ubuntu1) ...
Selecting previously unselected package libxdmcp-dev:arm64.
Preparing to unpack .../030-libxdmcp-dev_1%3a1.1.3-0ubuntu1_arm64.deb ...
Unpacking libxdmcp-dev:arm64 (1:1.1.3-0ubuntu1) ...
Selecting previously unselected package xtrans-dev.
Preparing to unpack .../031-xtrans-dev_1.4.0-1_all.deb ...
Unpacking xtrans-dev (1.4.0-1) ...
Selecting previously unselected package libpthread-stubs0-dev:arm64.
Preparing to unpack .../032-libpthread-stubs0-dev_0.4-1_arm64.deb ...
Unpacking libpthread-stubs0-dev:arm64 (0.4-1) ...
Selecting previously unselected package libxcb1-dev:arm64.
Preparing to unpack .../033-libxcb1-dev_1.14-2_arm64.deb ...
Unpacking libxcb1-dev:arm64 (1.14-2) ...
Selecting previously unselected package libx11-dev:arm64.
Preparing to unpack .../034-libx11-dev_2%3a1.6.9-2ubuntu1.2_arm64.deb ...
Unpacking libx11-dev:arm64 (2:1.6.9-2ubuntu1.2) ...
Selecting previously unselected package libxrender-dev:arm64.
Preparing to unpack .../035-libxrender-dev_1%3a0.9.10-1_arm64.deb ...
Unpacking libxrender-dev:arm64 (1:0.9.10-1) ...
Selecting previously unselected package x11proto-xext-dev.
Preparing to unpack .../036-x11proto-xext-dev_2019.2-1ubuntu1_all.deb ...
Unpacking x11proto-xext-dev (2019.2-1ubuntu1) ...
Selecting previously unselected package libxext-dev:arm64.
Preparing to unpack .../037-libxext-dev_2%3a1.3.4-0ubuntu1_arm64.deb ...
Unpacking libxext-dev:arm64 (2:1.3.4-0ubuntu1) ...
Selecting previously unselected package libice-dev:arm64.
Preparing to unpack .../038-libice-dev_2%3a1.0.10-0ubuntu1_arm64.deb ...
Unpacking libice-dev:arm64 (2:1.0.10-0ubuntu1) ...
Selecting previously unselected package libsm-dev:arm64.
Preparing to unpack .../039-libsm-dev_2%3a1.2.3-1_arm64.deb ...
Unpacking libsm-dev:arm64 (2:1.2.3-1) ...
Selecting previously unselected package libpixman-1-dev:arm64.
Preparing to unpack .../040-libpixman-1-dev_0.38.4-0ubuntu1_arm64.deb ...
Unpacking libpixman-1-dev:arm64 (0.38.4-0ubuntu1) ...
Selecting previously unselected package libxcb-render0-dev:arm64.
Preparing to unpack .../041-libxcb-render0-dev_1.14-2_arm64.deb ...
Unpacking libxcb-render0-dev:arm64 (1.14-2) ...
Selecting previously unselected package libxcb-shm0-dev:arm64.
Preparing to unpack .../042-libxcb-shm0-dev_1.14-2_arm64.deb ...
Unpacking libxcb-shm0-dev:arm64 (1.14-2) ...
Selecting previously unselected package libffi-dev:arm64.
Preparing to unpack .../043-libffi-dev_3.3-4_arm64.deb ...
Unpacking libffi-dev:arm64 (3.3-4) ...
Selecting previously unselected package libglib2.0-dev-bin.
Preparing to unpack .../044-libglib2.0-dev-bin_2.64.6-1~ubuntu20.04.4_arm64.deb ...
Unpacking libglib2.0-dev-bin (2.64.6-1~ubuntu20.04.4) ...
Selecting previously unselected package libblkid-dev:arm64.
Preparing to unpack .../045-libblkid-dev_2.34-0.1ubuntu9.3_arm64.deb ...
Unpacking libblkid-dev:arm64 (2.34-0.1ubuntu9.3) ...
Selecting previously unselected package libmount-dev:arm64.
Preparing to unpack .../046-libmount-dev_2.34-0.1ubuntu9.3_arm64.deb ...
Unpacking libmount-dev:arm64 (2.34-0.1ubuntu9.3) ...
Selecting previously unselected package libpcre16-3:arm64.
Preparing to unpack .../047-libpcre16-3_2%3a8.39-12build1_arm64.deb ...
Unpacking libpcre16-3:arm64 (2:8.39-12build1) ...
Selecting previously unselected package libpcre32-3:arm64.
Preparing to unpack .../048-libpcre32-3_2%3a8.39-12build1_arm64.deb ...
Unpacking libpcre32-3:arm64 (2:8.39-12build1) ...
Selecting previously unselected package libpcrecpp0v5:arm64.
Preparing to unpack .../049-libpcrecpp0v5_2%3a8.39-12build1_arm64.deb ...
Unpacking libpcrecpp0v5:arm64 (2:8.39-12build1) ...
Selecting previously unselected package libpcre3-dev:arm64.
Preparing to unpack .../050-libpcre3-dev_2%3a8.39-12build1_arm64.deb ...
Unpacking libpcre3-dev:arm64 (2:8.39-12build1) ...
Selecting previously unselected package libsepol1-dev:arm64.
Preparing to unpack .../051-libsepol1-dev_3.0-1_arm64.deb ...
Unpacking libsepol1-dev:arm64 (3.0-1) ...
Selecting previously unselected package libpcre2-16-0:arm64.
Preparing to unpack .../052-libpcre2-16-0_10.34-7_arm64.deb ...
Unpacking libpcre2-16-0:arm64 (10.34-7) ...
Selecting previously unselected package libpcre2-posix2:arm64.
Preparing to unpack .../053-libpcre2-posix2_10.34-7_arm64.deb ...
Unpacking libpcre2-posix2:arm64 (10.34-7) ...
Selecting previously unselected package libpcre2-dev:arm64.
Preparing to unpack .../054-libpcre2-dev_10.34-7_arm64.deb ...
Unpacking libpcre2-dev:arm64 (10.34-7) ...
Selecting previously unselected package libselinux1-dev:arm64.
Preparing to unpack .../055-libselinux1-dev_3.0-1build2_arm64.deb ...
Unpacking libselinux1-dev:arm64 (3.0-1build2) ...
Selecting previously unselected package libglib2.0-dev:arm64.
Preparing to unpack .../056-libglib2.0-dev_2.64.6-1~ubuntu20.04.4_arm64.deb ...
Unpacking libglib2.0-dev:arm64 (2.64.6-1~ubuntu20.04.4) ...
Selecting previously unselected package libcairo2-dev:arm64.
Preparing to unpack .../057-libcairo2-dev_1.16.0-4ubuntu1_arm64.deb ...
Unpacking libcairo2-dev:arm64 (1.16.0-4ubuntu1) ...
Selecting previously unselected package libcurl4-openssl-dev:arm64.
Preparing to unpack .../058-libcurl4-openssl-dev_7.68.0-1ubuntu2.7_arm64.deb ...
Unpacking libcurl4-openssl-dev:arm64 (7.68.0-1ubuntu2.7) ...
Selecting previously unselected package libdrm-xlnx-freedreno1:arm64.
Preparing to unpack .../059-libdrm-xlnx-freedreno1_2.4.102-1ubuntu1~20.04.1xilinx1_arm64.deb ...
Unpacking libdrm-xlnx-freedreno1:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Selecting previously unselected package libdrm-xlnx-tegra0:arm64.
Preparing to unpack .../060-libdrm-xlnx-tegra0_2.4.102-1ubuntu1~20.04.1xilinx1_arm64.deb ...
Unpacking libdrm-xlnx-tegra0:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Selecting previously unselected package libdrm-xlnx-dev:arm64.
Preparing to unpack .../061-libdrm-xlnx-dev_2.4.102-1ubuntu1~20.04.1xilinx1_arm64.deb ...
Unpacking libdrm-xlnx-dev:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Selecting previously unselected package libexif-dev:arm64.
Preparing to unpack .../062-libexif-dev_0.6.21-6ubuntu0.4_arm64.deb ...
Unpacking libexif-dev:arm64 (0.6.21-6ubuntu0.4) ...
Selecting previously unselected package libjs-jquery.
Preparing to unpack .../063-libjs-jquery_3.3.1~dfsg-3_all.deb ...
Unpacking libjs-jquery (3.3.1~dfsg-3) ...
Selecting previously unselected package libexif-doc.
Preparing to unpack .../064-libexif-doc_0.6.21-6ubuntu0.4_all.deb ...
Unpacking libexif-doc (0.6.21-6ubuntu0.4) ...
Selecting previously unselected package libgdcm-dev.
Preparing to unpack .../065-libgdcm-dev_3.0.5-1.1ubuntu2_arm64.deb ...
Unpacking libgdcm-dev (3.0.5-1.1ubuntu2) ...
Selecting previously unselected package libgphoto2-dev:arm64.
Preparing to unpack .../066-libgphoto2-dev_2.5.25-0ubuntu0.1_arm64.deb ...
Unpacking libgphoto2-dev:arm64 (2.5.25-0ubuntu0.1) ...
Selecting previously unselected package libgts-bin.
Preparing to unpack .../067-libgts-bin_0.7.6+darcs121130-4_arm64.deb ...
Unpacking libgts-bin (0.7.6+darcs121130-4) ...
Selecting previously unselected package libi2c0:arm64.
Preparing to unpack .../068-libi2c0_4.1-2build2_arm64.deb ...
Unpacking libi2c0:arm64 (4.1-2build2) ...
Selecting previously unselected package libilmbase-dev:arm64.
Preparing to unpack .../069-libilmbase-dev_2.3.0-6build1_arm64.deb ...
Unpacking libilmbase-dev:arm64 (2.3.0-6build1) ...
Selecting previously unselected package libjack-dev.
Preparing to unpack .../070-libjack-dev_1%3a0.125.0-3build2_arm64.deb ...
Unpacking libjack-dev (1:0.125.0-3build2) ...
Selecting previously unselected package libjpeg-turbo8-dev:arm64.
Preparing to unpack .../071-libjpeg-turbo8-dev_2.0.3-0ubuntu1.20.04.1_arm64.deb ...
Unpacking libjpeg-turbo8-dev:arm64 (2.0.3-0ubuntu1.20.04.1) ...
Selecting previously unselected package libjpeg8-dev:arm64.
Preparing to unpack .../072-libjpeg8-dev_8c-2ubuntu8_arm64.deb ...
Unpacking libjpeg8-dev:arm64 (8c-2ubuntu8) ...
Selecting previously unselected package libjpeg-dev:arm64.
Preparing to unpack .../073-libjpeg-dev_8c-2ubuntu8_arm64.deb ...
Unpacking libjpeg-dev:arm64 (8c-2ubuntu8) ...
Selecting previously unselected package libtbb-dev:arm64.
Preparing to unpack .../074-libtbb-dev_2020.1-2_arm64.deb ...
Unpacking libtbb-dev:arm64 (2020.1-2) ...
Selecting previously unselected package libopencv-core-dev:arm64.
Preparing to unpack .../075-libopencv-core-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-core-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-flann-dev:arm64.
Preparing to unpack .../076-libopencv-flann-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-flann-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libraw1394-dev:arm64.
Preparing to unpack .../077-libraw1394-dev_2.1.2-1_arm64.deb ...
Unpacking libraw1394-dev:arm64 (2.1.2-1) ...
Selecting previously unselected package libdc1394-22-dev:arm64.
Preparing to unpack .../078-libdc1394-22-dev_2.2.5-2.1_arm64.deb ...
Unpacking libdc1394-22-dev:arm64 (2.2.5-2.1) ...
Selecting previously unselected package libopencv-imgproc-dev:arm64.
Preparing to unpack .../079-libopencv-imgproc-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-imgproc-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-imgcodecs-dev:arm64.
Preparing to unpack .../080-libopencv-imgcodecs-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-imgcodecs-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-videoio-dev:arm64.
Preparing to unpack .../081-libopencv-videoio-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-videoio-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopenexr-dev.
Preparing to unpack .../082-libopenexr-dev_2.3.0-6ubuntu0.5_arm64.deb ...
Unpacking libopenexr-dev (2.3.0-6ubuntu0.5) ...
Selecting previously unselected package libswscale-dev:arm64.
Preparing to unpack .../083-libswscale-dev_7%3a4.2.4-1ubuntu0.1_arm64.deb ...
Unpacking libswscale-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Selecting previously unselected package libjbig-dev:arm64.
Preparing to unpack .../084-libjbig-dev_2.1-3.1build1_arm64.deb ...
Unpacking libjbig-dev:arm64 (2.1-3.1build1) ...
Selecting previously unselected package liblzma-dev:arm64.
Preparing to unpack .../085-liblzma-dev_5.2.4-1ubuntu1_arm64.deb ...
Unpacking liblzma-dev:arm64 (5.2.4-1ubuntu1) ...
Selecting previously unselected package libtiffxx5:arm64.
Preparing to unpack .../086-libtiffxx5_4.1.0+git191117-2ubuntu0.20.04.2_arm64.deb ...
Unpacking libtiffxx5:arm64 (4.1.0+git191117-2ubuntu0.20.04.2) ...
Selecting previously unselected package libtiff-dev:arm64.
Preparing to unpack .../087-libtiff-dev_4.1.0+git191117-2ubuntu0.20.04.2_arm64.deb ...
Unpacking libtiff-dev:arm64 (4.1.0+git191117-2ubuntu0.20.04.2) ...
Selecting previously unselected package libopencv-highgui-dev:arm64.
Preparing to unpack .../088-libopencv-highgui-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-highgui-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-ml-dev:arm64.
Preparing to unpack .../089-libopencv-ml-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-ml-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-features2d-dev:arm64.
Preparing to unpack .../090-libopencv-features2d-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-features2d-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-calib3d-dev:arm64.
Preparing to unpack .../091-libopencv-calib3d-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-calib3d-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-dnn-dev:arm64.
Preparing to unpack .../092-libopencv-dnn-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-dnn-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-objdetect-dev:arm64.
Preparing to unpack .../093-libopencv-objdetect-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-objdetect-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-photo-dev:arm64.
Preparing to unpack .../094-libopencv-photo-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-photo-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-video-dev:arm64.
Preparing to unpack .../095-libopencv-video-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-video-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-shape-dev:arm64.
Preparing to unpack .../096-libopencv-shape-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-shape-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-stitching-dev:arm64.
Preparing to unpack .../097-libopencv-stitching-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-stitching-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-superres-dev:arm64.
Preparing to unpack .../098-libopencv-superres-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-superres-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-videostab-dev:arm64.
Preparing to unpack .../099-libopencv-videostab-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-videostab-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-viz-dev:arm64.
Preparing to unpack .../100-libopencv-viz-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-viz-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-contrib-dev:arm64.
Preparing to unpack .../101-libopencv-contrib-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-contrib-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-ts-dev:arm64.
Preparing to unpack .../102-libopencv-ts-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-ts-dev:arm64 (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv4.2-jni.
Preparing to unpack .../103-libopencv4.2-jni_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv4.2-jni (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv4.2-java.
Preparing to unpack .../104-libopencv4.2-java_4.2.0+dfsg-5_all.deb ...
Unpacking libopencv4.2-java (4.2.0+dfsg-5) ...
Selecting previously unselected package libopencv-dev.
Preparing to unpack .../105-libopencv-dev_4.2.0+dfsg-5_arm64.deb ...
Unpacking libopencv-dev (4.2.0+dfsg-5) ...
Selecting previously unselected package libpng-tools.
Preparing to unpack .../106-libpng-tools_1.6.37-2_arm64.deb ...
Unpacking libpng-tools (1.6.37-2) ...
Selecting previously unselected package libportaudio2:arm64.
Preparing to unpack .../107-libportaudio2_19.6.0-1build1_arm64.deb ...
Unpacking libportaudio2:arm64 (19.6.0-1build1) ...
Selecting previously unselected package libportaudiocpp0:arm64.
Preparing to unpack .../108-libportaudiocpp0_19.6.0-1build1_arm64.deb ...
Unpacking libportaudiocpp0:arm64 (19.6.0-1build1) ...
Selecting previously unselected package libraw1394-tools.
Preparing to unpack .../109-libraw1394-tools_2.1.2-1_arm64.deb ...
Unpacking libraw1394-tools (2.1.2-1) ...
Selecting previously unselected package libssl-dev:arm64.
Preparing to unpack .../110-libssl-dev_1.1.1f-1ubuntu2.10_arm64.deb ...
Unpacking libssl-dev:arm64 (1.1.1f-1ubuntu2.10) ...
Selecting previously unselected package portaudio19-dev:arm64.
Preparing to unpack .../111-portaudio19-dev_19.6.0-1build1_arm64.deb ...
Unpacking portaudio19-dev:arm64 (19.6.0-1build1) ...
Selecting previously unselected package python3-ply.
Preparing to unpack .../112-python3-ply_3.11-3ubuntu0.1_all.deb ...
Unpacking python3-ply (3.11-3ubuntu0.1) ...
Selecting previously unselected package python3-pycparser.
Preparing to unpack .../113-python3-pycparser_2.19-1ubuntu1_all.deb ...
Unpacking python3-pycparser (2.19-1ubuntu1) ...
Selecting previously unselected package python3-cffi.
Preparing to unpack .../114-python3-cffi_1.14.0-1build1_all.deb ...
Unpacking python3-cffi (1.14.0-1build1) ...
Selecting previously unselected package python3-opencv.
Preparing to unpack .../115-python3-opencv_4.2.0+dfsg-5_arm64.deb ...
Unpacking python3-opencv (4.2.0+dfsg-5) ...
Selecting previously unselected package python3.8-venv.
Preparing to unpack .../116-python3.8-venv_3.8.10-0ubuntu1~20.04.2_arm64.deb ...
Unpacking python3.8-venv (3.8.10-0ubuntu1~20.04.2) ...
Selecting previously unselected package read-edid.
Preparing to unpack .../117-read-edid_3.0.2-1build1_arm64.deb ...
Unpacking read-edid (3.0.2-1build1) ...
Selecting previously unselected package i2c-tools.
Preparing to unpack .../118-i2c-tools_4.1-2build2_arm64.deb ...
Unpacking i2c-tools (4.1-2build2) ...
Setting up python3-opencv (4.2.0+dfsg-5) ...
Setting up libpcrecpp0v5:arm64 (2:8.39-12build1) ...
Setting up libavutil-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Setting up libcairo-script-interpreter2:arm64 (1.16.0-4ubuntu1) ...
Setting up javascript-common (11) ...
Setting up libglib2.0-dev-bin (2.64.6-1~ubuntu20.04.4) ...
Setting up libjpeg-turbo8-dev:arm64 (2.0.3-0ubuntu1.20.04.1) ...
Setting up libexif-dev:arm64 (0.6.21-6ubuntu0.4) ...
Setting up libgdcm-dev (3.0.5-1.1ubuntu2) ...
Setting up libpixman-1-dev:arm64 (0.38.4-0ubuntu1) ...
Setting up fswebcam (20140113-2) ...
Setting up libpcre16-3:arm64 (2:8.39-12build1) ...
Setting up libgphoto2-dev:arm64 (2.5.25-0ubuntu0.1) ...
Setting up libpng-tools (1.6.37-2) ...
Setting up libswresample-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Setting up libdrm-xlnx-tegra0:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Setting up libi2c0:arm64 (4.1-2build2) ...
Setting up libavcodec-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Setting up libssl1.1:arm64 (1.1.1f-1ubuntu2.10) ...
Setting up libraw1394-dev:arm64 (2.1.2-1) ...
Setting up python3-ply (3.11-3ubuntu0.1) ...
Setting up liblab-gamut1:arm64 (2.42.2-3build2) ...
Setting up libpng-dev:arm64 (1.6.37-2) ...
Setting up read-edid (3.0.2-1build1) ...
Setting up libsepol1-dev:arm64 (3.0-1) ...
Setting up libjbig-dev:arm64 (2.1-3.1build1) ...
Setting up libavformat-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Setting up libdrm-xlnx-amdgpu1:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Setting up libffi-dev:arm64 (3.3-4) ...
Setting up libpthread-stubs0-dev:arm64 (0.4-1) ...
Setting up libpcre2-16-0:arm64 (10.34-7) ...
Setting up libavresample4:arm64 (7:4.2.4-1ubuntu0.1) ...
Setting up python3-pycparser (2.19-1ubuntu1) ...
Setting up libfreetype-dev:arm64 (2.10.1-2ubuntu0.1) ...
Setting up libgts-0.7-5:arm64 (0.7.6+darcs121130-4) ...
Setting up libasound2-data (1.2.2-2.1ubuntu2.5) ...
Setting up xtrans-dev (1.4.0-1) ...
Setting up libdrm-xlnx-radeon1:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Setting up libcurl4-openssl-dev:arm64 (7.68.0-1ubuntu2.7) ...
Setting up libjack0:arm64 (1:0.125.0-3build2) ...
Setting up uuid-dev:arm64 (2.34-0.1ubuntu9.3) ...
Setting up libpathplan4:arm64 (2.42.2-3build2) ...
Setting up libann0 (1.1.2+doc-7build1) ...
Setting up libswscale-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Setting up libssl-dev:arm64 (1.1.1f-1ubuntu2.10) ...
Setting up i2c-tools (4.1-2build2) ...
Setting up libpcre32-3:arm64 (2:8.39-12build1) ...
Setting up libpcre2-posix2:arm64 (10.34-7) ...
Setting up liblzma-dev:arm64 (5.2.4-1ubuntu1) ...
Setting up libasound2:arm64 (1.2.2-2.1ubuntu2.5) ...
Setting up libraw1394-tools (2.1.2-1) ...
Setting up libdrm-xlnx-freedreno1:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Setting up xorg-sgml-doctools (1:1.11-1) ...
Setting up libcdt5:arm64 (2.42.2-3build2) ...
Setting up libcgraph6:arm64 (2.42.2-3build2) ...
Setting up libjack-dev (1:0.125.0-3build2) ...
Setting up libtbb-dev:arm64 (2020.1-2) ...
Setting up libjs-jquery (3.3.1~dfsg-3) ...
Setting up libjpeg8-dev:arm64 (8c-2ubuntu8) ...
Setting up libasound2-dev:arm64 (1.2.2-2.1ubuntu2.5) ...
Setting up libdrm-xlnx-nouveau2:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Setting up libilmbase-dev:arm64 (2.3.0-6build1) ...
Setting up libopencv4.2-jni (4.2.0+dfsg-5) ...
Setting up libtiffxx5:arm64 (4.1.0+git191117-2ubuntu0.20.04.2) ...
Setting up libblkid-dev:arm64 (2.34-0.1ubuntu9.3) ...
Setting up libopencv4.2-java (4.2.0+dfsg-5) ...
Setting up libgts-bin (0.7.6+darcs121130-4) ...
Setting up libportaudio2:arm64 (19.6.0-1build1) ...
Setting up libpython3.8-minimal:arm64 (3.8.10-0ubuntu1~20.04.2) ...
Setting up libdc1394-22-dev:arm64 (2.2.5-2.1) ...
Setting up libpcre2-dev:arm64 (10.34-7) ...
Setting up libselinux1-dev:arm64 (3.0-1build2) ...
Setting up libpcre3-dev:arm64 (2:8.39-12build1) ...
Setting up python3-cffi (1.14.0-1build1) ...
Setting up libavresample-dev:arm64 (7:4.2.4-1ubuntu0.1) ...
Setting up libjpeg-dev:arm64 (8c-2ubuntu8) ...
Setting up libfreetype6-dev:arm64 (2.10.1-2ubuntu0.1) ...
Setting up libportaudiocpp0:arm64 (19.6.0-1build1) ...
Setting up portaudio19-dev:arm64 (19.6.0-1build1) ...
Setting up libdrm-xlnx-dev:arm64 (2.4.102-1ubuntu1~20.04.1xilinx1) ...
Setting up libopenexr-dev (2.3.0-6ubuntu0.5) ...
Setting up libtiff-dev:arm64 (4.1.0+git191117-2ubuntu0.20.04.2) ...
Setting up libgvc6 (2.42.2-3build2) ...
Setting up libgvpr2:arm64 (2.42.2-3build2) ...
Setting up python3.8-minimal (3.8.10-0ubuntu1~20.04.2) ...
Setting up libopencv-core-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libexif-doc (0.6.21-6ubuntu0.4) ...
Setting up libpython3.8-stdlib:arm64 (3.8.10-0ubuntu1~20.04.2) ...
Setting up python3.8 (3.8.10-0ubuntu1~20.04.2) ...
Setting up libmount-dev:arm64 (2.34-0.1ubuntu9.3) ...
Setting up graphviz (2.42.2-3build2) ...
Setting up libopencv-flann-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libfontconfig1-dev:arm64 (2.13.1-2ubuntu3) ...
Setting up libopencv-ml-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-ts-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libglib2.0-dev:arm64 (2.64.6-1~ubuntu20.04.4) ...
Setting up libopencv-imgproc-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libpython3.8:arm64 (3.8.10-0ubuntu1~20.04.2) ...
Setting up python3.8-venv (3.8.10-0ubuntu1~20.04.2) ...
Setting up libopencv-dnn-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-viz-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-video-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-shape-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-photo-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-imgcodecs-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libpython3.8-dev:arm64 (3.8.10-0ubuntu1~20.04.2) ...
Setting up python3.8-dev (3.8.10-0ubuntu1~20.04.2) ...
Setting up libopencv-videoio-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-superres-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-highgui-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-features2d-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-calib3d-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-objdetect-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-videostab-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-stitching-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-contrib-dev:arm64 (4.2.0+dfsg-5) ...
Setting up libopencv-dev (4.2.0+dfsg-5) ...
Processing triggers for install-info (6.7.0.dfsg.2-5) ...
Processing triggers for desktop-file-utils (0.24-1ubuntu3) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for libglib2.0-0:arm64 (2.64.6-1~ubuntu20.04.4) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for sgml-base (1.29.1) ...
Setting up x11proto-dev (2019.2-1ubuntu1) ...
Setting up libxau-dev:arm64 (1:1.0.9-0ubuntu1) ...
Setting up libice-dev:arm64 (2:1.0.10-0ubuntu1) ...
Setting up libsm-dev:arm64 (2:1.2.3-1) ...
Setting up libxdmcp-dev:arm64 (1:1.1.3-0ubuntu1) ...
Setting up x11proto-core-dev (2019.2-1ubuntu1) ...
Setting up x11proto-xext-dev (2019.2-1ubuntu1) ...
Setting up libxcb1-dev:arm64 (1.14-2) ...
Setting up libx11-dev:arm64 (2:1.6.9-2ubuntu1.2) ...
Setting up libxcb-shm0-dev:arm64 (1.14-2) ...
Setting up libxcb-render0-dev:arm64 (1.14-2) ...
Setting up libxext-dev:arm64 (2:1.3.4-0ubuntu1) ...
Setting up libxrender-dev:arm64 (1:0.9.10-1) ...
Setting up libcairo2-dev:arm64 (1.16.0-4ubuntu1) ...
/home/ubuntu/Kria-PYNQ/pynq/sdbuild/packages/python_packages_focal /home/ubuntu/Kria-PYNQ
++ set -e
++ cd /root
++ cat
++ export PYNQ_VENV=/usr/local/share/pynq-venv
++ PYNQ_VENV=/usr/local/share/pynq-venv
++ python3 -m venv --system-site-packages /usr/local/share/pynq-venv
++ echo 'source /usr/local/share/pynq-venv/bin/activate'
++ source /etc/profile.d/pynq_venv.sh
+++ source /usr/local/share/pynq-venv/bin/activate
++++ deactivate nondestructive
++++ '[' -n '' ']'
++++ '[' -n '' ']'
++++ '[' -n /usr/bin/bash -o -n '' ']'
++++ hash -r
++++ '[' -n '' ']'
++++ unset VIRTUAL_ENV
++++ '[' '!' nondestructive = nondestructive ']'
++++ VIRTUAL_ENV=/usr/local/share/pynq-venv
++++ export VIRTUAL_ENV
++++ _OLD_VIRTUAL_PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
++++ PATH=/usr/local/share/pynq-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
++++ export PATH
++++ '[' -n '' ']'
++++ '[' -z '' ']'
++++ _OLD_VIRTUAL_PS1=
++++ '[' 'x(pynq-venv) ' '!=' x ']'
++++ PS1='(pynq-venv) '
++++ export PS1
++++ '[' -n /usr/bin/bash -o -n '' ']'
++++ hash -r
++ python3 -m pip install pip==21.2.4
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Collecting pip==21.2.4
  Downloading pip-21.2.4-py3-none-any.whl (1.6 MB)
     |████████████████████████████████| 1.6 MB 40 kB/s 
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.0.2
    Uninstalling pip-20.0.2:
      Successfully uninstalled pip-20.0.2
Successfully installed pip-21.2.4
++ python3 -m pip install -r requirements.txt
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Collecting alabaster==0.7.12
  Downloading alabaster-0.7.12-py2.py3-none-any.whl (14 kB)
Collecting anyio==3.1.0
  Downloading anyio-3.1.0-py3-none-any.whl (74 kB)
     |████████████████████████████████| 74 kB 961 kB/s 
Collecting argon2-cffi==20.1.0
  Downloading argon2-cffi-20.1.0.tar.gz (1.8 MB)
     |████████████████████████████████| 1.8 MB 14.3 MB/s 
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting async-generator==1.10
  Downloading async_generator-1.10-py3-none-any.whl (18 kB)
Collecting Babel==2.9.1
  Downloading Babel-2.9.1-py2.py3-none-any.whl (8.8 MB)
     |████████████████████████████████| 8.8 MB 119 kB/s 
Collecting backcall==0.2.0
  Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting bleach==3.3.0
  Downloading bleach-3.3.0-py2.py3-none-any.whl (283 kB)
     |████████████████████████████████| 283 kB 14.2 MB/s 
Collecting Brotli==1.0.9
  Downloading Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.6 MB)
     |████████████████████████████████| 2.6 MB 14.5 MB/s 
Collecting cffi==1.14.5
  Downloading cffi-1.14.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (208 kB)
     |████████████████████████████████| 208 kB 14.3 MB/s 
Collecting click==8.0.1
  Downloading click-8.0.1-py3-none-any.whl (97 kB)
     |████████████████████████████████| 97 kB 2.9 MB/s 
Collecting CppHeaderParser==2.7.4
  Downloading CppHeaderParser-2.7.4.tar.gz (54 kB)
     |████████████████████████████████| 54 kB 1.4 MB/s 
Collecting Cython==0.29.24
  Downloading Cython-0.29.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB)
     |████████████████████████████████| 1.9 MB 14.7 MB/s 
Collecting dash==2.0.0
  Downloading dash-2.0.0-py3-none-any.whl (7.3 MB)
     |████████████████████████████████| 7.3 MB 82 kB/s 
Collecting dash-bootstrap-components==0.13.1
  Downloading dash_bootstrap_components-0.13.1-py3-none-any.whl (197 kB)
     |████████████████████████████████| 197 kB 13.6 MB/s 
Collecting dash-core-components==2.0.0
  Downloading dash_core_components-2.0.0.tar.gz (3.4 kB)
Collecting dash-html-components==2.0.0
  Downloading dash_html_components-2.0.0.tar.gz (3.8 kB)
Collecting dash-renderer==1.9.1
  Downloading dash_renderer-1.9.1.tar.gz (1.0 MB)
     |████████████████████████████████| 1.0 MB 10.5 MB/s 
Collecting dash-table==5.0.0
  Downloading dash_table-5.0.0.tar.gz (3.4 kB)
Collecting defusedxml==0.7.1
  Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Collecting deltasigma==0.2.2
  Downloading deltasigma-0.2.2.tar.gz (142 kB)
     |████████████████████████████████| 142 kB 13.8 MB/s 
Collecting docutils==0.17.1
  Downloading docutils-0.17.1-py2.py3-none-any.whl (575 kB)
     |████████████████████████████████| 575 kB 14.4 MB/s 
Collecting Flask==2.0.1
  Downloading Flask-2.0.1-py3-none-any.whl (94 kB)
     |████████████████████████████████| 94 kB 847 kB/s 
Collecting Flask-Compress==1.10.1
  Downloading Flask_Compress-1.10.1-py3-none-any.whl (7.9 kB)
Collecting gTTS==2.2.3
  Downloading gTTS-2.2.3-py3-none-any.whl (25 kB)
Collecting imagesize==1.2.0
  Downloading imagesize-1.2.0-py2.py3-none-any.whl (4.8 kB)
Collecting imutils==0.5.4
  Downloading imutils-0.5.4.tar.gz (17 kB)
Collecting ipykernel==5.5.5
  Downloading ipykernel-5.5.5-py3-none-any.whl (120 kB)
     |████████████████████████████████| 120 kB 14.6 MB/s 
Collecting ipython==7.24.0
  Downloading ipython-7.24.0-py3-none-any.whl (785 kB)
     |████████████████████████████████| 785 kB 14.2 MB/s 
Collecting ipywidgets==7.6.3
  Downloading ipywidgets-7.6.3-py2.py3-none-any.whl (121 kB)
     |████████████████████████████████| 121 kB 12.8 MB/s 
Collecting itsdangerous==2.0.1
  Downloading itsdangerous-2.0.1-py3-none-any.whl (18 kB)
Collecting jedi==0.17.2
  Downloading jedi-0.17.2-py2.py3-none-any.whl (1.4 MB)
     |████████████████████████████████| 1.4 MB 8.5 MB/s 
Collecting Jinja2==3.0.1
  Downloading Jinja2-3.0.1-py3-none-any.whl (133 kB)
     |████████████████████████████████| 133 kB 14.1 MB/s 
Collecting json5==0.9.5
  Downloading json5-0.9.5-py2.py3-none-any.whl (17 kB)
Requirement already satisfied: jsonschema==3.2.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 34)) (3.2.0)
Collecting jupyter==1.0.0
  Downloading jupyter-1.0.0-py2.py3-none-any.whl (2.7 kB)
Collecting jupyter-client==6.1.12
  Downloading jupyter_client-6.1.12-py3-none-any.whl (112 kB)
     |████████████████████████████████| 112 kB 14.7 MB/s 
Collecting jupyter-console==6.4.0
  Downloading jupyter_console-6.4.0-py3-none-any.whl (22 kB)
Collecting jupyter-contrib-core==0.3.3
  Downloading jupyter_contrib_core-0.3.3-py2.py3-none-any.whl (18 kB)
Collecting jupyter-contrib-nbextensions==0.5.1
  Downloading jupyter_contrib_nbextensions-0.5.1-py2.py3-none-any.whl (20.9 MB)
     |████████████████████████████████| 20.9 MB 23 kB/s 
Collecting jupyter-core==4.7.1
  Downloading jupyter_core-4.7.1-py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 376 kB/s 
Collecting jupyter-highlight-selected-word==0.2.0
  Downloading jupyter_highlight_selected_word-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting jupyter-latex-envs==1.4.6
  Downloading jupyter_latex_envs-1.4.6.tar.gz (861 kB)
     |████████████████████████████████| 861 kB 14.1 MB/s 
Collecting jupyter-nbextensions-configurator==0.4.1
  Downloading jupyter_nbextensions_configurator-0.4.1.tar.gz (479 kB)
     |████████████████████████████████| 479 kB 14.3 MB/s 
Collecting jupyter-server==1.8.0
  Downloading jupyter_server-1.8.0-py3-none-any.whl (382 kB)
     |████████████████████████████████| 382 kB 14.6 MB/s 
Collecting jupyterlab==3.0.16
  Downloading jupyterlab-3.0.16-py3-none-any.whl (8.2 MB)
     |████████████████████████████████| 8.2 MB 209 kB/s 
Collecting jupyterlab-pygments==0.1.2
  Downloading jupyterlab_pygments-0.1.2-py2.py3-none-any.whl (4.6 kB)
Collecting jupyterlab-server==2.5.2
  Downloading jupyterlab_server-2.5.2-py3-none-any.whl (49 kB)
     |████████████████████████████████| 49 kB 2.8 MB/s 
Collecting jupyterlab-widgets==1.0.0
  Downloading jupyterlab_widgets-1.0.0-py3-none-any.whl (243 kB)
     |████████████████████████████████| 243 kB 11.1 MB/s 
Collecting jupyterplot==0.0.3
  Downloading jupyterplot-0.0.3-py3-none-any.whl (10 kB)
Collecting lrcurve==1.1.0
  Downloading lrcurve-1.1.0.tar.gz (67 kB)
     |████████████████████████████████| 67 kB 2.6 MB/s 
Collecting MarkupSafe==2.0.1
  Downloading MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (27 kB)
Collecting matplotlib-inline==0.1.2
  Downloading matplotlib_inline-0.1.2-py3-none-any.whl (8.2 kB)
Collecting mistune==0.8.4
  Downloading mistune-0.8.4-py2.py3-none-any.whl (16 kB)
Collecting nbclassic==0.3.1
  Downloading nbclassic-0.3.1-py3-none-any.whl (18 kB)
Collecting nbclient==0.5.3
  Downloading nbclient-0.5.3-py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 481 kB/s 
Collecting nbconvert==6.0.7
  Downloading nbconvert-6.0.7-py3-none-any.whl (552 kB)
     |████████████████████████████████| 552 kB 14.2 MB/s 
Collecting nbformat==5.1.3
  Downloading nbformat-5.1.3-py3-none-any.whl (178 kB)
     |████████████████████████████████| 178 kB 14.2 MB/s 
Collecting nbsphinx==0.8.7
  Downloading nbsphinx-0.8.7-py3-none-any.whl (25 kB)
Collecting nbwavedrom==0.2.0
  Downloading nbwavedrom-0.2.0.tar.gz (37 kB)
Collecting nest-asyncio==1.5.1
  Downloading nest_asyncio-1.5.1-py3-none-any.whl (5.0 kB)
Collecting netifaces==0.11.0
  Downloading netifaces-0.11.0.tar.gz (30 kB)
Collecting notebook==6.4.0
  Downloading notebook-6.4.0-py3-none-any.whl (9.5 MB)
     |████████████████████████████████| 9.5 MB 103 kB/s 
Collecting numpy==1.20.3
  Downloading numpy-1.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (12.7 MB)
     |████████████████████████████████| 12.7 MB 10.8 MB/s 
Collecting pandas==1.3.3
  Downloading pandas-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.9 MB)
     |████████████████████████████████| 10.9 MB 142 kB/s 
Collecting pandocfilters==1.4.3
  Downloading pandocfilters-1.4.3.tar.gz (16 kB)
Collecting parsec==3.9
  Downloading parsec-3.9-py2.py3-none-any.whl (11 kB)
Collecting parso==0.7.1
  Downloading parso-0.7.1-py2.py3-none-any.whl (109 kB)
     |████████████████████████████████| 109 kB 15.4 MB/s 
Collecting patsy==0.5.1
  Downloading patsy-0.5.1-py2.py3-none-any.whl (231 kB)
     |████████████████████████████████| 231 kB 14.2 MB/s 
Collecting pbr==5.6.0
  Downloading pbr-5.6.0-py2.py3-none-any.whl (111 kB)
     |████████████████████████████████| 111 kB 15.7 MB/s 
Collecting pexpect==4.8.0
  Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB)
     |████████████████████████████████| 59 kB 2.7 MB/s 
Collecting pip==21.2.1
  Downloading pip-21.2.1-py3-none-any.whl (1.6 MB)
     |████████████████████████████████| 1.6 MB 15.4 MB/s 
Requirement already satisfied: pkg_resources==0.0.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from -r requirements.txt (line 72)) (0.0.0)
Collecting plotly==5.1.0
  Downloading plotly-5.1.0-py2.py3-none-any.whl (20.6 MB)
     |████████████████████████████████| 20.6 MB 46 kB/s 
Collecting prometheus-client==0.10.1
  Downloading prometheus_client-0.10.1-py2.py3-none-any.whl (55 kB)
     |████████████████████████████████| 55 kB 1.3 MB/s 
Collecting prompt-toolkit==3.0.18
  Downloading prompt_toolkit-3.0.18-py3-none-any.whl (367 kB)
     |████████████████████████████████| 367 kB 15.7 MB/s 
Collecting psutil==5.8.0
  Downloading psutil-5.8.0.tar.gz (470 kB)
     |████████████████████████████████| 470 kB 14.3 MB/s 
Collecting ptyprocess==0.7.0
  Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Collecting PyAudio==0.2.11
  Downloading PyAudio-0.2.11.tar.gz (37 kB)
Collecting pybind11==2.8.0
  Downloading pybind11-2.8.0-py2.py3-none-any.whl (207 kB)
     |████████████████████████████████| 207 kB 14.5 MB/s 
Collecting pycairo==1.20.1
  Downloading pycairo-1.20.1.tar.gz (344 kB)
     |████████████████████████████████| 344 kB 14.3 MB/s 
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting pycurl==7.43.0.2
  Downloading pycurl-7.43.0.2.tar.gz (214 kB)
     |████████████████████████████████| 214 kB 17.2 MB/s 
Collecting pyeda==0.28.0
  Downloading pyeda-0.28.0.zip (535 kB)
     |████████████████████████████████| 535 kB 14.6 MB/s 
Collecting Pygments==2.9.0
  Downloading Pygments-2.9.0-py3-none-any.whl (1.0 MB)
     |████████████████████████████████| 1.0 MB 14.4 MB/s 
Collecting pyrsistent==0.17.3
  Downloading pyrsistent-0.17.3.tar.gz (106 kB)
     |████████████████████████████████| 106 kB 15.8 MB/s 
Collecting pyzmq==22.1.0
  Downloading pyzmq-22.1.0-cp38-cp38-manylinux2014_aarch64.whl (1.8 MB)
     |████████████████████████████████| 1.8 MB 14.3 MB/s 
Collecting qtconsole==5.1.0
  Downloading qtconsole-5.1.0-py3-none-any.whl (119 kB)
     |████████████████████████████████| 119 kB 14.2 MB/s 
Collecting QtPy==1.9.0
  Downloading QtPy-1.9.0-py2.py3-none-any.whl (54 kB)
     |████████████████████████████████| 54 kB 759 kB/s 
Collecting rise==5.7.1
  Downloading rise-5.7.1-py2.py3-none-any.whl (4.3 MB)
     |████████████████████████████████| 4.3 MB 14.2 MB/s 
Collecting roman==3.3
  Downloading roman-3.3-py2.py3-none-any.whl (3.9 kB)
Collecting Send2Trash==1.5.0
  Downloading Send2Trash-1.5.0-py3-none-any.whl (12 kB)
Collecting setproctitle==1.2.2
  Downloading setproctitle-1.2.2-cp38-cp38-manylinux2014_aarch64.whl (36 kB)
Requirement already satisfied: setuptools==44.0.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from -r requirements.txt (line 92)) (44.0.0)
Collecting simplegeneric==0.8.1
  Downloading simplegeneric-0.8.1.zip (12 kB)
Collecting sniffio==1.2.0
  Downloading sniffio-1.2.0-py3-none-any.whl (10 kB)
Collecting snowballstemmer==2.1.0
  Downloading snowballstemmer-2.1.0-py2.py3-none-any.whl (93 kB)
     |████████████████████████████████| 93 kB 825 kB/s 
Collecting SpeechRecognition==3.8.1
  Downloading SpeechRecognition-3.8.1-py2.py3-none-any.whl (32.8 MB)
     |████████████████████████████████| 32.8 MB 19 kB/s 
Collecting Sphinx==4.2.0
  Downloading Sphinx-4.2.0-py3-none-any.whl (3.1 MB)
     |████████████████████████████████| 3.1 MB 14.3 MB/s 
Collecting sphinx-rtd-theme==1.0.0
  Downloading sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl (2.8 MB)
     |████████████████████████████████| 2.8 MB 16.1 MB/s 
Collecting sphinxcontrib-applehelp==1.0.2
  Downloading sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl (121 kB)
     |████████████████████████████████| 121 kB 14.2 MB/s 
Collecting sphinxcontrib-devhelp==1.0.2
  Downloading sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl (84 kB)
     |████████████████████████████████| 84 kB 1.7 MB/s 
Collecting sphinxcontrib-htmlhelp==2.0.0
  Downloading sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl (100 kB)
     |████████████████████████████████| 100 kB 4.0 MB/s 
Collecting sphinxcontrib-jsmath==1.0.1
  Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB)
Collecting sphinxcontrib-qthelp==1.0.3
  Downloading sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl (90 kB)
     |████████████████████████████████| 90 kB 4.0 MB/s 
Collecting sphinxcontrib-serializinghtml==1.1.5
  Downloading sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl (94 kB)
     |████████████████████████████████| 94 kB 1.2 MB/s 
Collecting tenacity==8.0.0
  Downloading tenacity-8.0.0-py3-none-any.whl (22 kB)
Collecting terminado==0.10.0
  Downloading terminado-0.10.0-py3-none-any.whl (14 kB)
Collecting testpath==0.5.0
  Downloading testpath-0.5.0-py3-none-any.whl (84 kB)
     |████████████████████████████████| 84 kB 1.7 MB/s 
Collecting testresources==2.0.1
  Downloading testresources-2.0.1-py2.py3-none-any.whl (36 kB)
Collecting tornado==6.1
  Downloading tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl (427 kB)
     |████████████████████████████████| 427 kB 14.2 MB/s 
Collecting tqdm==4.62.3
  Downloading tqdm-4.62.3-py2.py3-none-any.whl (76 kB)
     |████████████████████████████████| 76 kB 2.0 MB/s 
Collecting traitlets==5.0.5
  Downloading traitlets-5.0.5-py3-none-any.whl (100 kB)
     |████████████████████████████████| 100 kB 3.9 MB/s 
Collecting voila==0.2.10
  Downloading voila-0.2.10-py3-none-any.whl (1.6 MB)
     |████████████████████████████████| 1.6 MB 14.3 MB/s 
Collecting voila-gridstack==0.2.0
  Downloading voila_gridstack-0.2.0-py2.py3-none-any.whl (217 kB)
     |████████████████████████████████| 217 kB 14.2 MB/s 
Collecting websocket-client==1.0.1
  Downloading websocket_client-1.0.1-py2.py3-none-any.whl (68 kB)
     |████████████████████████████████| 68 kB 2.9 MB/s 
Collecting Werkzeug==2.0.1
  Downloading Werkzeug-2.0.1-py3-none-any.whl (288 kB)
     |████████████████████████████████| 288 kB 14.2 MB/s 
Collecting widgetsnbextension==3.5.1
  Downloading widgetsnbextension-3.5.1-py2.py3-none-any.whl (2.2 MB)
     |████████████████████████████████| 2.2 MB 14.2 MB/s 
Collecting wurlitzer==3.0.2
  Downloading wurlitzer-3.0.2-py3-none-any.whl (7.3 kB)
Requirement already satisfied: idna>=2.8 in /usr/lib/python3/dist-packages (from anyio==3.1.0->-r requirements.txt (line 2)) (2.8)
Requirement already satisfied: six in /usr/lib/python3/dist-packages (from argon2-cffi==20.1.0->-r requirements.txt (line 3)) (1.14.0)
Requirement already satisfied: pytz>=2015.7 in /usr/lib/python3/dist-packages (from Babel==2.9.1->-r requirements.txt (line 5)) (2019.3)
Collecting packaging
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 2.7 MB/s 
Collecting webencodings
  Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
Requirement already satisfied: pycparser in /usr/lib/python3/dist-packages (from cffi==1.14.5->-r requirements.txt (line 9)) (2.19)
Requirement already satisfied: ply in /usr/lib/python3/dist-packages (from CppHeaderParser==2.7.4->-r requirements.txt (line 11)) (3.11)
Collecting matplotlib>=1.1.1
  Downloading matplotlib-3.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.7 MB)
     |████████████████████████████████| 11.7 MB 10.9 MB/s 
Collecting scipy>=0.11.0
  Downloading scipy-1.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (39.0 MB)
     |████████████████████████████████| 39.0 MB 5.1 kB/s 
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from gTTS==2.2.3->-r requirements.txt (line 24)) (2.22.0)
Collecting pickleshare
  Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
Collecting decorator
  Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)
Requirement already satisfied: python-dateutil>=2.1 in /usr/lib/python3/dist-packages (from jupyter-client==6.1.12->-r requirements.txt (line 36)) (2.7.3)
Collecting ipython-genutils
  Downloading ipython_genutils-0.2.0-py2.py3-none-any.whl (26 kB)
Collecting lxml
  Downloading lxml-4.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (6.6 MB)
     |████████████████████████████████| 6.6 MB 22 kB/s 
Requirement already satisfied: pyyaml in /usr/lib/python3/dist-packages (from jupyter-contrib-nbextensions==0.5.1->-r requirements.txt (line 39)) (5.3.1)
Requirement already satisfied: entrypoints>=0.2.2 in /usr/lib/python3/dist-packages (from nbconvert==6.0.7->-r requirements.txt (line 56)) (0.3)
Collecting wcwidth
  Downloading wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)
Collecting pyparsing>=2.2.1
  Downloading pyparsing-3.0.7-py3-none-any.whl (98 kB)
     |████████████████████████████████| 98 kB 3.2 MB/s 
Collecting kiwisolver>=1.0.1
  Downloading kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB)
     |████████████████████████████████| 1.4 MB 14.2 MB/s 
Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib>=1.1.1->deltasigma==0.2.2->-r requirements.txt (line 20)) (7.0.0)
Collecting cycler>=0.10
  Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)
Collecting fonttools>=4.22.0
  Downloading fonttools-4.29.1-py3-none-any.whl (895 kB)
     |████████████████████████████████| 895 kB 14.0 MB/s 
Building wheels for collected packages: argon2-cffi, CppHeaderParser, dash-core-components, dash-html-components, dash-renderer, dash-table, deltasigma, imutils, jupyter-latex-envs, jupyter-nbextensions-configurator, lrcurve, nbwavedrom, netifaces, pandocfilters, psutil, PyAudio, pycairo, pycurl, pyeda, pyrsistent, simplegeneric
  Building wheel for argon2-cffi (PEP 517) ... done
  Created wheel for argon2-cffi: filename=argon2_cffi-20.1.0-cp38-abi3-linux_aarch64.whl size=97342 sha256=3c69dfeedd47f40dd37fc8b192c32e050f2ef21f739f59c50314bbb4a3b11879
  Stored in directory: /root/.cache/pip/wheels/a8/61/59/3fb44bae5cfd2c3d86682f7778670cb0800f7da9bd98450d70
  Building wheel for CppHeaderParser (setup.py) ... done
  Created wheel for CppHeaderParser: filename=CppHeaderParser-2.7.4-py3-none-any.whl size=44974 sha256=1aaf77f2314e1535837747285392d70eb1f30cbac9c0eb73298acc24f17a5767
  Stored in directory: /root/.cache/pip/wheels/7d/f0/ee/af6e3d91d8ef23c0496fb78df6d17e73f037da4fcabf68b273
  Building wheel for dash-core-components (setup.py) ... done
  Created wheel for dash-core-components: filename=dash_core_components-2.0.0-py3-none-any.whl size=3801 sha256=ddf210711ab4f87a56d9cd3ef89373cf15e954150d97c529cd69ca44d874a8ac
  Stored in directory: /root/.cache/pip/wheels/52/e4/f3/16724791571a955a46d54650510c98c04ab7d339626aee27cc
  Building wheel for dash-html-components (setup.py) ... done
  Created wheel for dash-html-components: filename=dash_html_components-2.0.0-py3-none-any.whl size=4069 sha256=0b5c7ac490f8d7d832791dae9de51839e5401a64c8941af50a84b55ed5585323
  Stored in directory: /root/.cache/pip/wheels/73/d8/8d/92f612c03c895f19bcc56a6c54be7bb41aaa698012a5624f60
  Building wheel for dash-renderer (setup.py) ... done
  Created wheel for dash-renderer: filename=dash_renderer-1.9.1-py3-none-any.whl size=1014877 sha256=ca8b6bdb6de3c0b47ed79c93828d392453081975ad6d0e7464c06afde32c8489
  Stored in directory: /root/.cache/pip/wheels/ac/7e/fd/807844722d79d8babcd27b16e5f7ecc7b476c45ca607c11729
  Building wheel for dash-table (setup.py) ... done
  Created wheel for dash-table: filename=dash_table-5.0.0-py3-none-any.whl size=3896 sha256=561c4122916e823b58df9dce9b9b8154234736fca519e0feaa05aef209770a66
  Stored in directory: /root/.cache/pip/wheels/a6/fb/f5/4adf241f384634f52028f15eab6a325e77b8766a0a00816bbf
  Building wheel for deltasigma (setup.py) ... done
  Created wheel for deltasigma: filename=deltasigma-0.2.2-py3-none-any.whl size=261483 sha256=a4bb50bd082b17e7795ad1f7d65460ded82350eb2ca86c2e939d1bcc46a38472
  Stored in directory: /root/.cache/pip/wheels/00/32/3a/512d17af532eb9a782ae6227cbbe5ca57ef93f2a918aa076f6
  Building wheel for imutils (setup.py) ... done
  Created wheel for imutils: filename=imutils-0.5.4-py3-none-any.whl size=25858 sha256=c312a8bdf0fec72ca3c1996e0e8740fd5e369cc5a30c6ac231849e2c8aea3e0d
  Stored in directory: /root/.cache/pip/wheels/59/1b/52/0dea905f8278d5514dc4d0be5e251967f8681670cadd3dca89
  Building wheel for jupyter-latex-envs (setup.py) ... done
  Created wheel for jupyter-latex-envs: filename=jupyter_latex_envs-1.4.6-py2.py3-none-any.whl size=963395 sha256=b3ca1fea15c55a709caec594314c60070838bd4c31c337e0102555b19cbae793
  Stored in directory: /root/.cache/pip/wheels/4d/ba/f4/b8c0941055519ebc0f27e85bfe2bb223f1a59a3b8bfc5c7515
  Building wheel for jupyter-nbextensions-configurator (setup.py) ... done
  Created wheel for jupyter-nbextensions-configurator: filename=jupyter_nbextensions_configurator-0.4.1-py2.py3-none-any.whl size=465825 sha256=36d852be5ad3485d187a1d0e83a65bcdbaad572d277f67ca32860033cf3ee323
  Stored in directory: /root/.cache/pip/wheels/e3/3a/b3/a709b437602c3807f079f0c35ccba3e1adf9af6f2e6b0ebfea
  Building wheel for lrcurve (setup.py) ... done
  Created wheel for lrcurve: filename=lrcurve-1.1.0-py3-none-any.whl size=69142 sha256=88d14f7125d899d95e6ea86c7282a8d69e41bfa6ebf1a9144298898c59c7639d
  Stored in directory: /root/.cache/pip/wheels/d8/97/c2/70d613e3d92340653e3e87d6896a5d2f1162cdb2e53ff10d36
  Building wheel for nbwavedrom (setup.py) ... done
  Created wheel for nbwavedrom: filename=nbwavedrom-0.2.0-py3-none-any.whl size=38560 sha256=3fbe74a4dbd3ff6309d367010d8926788cf5cd4efc5d0d463f68d1a6215676e4
  Stored in directory: /root/.cache/pip/wheels/00/4e/1d/4f677f26db819d8177d4369cc59d58a5e6c9880ebac8ecc9a9
  Building wheel for netifaces (setup.py) ... done
  Created wheel for netifaces: filename=netifaces-0.11.0-cp38-cp38-linux_aarch64.whl size=41532 sha256=fe44eed604229d935b406e09872fb39fa10d017b9f7bcea3f230a1ab6e080dd8
  Stored in directory: /root/.cache/pip/wheels/04/e2/b4/b811799a082cacaeff801af32c856fbefe6279ba96554d9a21
  Building wheel for pandocfilters (setup.py) ... done
  Created wheel for pandocfilters: filename=pandocfilters-1.4.3-py3-none-any.whl size=7991 sha256=bfbb975ff457364b986388019b7fc5aeb8503143739a9a8544c6daa2662fd63b
  Stored in directory: /root/.cache/pip/wheels/fc/39/52/8d6f3cec1cca4ceb44d658427c35711b19d89dbc4914af657f
  Building wheel for psutil (setup.py) ... done
  Created wheel for psutil: filename=psutil-5.8.0-cp38-cp38-linux_aarch64.whl size=301440 sha256=774b237bd9886f8133c5d3e358d3324db8f680e6a2e89547b65fe3fa087460be
  Stored in directory: /root/.cache/pip/wheels/a9/92/74/7694cd5d3f10ea335ef507c10e877b2150de20975a986782b9
  Building wheel for PyAudio (setup.py) ... done
  Created wheel for PyAudio: filename=PyAudio-0.2.11-cp38-cp38-linux_aarch64.whl size=56119 sha256=8c099c1725d32934944cd910319a897e27993597332257b8ca9b27345e3a58fc
  Stored in directory: /root/.cache/pip/wheels/cf/be/f6/06f4d9fb96713a3ba58a480dd5739b3bf66ff0430de58a38c1
  Building wheel for pycairo (PEP 517) ... done
  Created wheel for pycairo: filename=pycairo-1.20.1-cp38-cp38-linux_aarch64.whl size=284860 sha256=54e607468ebf17c4bb1c52fe9290878e59480d8b729bc91c3dbe6e635cf65aec
  Stored in directory: /root/.cache/pip/wheels/7e/ba/dc/6688e3cf50462094cd938a481411e59ae185c73474f250fbe3
  Building wheel for pycurl (setup.py) ... done
  Created wheel for pycurl: filename=pycurl-7.43.0.2-cp38-cp38-linux_aarch64.whl size=315422 sha256=b960f4520cff9c07a6aa2d69903af59e2ce7f266642a3efdd79908cc2e06ba6b
  Stored in directory: /root/.cache/pip/wheels/45/82/6d/d66cc9bd97d48f2d1f20a07657d863165175f23d74c44f2e47
  Building wheel for pyeda (setup.py) ... done
  Created wheel for pyeda: filename=pyeda-0.28.0-cp38-cp38-linux_aarch64.whl size=617856 sha256=bfb85bf277c1e3f08999354a47c328addf2751f22784d2e7bb6df8706048f53e
  Stored in directory: /root/.cache/pip/wheels/70/8a/a3/51ef0b4e442851401f1e2defdd35c19789b7c4979ac096f979
  Building wheel for pyrsistent (setup.py) ... done
  Created wheel for pyrsistent: filename=pyrsistent-0.17.3-cp38-cp38-linux_aarch64.whl size=106859 sha256=ff534edb162e8ece3b017b762b79e41e1657067939677904f6cdc8d7b45572c8
  Stored in directory: /root/.cache/pip/wheels/3d/22/08/7042eb6309c650c7b53615d5df5cc61f1ea9680e7edd3a08d2
  Building wheel for simplegeneric (setup.py) ... done
  Created wheel for simplegeneric: filename=simplegeneric-0.8.1-py3-none-any.whl size=5073 sha256=7aae4172bb4e8c19f45a9c805c3ab9d394b895c6865db8f28492521bdc79e538
  Stored in directory: /root/.cache/pip/wheels/0b/32/6b/5f5447909a062da20dfe432fa945d8f98636692637deccaa8a
Successfully built argon2-cffi CppHeaderParser dash-core-components dash-html-components dash-renderer dash-table deltasigma imutils jupyter-latex-envs jupyter-nbextensions-configurator lrcurve nbwavedrom netifaces pandocfilters psutil PyAudio pycairo pycurl pyeda pyrsistent simplegeneric
Installing collected packages: ipython-genutils, traitlets, wcwidth, tornado, pyzmq, pyparsing, ptyprocess, parso, jupyter-core, webencodings, Pygments, prompt-toolkit, pickleshare, pexpect, packaging, nest-asyncio, nbformat, matplotlib-inline, MarkupSafe, jupyter-client, jedi, decorator, backcall, async-generator, testpath, pandocfilters, nbclient, mistune, jupyterlab-pygments, Jinja2, ipython, defusedxml, cffi, bleach, Werkzeug, terminado, sniffio, Send2Trash, prometheus-client, nbconvert, itsdangerous, ipykernel, click, argon2-cffi, websocket-client, tenacity, notebook, Flask, Brotli, anyio, widgetsnbextension, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, snowballstemmer, QtPy, plotly, numpy, kiwisolver, jupyterlab-widgets, jupyter-server, jupyter-contrib-core, json5, imagesize, fonttools, Flask-Compress, docutils, dash-table, dash-html-components, dash-core-components, cycler, Babel, alabaster, voila, Sphinx, scipy, qtconsole, pbr, nbclassic, matplotlib, lxml, lrcurve, jupyterlab-server, jupyter-nbextensions-configurator, jupyter-latex-envs, jupyter-highlight-selected-word, jupyter-console, ipywidgets, dash, wurlitzer, voila-gridstack, tqdm, testresources, sphinx-rtd-theme, SpeechRecognition, simplegeneric, setproctitle, roman, rise, pyrsistent, pyeda, pycurl, pycairo, pybind11, PyAudio, psutil, pip, patsy, parsec, pandas, netifaces, nbwavedrom, nbsphinx, jupyterplot, jupyterlab, jupyter-contrib-nbextensions, jupyter, imutils, gTTS, deltasigma, dash-renderer, dash-bootstrap-components, Cython, CppHeaderParser
  Attempting uninstall: pexpect
    Found existing installation: pexpect 4.6.0
    Not uninstalling pexpect at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'pexpect'. No files were found to uninstall.
  Attempting uninstall: MarkupSafe
    Found existing installation: MarkupSafe 1.1.0
    Not uninstalling markupsafe at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'MarkupSafe'. No files were found to uninstall.
  Attempting uninstall: Jinja2
    Found existing installation: Jinja2 2.10.1
    Not uninstalling jinja2 at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'Jinja2'. No files were found to uninstall.
  Attempting uninstall: cffi
    Found existing installation: cffi 1.14.0
    Not uninstalling cffi at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'cffi'. No files were found to uninstall.
  Attempting uninstall: click
    Found existing installation: Click 7.0
    Not uninstalling click at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'Click'. No files were found to uninstall.
  Attempting uninstall: numpy
    Found existing installation: numpy 1.17.4
    Not uninstalling numpy at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'numpy'. No files were found to uninstall.
  Attempting uninstall: pyrsistent
    Found existing installation: pyrsistent 0.15.5
    Not uninstalling pyrsistent at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'pyrsistent'. No files were found to uninstall.
  Attempting uninstall: pycairo
    Found existing installation: pycairo 1.16.2
    Not uninstalling pycairo at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'pycairo'. No files were found to uninstall.
  Attempting uninstall: pybind11
    Found existing installation: pybind11 2.4.3
    Not uninstalling pybind11 at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'pybind11'. No files were found to uninstall.
  Attempting uninstall: pip
    Found existing installation: pip 21.2.4
    Uninstalling pip-21.2.4:
      Successfully uninstalled pip-21.2.4
  Attempting uninstall: netifaces
    Found existing installation: netifaces 0.10.4
    Not uninstalling netifaces at /usr/lib/python3/dist-packages, outside environment /usr/local/share/pynq-venv
    Can't uninstall 'netifaces'. No files were found to uninstall.
Successfully installed Babel-2.9.1 Brotli-1.0.9 CppHeaderParser-2.7.4 Cython-0.29.24 Flask-2.0.1 Flask-Compress-1.10.1 Jinja2-3.0.1 MarkupSafe-2.0.1 PyAudio-0.2.11 Pygments-2.9.0 QtPy-1.9.0 Send2Trash-1.5.0 SpeechRecognition-3.8.1 Sphinx-4.2.0 Werkzeug-2.0.1 alabaster-0.7.12 anyio-3.1.0 argon2-cffi-20.1.0 async-generator-1.10 backcall-0.2.0 bleach-3.3.0 cffi-1.14.5 click-8.0.1 cycler-0.11.0 dash-2.0.0 dash-bootstrap-components-0.13.1 dash-core-components-2.0.0 dash-html-components-2.0.0 dash-renderer-1.9.1 dash-table-5.0.0 decorator-5.1.1 defusedxml-0.7.1 deltasigma-0.2.2 docutils-0.17.1 fonttools-4.29.1 gTTS-2.2.3 imagesize-1.2.0 imutils-0.5.4 ipykernel-5.5.5 ipython-7.24.0 ipython-genutils-0.2.0 ipywidgets-7.6.3 itsdangerous-2.0.1 jedi-0.17.2 json5-0.9.5 jupyter-1.0.0 jupyter-client-6.1.12 jupyter-console-6.4.0 jupyter-contrib-core-0.3.3 jupyter-contrib-nbextensions-0.5.1 jupyter-core-4.7.1 jupyter-highlight-selected-word-0.2.0 jupyter-latex-envs-1.4.6 jupyter-nbextensions-configurator-0.4.1 jupyter-server-1.8.0 jupyterlab-3.0.16 jupyterlab-pygments-0.1.2 jupyterlab-server-2.5.2 jupyterlab-widgets-1.0.0 jupyterplot-0.0.3 kiwisolver-1.3.2 lrcurve-1.1.0 lxml-4.7.1 matplotlib-3.5.1 matplotlib-inline-0.1.2 mistune-0.8.4 nbclassic-0.3.1 nbclient-0.5.3 nbconvert-6.0.7 nbformat-5.1.3 nbsphinx-0.8.7 nbwavedrom-0.2.0 nest-asyncio-1.5.1 netifaces-0.11.0 notebook-6.4.0 numpy-1.20.3 packaging-21.3 pandas-1.3.3 pandocfilters-1.4.3 parsec-3.9 parso-0.7.1 patsy-0.5.1 pbr-5.6.0 pexpect-4.8.0 pickleshare-0.7.5 pip-21.2.1 plotly-5.1.0 prometheus-client-0.10.1 prompt-toolkit-3.0.18 psutil-5.8.0 ptyprocess-0.7.0 pybind11-2.8.0 pycairo-1.20.1 pycurl-7.43.0.2 pyeda-0.28.0 pyparsing-3.0.7 pyrsistent-0.17.3 pyzmq-22.1.0 qtconsole-5.1.0 rise-5.7.1 roman-3.3 scipy-1.8.0 setproctitle-1.2.2 simplegeneric-0.8.1 sniffio-1.2.0 snowballstemmer-2.1.0 sphinx-rtd-theme-1.0.0 sphinxcontrib-applehelp-1.0.2 sphinxcontrib-devhelp-1.0.2 sphinxcontrib-htmlhelp-2.0.0 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-1.0.3 sphinxcontrib-serializinghtml-1.1.5 tenacity-8.0.0 terminado-0.10.0 testpath-0.5.0 testresources-2.0.1 tornado-6.1 tqdm-4.62.3 traitlets-5.0.5 voila-0.2.10 voila-gridstack-0.2.0 wcwidth-0.2.5 webencodings-0.5.1 websocket-client-1.0.1 widgetsnbextension-3.5.1 wurlitzer-3.0.2
++ rm requirements.txt
/home/ubuntu/Kria-PYNQ
/home/ubuntu/Kria-PYNQ/pynq/sdbuild/packages/jupyter /home/ubuntu/Kria-PYNQ
++ set -e
++ export HOME=/root
++ HOME=/root
++ export PYNQ_PYTHON=python3
++ PYNQ_PYTHON=python3
++ '[' -z /home/root/jupyter_notebooks ']'
++ '[' == arm ']'
./qemu.sh: line 13: [: ==: unary operator expected
++ export NODE_OPTIONS=--max-old-space-size=4096
++ NODE_OPTIONS=--max-old-space-size=4096
++ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key
++ apt-key add -
OK
++ echo deb https://deb.nodesource.com/node_12.x focal main
++ '[' == arm ']'
./qemu.sh: line 25: [: ==: unary operator expected
++ wget https://deb.nodesource.com/node_12.x/pool/main/n/nodejs/nodejs_12.22.6-deb-1nodesource1_arm64.deb
--2022-02-14 01:13:22--  https://deb.nodesource.com/node_12.x/pool/main/n/nodejs/nodejs_12.22.6-deb-1nodesource1_arm64.deb
Resolving deb.nodesource.com (deb.nodesource.com)... 2400:2000:6::dd6e:b642, 2400:2000:6::dd6e:b659, 60.87.6.201, ...
Connecting to deb.nodesource.com (deb.nodesource.com)|2400:2000:6::dd6e:b642|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17254568 (16M) [application/octet-stream]
Saving to: ‘nodejs_12.22.6-deb-1nodesource1_arm64.deb’

nodejs_12.22.6-deb- 100%[===================>]  16.46M  11.0MB/s    in 1.5s    

2022-02-14 01:13:24 (11.0 MB/s) - ‘nodejs_12.22.6-deb-1nodesource1_arm64.deb’ saved [17254568/17254568]

++ dpkg -i nodejs_12.22.6-deb-1nodesource1_arm64.deb
Selecting previously unselected package nodejs.
(Reading database ... 150797 files and directories currently installed.)
Preparing to unpack nodejs_12.22.6-deb-1nodesource1_arm64.deb ...
Unpacking nodejs (12.22.6-deb-1nodesource1) ...
Setting up nodejs (12.22.6-deb-1nodesource1) ...
Processing triggers for man-db (2.9.1-1) ...
++ rm -rf nodejs_12.22.6-deb-1nodesource1_arm64.deb
++ source /etc/profile.d/pynq_venv.sh
+++ source /usr/local/share/pynq-venv/bin/activate
++++ deactivate nondestructive
++++ '[' -n '' ']'
++++ '[' -n '' ']'
++++ '[' -n /usr/bin/bash -o -n '' ']'
++++ hash -r
++++ '[' -n '' ']'
++++ unset VIRTUAL_ENV
++++ '[' '!' nondestructive = nondestructive ']'
++++ VIRTUAL_ENV=/usr/local/share/pynq-venv
++++ export VIRTUAL_ENV
++++ _OLD_VIRTUAL_PATH=/usr/local/share/pynq-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
++++ PATH=/usr/local/share/pynq-venv/bin:/usr/local/share/pynq-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
++++ export PATH
++++ '[' -n '' ']'
++++ '[' -z '' ']'
++++ _OLD_VIRTUAL_PS1=
++++ '[' 'x(pynq-venv) ' '!=' x ']'
++++ PS1='(pynq-venv) '
++++ export PS1
++++ '[' -n /usr/bin/bash -o -n '' ']'
++++ hash -r
+++ export PYNQ_JUPYTER_NOTEBOOKS=/home/root/jupyter_notebooks
+++ PYNQ_JUPYTER_NOTEBOOKS=/home/root/jupyter_notebooks
+++ export BOARD=KV260
+++ BOARD=KV260
+++ export XILINX_XRT=/usr
+++ XILINX_XRT=/usr
++ jupyter notebook --generate-config --allow-root
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
++ cat -
++ mkdir -p /home/root/jupyter_notebooks
++ systemctl enable jupyter
Created symlink /etc/systemd/system/basic.target.wants/jupyter.service → /lib/systemd/system/jupyter.service.
/home/ubuntu/Kria-PYNQ
/home/ubuntu/Kria-PYNQ/pynq/sdbuild/packages/libsds /home/ubuntu/Kria-PYNQ
make: Nothing to be done for 'all'.
install libcma.so.64 /usr/lib/libcma.so
install libxlnk_cma.h /usr/include
/home/ubuntu/Kria-PYNQ
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Collecting pynq
  Downloading pynq-2.7.0.tar.gz (64.2 MB)
     |████████████████████████████████| 64.2 MB 10 kB/s 
Requirement already satisfied: cffi in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq) (1.14.5)
Requirement already satisfied: numpy in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq) (1.20.3)
Requirement already satisfied: setuptools>=24.2.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq) (44.0.0)
Requirement already satisfied: pandas in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq) (1.3.3)
Requirement already satisfied: pycparser in /usr/lib/python3/dist-packages (from cffi->pynq) (2.19)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/lib/python3/dist-packages (from pandas->pynq) (2.7.3)
Requirement already satisfied: pytz>=2017.3 in /usr/lib/python3/dist-packages (from pandas->pynq) (2019.3)
Building wheels for collected packages: pynq
  Building wheel for pynq (setup.py) ... done
  Created wheel for pynq: filename=pynq-2.7.0-cp38-cp38-linux_aarch64.whl size=12789532 sha256=cd1e8a6e3179d553c2eb04be73af009042b3c30faf1f706a828b593a71915593
  Stored in directory: /root/.cache/pip/wheels/ec/36/70/f66cef07e0eadac83a12182dbe590c33a48ee78dae2954886c
Successfully built pynq
Installing collected packages: pynq
Successfully installed pynq-2.7.0
WARNING: You are using pip version 21.2.1; however, version 22.0.3 is available.
You should consider upgrading via the '/usr/local/share/pynq-venv/bin/python -m pip install --upgrade pip' command.
/tmp /home/ubuntu/Kria-PYNQ
--2022-02-14 01:15:26--  https://bit.ly/pynq_binaries_2_7
Resolving bit.ly (bit.ly)... 67.199.248.11, 67.199.248.10
Connecting to bit.ly (bit.ly)|67.199.248.11|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.xilinx.com/bin/public/openDownload?filename=pynq-v2.7-binaries.tar.gz [following]
--2022-02-14 01:15:26--  https://www.xilinx.com/bin/public/openDownload?filename=pynq-v2.7-binaries.tar.gz
Resolving www.xilinx.com (www.xilinx.com)... 23.33.54.80
Connecting to www.xilinx.com (www.xilinx.com)|23.33.54.80|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://xilinx-ax-dl.entitlenow.com/dl/ul/2021/11/19/R210486745/pynq-v2.7-binaries.tar.gz?hash=k12JaPzGWrPauPGfo-EmMA&expires=1644822927&filename=pynq-v2.7-binaries.tar.gz [following]
--2022-02-14 01:15:27--  https://xilinx-ax-dl.entitlenow.com/dl/ul/2021/11/19/R210486745/pynq-v2.7-binaries.tar.gz?hash=k12JaPzGWrPauPGfo-EmMA&expires=1644822927&filename=pynq-v2.7-binaries.tar.gz
Resolving xilinx-ax-dl.entitlenow.com (xilinx-ax-dl.entitlenow.com)... 23.60.108.71
Connecting to xilinx-ax-dl.entitlenow.com (xilinx-ax-dl.entitlenow.com)|23.60.108.71|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 154323894 (147M) [application/x-gzip]
Saving to: ‘pynq_binaries.tar.gz’

pynq_binaries.tar.g 100%[===================>] 147.17M  10.5MB/s    in 14s     

2022-02-14 01:15:41 (10.8 MB/s) - ‘pynq_binaries.tar.gz’ saved [154323894/154323894]

/home/ubuntu/Kria-PYNQ
/home/ubuntu/Kria-PYNQ/dts /home/ubuntu/Kria-PYNQ
dtc -I dts -O dtb -o pynq.dtbo pynq.dts -q
/usr/local/share/pynq-venv/lib/python3.8/site-packages/pynq/pl_server/xrt_device.py:88: UserWarning: xbutil failed to run - unable to determine XRT version
  warnings.warn(
/home/ubuntu/Kria-PYNQ
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Processing /home/ubuntu/Kria-PYNQ
  DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.
   pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.
Requirement already satisfied: pynq>=2.7.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from kv260==2.7.0) (2.7.0)
Requirement already satisfied: pandas in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->kv260==2.7.0) (1.3.3)
Requirement already satisfied: setuptools>=24.2.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->kv260==2.7.0) (44.0.0)
Requirement already satisfied: numpy in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->kv260==2.7.0) (1.20.3)
Requirement already satisfied: cffi in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->kv260==2.7.0) (1.14.5)
Requirement already satisfied: pycparser in /usr/lib/python3/dist-packages (from cffi->pynq>=2.7.0->kv260==2.7.0) (2.19)
Requirement already satisfied: pytz>=2017.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.7.0->kv260==2.7.0) (2019.3)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.7.0->kv260==2.7.0) (2.7.3)
Building wheels for collected packages: kv260
  Building wheel for kv260 (setup.py) ... done
  Created wheel for kv260: filename=kv260-2.7.0-py3-none-any.whl size=3410114 sha256=2e2f63265e0d45c74ea290f3589de4c4b7f61dace97adb3a39b98327d22eb986
  Stored in directory: /root/.cache/pip/wheels/08/60/55/cf6b71891ad0e2bc920d5913bb193f233fb6f50b0e281939f5
Successfully built kv260
Installing collected packages: kv260
Successfully installed kv260-2.7.0
WARNING: You are using pip version 21.2.1; however, version 22.0.3 is available.
You should consider upgrading via the '/usr/local/share/pynq-venv/bin/python3 -m pip install --upgrade pip' command.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Collecting pynq-helloworld
  Downloading pynq_helloworld-2.7.0-py3-none-any.whl (4.5 MB)
     |████████████████████████████████| 4.5 MB 7.3 MB/s 
Requirement already satisfied: matplotlib in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-helloworld) (3.5.1)
Requirement already satisfied: pynq in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-helloworld) (2.7.0)
Requirement already satisfied: ipython in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-helloworld) (7.24.0)
Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (3.0.18)
Requirement already satisfied: matplotlib-inline in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (0.1.2)
Requirement already satisfied: setuptools>=18.5 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (44.0.0)
Requirement already satisfied: jedi>=0.16 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (0.17.2)
Requirement already satisfied: decorator in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (5.1.1)
Requirement already satisfied: pickleshare in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (0.7.5)
Requirement already satisfied: pexpect>4.3 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (4.8.0)
Requirement already satisfied: traitlets>=4.2 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (5.0.5)
Requirement already satisfied: backcall in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (0.2.0)
Requirement already satisfied: pygments in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from ipython->pynq-helloworld) (2.9.0)
Requirement already satisfied: parso<0.8.0,>=0.7.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from jedi>=0.16->ipython->pynq-helloworld) (0.7.1)
Requirement already satisfied: ptyprocess>=0.5 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pexpect>4.3->ipython->pynq-helloworld) (0.7.0)
Requirement already satisfied: wcwidth in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->pynq-helloworld) (0.2.5)
Requirement already satisfied: ipython-genutils in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from traitlets>=4.2->ipython->pynq-helloworld) (0.2.0)
Requirement already satisfied: packaging>=20.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from matplotlib->pynq-helloworld) (21.3)
Requirement already satisfied: numpy>=1.17 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from matplotlib->pynq-helloworld) (1.20.3)
Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib->pynq-helloworld) (7.0.0)
Requirement already satisfied: cycler>=0.10 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from matplotlib->pynq-helloworld) (0.11.0)
Requirement already satisfied: python-dateutil>=2.7 in /usr/lib/python3/dist-packages (from matplotlib->pynq-helloworld) (2.7.3)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from matplotlib->pynq-helloworld) (4.29.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from matplotlib->pynq-helloworld) (1.3.2)
Requirement already satisfied: pyparsing>=2.2.1 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from matplotlib->pynq-helloworld) (3.0.7)
Requirement already satisfied: pandas in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq->pynq-helloworld) (1.3.3)
Requirement already satisfied: cffi in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq->pynq-helloworld) (1.14.5)
Requirement already satisfied: pycparser in /usr/lib/python3/dist-packages (from cffi->pynq->pynq-helloworld) (2.19)
Requirement already satisfied: pytz>=2017.3 in /usr/lib/python3/dist-packages (from pandas->pynq->pynq-helloworld) (2019.3)
Installing collected packages: pynq-helloworld
Successfully installed pynq-helloworld-2.7.0
WARNING: You are using pip version 21.2.1; however, version 22.0.3 is available.
You should consider upgrading via the '/usr/local/share/pynq-venv/bin/python3 -m pip install --upgrade pip' command.
/tmp /home/ubuntu/Kria-PYNQ
Cloning into 'PYNQ_Composable_Pipeline'...
remote: Enumerating objects: 1368, done.
remote: Counting objects: 100% (1368/1368), done.
remote: Compressing objects: 100% (607/607), done.
remote: Total 1368 (delta 853), reused 1203 (delta 690), pack-reused 0
Receiving objects: 100% (1368/1368), 2.71 MiB | 4.69 MiB/s, done.
Resolving deltas: 100% (853/853), done.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Processing ./PYNQ_Composable_Pipeline
  DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.
   pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.
Collecting graphviz>=0.17
  Downloading graphviz-0.19.1-py3-none-any.whl (46 kB)
     |████████████████████████████████| 46 kB 1.5 MB/s 
Requirement already satisfied: pynq>=2.7.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-composable==1.0.0) (2.7.0)
Requirement already satisfied: numpy in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-composable==1.0.0) (1.20.3)
Requirement already satisfied: cffi in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-composable==1.0.0) (1.14.5)
Requirement already satisfied: pandas in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-composable==1.0.0) (1.3.3)
Requirement already satisfied: setuptools>=24.2.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-composable==1.0.0) (44.0.0)
Requirement already satisfied: pycparser in /usr/lib/python3/dist-packages (from cffi->pynq>=2.7.0->pynq-composable==1.0.0) (2.19)
Requirement already satisfied: pytz>=2017.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.7.0->pynq-composable==1.0.0) (2019.3)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.7.0->pynq-composable==1.0.0) (2.7.3)
Building wheels for collected packages: pynq-composable
  Building wheel for pynq-composable (setup.py) ... done
  Created wheel for pynq-composable: filename=pynq_composable-1.0.0-py3-none-any.whl size=7711597 sha256=ac077944c909ef6106a986a7a7f850b0a7f00e3d728e119af5c44389ec165327
  Stored in directory: /tmp/pip-ephem-wheel-cache-4m8gmd97/wheels/8b/c2/31/c7c46887f62a6f9cbfac3df137ea6a08ae002ad05ef8221dac
Successfully built pynq-composable
Installing collected packages: graphviz, pynq-composable
Successfully installed graphviz-0.19.1 pynq-composable-1.0.0
WARNING: You are using pip version 21.2.1; however, version 22.0.3 is available.
You should consider upgrading via the '/usr/local/share/pynq-venv/bin/python3 -m pip install --upgrade pip' command.
/home/ubuntu/Kria-PYNQ
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Collecting git+https://github.com/Xilinx/PYNQ_Peripherals.git
  Cloning https://github.com/Xilinx/PYNQ_Peripherals.git to /tmp/pip-req-build-b2e2zzmq
  Running command git clone -q https://github.com/Xilinx/PYNQ_Peripherals.git /tmp/pip-req-build-b2e2zzmq
  Resolved https://github.com/Xilinx/PYNQ_Peripherals.git to commit 1ecb729bb0e744232ec389d88d097e1ec35aceb1
Requirement already satisfied: pynq>=2.6.2 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-peripherals==0.1.0) (2.7.0)
Collecting simple_term_menu
  Downloading simple_term_menu-1.4.1-py3-none-any.whl (25 kB)
Requirement already satisfied: setuptools>=24.2.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.6.2->pynq-peripherals==0.1.0) (44.0.0)
Requirement already satisfied: pandas in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.6.2->pynq-peripherals==0.1.0) (1.3.3)
Requirement already satisfied: cffi in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.6.2->pynq-peripherals==0.1.0) (1.14.5)
Requirement already satisfied: numpy in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.6.2->pynq-peripherals==0.1.0) (1.20.3)
Requirement already satisfied: pycparser in /usr/lib/python3/dist-packages (from cffi->pynq>=2.6.2->pynq-peripherals==0.1.0) (2.19)
Requirement already satisfied: pytz>=2017.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.6.2->pynq-peripherals==0.1.0) (2019.3)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.6.2->pynq-peripherals==0.1.0) (2.7.3)
Building wheels for collected packages: pynq-peripherals
  Building wheel for pynq-peripherals (setup.py) ... done
  Created wheel for pynq-peripherals: filename=pynq_peripherals-0.1.0-py3-none-any.whl size=17578968 sha256=af6cd4f042181b76b718ab76a9f608b54cf695b80a931f325fc362c6bea7f774
  Stored in directory: /tmp/pip-ephem-wheel-cache-h2cam4h1/wheels/ab/7c/c7/d329e2b7ff068a0a491db889d8c900c6d4d4b7c66e86cf6d83
Successfully built pynq-peripherals
Installing collected packages: simple-term-menu, pynq-peripherals
Successfully installed pynq-peripherals-0.1.0 simple-term-menu-1.4.1
WARNING: You are using pip version 21.2.1; however, version 22.0.3 is available.
You should consider upgrading via the '/usr/local/share/pynq-venv/bin/python3 -m pip install --upgrade pip' command.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libplymouth5
Use 'sudo apt autoremove' to remove it.
The following packages will be REMOVED:
  gnome-control-center* gnome-initial-setup* gstreamer-xilinx1.0-plugins-good*
  libcheese-gtk25* libcheese8* orca* ubuntu-desktop-minimal* vitis-ai-library*
  vitis-ai-runtime*
0 upgraded, 0 newly installed, 9 to remove and 128 not upgraded.
After this operation, 37.4 MB disk space will be freed.
(Reading database ... 155692 files and directories currently installed.)
Removing ubuntu-desktop-minimal (1.450.2) ...
Removing gnome-control-center (1:3.36.5-0ubuntu3) ...
Removing gnome-initial-setup (3.36.2-0ubuntu2) ...
Removing orca (3.36.2-1ubuntu1~20.04.1) ...
Removing libcheese-gtk25:arm64 (3.34.0-1ubuntu1) ...
Removing libcheese8:arm64 (3.34.0-1ubuntu1) ...
Removing gstreamer-xilinx1.0-plugins-good:arm64 (2020.2-1ubuntu6) ...
Removing vitis-ai-runtime (1.3.2-0ubuntu5~20.04.1) ...
Removing vitis-ai-library (1.3.2-0ubuntu5~20.04.1) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for desktop-file-utils (0.24-1ubuntu3) ...
(Reading database ... 153946 files and directories currently installed.)
Purging configuration files for gnome-initial-setup (3.36.2-0ubuntu2) ...
Removing user `gnome-initial-setup' ...
Warning: group `nogroup' has no more members.
Done.
Purging configuration files for orca (3.36.2-1ubuntu1~20.04.1) ...
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
Collecting pynq-dpu
  Downloading pynq_dpu-1.4.0.tar.gz (1.3 MB)
     |████████████████████████████████| 1.3 MB 7.9 MB/s 
Requirement already satisfied: CppHeaderParser in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-dpu) (2.7.4)
Collecting mnist
  Downloading mnist-0.2.2-py2.py3-none-any.whl (3.5 kB)
Requirement already satisfied: pybind11 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-dpu) (2.8.0)
Requirement already satisfied: pynq>=2.7.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq-dpu) (2.7.0)
Requirement already satisfied: pandas in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-dpu) (1.3.3)
Requirement already satisfied: numpy in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-dpu) (1.20.3)
Requirement already satisfied: setuptools>=24.2.0 in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-dpu) (44.0.0)
Requirement already satisfied: cffi in /usr/local/share/pynq-venv/lib/python3.8/site-packages (from pynq>=2.7.0->pynq-dpu) (1.14.5)
Requirement already satisfied: pycparser in /usr/lib/python3/dist-packages (from cffi->pynq>=2.7.0->pynq-dpu) (2.19)
Requirement already satisfied: ply in /usr/lib/python3/dist-packages (from CppHeaderParser->pynq-dpu) (3.11)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.7.0->pynq-dpu) (2.7.3)
Requirement already satisfied: pytz>=2017.3 in /usr/lib/python3/dist-packages (from pandas->pynq>=2.7.0->pynq-dpu) (2019.3)
Building wheels for collected packages: pynq-dpu
  Building wheel for pynq-dpu (setup.py) ... done
  Created wheel for pynq-dpu: filename=pynq_dpu-1.4.0-cp38-cp38-linux_aarch64.whl size=31403650 sha256=11036b670abb1500147431aff740333dc7046a92af7ad19fd4800f3f8f93c7fc
  Stored in directory: /root/.cache/pip/wheels/f4/3a/e3/29e0c57ad00d304ad212488b6ebae815a8c4d0f39d2dcc5964
Successfully built pynq-dpu
Installing collected packages: mnist, pynq-dpu
Successfully installed mnist-0.2.2 pynq-dpu-1.4.0
WARNING: You are using pip version 21.2.1; however, version 22.0.3 is available.
You should consider upgrading via the '/usr/local/share/pynq-venv/bin/python3 -m pip install --upgrade pip' command.
The following notebooks modules will be delivered:
- pynq_peripherals (source: pynq_peripherals)
- pynq-helloworld (source: pynq_helloworld)
- pynq-dpu (source: pynq_dpu)
- pynq-composable (source: pynq_composable)
- kv260 (source: kv260)
Do you want to proceed? [Y/n] Delivering notebooks '/home/root/jupyter_notebooks/pynq_peripherals'...
Delivering notebooks '/home/root/jupyter_notebooks/pynq-helloworld'...
Downloading file 'resizer.hwh'. This may take a while...
Downloading file 'resizer.bit'. This may take a while...
Delivering notebooks '/home/root/jupyter_notebooks/pynq-dpu'...
Delivering notebooks '/home/root/jupyter_notebooks/pynq-composable'...
Delivering notebooks '/home/root/jupyter_notebooks/kv260'...
PYNQ Installation completed.

To continue with the PYNQ experience, connect to JupyterLab via a web browser using this url: 192.168.3.78:9090/lab or kria:9090/lab - The password is xilinx

ubuntu@kria:~/Kria-PYNQ$ 

  1. 2022年02月15日 03:30 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Kria-PYNQ をやってみる2(KV260 で Ubuntu 20.04 をブート)

Kria-PYNQ をやってみる1(SD カード作成)”の続き。

前回は、KV260 用 Ubuntu 20.04 LTS イメージをダウンロードして、MicroSD カードに書き込んだ。今回は、KV260 に MicroSD カードを挿入して、Ubuntu 20.04 LTS をブートして、設定を行った。

(2022/02/15 : 修正) sudo apt update, sudo apt upgrade をすると Kria-PYNQ がインストールできない可能性がある。”Kria-PYNQ をやってみる4(Kira-PYNQ の Jupyter Notebook をやってみる1)”参照。

KV260 に MicroSD カードを挿入して電源を ON した。
Ubuntu 20.04.3 LTS が起動した。
Kria-PYNQ_7_220213.png

ログインの最初にパスワードを変更した。
最初のログイン名は ubuntu でパスワードも ubuntu だった。現在はパスワードを変更してある。
KV260 に LAN ケーブルが接続されているので、IP アドレスが割り振られているか?を確認した。
ip addr show
を実行すると、IP アドレスが表示された。DHCP で割り振らえた 192.168.3.78 が割り当てられている。
Kria-PYNQ_8_220213.png

IP アドレスが割り当てられているので、ターミナルから ssh でログインすることにした。
ssh 192.168.3.78 -X -l ubuntu
でログインすることができた。
Kria-PYNQ_9_220213.png

環境設定を進める。
sudo apt update
Kria-PYNQ_10_220213.png

sudo apt upgrade
なんか?キャッシュにロックがかかっているようだ?
Kria-PYNQ_11_220213.png

Xilinx 社の資料の”Kria KV260 ビジョン AI スターター キットを使用のステップ 3. スターター キットを起動する (Ubuntu)のLinuxの場合の手順”を参考にシステム管理用の xlnx-config スナップをインストールする。
sudo snap install xlnx-config --classic
Kria-PYNQ_12_220213.png

次に xlnx-config.sysinit コマンドを実行して、Gstreamer のザイリンクス カスタム バージョンをインストールしたのだが、やはり upgrade と同様にキャッシュのロック状態がでてしまった。
Kria-PYNQ_13_220213.png

そこで、電源を OFF して、KV260 の Ubuntu を再度起動した。
sudo apt update
を行った。
Kria-PYNQ_14_220213.png

sudo apt upgrade
を行った。今度は正常に実行できた。
Kria-PYNQ_15_220213.png
Kria-PYNQ_16_220213.png

もう一度、
xlnx-config.sysinit
を実行したところ、成功した。
Kria-PYNQ_17_220213.png
Kria-PYNQ_18_220213.png

X ウインドウをホスト・パソコンに持ってこよう。
まずは、 xhost で KV260 の Ubuntu からの X アプリケーションの実行許可をホスト・パソコンで行う。("リモートの X プログラムを実行する /Introduction”を参考にさせていただいた)
xhost +198.168.3.78
Kria-PYNQ_21_220213.png

そして、KV260 の Ubuntu で X のライブラリをインストールした。
sudo apt install xbase-clients xterm x11-apps
sudo apt install nautilus geany

nautilus はインストール済みだった。
Kria-PYNQ_19_220213.png

nautilus &
で nautilus が起動した。
Kria-PYNQ_20_220213.png

geany &
で geany が起動した。
Kria-PYNQ_22_220213.png

最後に KV260 の Ubuntu 20.04.3 LTS の起動ログを示す。

Xilinx Zynq MP First Stage Boot Loader 
Release 2020.2   Apr 22 2021  -  17:48:34
MultiBootOffset: 0x40
Reset Mode  :   System Reset
Platform: Silicon (4.0), Running on A53-0 (64-bit) Processor, Device Name: XCZUUNKNEG
QSPI 32 bit Boot Mode 
FlashID=0x20 0xBB 0x20
x��UjT�'$HP�� running on XCK26/silicon v4/RTL5.1 at 0xfffea000
NOTICE:  BL31: v2.2(release):xilinx-v2020.2.2-k26
NOTICE:  BL31: Built : 17:45:02, Apr 22 2021


U-Boot 2020.01 (Apr 22 2021 - 17:47:18 +0000)

Model: ZynqMP SMK-K26 Rev1/B/A
Board: Xilinx ZynqMP
DRAM:  4 GiB
PMUFW:  v1.1
Xilinx I2C FRU format at nvmem0:
 Manufacturer Name: XILINX
 Product Name: SMK-K26-XCL2G
 Serial No: XFL1LECE1JTG
 Part Number: 5057-01  
 File ID: 0x0
 Revision Number: 1
Xilinx I2C FRU format at nvmem1:
 Manufacturer Name: XILINX
 Product Name: SCK-KV-G        
 Serial No: XFL1KO3R1GNH
 Part Number: 5066-01  
 File ID: 0x0
 Revision Number: 1
EL Level:   EL2
Chip ID:    xck26
NAND:  0 MiB
MMC:   mmc@ff170000: 1
In:    serial@ff010000
Out:   serial@ff010000
Err:   serial@ff010000
Bootmode: QSPI_MODE
Reset reason:   SOFT 
Net:   No ethernet found.
Hit any key to stop autoboot:  0 


  *** U-Boot Boot Menu ***

     Auto-Select - 1.CC boot 2.SOM boot
     Carrier Card (CC) boot device
     System on Module (SOM) boot device
     U-Boot console


  Press UP/DOWN to move, ENTER to select






















switch to partitions #0, OK
mmc1 is current device
Scanning mmc 1:1...
Found U-Boot script /boot.scr.uimg
3846 bytes read in 15 ms (250 KiB/s)
## Executing script at 20000000
ZynqMP SMK-K26 Rev1/B/A: No match
ZynqMP SMK-K26 Rev1/B/A: No match
model_test=K26
Loading image.fit
23810704 bytes read in 2864 ms (7.9 MiB/s)
## Loading kernel from FIT Image at 10000000 ...
   Using 'kria' configuration
   Trying 'kernel-1' kernel subimage
     Description:  Ubuntu kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x100000ec
     Data Size:    9791576 Bytes = 9.3 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x00080000
     Entry Point:  0x00080000
     Hash algo:    sha1
     Hash value:   d0f19e7c836a85ff211db1655accad2068670f5d
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 10000000 ...
   Using 'kria' configuration
   Trying 'ramdisk-1' ramdisk subimage
     Description:  Ubuntu ramdisk
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x10956a34
     Data Size:    13979044 Bytes = 13.3 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   830eebc0e343253047349737eaa00d07fdfed720
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 10000000 ...
   Using 'kria' configuration
   Trying 'fdt-1' fdt subimage
     Description:  Kria Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x116ab8ac
     Data Size:    38037 Bytes = 37.1 KiB
     Architecture: AArch64
     Hash algo:    sha1
     Hash value:   ec38efefa9714e57ba2d7afef3c65237138dda01
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x116ab8ac
   Uncompressing Kernel Image
   Loading Ramdisk to 782ab000, end 78fffda4 ... OK
   Loading Device Tree to 000000000fff3000, end 000000000ffff494 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 5.4.0-1017-xilinx-zynqmp (buildd@bos02-arm64-001) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #20-Ubuntu SMP Wed Nov 3 09:57:02 UTC 2021 (Ubuntu 5.4.0-1017.20-xilinx-zynqmp 5.4.140)
[    0.000000] Machine model: ZynqMP SMK-K26 Rev1/B/A
[    0.000000] earlycon: cdns0 at MMIO 0x00000000ff010000 (options '115200n8')
[    0.000000] printk: bootconsole [cdns0] enabled
[    2.813187] mtdoops: mtd device (mtddev=name/number) must be supplied
[    2.898398] cpu cpu0: dev_pm_opp_set_rate: failed to find current OPP for freq 1333333320 (-34)
[    2.907176] cpu cpu0: dev_pm_opp_set_rate: failed to find current OPP for freq 1333333320 (-34)
[    2.918630] gpio-keys gpio-keys: Button without keycode
[    3.446699] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/i2c@ff030000/pinctrl-names
[    3.457511] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/i2c@ff030000/pinctrl-0
[    3.467955] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/i2c@ff030000/pinctrl-1
[    3.478399] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/i2c@ff030000/scl-gpios
[    3.488838] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/i2c@ff030000/sda-gpios
[    3.499333] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp_phy@fd400000/status
[    3.510121] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/status
[    3.521258] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/phy-names
[    3.532655] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/phys
[    3.543617] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/dma@fd4c0000/status
[    3.553799] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/status
[    3.564069] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/pinctrl-names
[    3.574943] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/pinctrl-0
[    3.585473] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/dwc3@fe200000/status
[    3.596957] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/dwc3@fe200000/dr_mode
[    3.608526] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/dwc3@fe200000/snps,usb3_lpm_capable
[    3.621312] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/dwc3@fe200000/phy-names
[    3.633056] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/dwc3@fe200000/phys
[    3.644366] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/usb0@ff9d0000/dwc3@fe200000/maximum-speed
[    3.656458] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/status
[    3.666641] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/pinctrl-names
[    3.677429] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/pinctrl-0
[    3.687871] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/no-1-8-v
[    3.698226] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/disable-wp
[    3.708756] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/xlnx,mio-bank
[    3.719545] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/clk-phase-sd-hs
[    3.730507] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/clk-phase-uhs-sdr25
[    3.741817] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/mmc@ff170000/clk-phase-uhs-ddr50
[    3.753129] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/ethernet@ff0e0000/status
[    3.763744] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/ethernet@ff0e0000/pinctrl-names
[    3.774967] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/ethernet@ff0e0000/pinctrl-0
[    3.785842] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/ethernet@ff0e0000/phy-handle
[    3.796806] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/ethernet@ff0e0000/phy-mode
[    3.807612] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /firmware/zynqmp-firmware/pinctrl/status
[    3.819230] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/serial@ff010000/status
[    3.829671] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/serial@ff010000/pinctrl-names
[    3.840719] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/serial@ff010000/pinctrl-0
[    3.851432] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/u14
[    3.860837] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/usbhub
[    3.870500] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/mdio
[    3.879996] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/phy0
[    3.889492] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pinctrl_uart1_default
[    3.900464] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pinctrl_i2c1_default
[    3.911349] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pinctrl_i2c1_gpio
[    3.921973] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pinctrl_gem3_default
[    3.932859] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pinctrl_usb0_default
[    3.943744] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/pinctrl_sdhci1_default
[    3.967565] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/status
[    3.978743] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/zynqmp_dp_snd_pcm0/status
[    3.991527] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/zynqmp_dp_snd_pcm1/status
[    4.004317] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/zynqmp_dp_snd_card/status
[    4.017105] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /amba/zynqmp-display@fd4a0000/zynqmp_dp_snd_codec0/status
[    4.030395] dwc3 fe200000.dwc3: Failed to get clk 'ref': -2
[    4.045960] OF: graph: no port node found in /amba/zynqmp-display@fd4a0000

Ubuntu 20.04.3 LTS kria ttyPS0

kria login: ubuntu
Password: 
You are required to change your password immediately (administrator enforced)
Changing password for ubuntu.
Current password: 

Authentication token mani
Ubuntu 20.04.3 LTS kria ttyPS0

kria login: ubuntu
Password: 

Login incorrect
kria login: ubuntu
Password: 
You are required to change your password immediately (administrator enforced)
Changing password for ubuntu.
Current password: 
New password: 
Retype new password: 
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-1017-xilinx-zynqmp aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sat Feb 12 19:48:07 UTC 2022

  System load:  1.76               Processes:             210
  Usage of /:   13.5% of 28.31GB   Users logged in:       0
  Memory usage: 13%                IPv4 address for eth0: 192.168.3.78
  Swap usage:   0%

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

144 updates can be applied immediately.
80 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@kria:~$ 

  1. 2022年02月14日 04:42 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

Kria-PYNQ をやってみる1(SD カード作成)

Kria-PYNQ をやってみようと思う。

Installation
”設計開始”
”Kria KV260 ビジョン AI スターター キットを使用”の”ステップ 1. SD カード イメージを設定する (Ubuntu)”から
”Kria™ KV260 ビジョン AI スターター キット イメージ をダウンロードして、コンピューターに保存します。”をクリックすると、
Install Ubuntu on Xilinx”ページに飛ぶ。
そこの”Download 64-bit”ボタンをクリックして、iot-kria-classic-desktop-2004-x03-20211110-98.img.xz をダウンロードした。
Kria-PYNQ_1_220213.png

iot-kria-classic-desktop-2004-x03-20211110-98.img.xz を balenaEtcher で 32 GB の MicroSD カードに書き込む。
Kria-PYNQ_2_220213.png

書き込み中。
Kria-PYNQ_3_220213.png

書き込みが終了した。
Kria-PYNQ_4_220213.png

MicroSD カードは、system-boot と writable に分かれていた。
system-boot の内容を示す。
Kria-PYNQ_5_220213.png

writable の内容を示す。こちらはルート・ファイル・システムのようだ。
Kria-PYNQ_6_220213.png
  1. 2022年02月13日 04:10 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

square_root_apfixed で Vitis HLS 2021.2 の合成時の動作を確認した

square_root_apfixed プロジェクトを Vitis HLS 2021.2 で作成し、C コードの合成を行った時に、Vitis HLS 2021.2 の動作が確認できたので、書いておく。

square_root_apfixed プロジェクトは以前作成した整数版の square_root の任意精度固定小数点データ型版になる。(”square root を Vivado HLS で実装する1”参照)

square_root_apfixed.h を示す。

// square_root_apfixed.h
// 2022/02/07 by marsee
//

#ifndef __SQUARE_ROOT_APFIXED__
#define __SQUARE_ROOT_APFIXED__

#include <stdint.h>
#include <ap_int.h>
#include <ap_fixed.h>
#include <math.h>

#define INT_BIT 8
#define BIT_LEN 16

int square_root_apfixed(ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> in_val,
  ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> &sqroot);
#endif


square_root_apfixed.cpp を示す。

// square_root_apfixed.cpp
// 2022/02/07 by marsee
//

#include "square_root_apfixed.h"

static constexpr int DB_BIT_LEN = BIT_LEN*2;
static constexpr int DB_INT_BIT = INT_BIT*2;

int square_root_apfixed(ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> in_val,
    ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> &sqroot){
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=s_axilite port=sqroot
#pragma HLS INTERFACE mode=s_axilite port=in_val
    ap_ufixed<DB_BIT_LEN, DB_INT_BIT, AP_TRN_ZERO, AP_WRAP> temp = 0.0;
    ap_ufixed<DB_BIT_LEN, DB_INT_BIT, AP_TRN_ZERO, AP_WRAP> square;
    ap_ufixed<DB_BIT_LEN, DB_INT_BIT, AP_TRN_ZERO, AP_WRAP> val = pow(2.0, INT_BIT-1);

    for(int i=(BIT_LEN-1); i>=0; --i){
//#pragma HLS PIPELINE II=1
        temp += val;
        square = temp * temp;

        if(square > in_val){
            temp -= val;
        }

        val /= 2;
    }
    sqroot = (ap_ufixed<BIT_LEN, INT_BIT, AP_TRN, AP_WRAP>)temp;

    return(0);
}


square_root_apfixed_tb.cpp を示す。

// square_root_apfixed_tb.cpp
// 2022/02/07 by marsee
//

#include "square_root_apfixed.h"

int main(){
    ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP> result;

    for(uint32_t i=0; i<256; i++){
        square_root_apfixed((ap_ufixed<BIT_LEN, INT_BIT, AP_TRN_ZERO, AP_WRAP>)i, result);
        printf("i = %d, result = %f\n", i, (float)result);
    }

    return(0);
}


Vitis HLS 2021.2 の square_root_apfixed プロジェクトを示す。なお、ZYBO Z7-20 用だ。
sqaure_root_apfixed_1_220212.png

C シミュレーションを行った。
sqaure_root_apfixed_2_220212.png

C コードの合成を行った。
sqaure_root_apfixed_3_220212.png

レイテンシは 50 クロックだった。
VITIS_LOOP_19_1 の Inteval は 3 クロックだった。Vitis HLS ではループの中はパイプラインされているが、II = 1 にはならないようだ。Estimated の制約が守られる範囲で一番小さい Interval になるようだ。

次に、 square_root_apfixed.cpp の for ループの HLS `PIPELINE II=1 プラグマを生かした。
明示的に II = 1 のパイプライン・ディレクティブを追加したらどうだろうか?
sqaure_root_apfixed_4_220212.png

再度、C コードの合成を行った。
sqaure_root_apfixed_5_220212.png

VITIS_LOOP_19_1 の Inteval は 1 クロックになったが、Estimated は 11.671 ns となって、ターゲットの 10 ns を超えてしまっている。

Vitis HLS 2021.2 では、ループ上にパイプライン指示子が無ければ、ターゲットの動作周波数を確保するようにパイプラインの開始間隔を大きくする。ループ上にパイプライン指示子があれば、その指定に従う。ただし、Target に Estimated の値が届かないことがある。

C シミュレーションの結果を示す。

i = 0, result = 0.000000
i = 1, result = 1.000000
i = 2, result = 1.414062
i = 3, result = 1.730469
i = 4, result = 2.000000
i = 5, result = 2.234375
i = 6, result = 2.449219
i = 7, result = 2.644531
i = 8, result = 2.828125
i = 9, result = 3.000000
i = 10, result = 3.160156
i = 11, result = 3.316406
i = 12, result = 3.460938
i = 13, result = 3.605469
i = 14, result = 3.738281
i = 15, result = 3.871094
i = 16, result = 4.000000
i = 17, result = 4.121094
i = 18, result = 4.242188
i = 19, result = 4.355469
i = 20, result = 4.468750
i = 21, result = 4.582031
i = 22, result = 4.687500
i = 23, result = 4.792969
i = 24, result = 4.898438
i = 25, result = 5.000000
i = 26, result = 5.097656
i = 27, result = 5.195312
i = 28, result = 5.289062
i = 29, result = 5.382812
i = 30, result = 5.476562
i = 31, result = 5.566406
i = 32, result = 5.656250
i = 33, result = 5.742188
i = 34, result = 5.828125
i = 35, result = 5.914062
i = 36, result = 6.000000
i = 37, result = 6.082031
i = 38, result = 6.164062
i = 39, result = 6.242188
i = 40, result = 6.324219
i = 41, result = 6.402344
i = 42, result = 6.480469
i = 43, result = 6.554688
i = 44, result = 6.632812
i = 45, result = 6.707031
i = 46, result = 6.781250
i = 47, result = 6.855469
i = 48, result = 6.925781
i = 49, result = 7.000000
i = 50, result = 7.070312
i = 51, result = 7.140625
i = 52, result = 7.210938
i = 53, result = 7.277344
i = 54, result = 7.347656
i = 55, result = 7.414062
i = 56, result = 7.480469
i = 57, result = 7.546875
i = 58, result = 7.613281
i = 59, result = 7.679688
i = 60, result = 7.742188
i = 61, result = 7.808594
i = 62, result = 7.871094
i = 63, result = 7.933594
i = 64, result = 8.000000
i = 65, result = 8.058594
i = 66, result = 8.121094
i = 67, result = 8.183594
i = 68, result = 8.246094
i = 69, result = 8.304688
i = 70, result = 8.363281
i = 71, result = 8.425781
i = 72, result = 8.484375
i = 73, result = 8.542969
i = 74, result = 8.601562
i = 75, result = 8.660156
i = 76, result = 8.714844
i = 77, result = 8.773438
i = 78, result = 8.828125
i = 79, result = 8.886719
i = 80, result = 8.941406
i = 81, result = 9.000000
i = 82, result = 9.054688
i = 83, result = 9.109375
i = 84, result = 9.164062
i = 85, result = 9.218750
i = 86, result = 9.273438
i = 87, result = 9.324219
i = 88, result = 9.378906
i = 89, result = 9.433594
i = 90, result = 9.484375
i = 91, result = 9.539062
i = 92, result = 9.589844
i = 93, result = 9.640625
i = 94, result = 9.695312
i = 95, result = 9.746094
i = 96, result = 9.796875
i = 97, result = 9.847656
i = 98, result = 9.898438
i = 99, result = 9.949219
i = 100, result = 10.000000
i = 101, result = 10.046875
i = 102, result = 10.097656
i = 103, result = 10.148438
i = 104, result = 10.195312
i = 105, result = 10.246094
i = 106, result = 10.292969
i = 107, result = 10.343750
i = 108, result = 10.390625
i = 109, result = 10.437500
i = 110, result = 10.484375
i = 111, result = 10.535156
i = 112, result = 10.582031
i = 113, result = 10.628906
i = 114, result = 10.675781
i = 115, result = 10.722656
i = 116, result = 10.769531
i = 117, result = 10.816406
i = 118, result = 10.859375
i = 119, result = 10.906250
i = 120, result = 10.953125
i = 121, result = 11.000000
i = 122, result = 11.042969
i = 123, result = 11.089844
i = 124, result = 11.132812
i = 125, result = 11.179688
i = 126, result = 11.222656
i = 127, result = 11.265625
i = 128, result = 11.312500
i = 129, result = 11.355469
i = 130, result = 11.398438
i = 131, result = 11.445312
i = 132, result = 11.488281
i = 133, result = 11.531250
i = 134, result = 11.574219
i = 135, result = 11.617188
i = 136, result = 11.660156
i = 137, result = 11.703125
i = 138, result = 11.746094
i = 139, result = 11.789062
i = 140, result = 11.832031
i = 141, result = 11.871094
i = 142, result = 11.914062
i = 143, result = 11.957031
i = 144, result = 12.000000
i = 145, result = 12.039062
i = 146, result = 12.082031
i = 147, result = 12.121094
i = 148, result = 12.164062
i = 149, result = 12.203125
i = 150, result = 12.246094
i = 151, result = 12.285156
i = 152, result = 12.328125
i = 153, result = 12.367188
i = 154, result = 12.406250
i = 155, result = 12.449219
i = 156, result = 12.488281
i = 157, result = 12.527344
i = 158, result = 12.566406
i = 159, result = 12.609375
i = 160, result = 12.648438
i = 161, result = 12.687500
i = 162, result = 12.726562
i = 163, result = 12.765625
i = 164, result = 12.804688
i = 165, result = 12.843750
i = 166, result = 12.882812
i = 167, result = 12.921875
i = 168, result = 12.960938
i = 169, result = 13.000000
i = 170, result = 13.035156
i = 171, result = 13.074219
i = 172, result = 13.113281
i = 173, result = 13.152344
i = 174, result = 13.187500
i = 175, result = 13.226562
i = 176, result = 13.265625
i = 177, result = 13.300781
i = 178, result = 13.339844
i = 179, result = 13.378906
i = 180, result = 13.414062
i = 181, result = 13.453125
i = 182, result = 13.488281
i = 183, result = 13.527344
i = 184, result = 13.562500
i = 185, result = 13.597656
i = 186, result = 13.636719
i = 187, result = 13.671875
i = 188, result = 13.710938
i = 189, result = 13.746094
i = 190, result = 13.781250
i = 191, result = 13.816406
i = 192, result = 13.855469
i = 193, result = 13.890625
i = 194, result = 13.925781
i = 195, result = 13.960938
i = 196, result = 14.000000
i = 197, result = 14.035156
i = 198, result = 14.070312
i = 199, result = 14.105469
i = 200, result = 14.140625
i = 201, result = 14.175781
i = 202, result = 14.210938
i = 203, result = 14.246094
i = 204, result = 14.281250
i = 205, result = 14.316406
i = 206, result = 14.351562
i = 207, result = 14.386719
i = 208, result = 14.421875
i = 209, result = 14.453125
i = 210, result = 14.488281
i = 211, result = 14.523438
i = 212, result = 14.558594
i = 213, result = 14.593750
i = 214, result = 14.625000
i = 215, result = 14.660156
i = 216, result = 14.695312
i = 217, result = 14.730469
i = 218, result = 14.761719
i = 219, result = 14.796875
i = 220, result = 14.832031
i = 221, result = 14.863281
i = 222, result = 14.898438
i = 223, result = 14.929688
i = 224, result = 14.964844
i = 225, result = 15.000000
i = 226, result = 15.031250
i = 227, result = 15.066406
i = 228, result = 15.097656
i = 229, result = 15.128906
i = 230, result = 15.164062
i = 231, result = 15.195312
i = 232, result = 15.230469
i = 233, result = 15.261719
i = 234, result = 15.296875
i = 235, result = 15.328125
i = 236, result = 15.359375
i = 237, result = 15.394531
i = 238, result = 15.425781
i = 239, result = 15.457031
i = 240, result = 15.488281
i = 241, result = 15.523438
i = 242, result = 15.554688
i = 243, result = 15.585938
i = 244, result = 15.617188
i = 245, result = 15.652344
i = 246, result = 15.683594
i = 247, result = 15.714844
i = 248, result = 15.746094
i = 249, result = 15.777344
i = 250, result = 15.808594
i = 251, result = 15.839844
i = 252, result = 15.871094
i = 253, result = 15.902344
i = 254, result = 15.933594
i = 255, result = 15.964844


  1. 2022年02月12日 05:33 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する9(modefilter 編4)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する8(modefilter 編3)”の続き。

Vitis Vision Library L1 にすでにある run_hls.tcl を少し改造して Vitis HLS 2021.2 のプロジェクトを生成するということで、前回は、modefilter の C/RTL 協調シミュレーション、Export RTL、Implementation を行った。今回は、シミュレーション用の画像を 800 x 600 ピクセルのノイズ付加した画像に切り替えて、ノイズ除去性能を確認する。その際に、HEIGHT と WIDTH (画像の最大値)を HD 解像度に設定して実際に使用できる IP にしてみよう。

使用する画像は、メディアン・フィルタに時に使用したノイズ付加画像の test2.jpg を使用する。
ただし画像のサイズは 800 x 600 ピクセルとした。
Vitis_Vision2_218_220211.jpg

この test2.jpg を xf_mode_filter_axis ディレクトリにコピーした。
Vitis_Vision2_209_220210.png

ますは、xf_modefilter_config.h の HEIGHT を 1920 に WIDTH を 1080 に変更した。
Vitis_Vision2_210_220210.png

Vitis HLS 2021.2 の Project メニューから Project Settings... を選択した。
Project Settings (modefilter.prj) ダイアログが開く。
左のウインドウで Simulation をクリックする。
Input Arguments に

/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_mode_filter_axis/test2.jpg

を設定した。
Vitis_Vision2_211_220210.png

C シミュレーションを行った。
Vitis_Vision2_212_220210.png

出力された out_img.jpg と入力画像の in_img.jpg を示す。
3 x 3 の mode filter では多少 1 x 1 のランダム・ノイズが取れているが、メディアン・フィルタよりはノイズが取れていないようだ。
Vitis_Vision2_213_220210.jpg

C コードの合成を行った。結果を示す。
Vitis_Vision2_214_220210.png

C/RTL 協調シミュレーションでは、やはり、Input Arguments に

/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_mode_filter_axis/test2.jpg

を設定した。
Dump Trace は port でやってみたが、なかなか終わらなかったので、none に設定した。
Vitis_Vision2_215_220210.png

C/RTL 協調シミュレーションの結果を示す。
Vitis_Vision2_215_220210.png

レイテンシは 490017 クロックなので、490017 / 480000 ≒ 1.02 クロック / ピクセルだった。

Export RTL を行った。

Implementation を行った。
前回より、LUT が 57 個、FF が 94 個、BRAM が 6 個増えていた。
CP achieved post-implementation は 7.004 ns だった。前回より良くなっている。
Vitis_Vision2_217_220210.png
  1. 2022年02月11日 05:29 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する8(modefilter 編3)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する7(modefilter 編2)”の続き。

Vitis Vision Library L1 にすでにある run_hls.tcl を少し改造して Vitis HLS 2021.2 のプロジェクトを生成するということで、前回は、modefilter のC シミュレーション、C コードの合成を行った。今回は、C/RTL 協調シミュレーション、Export RTL、Implementation を行った。

C/RTL 協調シミュレーションを行う。
Co-Simulation Dialog では、Input Argumets に /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/data/128x128.png を設定した。
Dump Trace を port に設定した。
Vitis_Vision2_203_220209.png

C/RTL 協調シミュレーションの結果を示す。
Vitis_Vision2_204_220209.png

128 x 128 ピクセル = 16384 ピクセルで、レイテンシは 18449 クロックなので、約 1.13 クロック / ピクセルとなった。

C/RTL 協調シミュレーションの全体波形を示す。
Vitis_Vision2_205_220209.png

1 行分を拡大した。
Vitis_Vision2_206_220209.png

Export RTL を行った。
xf_mode_filter_axis/modefilter.prj/sol1/export.zip が出力されていた。
Vitis_Vision2_207_220209.png

Implementation を行った。
CP achieved post-implementation は 7.286 ns と良さそうだ。
Vitis_Vision2_208_220209.png
  1. 2022年02月10日 04:55 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する7(modefilter 編2)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する6(modefilter 編1)”の続き。

Vitis Vision Library L1 にすでにある run_hls.tcl を少し改造して Vitis HLS 2021.2 のプロジェクトを生成するということで、前回は、Vitis Vision Library のユーザーズ・マニュアルにある Getting Started with HLS を使った方法はうまく行かなかったので、run_hls.tcl を書き換えることにした。そして、ソースコード・ファイルやテストベンチ・ファイル、ヘッダ・ファイルも AXI4-Stream 入出力に変更した。Vitis HLS 2021.2 の xf_mode_filter_axis プロジェクトを作成することができた。今回は、C シミュレーション、C コードの合成を行った。

Vitis HLS 2021.2 の xf_mode_filter_axis プロジェクトを示す。このプロジェクトは ZYBO Z7-20 用だ。
Vitis_Vision2_193_220208.png

すでに C シミュレーションはやってあるのだが、GUI 上でやってみた。
Vitis_Vision2_194_220208.png

xf_mode_filter_axis/modefilter.prj/sol1/csim/build ディレクトリを見た。
Vitis_Vision2_196_220208.png

元画像の in_img2.jpg とソースコードの出力の out_jmg.jpg を比べてみた。
Vitis_Vision2_195_220208.png

試しに build/xf_config_params.h の WINDOW_SIZE を 5 から 3 に変更した。
Vitis_Vision2_197_220208.png

C シミュレーションをやり直して、成功した。
もう一度、xf_mode_filter_axis/modefilter.prj/sol1/csim/build ディレクトリの元画像の in_img2.jpg とソースコードの出力の out_jmg.jpg を比べてみた。
Vitis_Vision2_198_220209.png

こちらのほうが、元画像からの差異は少ない。こっちでやってみることにした。それに、C コードの合成時のリソース使用率も当然ながら低い。

C コードの合成を行った。
結果を示す。
Vitis_Vision2_199_220209.png
Vitis_Vision2_200_220209.png
Vitis_Vision2_201_220209.png
Vitis_Vision2_202_220209.png
  1. 2022年02月09日 04:47 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する6(modefilter 編1)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する5(fast 編3)”の続き。

前回の fast 編では、TCL スクリプトを自分で生成したが、今回は、Vitis Vision Library L1 にすでにある run_hls.tcl を少し改造して Vitis HLS 2021.2 のプロジェクトを生成してみよう。少ししか改造しなくてプロジェクトを生成できそうだ。Vitis Vision Library のユーザーズ・マニュアルにある Getting Started with HLS を使った方法はうまく行かなかったので、run_hls.tcl を書き換えることにした。そして、ソースコード・ファイルやテストベンチ・ファイル、ヘッダ・ファイルも AXI4-Stream 入出力に変更した。

今回は、modefilter を題材にやってみよう。

modefilter をコピーした。
Vitis_Vision2_189_220207.png

run_hls.tcl を書き換えた。

source settings.tcl

の行をコメントアウトして、XPART、 XF_PROJ_ROOT、 OPENCV_INCLUDE、 OPENCV_LIB、 CSIM の環境変数を追加した。Vitis HLS のプロジェクトができれば文句ないので、CSIM だけ 1 にした。後、CLKP を 3.3 ns から 10 ns に変更した。build ディレクトリへのインクルード・パスと合成時のトップ関数の名前も修正した。
run_hls.tcl を示す。

#
# Copyright 2019 Xilinx, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# 2022/02/07 : modified by marsee

#source settings.tcl

set PROJ "modefilter.prj"
set SOLN "sol1"
set XPART "xc7z020-clg400-1"
set XF_PROJ_ROOT "/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision"
set OPENCV_INCLUDE "/usr/local/include"
set OPENCV_LIB "/usr/local/lib"
set CSIM "1"
set BUILD_DIR "/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_mode_filter_axis/build"
if {![info exists CLKP]} {
  set CLKP 10
}

open_project -reset $PROJ

add_files "xf_modefilter_accel.cpp" -cflags "-I${XF_PROJ_ROOT}/L1/include -I ${BUILD_DIR} -I ./ -D__SDSVHLS__ -std=c++0x" -csimflags "-I${XF_PROJ_ROOT}/L1/include -I ${BUILD_DIR} -I ./ -D__SDSVHLS__ -std=c++0x"
add_files -tb "xf_modefilter_tb.cpp" -cflags "-I${OPENCV_INCLUDE} -I${XF_PROJ_ROOT}/L1/include -I ${XF_PROJ_ROOT}/L1/examples/modefilter/build -I ./ -D__SDSVHLS__ -std=c++0x" -csimflags "-I${XF_PROJ_ROOT}/L1/include -I ${XF_PROJ_ROOT}/L1/examples/modefilter/build -I ./ -D__SDSVHLS__ -std=c++0x"
set_top modefilter_axis

open_solution -reset $SOLN

set_part $XPART
create_clock -period $CLKP

if {$CSIM == 1} {
  csim_design -ldflags "-L ${OPENCV_LIB} -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_flann -lopencv_features2d" -argv " ${XF_PROJ_ROOT}/data/128x128.png "
}

if {$CSYNTH == 1} {
  csynth_design
}

if {$COSIM == 1} {
  cosim_design -ldflags "-L ${OPENCV_LIB} -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_flann -lopencv_features2d" -argv " ${XF_PROJ_ROOT}/data/128x128.png "
}

if {$VIVADO_SYN == 1} {
  export_design -flow syn -rtl verilog
}

if {$VIVADO_IMPL == 1} {
  export_design -flow impl -rtl verilog
}

exit


修正した xf_mode_filter_axis.h を示す。

/*
 * Copyright 2020 Xilinx, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// 2022/02/07 :  modified by marsee

#ifndef _XF_MODE_FILTER_CONFIG_H_
#define _XF_MODE_FILTER_CONFIG_H_

#include <stdint.h>
#include "hls_stream.h"
#include "ap_int.h"
#include "common/xf_common.hpp"
#include "common/xf_utility.hpp"
#include "ap_axi_sdata.h"
#include "common/xf_infra.hpp"
#include "common/xf_axi_io.hpp"
#include "xf_config_params.h"

#include "imgproc/xf_modefilter.hpp"

#define HEIGHT 128
#define WIDTH 128

// Set the optimization type:
#if NO == 1
#define NPC1 XF_NPPC1
#define PTR_WIDTH 128
#else

#if GRAY
#define NPC1 XF_NPPC8
#else
#define NPC1 XF_NPPC1
#endif

#define PTR_WIDTH 128
#endif

// Set the pixel depth:
#if GRAY
#define TYPE XF_8UC1
#define STREAMW 8
#else
#define TYPE XF_8UC3
#define STREAMW 32
#endif
typedef hls::stream<ap_axiu<STREAMW,1,1,1> > AXI_STREAM;

void modefilter_axis(AXI_STREAM& _src, int32_t rows, int32_t cols, AXI_STREAM& _dst);

#endif // end of _XF_MEDIAN_BLUR_CONFIG_H_


修正した xf_modefilter_accel.cpp を示す。

/*
 * Copyright 2020 Xilinx, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// 2022/02/07 : Change to AXI4-Stream input / output. by marsee

#include "xf_modefilter_config.h"

void modefilter_axis(AXI_STREAM& _src, int32_t rows, int32_t cols, AXI_STREAM& _dst) {
// clang-format off
    #pragma HLS INTERFACE mode=axis register_mode=both port=_src register
    #pragma HLS INTERFACE mode=axis register_mode=both port=_dst register
    #pragma HLS INTERFACE s_axilite  port=rows                        bundle=control
    #pragma HLS INTERFACE s_axilite  port=cols                        bundle=control
    #pragma HLS INTERFACE s_axilite  port=return                      bundle=control
    // clang-format on

    xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPC1> imgInput(rows, cols);
    xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPC1> imgOutput(rows, cols);

// clang-format off
    #pragma HLS DATAFLOW
    // clang-format on

    xf::cv::AXIvideo2xfMat<STREAMW, TYPE>(_src, imgInput);

    // Run xfOpenCV kernel:
    xf::cv::modefilter<WINDOW_SIZE, XF_BORDER_REPLICATE, TYPE, HEIGHT, WIDTH, NPC1>(imgInput, imgOutput);

    xf::cv::xfMat2AXIvideo<STREAMW, TYPE>(imgOutput, _dst);

    return;
} // End of kernel


修正した xf_modefilter_tb.cpp を示す。

/*
 * Copyright 2020 Xilinx, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// 2022/02/07 : Change to AXI4-Stream input / output. by marsee

#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "common/xf_headers.hpp"
#include "common/xf_axi.hpp"
#include "common/xf_sw_utils.hpp"
#include <stdio.h>
#include <stdlib.h>
#include "xf_modefilter_config.h"

using namespace std;
cv::RNG rng(12345);
void mode_filter_rgb(cv::Mat _src, cv::Mat _dst, int win_sz) {
    int win_sz_sq = win_sz * win_sz;
    int window[win_sz_sq];
    cv::Scalar value(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
    cv::Mat _src_border;

    _src_border.create(_src.rows + win_sz - 1, _src.cols + win_sz - 1, CV_8UC3);

    int border = floor(win_sz / 2);

    cv::copyMakeBorder(_src, _src_border, border, border, border, border, cv::BORDER_REPLICATE, value);

    for (int k = 0; k < 3; k++) {
        for (int i = 0; i < _src.rows; i++) {
            for (int j = 0; j < _src.cols; j++) {
                for (int p = 0; p < win_sz; p++) {
                    for (int q = 0; q < win_sz; q++) {
                        // cout<<p<<" "<<q<<" "<<endl;
                        window[q + p * win_sz] = _src_border.at<cv::Vec3b>(i + p, j + q)[k];
                    }
                }

                int max_count = 0, idx = 0;

                for (int m = 0; m < win_sz_sq; m++) {
                    int count = 1;
                    for (int n = m + 1; n < win_sz_sq - 1; n++) {
                        if (window[m] == window[n]) count++;
                    }
                    if (count > max_count) {
                        max_count = count;
                    }
                }

                for (int m = 0; m < win_sz_sq; m++) {
                    int count = 1;
                    for (int n = m + 1; n < win_sz_sq - 1; n++) {
                        if (window[m] == window[n]) count++;
                    }

                    if (count == max_count) {
                        idx = m;
                    }
                }

                _dst.at<cv::Vec3b>(i, j)[k] = window[idx];
            }
        }
    }
    return;
}
void mode_filter_gray(cv::Mat _src, cv::Mat _dst, int win_sz) {
    int win_sz_sq = win_sz * win_sz;
    int window[win_sz_sq];
    int i_1_index = 0, j_1_index = 0, i_plus_index = 0, j_plus_index = 0;

    cv::Mat _src_border;

    _src_border.create(_src.rows + win_sz - 1, _src.cols + win_sz - 1, CV_8UC1);

    int border = floor(win_sz / 2);

    cv::copyMakeBorder(_src, _src_border, border, border, border, border, cv::BORDER_REPLICATE);

    for (int i = 0; i < _src.rows; i++) {
        for (int j = 0; j < _src.cols; j++) {
            for (int p = 0; p < win_sz; p++) {
                for (int q = 0; q < win_sz; q++) {
                    window[q + p * win_sz] = _src_border.at<uchar>(i + p, j + q);
                }
            }
            int max_count = 0, idx = 0;

            for (int i = 0; i < win_sz_sq; i++) {
                int count = 1;
                for (int j = i + 1; j < win_sz_sq - 1; j++) {
                    if (window[i] == window[j]) count++;
                }
                if (count > max_count) {
                    max_count = count;
                }
            }

            for (int i = 0; i < win_sz_sq; i++) {
                int count = 1;
                for (int j = i + 1; j < win_sz_sq - 1; j++) {
                    if (window[i] == window[j]) count++;
                }

                if (count == max_count) {
                    idx = i;
                }
            }

            _dst.at<uchar>(i, j) = window[idx];
        }
    }

    return;
}

int main(int argc, char** argv) {
    if (argc != 2) {
        fprintf(stderr, "Usage: <executable> <input image path>\n");
        return -1;
    }

    cv::Mat in_img, out_img, ocv_ref, ocv_ref1, diff;

//  Reading in the image:
#if GRAY
    cout << "gray:";
    in_img = cv::imread(argv[1], 0); // reading in the gray image
    imwrite("in_img1.jpg", in_img);
#else
    in_img = cv::imread(argv[1], 1); // reading in the color image
    imwrite("in_img2.jpg", in_img);
#endif

    if (!in_img.data) {
        return -1;
    }

// imwrite("in_img.jpg", in_img);

// create memory for output image
#if GRAY
    cout << "gray:";
    ocv_ref.create(in_img.rows, in_img.cols, CV_8UC1);
    ocv_ref1.create(in_img.rows, in_img.cols, CV_8UC1);
    out_img.create(in_img.rows, in_img.cols, CV_8UC1); // create memory for output image
    diff.create(in_img.rows, in_img.cols, CV_8UC1);
#else
    ocv_ref.create(in_img.rows, in_img.cols, CV_8UC3);
    ocv_ref1.create(in_img.rows, in_img.cols, CV_8UC3);
    out_img.create(in_img.rows, in_img.cols, CV_8UC3); // create memory for output image
    diff.create(in_img.rows, in_img.cols, CV_8UC3);
#endif

#if GRAY
    cout << "gray:";
    mode_filter_gray(in_img, ocv_ref, WINDOW_SIZE);
#else
    cout << "rgb";
    mode_filter_rgb(in_img, ocv_ref, WINDOW_SIZE);
#endif

    //modefilter_accel((ap_uint<PTR_WIDTH>*)in_img.data, in_img.rows, in_img.cols, (ap_uint<PTR_WIDTH>*)out_img.data);
    AXI_STREAM _src,_dst;
    xf::cv::cvMat2AXIvideoxf<NPC1, STREAMW>(in_img, _src);
    modefilter_axis(_src, in_img.rows, in_img.cols, _dst);
    xf::cv::AXIvideo2cvMatxf<NPC1, STREAMW>(_dst, out_img);

    imwrite("out_img.jpg", out_img);
    imwrite("ocv_ref.jpg", ocv_ref);
    // imwrite("ocv_ref.jpg", ocv_ref1);

    cv::absdiff(ocv_ref, out_img, diff);

    imwrite("diff.jpg", diff);
    absdiff(ocv_ref, out_img, diff);
    // Save the difference image for debugging purpose:
    cv::imwrite("error.png", diff);
    float err_per;
    xf::cv::analyzeDiff(diff, 0, err_per);

    if (err_per > 0.0f) {
        fprintf(stderr, "ERROR: Test Failed.\n ");
        return 1;
    }
    std::cout << "Test Passed " << std::endl;

    return 0;
}


run_hls.tcl を起動した。
vitis_hls -f run_hls.tcl
Vitis_Vision2_190_220207.png
Vitis_Vision2_191_220207.png

C シミュレーションは通った。
  1. 2022年02月08日 04:10 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する5(fast 編3)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する4(fast 編2)”の続き。

TCL スクリプトで Vitis HLS 2021.2 のプロジェクトを作成して、Vitis Vision Library L1 をやってみることにしたということで、前回は、xf_fast_axis_home.tcl を起動したら、C シミュレーションがエラーになった。原因は、OpenCV の cv::FAST() が undefined reference だったので、この行と関連する行をコメントアウトした。すると、C シミュレーションが成功した。今回は、C コードの合成、C/RTL 協調シミュレーション、Export RTL 、Implementation を行った。

C/RTL 協調シミュレーションを行った。
最大画像のピクセル数が 1920 x 1080 = 2073600 ピクセルだが、レイテンシは 4173698 クロックだった。これだとクロック / ピクセルは 2 を超えてしまうが、後の C/RTL 協調シミュレーションを見ると、そんなことはないようだ。バグなのか?
Vitis_Vision2_174_220206.png
Vitis_Vision2_175_220206.png
Vitis_Vision2_176_220206.png
Vitis_Vision2_177_220206.png

C/RTL 協調シミュレーションを行った。
Co-simulation Dialog で、Input Arguments に /media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis/test2.jpg を設定し、Dump Trace を port に設定した。
Vitis_Vision2_178_220206.png

結果を示す。
400 x 300 = 120000 ピクセルに対して、128433 クロックなので、約 1.07 クロック / ピクセルとなった。
Vitis_Vision2_179_220206.png

C/RTL 協調シミュレーションの全体波形を示す。
Vitis_Vision2_182_220206.png

拡大した。
Vitis_Vision2_183_220206.png

p_dst_TVALID も p_src_TREADY もいい感じだ。

更に拡大した。
p_src_TDATA も p_dst_TDATA も 8 ビットで、p_dst_TDATA はコーナー発見で 0x00 から 0xff になるのが分かる。
Vitis_Vision2_184_220206.png

Export RTL を行った。
xf_fast_axis/solution1/impl ディレクトリの export.zip が生成された。
Vitis_Vision2_180_220206.png

Implementation を行った。
CP achieved post-implementation が 9.747 ns で危ない感じだ。
Vitis_Vision2_181_220206.png

もう少し CP achieved post-implementation を改善したい。
solution2 を作成して、Uncertainty を 4 ns に設定した。
Vitis_Vision2_185_220206.png

C コードの合成を行った。
Vitis_Vision2_186_220206.png

Implementation を行った。
Vitis_Vision2_187_220206.png

CP achieved post-implementation は 8.763 ns だった。良さそうだ。

solution1 と solution2 を比較した。
Vitis_Vision2_188_220206.png
  1. 2022年02月06日 06:00 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する4(fast 編2)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する3(fast 編1)”の続き。

TCL スクリプトで Vitis HLS 2021.2 のプロジェクトを作成して、Vitis Vision Library L1 をやってみることにしたということで、前回は、fast をやってみることにした。コードを貼って、xf_fast_axis ディレクトリを作成し、フィルを入れた。今回は、xf_fast_axis_home.tcl を起動したら、C シミュレーションがエラーになった。原因は、OpenCV の cv::FAST() が undefined reference だったことだ。

ターミナルで、xf_fast_axis_home.tcl を起動した。
vitis_hls -f xf_fast_axis_home.tcl
Vitis_Vision2_167_220205.png
Vitis_Vision2_168_220205.png

ログを貼っておく。

(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis$ vitis_hls -f xf_fast_axis_home.tcl 

****** Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2021.2 (64-bit)
  **** SW Build 3367213 on Tue Oct 19 02:47:39 MDT 2021
  **** IP Build 3369179 on Thu Oct 21 08:25:16 MDT 2021
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.

source /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/scripts/vitis_hls/hls.tcl -notrace
INFO: Applying HLS Y2K22 patch v1.2 for IP revision
INFO: [HLS 200-10] Running '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/bin/unwrapped/lnx64.o/vitis_hls'
INFO: [HLS 200-10] For user 'masaaki' on host 'masaaki-H110M4-M01' (Linux_x86_64 version 4.15.0-166-generic) on Sat Feb 05 03:21:48 JST 2022
INFO: [HLS 200-10] On os Ubuntu 18.04.6 LTS
INFO: [HLS 200-10] In directory '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis'
WARNING: [HLS 200-40] Environment variable 'C_INCLUDE_PATH' is set to :/usr/local/cuda/include.
Sourcing Tcl script 'xf_fast_axis_home.tcl'
INFO: [HLS 200-1510] Running: open_project xf_fast_axis 
INFO: [HLS 200-10] Creating and opening project '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis/xf_fast_axis'.
INFO: [HLS 200-1510] Running: set_top fast_accel_axis 
INFO: [HLS 200-1510] Running: add_files xf_fast_axis.cpp -cflags -I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x 
INFO: [HLS 200-10] Adding design file 'xf_fast_axis.cpp' to the project
INFO: [HLS 200-1510] Running: add_files -tb xf_fast_axis_tb.cpp -cflags -I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -I/usr/local/include -std=c++0x -Wno-unknown-pragmas -csimflags -Wno-unknown-pragmas 
INFO: [HLS 200-10] Adding test bench file 'xf_fast_axis_tb.cpp' to the project
INFO: [HLS 200-1510] Running: open_solution solution1 -flow_target vivado 
INFO: [HLS 200-10] Creating and opening solution '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis/xf_fast_axis/solution1'.
INFO: [HLS 200-1505] Using flow_target 'vivado'
Resolution: For help on HLS 200-1505 see www.xilinx.com/cgi-bin/docs/rdoc?v=2021.2;t=hls+guidance;d=200-1505.html
INFO: [HLS 200-1510] Running: set_part xc7z020-clg400-1 
INFO: [HLS 200-1611] Setting target device to 'xc7z020-clg400-1'
INFO: [HLS 200-1510] Running: create_clock -period 10 -name default 
INFO: [SYN 201-201] Setting up clock 'default' with a period of 10ns.
INFO: [HLS 200-1510] Running: config_export -format ip_catalog -rtl verilog -vivado_clock 10 
INFO: [HLS 200-1510] Running: csim_design -ldflags -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -argv /media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis/test2.jpg 
INFO: [SIM 211-2] *************** CSIM start ***************
INFO: [SIM 211-4] CSIM will launch GCC as the compiler.
   Compiling ../../../../xf_fast_axis_tb.cpp in debug mode
   Compiling ../../../../xf_fast_axis.cpp in debug mode
   Generating csim.exe
Makefile.rules:392: recipe for target 'csim.exe' failed
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_structs.hpp:27:0,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_common.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_sw_utils.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_headers.hpp:28,
                 from ../../../../xf_fast_axis_tb.cpp:24:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:97:45: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <typename T> constexpr std::size_t bitwidth = sizeof(T) * CHAR_BIT;
                                             ^~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:99:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_int<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:100:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_uint<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:102:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_fixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:104:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_ufixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:107:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bytewidth = (bitwidth<T> + CHAR_BIT - 1) / CHAR_BIT;
                       ^~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi.hpp:23:0,
                 from ../../../../xf_fast_axis_tb.cpp:25:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/utils/x_hls_utils.h:246:10: warning: ‘hls_preserve’ attribute directive ignored [-Wattributes]
 T reg(T d)
          ^
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_structs.hpp:27:0,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_common.hpp:20,
                 from ../../../../xf_fast_axis.h:12,
                 from ../../../../xf_fast_axis.cpp:6:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:97:45: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <typename T> constexpr std::size_t bitwidth = sizeof(T) * CHAR_BIT;
                                             ^~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:99:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_int<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:100:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_uint<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:102:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_fixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:104:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_ufixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:107:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bytewidth = (bitwidth<T> + CHAR_BIT - 1) / CHAR_BIT;
                       ^~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi_io.hpp:19:0,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_infra.hpp:29,
                 from ../../../../xf_fast_axis.h:15,
                 from ../../../../xf_fast_axis.cpp:6:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/utils/x_hls_utils.h:246:10: warning: ‘hls_preserve’ attribute directive ignored [-Wattributes]
 T reg(T d)
          ^
obj/xf_fast_axis_tb.o: In function `main':
/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis/xf_fast_axis/solution1/csim/build/../../../../xf_fast_axis_tb.cpp:51: undefined reference to `cv::FAST(cv::_InputArray const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&, int, bool)'
collect2: error: ld returned 1 exit status
make: *** [csim.exe] Error 1
ERROR: [SIM 211-100] 'csim_design' failed: compilation error(s).
INFO: [SIM 211-3] *************** CSIM finish ***************
INFO: [HLS 200-111] Finished Command csim_design CPU user time: 7.47 seconds. CPU system time: 0.5 seconds. Elapsed time: 6.79 seconds; current allocated memory: -937.109 MB.
4
    while executing
"source xf_fast_axis_home.tcl"
    ("uplevel" body line 1)
    invoked from within
"uplevel \#0 [list source $arg] "

INFO: [HLS 200-112] Total CPU user time: 9.37 seconds. Total CPU system time: 0.94 seconds. Total elapsed time: 15.71 seconds; peak allocated memory: 211.121 MB.
INFO: [Common 17-206] Exiting vitis_hls at Sat Feb  5 03:22:04 2022...
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis$ 


エラーは、

xf_fast_axis_tb.cpp:51: undefined reference to `cv::FAST(cv::_InputArray const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&, int, bool)'

だった。
いろいろと cv::FAST() をいじってみたが、エラーが解消されない。
それじゃということで、OpenCV の関数なので、ハードウェアには関係ないので、コメントアウトすることにした。それに関連する行もコメントアウトした。新しい xf_fast_axis_tb.cpp を示す。

/*
 * Copyright 2019 Xilinx, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// xf_fast_axis_tb.cpp
// 2022/02/03 by marsee
// fast_accel を AXI4-Stream 入出力に変更
// 2022/02/04 : cv::FASTと関連する文ををコメントアウト、コンパイルが通らなかったため。。。orz

#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/features2d.hpp"
#include "common/xf_headers.hpp"
#include "common/xf_axi.hpp"
#include "common/xf_sw_utils.hpp"
#include "xf_fast_axis.h"

void fast_accel_axis(AXI_STREAM& _src, AXI_STREAM& _dst, unsigned char threshold,
    int32_t row, int32_t cols);

int main(int argc, char** argv) {
    cv::Mat in_img, out_img, out_img_ocv, out_hls;
    cv::Mat in_gray;

    in_img = cv::imread(argv[1], 1); // reading in the color image

    if (!in_img.data) {
        fprintf(stderr, "Failed to load the image ... %s\n ", argv[1]);
        return -1;
    }

    std::vector<cv::KeyPoint> keypoints;

    uchar_t threshold = 20; // threshold

    cvtColor(in_img, in_gray, cv::COLOR_BGR2GRAY);

    // OPenCV reference function

    //cv::FAST(in_gray, keypoints, threshold, true, (cv::FastFeatureDetector::DetectorType)0);

    unsigned short imgwidth = in_img.cols;
    unsigned short imgheight = in_img.rows;

    out_hls.create(in_gray.rows, in_gray.cols, CV_8U);

    // Call the top function
    AXI_STREAM _src,_dst;
    xf::cv::cvMat2AXIvideoxf<NPxPC, STREAMW>(in_gray, _src);
    fast_accel_axis(_src, _dst, threshold, imgheight, imgwidth);
    xf::cv::AXIvideo2cvMatxf<NPxPC, STREAMW>(_dst, out_hls);

    std::vector<cv::Point> hls_points;
    std::vector<cv::Point> ocv_points;
    std::vector<cv::Point> common_points;
    std::vector<cv::Point> noncommon_points;

    FILE *fp, *fp1;
    fp = fopen("ocvpoints.txt", "w");
    fp1 = fopen("hlspoints.txt", "w");

    int nsize = keypoints.size();

    printf("ocvpoints:%d=\n", nsize);

    for (int i = 0; i < nsize; i++) {
        int x = keypoints[i].pt.x;
        int y = keypoints[i].pt.y;
        ocv_points.push_back(cv::Point(x, y));
        // fprintf(fp, "x = %d, y = %d\n", x, y);
    }
    // fclose(fp);

    out_img_ocv = in_img.clone();

    int ocv_x = 0, ocv_y = 0;

    for (int cnt1 = 0; cnt1 < keypoints.size(); cnt1++) {
        ocv_x = keypoints[cnt1].pt.x;
        ocv_y = keypoints[cnt1].pt.y;
        cv::circle(out_img_ocv, cv::Point(ocv_x, ocv_y), 5, cv::Scalar(0, 0, 255), 2, 8, 0);
    }
    cv::imwrite("output_ocv.png", out_img_ocv);
    //
    out_img = in_gray.clone();

    for (int j = 0; j < out_hls.rows; j++) {
        for (int i = 0; i < out_hls.cols; i++) {
            unsigned char value = out_hls.at<unsigned char>(j, i);
            if (value != 0) {
                short int y, x;
                y = j;
                x = i;

                cv::Point tmp;
                tmp.x = i;
                tmp.y = j;

                hls_points.push_back(tmp);
                if (j > 0) cv::circle(out_img, cv::Point(x, y), 5, cv::Scalar(0, 0, 255, 255), 2, 8, 0);
            }
        }
    }

    int nsize1 = hls_points.size();
    printf("hls_points.size() = %d\n", hls_points.size());

    int Nocv = ocv_points.size();
    int Nhls = hls_points.size();

    for (int r = 0; r < nsize1; r++) {
        int a, b;
        a = (int)hls_points[r].x;
        b = (int)hls_points[r].y;
        fprintf(fp1, "x = %d, y = %d\n", a, b);
    }
    fclose(fp1);

    for (int j = 0; j < Nocv; j++) {
        for (int k = 0; k < Nhls; k++) {
            if ((ocv_points[j].x == ((hls_points[k].x))) && (ocv_points[j].y == ((hls_points[k].y)))) {
                common_points.push_back(ocv_points[j]);
            }
        }
    }

    FILE* fpt3;
    fpt3 = fopen("common.txt", "w");

    for (unsigned int p = 0; p < common_points.size(); p++) {
        fprintf(fpt3, "x = %d, y = %d\n", common_points[p].x, common_points[p].y);
    }

    fclose(fpt3);

    cv::imwrite("output_hls.png", out_img);

    // Results verification:
    float persuccess, perloss, pergain;

    int totalocv = ocv_points.size();
    int totalhls = hls_points.size();
    int ncommon = common_points.size();

    persuccess = (((float)ncommon / totalhls) * 100);
    perloss = (((float)(totalocv - ncommon) / totalocv) * 100);
    pergain = (((float)(totalhls - ncommon) / totalhls) * 100);

    std::cout << "INFO: Verification results:" << std::endl;
    std::cout << "\tCommon = " << ncommon << std::endl;
    std::cout << "\tSuccess = " << persuccess << std::endl;
    std::cout << "\tLoss = " << perloss << std::endl;
    std::cout << "\tGain = " << pergain << std::endl;

    /*if (persuccess < 80) {
        fprintf(stderr, "ERROR: Test Failed.\n ");
        return EXIT_FAILURE;
    } */

    return 0;
}


Vitis HLS 2021.2 の GUI を立ち上げた。
Vitis_Vision2_169_220205.png

テストベンチ・ファイルを変更した。
C シミュレーションを実行したら、成功した。
Vitis_Vision2_170_220205.png

xf_fast_axis/solution1/csim/build ディレクトリに移動した。
Vitis_Vision2_171_220205.png

output_hls.png が生成されていた。
元画像を白黒にして、コーナーに丸を付けている。
Vitis_Vision2_172_220205.png

hlspoitns.txt を見ると、コーナーが座標で表されている。
Vitis_Vision2_173_220205.png
  1. 2022年02月05日 03:52 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する3(fast 編1)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する2(resize 編2)”の続き。

TCL スクリプトで Vitis HLS 2021.2 のプロジェクトを作成して、Vitis Vision Library L1 をやってみることにしたということで、前回は、AXI4-Stream 入出力版の resize の C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL、 Implementation を行った。今回は、fast をやってみることにした。コードを貼っておく。

まずは、Vitis HLS 2021.2 のプロジェクトを作成するための TCL スクリプトの xf_fast_axis_home.tcl を示す。

open_project xf_fast_axis
set_top fast_accel_axis
add_files xf_fast_axis.cpp -cflags "-I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x"
add_files -tb xf_fast_axis_tb.cpp -cflags "-I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -I/usr/local/include -std=c++0x -Wno-unknown-pragmas" -csimflags "-Wno-unknown-pragmas"
open_solution "solution1" -flow_target vivado
set_part {xc7z020-clg400-1}
create_clock -period 10 -name default
config_export -format ip_catalog -rtl verilog -vivado_clock 10
csim_design -ldflags {-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc} -argv {/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_fast_axis/test2.jpg}
exit


xf_fast_axis.h を示す。

// xf_fast_axis.h
// 2022/02/03 by marsee
// Vitis_Libraries/vision/L1/examples/fast/xf_fast_config.h, Vitis_Libraries/vision/L1/examples/fast/build/xf_config_params.h を引用
//

#ifndef _XF_FAST_CONFIG_H_
#define _XF_FAST_CONFIG_H_

#include <stdint.h>
#include "hls_stream.h"
#include "ap_int.h"
#include "common/xf_common.hpp"
#include "common/xf_utility.hpp"
#include "ap_axi_sdata.h"
#include "common/xf_infra.hpp"
#include "common/xf_axi_io.hpp"
#include "features/xf_fast.hpp"

#define RGB  0
#define GRAY 1

#define NPxPC XF_NPPC1

#if GRAY
#define TYPE XF_8UC1
#define CHANNELS 1
#define STREAMW 8
#else
#define TYPE XF_8UC3
#define CHANNELS 3
#define STREAMW 32
#endif
typedef hls::stream<ap_axiu<STREAMW,1,1,1> > AXI_STREAM;

#define NMS 1

#define WIDTH 1920
#define HEIGHT 1080

#define MAXCORNERS 1024

#endif


xf_fast_axis.cpp を示す。

// xf_fast_axis.cpp
// 2022/02/03 by marsee
// Vitis_Libraries/vision/L1/examples/fast/xf_fast_accel.cpp から引用した
// https://github.com/Xilinx/Vitis_Libraries/blob/master/vision/L1/examples/fast/xf_fast_accel.cpp

#include "xf_fast_axis.h"

void fast_accel_axis(AXI_STREAM& _src, AXI_STREAM& _dst, unsigned char threshold, 
    int32_t row, int32_t cols){
#pragma HLS INTERFACE mode=s_axilite port=threshold
#pragma HLS INTERFACE mode=s_axilite port=cols
#pragma HLS INTERFACE mode=s_axilite port=row
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=axis register_mode=both port=_src register
#pragma HLS INTERFACE mode=axis register_mode=both port=_dst register

    xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPxPC> img_in(row, cols);
    xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPxPC> img_out(row, cols);

#pragma HLS DATAFLOW

    xf::cv::AXIvideo2xfMat<STREAMW, TYPE>(_src, img_in);

    xf::cv::fast<NMS, TYPE, HEIGHT, WIDTH, NPxPC>(img_in, img_out, threshold);

    xf::cv::xfMat2AXIvideo<STREAMW, TYPE>(img_out, _dst);
}


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

/*
 * Copyright 2019 Xilinx, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 // xf_fast_axis_tb.cpp
 // 2022/02/03 : fast_accel を AXI4-Stream 入出力に変更 by marsee
 // 

#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "common/xf_headers.hpp"
#include "common/xf_axi.hpp"
#include "common/xf_sw_utils.hpp"
#include "xf_fast_axis.h"

void fast_accel_axis(AXI_STREAM& _src, AXI_STREAM& _dst, unsigned char threshold,
    int32_t row, int32_t cols);

int main(int argc, char** argv) {
    cv::Mat in_img, out_img, out_img_ocv, out_hls;
    cv::Mat in_gray;

    in_img = cv::imread(argv[1], 1); // reading in the color image

    if (!in_img.data) {
        fprintf(stderr, "Failed to load the image ... %s\n ", argv[1]);
        return -1;
    }

    std::vector<cv::KeyPoint> keypoints;

    uchar_t threshold = 20; // threshold

    cvtColor(in_img, in_gray, cv::COLOR_BGR2GRAY);

    // OPenCV reference function

    cv::FAST(in_gray, keypoints, threshold, NMS);

    unsigned short imgwidth = in_img.cols;
    unsigned short imgheight = in_img.rows;

    out_hls.create(in_gray.rows, in_gray.cols, CV_8U);

    // Call the top function
    AXI_STREAM _src,_dst;
    xf::cv::cvMat2AXIvideoxf<NPxPC, STREAMW>(in_gray, _src);
    fast_accel_axis(_src, _dst, threshold, imgheight, imgwidth);
    xf::cv::AXIvideo2cvMatxf<NPxPC, STREAMW>(_dst, out_hls);

    std::vector<cv::Point> hls_points;
    std::vector<cv::Point> ocv_points;
    std::vector<cv::Point> common_points;
    std::vector<cv::Point> noncommon_points;

    FILE *fp, *fp1;
    fp = fopen("ocvpoints.txt", "w");
    fp1 = fopen("hlspoints.txt", "w");

    int nsize = keypoints.size();

    printf("ocvpoints:%d=\n", nsize);

    for (int i = 0; i < nsize; i++) {
        int x = keypoints[i].pt.x;
        int y = keypoints[i].pt.y;
        ocv_points.push_back(cv::Point(x, y));
        // fprintf(fp, "x = %d, y = %d\n", x, y);
    }
    // fclose(fp);

    out_img_ocv = in_img.clone();

    int ocv_x = 0, ocv_y = 0;

    for (int cnt1 = 0; cnt1 < keypoints.size(); cnt1++) {
        ocv_x = keypoints[cnt1].pt.x;
        ocv_y = keypoints[cnt1].pt.y;
        cv::circle(out_img_ocv, cv::Point(ocv_x, ocv_y), 5, cv::Scalar(0, 0, 255), 2, 8, 0);
    }
    cv::imwrite("output_ocv.png", out_img_ocv);
    //
    out_img = in_gray.clone();

    for (int j = 0; j < out_hls.rows; j++) {
        for (int i = 0; i < out_hls.cols; i++) {
            unsigned char value = out_hls.at<unsigned char>(j, i);
            if (value != 0) {
                short int y, x;
                y = j;
                x = i;

                cv::Point tmp;
                tmp.x = i;
                tmp.y = j;

                hls_points.push_back(tmp);
                if (j > 0) cv::circle(out_img, cv::Point(x, y), 5, cv::Scalar(0, 0, 255, 255), 2, 8, 0);
            }
        }
    }

    int nsize1 = hls_points.size();

    int Nocv = ocv_points.size();
    int Nhls = hls_points.size();

    for (int r = 0; r < nsize1; r++) {
        int a, b;
        a = (int)hls_points[r].x;
        b = (int)hls_points[r].y;
        fprintf(fp1, "x = %d, y = %d\n", a, b);
    }
    fclose(fp1);

    for (int j = 0; j < Nocv; j++) {
        for (int k = 0; k < Nhls; k++) {
            if ((ocv_points[j].x == ((hls_points[k].x))) && (ocv_points[j].y == ((hls_points[k].y)))) {
                common_points.push_back(ocv_points[j]);
            }
        }
    }

    FILE* fpt3;
    fpt3 = fopen("common.txt", "w");

    for (unsigned int p = 0; p < common_points.size(); p++) {
        fprintf(fpt3, "x = %d, y = %d\n", common_points[p].x, common_points[p].y);
    }

    fclose(fpt3);

    cv::imwrite("output_hls.png", out_img);

    // Results verification:
    float persuccess, perloss, pergain;

    int totalocv = ocv_points.size();
    int totalhls = hls_points.size();
    int ncommon = common_points.size();

    persuccess = (((float)ncommon / totalhls) * 100);
    perloss = (((float)(totalocv - ncommon) / totalocv) * 100);
    pergain = (((float)(totalhls - ncommon) / totalhls) * 100);

    std::cout << "INFO: Verification results:" << std::endl;
    std::cout << "\tCommon = " << ncommon << std::endl;
    std::cout << "\tSuccess = " << persuccess << std::endl;
    std::cout << "\tLoss = " << perloss << std::endl;
    std::cout << "\tGain = " << pergain << std::endl;

    if (persuccess < 80) {
        fprintf(stderr, "ERROR: Test Failed.\n ");
        return EXIT_FAILURE;
    }

    return 0;
}


400 x 300 ピクセルの test2.jpg 画像を示す。
Vitis_Vision2_164_220202.png

xf_fast_axis ディレクトリを作成して、ファイルを置いておいた。
Vitis_Vision2_166_220204.png
  1. 2022年02月04日 04:27 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する2(resize 編2)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する1(resize 編1)”の続き。

Vitis HLS 2021.2 で Vitis Vision Library L1 のプロジェクトを作成すると、C シミュレーションの時に Vitis Vision Library L1 のインクルード・ファイルが参照できないということで、TCL スクリプトで Vitis HLS 2021.2 のプロジェクトを作成して、やってみることにした。ということで、前回は、コードを表示して、TCL スクリプトで Vitis HLS 2021.2 のプロジェクトを作成し、C シミュレーションを行った。今回は、 Vitis HLS 2021.2 の GUI 上で、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL、 Implementation を行った。

GUI 上で C シミュレーションを行った。
なお、コードを修正したのだが、修正前のコードでの作業はすべて solution1 で行っていた。コード修正後は、solution2 を新たに作成し、xf_resize_axis.h を変更して、C シミュレーションなどを solution2 上で行った。
Vitis_Vision2_153_220202.png

xf_resize_axis/xf_resize_axis/solution2/csim/build ディレクトリを見ると、各種ファイルが生成されている。成功だ。
Vitis_Vision2_151_220202.png

hls_out.jpg がハードウェアの出力画像だ。400 x 300 ピクセルの画像から64 x 48 ピクセルの画像に落とされている。
Vitis_Vision2_163_220202.png

C コードの合成を行った。結果を示す。
Vitis_Vision2_154_220202.png
Vitis_Vision2_155_220202.png
Vitis_Vision2_156_220202.png
Vitis_Vision2_157_220202.png

Latency は 2111000 クロックだった。C コードの合成なので最大解像度となっているので、1920 x 1080 = 2073600 ピクセルとなった。このピクセル数を 2111000 クロックで実行できると 2111000 / 2073600 ≒ 1.02 クロック / ピクセルだった。
Timing Violation がでているが、最後の Implementation で検証しよう。

C/RTL 協調シミュレーションを行った。
Co-simulation Dialog で Dump Trace を port にして、Input Arguments に /media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/test2.jpg を入力した。
Vitis_Vision2_158_220202.png

C/RTL 協調シミュレーションが完了した。
Latency は 127962 クロックだった。ここでの Latency は 400 x 300 ピクセルだったので、 127962 / 120000 ≒ 1.07 クロック / ピクセルとなった。
Vitis_Vision2_159_220202.png

C/RTL 協調シミュレーションの全体波形を示す。
Vitis_Vision2_164_220203.png

C/RTL 協調シミュレーションの拡大した波形を示す。
Vitis_Vision2_165_220203.png

p_src_TREADY の波形に比べて、p_dst_TVALID がまばらになっている。これは、 400 x 300 ピクセルの画像を 64 x 48 ピクセルの画像に変換しているからだ。

Export RTL を行った。
solution2/impl ディレクトリに export.zip が生成され、ip ディレクトリが作成された。
Vitis_Vision2_160_220202.png

Implementation を行った。
Vitis_Vision2_161_220202.png

せっかくなので、solution1 と solution2 を比較した。
solution1 は resize の出力最大解像度を 64 x 48 ピクセルとしている。solution2 の最大画素数は 1920 x 1080 ピクセルとなっている。
Vitis_Vision2_162_220202.png

リソース使用量は違ってはいるが、余り変化がない。
  1. 2022年02月03日 04:08 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用するために TCL スクリプトでプロジェクトを作成する1(resize 編1)

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用して C コードの合成を行う方法”で Vitis HLS 2020.2 で Vitis HLS のプロジェクトを作成して、一度 C コードの合成を行ってから、プロジェクトを閉じて、Vitis HLS 2021.2 で同じプロジェクトを開いて、C コードの合成をするという面倒くさいことをやっていた。かなり面倒なので、Vitis HLS 2021.2 だけでやる方法を考えていたのだが、TCL スクリプトでプロジェクトを作成して、C シミュレーションだけやってみよう。
(2022/02/02 : 修正)ヘッダファイルとテストベンチを変更。最大画像が 64 x 48 ピクセルだったので、実際の IP として使用できない。最大画像を 1920 x 1080 ピクセルに変更した。

Vitis HLS 2021.2 で ZYBO Z7-20 用の xf_resize_axis プロジェクトを作成し、C シミュレーションを行うための TCL スクリプト、xf_resize_axis_home.tcl を貼っておく。

open_project xf_resize_axis
set_top resize_accel_axis
add_files xf_resize_axis.cpp -cflags "-I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x"
add_files -tb xf_resize_axis_tb.cpp -cflags "-I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -I/usr/local/include -std=c++0x -Wno-unknown-pragmas" -csimflags "-Wno-unknown-pragmas"
open_solution "solution1" -flow_target vivado
set_part {xc7z020-clg400-1}
create_clock -period 10 -name default
config_export -format ip_catalog -rtl verilog -vivado_clock 10
csim_design -ldflags {-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc} -argv {/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/test2.jpg}
exit


xf_resize_axis.h を貼っておく。
NEWWIDTH と NEWHEIGHT は新しい画像の解像度を表している。

// xf_resize_axis.h
// 2022/01/30 by marsee
// Vitis_Libraries/vision/L1/examples/resize/を参照している
// https://github.com/Xilinx/Vitis_Libraries/tree/master/vision/L1/examples/resize
// Vitis_Libraries/vision/L1/examples/resize/build/xf_config_params.h を引用

#ifndef _XF_RESIZE_AXIS_
#define _XF_RESIZE_AXIS_

#include "hls_stream.h"
#include "ap_int.h"
#include "common/xf_common.hpp"
#include "ap_axi_sdata.h"
#include "common/xf_infra.hpp"
#include "common/xf_axi_io.hpp"

#include "imgproc/xf_resize.hpp"

#define RGB  1
#define GRAY 0

#define NPxPC XF_NPPC1

// For Nearest Neighbor & Bilinear Interpolation, max down scale factor 2 for all 1-pixel modes, and for upscale in x
// direction
#define MAXDOWNSCALE 2

/* Interpolation type*/
#define INTERPOLATION 1
// 0 - Nearest Neighbor Interpolation
// 1 - Bilinear Interpolation
// 2 - AREA Interpolation

/* Input image Dimensions */
#define WIDTH 1920  // Maximum Input image width
#define HEIGHT 1080 // Maximum Input image height

/* Output image Dimensions */
#define NEWWIDTH 1920  // Maximum output image width
#define NEWHEIGHT 1080 // Maximum output image height

#if GRAY
#define TYPE XF_8UC1
#define CHANNELS 1
#define STREAMW 8
#else
#define TYPE XF_8UC3
#define CHANNELS 3
#define STREAMW 32
#endif
typedef hls::stream<ap_axiu<STREAMW,1,1,1> > AXI_STREAM;

#endif


xf_resize_axis.cpp を貼っておく。

// xf_resize_axis.cpp
// 2022/01/30 by marsee
// Vitis_Libraries/vision/L1/examples/resize/を参照している
// https://github.com/Xilinx/Vitis_Libraries/tree/master/vision/L1/examples/resize

#include "xf_resize_axis.h"

void resize_accel_axis(AXI_STREAM& _src, AXI_STREAM& _dst,
        int32_t in_height, int32_t in_width, int32_t out_height, int32_t out_width){
#pragma HLS INTERFACE mode=s_axilite port=out_width
#pragma HLS INTERFACE mode=s_axilite port=out_height
#pragma HLS INTERFACE mode=s_axilite port=in_width
#pragma HLS INTERFACE mode=s_axilite port=in_height
#pragma HLS INTERFACE mode=s_axilite port=return
#pragma HLS INTERFACE mode=axis register_mode=both port=_src register
#pragma HLS INTERFACE mode=axis register_mode=both port=_dst register

    xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPxPC> img_in(in_height, in_width);
    xf::cv::Mat<TYPE, NEWHEIGHT, NEWWIDTH, NPxPC> img_out(out_height, out_width);

#pragma HLS DATAFLOW

    xf::cv::AXIvideo2xfMat(_src, img_in);

    xf::cv::resize <INTERPOLATION, TYPE, HEIGHT, WIDTH,
        NEWHEIGHT, NEWWIDTH, NPxPC, MAXDOWNSCALE> (img_in, img_out);

    xf::cv::xfMat2AXIvideo(img_out, _dst);
}


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

/*
 * Copyright 2019 Xilinx, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// 2022/02/01 : AXI4-Stream 対応にコードを書き換えた。by marsee
// 2022/02/02 : IN_IMG_WIDTH, IN_IMG_HEIGHT, OUT_IMG_WIDTH, OUT_IMG_HEIGHTを追加。by marsee

#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "common/xf_headers.hpp"
#include "common/xf_axi.hpp"
#include "common/xf_sw_utils.hpp"

#include "xf_resize_axis.h"

#define IN_IMG_WIDTH    400
#define IN_IMG_HEIGHT   300
#define OUT_IMG_WIDTH   64
#define OUT_IMG_HEIGHT  48

void resize_accel_axis(AXI_STREAM& _src, AXI_STREAM& _dst,
        int32_t in_height, int32_t in_width, int32_t out_height, int32_t out_width);

int main(int argc, char** argv) {
    cv::Mat img, out_img, result_ocv, error;

    if (argc != 2) {
        fprintf(stderr, "Usage: <executable> <input image>\n");
        return -1;
    }

#if GRAY
    img.create(cv::Size(IN_IMG_WIDTH, IN_IMG_HEIGHT), CV_8UC1);
    out_img.create(cv::Size(OUT_IMG_WIDTH, OUT_IMG_HEIGHT), CV_8UC1);
    result_ocv.create(cv::Size(OUT_IMG_WIDTH, OUT_IMG_HEIGHT), CV_8UC1);
    error.create(cv::Size(OUT_IMG_WIDTH, OUT_IMG_HEIGHT), CV_8UC1);
#else
    img.create(cv::Size(IN_IMG_WIDTH, IN_IMG_HEIGHT), CV_8UC3);
    result_ocv.create(cv::Size(OUT_IMG_WIDTH, OUT_IMG_HEIGHT), CV_8UC3);
    out_img.create(cv::Size(OUT_IMG_WIDTH, OUT_IMG_HEIGHT), CV_8UC3);
    error.create(cv::Size(OUT_IMG_WIDTH, OUT_IMG_HEIGHT), CV_8UC3);
#endif

#if GRAY
    // reading in the color image
    img = cv::imread(argv[1], 0);
#else
    img = cv::imread(argv[1], 1);
#endif

    if (!img.data) {
        return -1;
    }

    cv::imwrite("input.png", img);

    unsigned short in_width, in_height;
    unsigned short out_width, out_height;

    in_width = img.cols;
    in_height = img.rows;
    out_height = OUT_IMG_HEIGHT;
    out_width = OUT_IMG_WIDTH;

/*OpenCV resize function*/

#if INTERPOLATION == 0
    cv::resize(img, result_ocv, cv::Size(out_width, out_height), 0, 0, cv::INTER_NEAREST);
#endif
#if INTERPOLATION == 1
    cv::resize(img, result_ocv, cv::Size(out_width, out_height), 0, 0, cv::INTER_LINEAR);
#endif
#if INTERPOLATION == 2
    cv::resize(img, result_ocv, cv::Size(out_width, out_height), 0, 0, cv::INTER_AREA);
#endif

    /* Call the top function */
    AXI_STREAM _src,_dst;

    xf::cv::cvMat2AXIvideoxf<NPxPC, STREAMW>(img, _src);
    resize_accel_axis(_src, _dst,  in_height, in_width, out_height, out_width);
    xf::cv::AXIvideo2cvMatxf<NPxPC, STREAMW>(_dst, out_img);

    float err_per;
    cv::absdiff(result_ocv, out_img, error);
    xf::cv::analyzeDiff(error, 5, err_per);
    cv::imwrite("hls_out.png", out_img);
    cv::imwrite("resize_ocv.png", result_ocv);
    cv::imwrite("error.png", error);

    if (err_per > 0.0f) {
        fprintf(stderr, "ERROR: Test Failed.\n ");
        return -1;
    }

    return 0;
}


400 x 300 ピクセルの test2.jpg を貼っておく。
Vitis_Vision2_164_220202.png

上記のファイルを集めた xf_resize_axis ディレクトリを作成した。
Vitis_Vision2_144_220201.png

Vivado 2021.2 の settings64.sh を起動したターミナルで xf_resize_axis_home.tcl を起動した。
vitis_hls -f xf_resize_axis_home.tcl
Vitis_Vision2_149_220201.png
Vitis_Vision2_150_220201.png

xf_resize_axis ディレクトリが作成された。
Vitis_Vision2_145_220201.png


vitis_hls & で Vitis HLS 2021.2 の GUI を起動した。
xf_resize_axis/xf_resize_axis プロジェクトを開いた。
Vitis_Vision2_146_220201.png

Vitis HLS 2021.2 の Project メニューから Project Settings... を選択して、設定を確認する。
Project Settings (xf_resize_axis) ダイアログが開く。
左のウインドウで Simulation をクリックする。
Vitis_Vision2_147_220201.png

設定されている。

次に、左のウインドウで Synthesis をクリックした。
CFLAGS が絶対パスで書かれているので、問題無さそうだ。
Vitis_Vision2_148_220201.png

xf_resize_axis_home.tcl を起動した時のログを貼っておく。

(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis$ vitis_hls -f xf_resize_axis_home.tcl 

****** Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2021.2 (64-bit)
  **** SW Build 3367213 on Tue Oct 19 02:47:39 MDT 2021
  **** IP Build 3369179 on Thu Oct 21 08:25:16 MDT 2021
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.

source /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/scripts/vitis_hls/hls.tcl -notrace
INFO: Applying HLS Y2K22 patch v1.2 for IP revision
INFO: [HLS 200-10] Running '/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/bin/unwrapped/lnx64.o/vitis_hls'
INFO: [HLS 200-10] For user 'masaaki' on host 'masaaki-H110M4-M01' (Linux_x86_64 version 4.15.0-166-generic) on Wed Feb 02 04:20:07 JST 2022
INFO: [HLS 200-10] On os Ubuntu 18.04.6 LTS
INFO: [HLS 200-10] In directory '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis'
WARNING: [HLS 200-40] Environment variable 'C_INCLUDE_PATH' is set to :/usr/local/cuda/include.
Sourcing Tcl script 'xf_resize_axis_home.tcl'
INFO: [HLS 200-1510] Running: open_project xf_resize_axis 
INFO: [HLS 200-10] Creating and opening project '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/xf_resize_axis'.
INFO: [HLS 200-1510] Running: set_top resize_accel_axis 
INFO: [HLS 200-1510] Running: add_files xf_resize_axis.cpp -cflags -I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x 
INFO: [HLS 200-10] Adding design file 'xf_resize_axis.cpp' to the project
INFO: [HLS 200-1510] Running: add_files -tb xf_resize_axis_tb.cpp -cflags -I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -I/usr/local/include -std=c++0x -Wno-unknown-pragmas -csimflags -Wno-unknown-pragmas 
INFO: [HLS 200-10] Adding test bench file 'xf_resize_axis_tb.cpp' to the project
INFO: [HLS 200-1510] Running: open_solution solution1 -flow_target vivado 
INFO: [HLS 200-10] Creating and opening solution '/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/xf_resize_axis/solution1'.
INFO: [HLS 200-1505] Using flow_target 'vivado'
Resolution: For help on HLS 200-1505 see www.xilinx.com/cgi-bin/docs/rdoc?v=2021.2;t=hls+guidance;d=200-1505.html
INFO: [HLS 200-1510] Running: set_part xc7z020-clg400-1 
INFO: [HLS 200-1611] Setting target device to 'xc7z020-clg400-1'
INFO: [HLS 200-1510] Running: create_clock -period 10 -name default 
INFO: [SYN 201-201] Setting up clock 'default' with a period of 10ns.
INFO: [HLS 200-1510] Running: config_export -format ip_catalog -rtl verilog -vivado_clock 10 
INFO: [HLS 200-1510] Running: csim_design -ldflags -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -argv /media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/test2.jpg 
INFO: [SIM 211-2] *************** CSIM start ***************
INFO: [SIM 211-4] CSIM will launch GCC as the compiler.
   Compiling ../../../../xf_resize_axis_tb.cpp in debug mode
   Compiling ../../../../xf_resize_axis.cpp in debug mode
   Generating csim.exe
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_structs.hpp:27:0,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_common.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_sw_utils.hpp:20,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_headers.hpp:28,
                 from ../../../../xf_resize_axis_tb.cpp:22:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:97:45: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <typename T> constexpr std::size_t bitwidth = sizeof(T) * CHAR_BIT;
                                             ^~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:99:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_int<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:100:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_uint<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:102:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_fixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:104:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_ufixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:107:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bytewidth = (bitwidth<T> + CHAR_BIT - 1) / CHAR_BIT;
                       ^~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi.hpp:23:0,
                 from ../../../../xf_resize_axis_tb.cpp:23:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/utils/x_hls_utils.h:246:10: warning: ‘hls_preserve’ attribute directive ignored [-Wattributes]
 T reg(T d)
          ^
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_structs.hpp:27:0,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_common.hpp:20,
                 from ../../../../xf_resize_axis.h:12,
                 from ../../../../xf_resize_axis.cpp:6:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:97:45: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <typename T> constexpr std::size_t bitwidth = sizeof(T) * CHAR_BIT;
                                             ^~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:99:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_int<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:100:48: warning: variable templates only available with -std=c++14 or -std=gnu++14
 template <std::size_t W> constexpr std::size_t bitwidth<ap_uint<W>> = W;
                                                ^~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:102:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_fixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:104:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bitwidth<ap_ufixed<_AP_W, _AP_I, _AP_Q, _AP_O, _AP_N>> = _AP_W;
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/ap_axi_sdata.h:107:23: warning: variable templates only available with -std=c++14 or -std=gnu++14
 constexpr std::size_t bytewidth = (bitwidth<T> + CHAR_BIT - 1) / CHAR_BIT;
                       ^~~~~~~~~
In file included from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_axi_io.hpp:19:0,
                 from /media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_infra.hpp:29,
                 from ../../../../xf_resize_axis.h:14,
                 from ../../../../xf_resize_axis.cpp:6:
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis_HLS/2021.2/include/utils/x_hls_utils.h:246:10: warning: ‘hls_preserve’ attribute directive ignored [-Wattributes]
 T reg(T d)
          ^
    Minimum error in intensity = 0
    Maximum error in intensity = 1
    Percentage of pixels above error threshold = 0
INFO: [SIM 211-1] CSim done with 0 errors.
INFO: [SIM 211-3] *************** CSIM finish ***************
INFO: [HLS 200-111] Finished Command csim_design CPU user time: 13.33 seconds. CPU system time: 0.64 seconds. Elapsed time: 12.81 seconds; current allocated memory: -937.109 MB.
INFO: [HLS 200-112] Total CPU user time: 15.25 seconds. Total CPU system time: 1.04 seconds. Total elapsed time: 14.32 seconds; peak allocated memory: 211.125 MB.
INFO: [Common 17-206] Exiting vitis_hls at Wed Feb  2 04:20:21 2022...
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis$ 

  1. 2022年02月02日 04:30 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で Vitis Vision Library L1 を使用して C コードの合成を行う方法

Vitis HLS 2021.2 で Vitis Vision Library を使用する8(AXI4-Stream 入出力の xf_resize 編 1)”で C コードの合成を行ったが、Vitis Vision Library L1 のインクルード・ファイルが見つからないというエラーになってしまった。
この解決方法は Vitis HLS 2020.2 でプロジェクトを作成してから、そのプロジェクトを Vitis HLS 2021.2 で読み込んで合成する、だった。(”Vitis HLS 2021.2 で Vitis Vision Library を使用する2(dilation 編 2)”参照)
しかし、ただ単に Vitis HLS 2020.2 でプロジェクトを作成してから、そのプロジェクトを Vitis HLS 2021.2 で読み込んでもダメなようだった。うまく行く条件は Vitis HLS 2020.2 で一回 C コードの合成を行っておくということのようだ。

xf_resize_axis プロジェクトを Vitis HLS 2020.2 で作成した。このプロジェクトは ZYBO Z7-20 用だ。
xf_resize_axis.cpp を Source に追加してある。
xf_resize_axis_tb.cpp を Test Bench に追加してある。
Vitis_Vision2_136_220131.png

Vitis HLS 2021.2 の Project メニューから Project Settings... を選択して、設定を行う。
Project Settings (xf_resize_axis) ダイアログが開く。
左のウインドウで Simulation をクリックする。
xf_resize_axis_tb.cpp の CFLAGS を設定する。(設定方法は、Edit CFLAGS... ボタンをクリックする)
xf_resize_axis_tb.cpp の CFLAGS に

-I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x -I/usr/local/include

を設定した。

Linker Flags に

-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc

を設定した。
Input Arguments に

/media/masaaki/Ubuntu_Disk/Vitis_HLS/ZYBO_Z7_20/2021.2/xf_resize_axis/test2.jpg

を指定した。
Vitis_Vision2_137_220131.png

Project Settings (xf_resize_axis) ダイアログの左のウインドウで Synthesis をクリックしxf_resize_axis.cpp の CFLAGS を設定する。(設定方法は、Edit CFLAGS... ボタンをクリックする)

-I/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include -std=c++0x

を設定した。
Vitis_Vision2_138_220131.png

ZYBO Z7-20 を使用するので、64 ビットアドレスの DMA を禁止して、 32 ビットアドレスの DMA にする。
Vitis HLS の Solution メニューから Solution Settings... を選択する。
Solution Settings (solution1) ダイアログが開く。
config_interface を展開して、m_axi_addr64 の Value のチェックボックスのチェックを外した。
Vitis_Vision2_139_220131.png

これで Vitis HLS 2020.2 を閉じて、Vitis HLS 2021.2 を立ち上げても C コードの合成でのエラーは解消されなかった。
Vitis HLS 2020.2 で一度 C コードの合成を行う必要があるようだ。


Vitis HLS 2020.2 で C コードの合成を行うとエラーになった。
Vitis_Vision2_140_220201.png

エラー内容を示す。

ERROR: [HLS 214-208] The ap_axis|ap_axiu|qdma_axis|hls::axis data types must only be used for AXI-Stream ports in the interface. 'AXI_video_strm' is not an AXI-Stream and/or is not a port in the interface (/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_infra.hpp:100:0)
ERROR: [HLS 214-208] The ap_axis|ap_axiu|qdma_axis|hls::axis data types must only be used for AXI-Stream ports in the interface. 'AXI_video_strm' is not an AXI-Stream and/or is not a port in the interface (/media/masaaki/Ubuntu_Disk/Xilinx_github/Vitis_Libraries/vision/L1/include/common/xf_infra.hpp:180:0)


これで、Vitis HLS 2020.2 を閉じて、Vitis HLS 2021.2 を起動する。
Vitis_Vision2_141_220201.png

この状態で、Vitis HLS 2021.2 の Project メニューから Project Settings... を選択して、Project Settings (xf_resize_axis) ダイアログを開いて、 Synthesis をクリックしxf_resize_axis.cpp の CFLAGS を見ると、絶対パスでインクルード・パスが指定されているはずだ。
Vitis_Vision2_142_220201.png

これで、Vitis HLS 2021.2 で C コードの合成を行うことができるようになった。
C コードの合成を行った。
Vitis_Vision2_143_220201.png
  1. 2022年02月01日 04:42 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0