FC2カウンター FPGAの部屋 Vivado HLS でFIFO を作ってみた2(指示子を入れた場合)

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

FPGAの部屋

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

Vivado HLS でFIFO を作ってみた2(指示子を入れた場合)

Vivado HLS でFIFO を作ってみた1(指示子を入れない場合)”の続き。

前回は、入出力数に制限のあるFIFO を作ってみたが、DATAFLOW 指示子やPIPELINE 指示子を入れてないので、input のfor 文とooutput のfor 文がシーケンシャルに実行されてしまったし、output は出力するのに 2 クロックかかってしまった。今回は、DATAFLOW 指示子とPIPELINE 指示子を入れて、どう変わるのか?を検証してみよう。

指示子を入れた fifo_test.cpp を示す。

// fifo_test.cpp
// 2016/09/26 by marsee
//

#include <stdio.h>
#include <string.h>
#include <ap_int.h>
#include <hls_stream.h>

#include "fifo_test.h"

int fifo_test(hls::stream<ap_uint<32> >& ins, hls::stream<ap_uint<32> >& outs){
#pragma HLS DATAFLOW
    ap_uint<32> buf[HORIZONTAL_PIXEL_WIDTH];
    ap_uint<32> ind, outd;
    int i, j;

    input : for(i=0; i<HORIZONTAL_PIXEL_WIDTH; i++){
#pragma HLS PIPELINE II=1
        ins >> buf[i];
    }

    output : for(j=0; j<HORIZONTAL_PIXEL_WIDTH; j++){
#pragma HLS PIPELINE II=1
        while(i <= j) ; // i よりも j が等しいか大きい場合はwait
        outs << buf[j];
    }

    return 0;
}


input にはPIPELINE 指示子はいらないかもしれないが、一応入れておいた。

C コードの合成の結果を示す。今回の結果を左側に、前回の結果を右側に示す。
fifo_test_9_160929.png fifo_test_2_160927.png

Latency は 643 クロックになっていて、input と output が並列に実行されていることがわかる。
Loop がN/A になっていて、FF も LUT も増えている。

Analysis にしてみた。
fifo_test_10_160929.png

fifo_test_Loop_input_proc と fifo_test_Loop_output_proc があった。
そのうちのfifo_test_Loop_input_proc をクリックした。
fifo_test_11_160929.png

戻って、 fifo_test_Loop_output_proc をクリックした。
fifo_test_12_160929.png

Resource 表示にした。
fifo_test_13_160929.png

fifo_test_Loop_input_proc_U0 と fifo_test_Loop_output_proc_U0 があった。
そのうちのfifo_test_Loop_input_proc_U0 をクリックした。
fifo_test_14_160929.png

戻って、fifo_test_Loop_output_proc_U0 をクリックした。
fifo_test_15_160929.png

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

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

fifo_test() 呼び出し 1 回分を示す。
fifo_test_18_160929.png

ins_V_empty_n, ins_V_V_read, outs_V_V_full_n, outs_V_V_write も呼び出しの間は1 を保持しているので、1 クロックで input と output の処理を同時に行うことができている。

次に、入力と出力が何クロック遅延しているかを見てみよう。
fifo_test_19_160929.png

図から入力データと出力データは 2 クロック遅れているようだ。

これで、Vivado HLS でも、FIFO が作れることが分かった。
  1. 2016年09月29日 04:37 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3586-3ff07f44
この記事にトラックバックする(FC2ブログユーザー)