FC2カウンター FPGAの部屋 Vitis HLS 2021.1 を使ってみる(DMA_pow2)
fc2ブログ

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

FPGAの部屋

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

Vitis HLS 2021.1 を使ってみる(DMA_pow2)

Vitis HLS 2021.1 が出たので、使ってみることにした。
題材は DMA_pow2 で、入力を 2 乗して出力する AXI4 Master 入出力の IP だ。
なお、今回は訳あって、Windows 10 の Vitis HLS 2021.1 を使用している。

Vitis HLS 2021.1 の DMA_pow2 プロジェクトを示す。
左下の Window が新しくなって、Flow Navigator になったようだ。
Vitis_HLS_211_1_210626.png

ソース・ファイルの DMA_pow2n.cpp を示す。

// DMA_pow2.cpp
// 2018/05/08 by marsee
//

int DMA_pow2(volatile int *in, volatile int *out){
#pragma HLS INTERFACE s_axilite port=out
#pragma HLS INTERFACE s_axilite port=in
#pragma HLS INTERFACE m_axi depth=10 port=out offset=slave
#pragma HLS INTERFACE m_axi depth=10 port=in offset=slave
#pragma HLS INTERFACE mode=s_axilite port=return

    for (int i=0; i<10; i++){
        int temp = in[i];
        out[i] = temp * temp;
    }

    return(0);
}


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

// DMA_pow2_tb.cpp
// 2018/05/08 by marsee
//

#include <iostream>

int DMA_pow2(volatile int *in, volatile int *out);

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

    DMA_pow2(data, result);

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


Solution メニューから Synthesis を選択する。
プロジェクトの Part は xc7z010clg400-1 にした。ZYBO Z7-10 に使用する。
Vitis_HLS_211_2_210626.png

ZYBO Z7-10 に使用するので、General の config_interface の m_axi_addr64 のチェックは外した。つまり AXI4 Master のアドレスは 32 ビットとした。
Vitis_HLS_211_3_210626.png

C シミュレーションを行う。
Flow Navigator の Run CSimulation をクリックしても、C シミュレーションが走る。
Vitis_HLS_211_4_210626.png

C シミュレーションの結果を示す。この辺りは前のバージョンと変わらない。
Vitis_HLS_211_5_210626.png

Flow Navigator で C SYNTHESIS の Run C Synthesis をクリックする。
C コードの合成時にもダイアログが表示されるようになった。
Vitis_HLS_211_6_210626.png

C コードの合成が終了した。
Vitis_HLS_211_7_210626.png

C コードの合成結果を示す。
Performance & Resource Estimates の VITIS_LOOP_12_1 を見ると、PIPELINE 指示子が書いてないのに、Interval が 1 になっていて、パイプラインされているのが分かる。
Vitis_HLS_211_8_210626.png
Vitis_HLS_211_9_210626.png

Open Function Call Graph → Synthesis を選択する。
Vitis_HLS_211_10_210626.png

Function Call Graph が表示された。
簡単なコードなので、良く分からない?もっと複雑なコードをやってみた方が良さそうだ。
Vitis_HLS_211_11_210626.png

C/RTL協調シミュレーションを行った。
C/RTL Co-simulation Dialog で Dump Trace を all に変更した。このダイアログは 2020.2 から変更点が無さそう?
Vitis_HLS_211_12_210626.png

C/RTL協調シミュレーションの結果を示す。
レイテンシは 35 クロックだった。
Vitis_HLS_211_13_210626.png

Open Function Call Graph → Cosimulation を見た。
こちらも複雑なモデルで見た方が良さそうだ。
Vitis_HLS_211_14_210626.png

Export RTL を行った。
Export RTL のダイアログを示す。そのまま OK ボタンをクリックした。
Vitis_HLS_211_15_210626.png

Export RTL が終了した。
Vitis_HLS_211_16_210626.png

次に Flow Navigator から Run Implementation をクリックする。
Run Implementation ダイアログが表示された。
RTL Synthesis のラジオボタンがクリックされていた。
Vitis_HLS_211_17_210626.png

RTL Synthesis, Place & Route ラジオボタンに変更して、OKボタンをクリックした。
Vitis_HLS_211_18_210626.png

結果を示す。
Vitis_HLS_211_19_210626.png
Vitis_HLS_211_20_210626.png

solution1 -> impl の export.zip に IP が圧縮されている。
Vitis_HLS_211_21_210626.png
  1. 2021年06月26日 13:12 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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