FC2カウンター FPGAの部屋 axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる1(Vitis HLS で DMA_pow2_axis IP を作成)
fc2ブログ

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

FPGAの部屋

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

axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる1(Vitis HLS で DMA_pow2_axis IP を作成)

AXI4-Stream におけるサイド・チャネル信号 TKEEP と TSTRB の扱いについて”と”AXI4-Stream の信号についてのまとめ”で AXI4-Stream の信号について、再度学習した。
TKEEP と TSTRB は、入力された信号を出力するか、オール 1 にする必要がありそうだということで、それを踏まえて、再度 axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させてみようと思う。

まずは、Vitis HLS 2021.2 で DMA_pow2_axis を再度作成する。今回は、TKEEP と TSTRB もコードに書いて、入力された値を出力する。
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;
        rlt.keep = dt.keep;
        rlt.strb = dt.strb;
        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;
        dt.keep = 0xf;
        dt.strb = 0xf;
        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 << " keep = " << rlt.keep
                << " strb = " << rlt.strb << endl;
    }
    cout << endl;
    return(0);
}


Vitis HLS 2021.2 の DMA_pow2_axis プロジェクトを示す。
Kria-PYNQ_139_220304.png

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

C コードの合成を行った。
Kria-PYNQ_141_220304.png

Latency は 13 クロックだった。良さそうだ。

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

C/RTL 協調シミュレーションの波形を示す。
Kria-PYNQ_143_220304.png

Export RTL を行って、IP 化した。
  1. 2022年03月07日 03:47 |
  2. KRIA KV260 Vision AI Starter Kit
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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