FC2カウンター FPGAの部屋 Ultra96のDisplayPortを使用するためのIPを作成する5(テストベンチ の作成1)
FC2ブログ

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

FPGAの部屋

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

Ultra96のDisplayPortを使用するためのIPを作成する5(テストベンチ の作成1)

Ultra96のDisplayPortを使用するためのIPを作成する4(pixel_fifo の作成)”の続き。

前回は、axi2video_out.v に使用する非同期FIFO のpixel_fifo を生成した。今回は、axis2video_out.v は書き上がったのだが、検証していないので、まだ貼れないため、テストベンチの作成について書いてみよう。テストベンチではカメラなどの複雑な入力のモデルを作るのが面倒なのだが、ここにVivado HLS という便利なツールがある。C で書いてHDL で吐き出してくれるので、モデルを C で書いてHDLを作ろう。今回の pattern_gen_axis はVivado HLS で作ってあるので、それをモデルにしやすいようにパラメータを固定しただけでHDL モデルとして使用することにした。皆さんも例えばカメラのインターフェースのテストベンチを作成するのにVivado HLS を使ってC 言語で書いてHDL モデルを作るのはどうだろうか?

pattern_gen_axis.cpp を変更し、AXI4 Lite Slave を止めて、ap_none にして、h_size, v_size をdefine に変更した。
モデル用のpattern_gen_axis.cpp を示す。

// pattern_gen_axis.cpp
// 2019/01/13 by marsee
//

#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>

#define V_SIZE 60
#define H_SIZE 80

int pattern_gen_axis(hls::stream<ap_axis<32,1,1,1> >& outs,
        ap_uint<1> &init_done, ap_uint<1> &init_done_out
){
#pragma HLS INTERFACE ap_none register port=init_done_out
#pragma HLS INTERFACE ap_none port=init_done
#pragma HLS INTERFACE axis register both port=outs
#pragma HLS INTERFACE ap_ctrl_hs port=return
    ap_axis<32,1,1,1> out_val;

    init_done_out = init_done;

    LOOP_Y: for(int y=0; y<V_SIZE; y++){
#pragma HLS LOOP_TRIPCOUNT min=768 max=768 avg=768
        LOOP_X: for(int x=0; x<H_SIZE; x++){
#pragma HLS LOOP_TRIPCOUNT min=1024 max=1024 avg=1024
#pragma HLS PIPELINE II=1
            if (y < V_SIZE/2){
                if (x < H_SIZE/2){
                    out_val.data = 0xff0000; // *red=0xff; *green=0; *blue=0;
                } else if (x < H_SIZE){
                    out_val.data = 0x00ff00; // *red=0; *green=0xff; *blue=0;
                } else {
                    out_val.data = 0x000000; // *red=0; *green=0; *blue=0;
                }
            } else if (y < V_SIZE){
                if (x < H_SIZE/2){
                    out_val.data = 0x0000ff; // *red=0; *green=0; *blue=0xff;
                } else if (x < H_SIZE){
                    out_val.data = 0xffffff; // *red=0xff; *green=0xff; *blue=0xff;
                } else {
                    out_val.data = 0x000000; // *red=0; *green=0; *blue=0;
                }
            } else {
                out_val.data = 0x000000; // *red=0; *green=0; *blue=0;
            }

            if(x==0 && y==0)
                out_val.user = 1;
            else
                out_val.user = 0;
            if(x == H_SIZE-1)
                out_val.last = 1;
            else
                out_val.last = 0;

            outs << out_val;
        }
    }
    return(0);
}


Vivado HLS 2018.3 で pattern_gen_axis_test プロジェクトを作成した。
DisplayPort_test_74_190117.png

C コードの合成を行って、pattern_gen_axis.v が生成されている。
DisplayPort_test_75_190117.png

Vivado HLS で生成されたpattern_gen_axis.v を axis2video_out のVivado 2018.3 プロジェクトにシミュレーション用ファイルとして追加した。
DisplayPort_test_76_190117.png
  1. 2019年01月17日 05:09 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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