FC2カウンター FPGAの部屋 Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する2
fc2ブログ

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

FPGAの部屋

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

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

コメント

コメントの投稿


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

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