FC2カウンター FPGAの部屋 Vivado HLS の Vitis Bottom Up Flow を使用する1
FC2ブログ

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

FPGAの部屋

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

Vivado HLS の Vitis Bottom Up Flow を使用する1

”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する3(出力をグローバル・バッファからホストにコピーできない)”で all_layers_dnn が 2 個の出力バッファを使用しているので、その場合は、ホスト・メモリにコピーできないのか?を確かめるために Vivado HLS プロジェクトの square_cubed プロジェクトを作成して確かめてみよう。ついでに、Vivado HLS の新規プロジェクトを作成する時に Vitis Bottom Up Flow というチェックボックスがあるのを覚えていたので、それを使用して、Vitis の RTL カーネルを生成してみようと思う。

Vivado HLS 2019.2 で square_cubed プロジェクトを作成した。これは、Ultra96 用のプロジェクトである。
square_cubed_1_200106.png

プロジェクト作成時の Solution Configuration の時に Vitis Bottom Up Flow にチェックを入れた。
square_cubed_2_200106.png

square_cubed プロジェクトが生成された。
ソース(square_cubed.cpp)とテストベンチ(square_cubed_tb.cpp)のファイルを作成した。
square_cubed_3_200106.png

プロジェクト作成時に Solution めにゅーから Solution Settings... を選択して見ると、

config_sdx -target xocc

が設定されていた。
square_cubed_4_200106.png

square_cubed.cpp を貼っておく。

// square_cubed.cpp
// 2020/01/05 by marsee
//

#include <stdint.h>

//extern "C" {
void square_cubed(volatile int32_t *in, volatile int32_t *square, volatile int32_t *cubed){
#pragma HLS INTERFACE m_axi depth=10 port=cubed offset=slave bundle=gmem
#pragma HLS INTERFACE m_axi depth=10 port=square offset=slave bundle=gmem
#pragma HLS INTERFACE m_axi depth=10 port=in offset=slave bundle=gmem
#pragma HLS INTERFACE s_axilite port=return bundle=control
    for(int i=0; i<10; i++){
#pragma HLS PIPELINE II=1
        int32_t in_t = in[i];
        square[i] = in_t * in_t;
        cubed[i] = in_t * in_t * in_t;
    }
}
//}


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

// square_cubed_tb.cpp
// 2020/01/06 by marsee
//

#include <iostream>
#include <stdint.h>

void square_cubed(volatile int32_t *in, volatile int32_t *square, volatile int32_t *cubed);

int main(){
    int32_t data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int32_t square[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int32_t cubed[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    square_cubed(data, square, cubed);

    for(int i=0; i<10; i++){
        std::cout << "data[" << i << "]= " << data[i] << ", square[" << i << "]= " <<
                square[i] << ", cubed[" << i << "]= " << cubed[i] << std::endl;
    }
}

  1. 2020年01月06日 05:31 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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