FC2カウンター FPGAの部屋 Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション3(原因が分かった)
fc2ブログ

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

FPGAの部屋

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

Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション3(原因が分かった)

おるさんのおかげで、1ヶ月半くらいの間、悩んできた Vivado HLS 2014.4 で生成したラプラシアンフィルタIP の原因が分かりました。おるさんありがとうございました。

それは、古いバグありのラプラシアンフィルタのCソースコードを使用してしまったからです。正しいCソースコードはあったのですが、Vivado HLS プロジェクトの外に出してあって、バージョンの違うVivado HLS プロジェクトで使えるようになっていました。古いバグありCソースコードがプロジェクト内に残っていたので勘違いしてしまいました。反省しております。。。

新しいラプラシアンフィルタIP のCソースコードを貼っておきます。

// laplacian_filter.c
// lap_filter_axim()

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

#define HORIZONTAL_PIXEL_WIDTH    800
#define VERTICAL_PIXEL_WIDTH    600
#define ALL_PIXEL_VALUE    (HORIZONTAL_PIXEL_WIDTH*VERTICAL_PIXEL_WIDTH)

int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2);
int conv_rgb2y(int rgb);

int lap_filter_axim(int cam_addr, int lap_addr, volatile int *cam_fb, volatile int *lap_fb)
{
    #pragma HLS INTERFACE s_axilite port=cam_addr bundle=BUS_AXI4LS
    #pragma HLS INTERFACE s_axilite port=lap_addr bundle=BUS_AXI4LS
    #pragma HLS INTERFACE s_axilite port=return bundle=BUS_AXI4LS
    #pragma HLS INTERFACE ap_none port=cam_addr
    #pragma HLS INTERFACE ap_none port=lap_addr

    #pragma HLS INTERFACE m_axi port=cam_fb depth=1920
    #pragma HLS INTERFACE m_axi port=lap_fb depth=1920

    unsigned int line_buf[3][HORIZONTAL_PIXEL_WIDTH];
    unsigned int lap_buf[HORIZONTAL_PIXEL_WIDTH];
    int x, y;
    int lap_fil_val;
    int a, b;
    int fl, sl, tl;
    unsigned int offset_cam_addr, offset_lap_addr;
    int *cam_fb_addr, *lap_fb_addr;

    offset_cam_addr = cam_addr/sizeof(int);
    offset_lap_addr = lap_addr/sizeof(int);
    
    // RGB値をY(輝度成分)のみに変換し、ラプラシアンフィルタを掛けた。
    for (y=0; y<VERTICAL_PIXEL_WIDTH; y++){
        fl = (y-1)%3;    // 最初のライン, y=1 012, y=2 120, y=3 201, y=4 012
        sl = y%3;        // 2番めのライン
        tl = (y+1)%3;    // 3番目のライン
        for (x=0; x<HORIZONTAL_PIXEL_WIDTH; x++){
            if (y==0 || y==VERTICAL_PIXEL_WIDTH-1){ // 縦の境界の時の値は0とする
                lap_fil_val = 0;
            }else if (x==0 || x==HORIZONTAL_PIXEL_WIDTH-1){ // 横の境界の時も値は0とする
                lap_fil_val = 0;
            }else{
                 if (x == 1){ // ラインの最初でラインの画素を読み出す
                    if (y == 1){ // 最初のラインでは3ライン分の画素を読み出す
                        for (a=0; a<3; a++){ // 3ライン分
                            cam_fb_addr = (int*)(cam_fb+offset_cam_addr+(a*(HORIZONTAL_PIXEL_WIDTH)));
                            memcpy(&line_buf[a][0], (const int*)cam_fb_addr, HORIZONTAL_PIXEL_WIDTH*sizeof(int));
                            for (b=0; b<HORIZONTAL_PIXEL_WIDTH; b++){ // ライン
                                line_buf[a][b] = conv_rgb2y(line_buf[a][b]);    // カラーから白黒へ
                            }
                        }
                    } else { // 最初のラインではないので、1ラインだけ読み込む。すでに他の2ラインは読み込まれている
                        cam_fb_addr = (int*)(cam_fb+offset_cam_addr+((y+1)*(HORIZONTAL_PIXEL_WIDTH)));
                         memcpy(line_buf[(y+1)%3], (const int*)cam_fb_addr, HORIZONTAL_PIXEL_WIDTH*sizeof(int));
                        for (b=0; b<HORIZONTAL_PIXEL_WIDTH; b++){ // ライン
                            line_buf[(y+1)%3][b] = conv_rgb2y(line_buf[(y+1)%3][b]);    // カラーから白黒へ
                        }
                    }
                }
                lap_fil_val = laplacian_fil(line_buf[fl][x-1], line_buf[fl][x], line_buf[fl][x+1], line_buf[sl][x-1], line_buf[sl][x], line_buf[sl][x+1], line_buf[tl][x-1], line_buf[tl][x], line_buf[tl][x+1]);
            }
            lap_buf[x] = (lap_fil_val<<16)+(lap_fil_val<<8)+lap_fil_val; // RGB同じ値を入れる
        }
        lap_fb_addr = (int *)(lap_fb+offset_lap_addr+(y*(HORIZONTAL_PIXEL_WIDTH)));
        memcpy(lap_fb_addr, (const int*)lap_buf, HORIZONTAL_PIXEL_WIDTH*sizeof(int));
    }
    return(1);
}

// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y =  0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
int conv_rgb2y(int rgb){
    int r, g, b, y_f;
    int y;

    b = rgb & 0xff;
    g = (rgb>>8) & 0xff;
    r = (rgb>>16) & 0xff;

    y_f = 77*r + 150*g + 29*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に256倍した
    y = y_f >> 8// 256で割る

    return(y);
}

// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1  8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2)
{
    int y;

    y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
    if (y<0)
        y = 0;
    else if (y>255)
        y = 255;
    return(y);
}


Vivado HLS 2014.4 で合成し、IP 化した。
lap_fil_hls_14_4_28_150321.png  

lap_fil_hls_14_4 のVivado プロジェクトを終了した。

lap_filter_axim_0 のIP の中身と入れ替えて、もう一度、lap_fil_hls_14_4 のVivado プロジェクトを起動した。

ブロック・デザインを開くと、ラプラシアンフィルタIP の更新のお知らせがあったので、更新した。
lap_fil_hls_15_4_21_150318.png

Flow Navigator から Simulation -> Run Simulation -> Run Behevioral Simulation を選択して論理シミュレーションを行った。
シミュレーション結果を下に示す。
lap_fil_hls_14_4_26_150321.png 

3回 DMA Read を行ってから、DMA Write を行っている。その後は交互にDMA Read とDMA Write が続いている。これで問題ない。

DMA Write 間の時間を測ってみると、92.0 us だった。ラプラシアンフィルタ処理時間をざっと計算してみよう。DMA Write を600回(行数)行うので、

131.95 us x 600 行 = 79170 us ≒ 79.2 ms

となるはずだ。
lap_fil_hls_14_4_27_150321.png 

最後に、Vivado HLS 2014.4 でバグのないラプラシアンフィルタのCソースコードを高位合成した時のログファイルを貼っておく。



================================================================
== Vivado HLS Report for 'lap_filter_axim'
================================================================
* Date: Sat Mar 21 18:45:50 2015

* Version: 2014.4 (Build 1071461 on Tue Nov 18 16:42:57 PM 2014)
* Project: lap_filter_axim_2014_4
* Solution: solution1
* Product family: zynq
* Target device: xc7z010clg400-1


================================================================
== Performance Estimates
================================================================
+ Timing (ns):
* Summary:
+---------+-------+----------+------------+
| Clock | Target| Estimated| Uncertainty|
+---------+-------+----------+------------+
|default | 10.00| 8.75| 1.25|
+---------+-------+----------+------------+

+ Latency (clock cycles):
* Summary:
+---------+------------+---------+------------+---------+
| Latency | Interval | Pipeline|
| min | max | min | max | Type |
+---------+------------+---------+------------+---------+
| 1453801| 8083693801| 1453802| 8083693802| none |
+---------+------------+---------+------------+---------+

+ Detail:
* Instance:
N/A

* Loop:
+-------------------------------+---------+------------+-----------------+-----------+-----------+------+----------+
| | Latency | Iteration | Initiation Interval | Trip | |
| Loop Name | min | max | Latency | achieved | target | Count| Pipelined|
+-------------------------------+---------+------------+-----------------+-----------+-----------+------+----------+
|- Loop 1 | 1453800| 8083693800| 2423 ~ 13472823 | -| -| 600| no |
| + Loop 1.1 | 1600| 13472000| 2 ~ 16840 | -| -| 800| no |
| ++ Loop 1.1.1 | 16830| 16830| 5610| -| -| 3| no |
| +++ memcpy..cam_fb | 801| 801| 3| 1| 1| 800| yes |
| +++ lap_filter_axim_label0 | 4800| 4800| 6| -| -| 800| no |
| ++ memcpy..cam_fb | 801| 801| 3| 1| 1| 800| yes |
| ++ Loop 1.1.3 | 4800| 4800| 6| -| -| 800| no |
| + memcpy.lap_fb.lap_buf.gep | 801| 801| 3| 1| 1| 800| yes |
+-------------------------------+---------+------------+-----------------+-----------+-----------+------+----------+



================================================================
== Utilization Estimates
================================================================
* Summary:
+-----------------+---------+-------+-------+-------+
| Name | BRAM_18K| DSP48E| FF | LUT |
+-----------------+---------+-------+-------+-------+
|Expression | -| 11| 0| 849|
|FIFO | -| -| -| -|
|Instance | 0| -| 1416| 1686|
|Memory | 10| -| 0| 0|
|Multiplexer | -| -| -| 393|
|Register | -| -| 1053| -|
+-----------------+---------+-------+-------+-------+
|Total | 10| 11| 2469| 2928|
+-----------------+---------+-------+-------+-------+
|Available | 120| 80| 35200| 17600|
+-----------------+---------+-------+-------+-------+
|Utilization (%) | 8| 13| 7| 16|
+-----------------+---------+-------+-------+-------+

+ Detail:
* Instance:
+--------------------------------------------+-----------------------------------------+---------+-------+-----+-----+
| Instance | Module | BRAM_18K| DSP48E| FF | LUT |
+--------------------------------------------+-----------------------------------------+---------+-------+-----+-----+
|lap_filter_axim_BUS_AXI4LS_s_axi_U |lap_filter_axim_BUS_AXI4LS_s_axi | 0| 0| 144| 232|
|lap_filter_axim_cam_fb_m_axi_U |lap_filter_axim_cam_fb_m_axi | 0| 0| 512| 580|
|lap_filter_axim_lap_fb_m_axi_U |lap_filter_axim_lap_fb_m_axi | 0| 0| 512| 580|
|lap_filter_axim_srem_11ns_3ns_11_15_seq_U0 |lap_filter_axim_srem_11ns_3ns_11_15_seq | 0| 0| 88| 104|
|lap_filter_axim_urem_10ns_3ns_10_14_seq_U1 |lap_filter_axim_urem_10ns_3ns_10_14_seq | 0| 0| 80| 95|
|lap_filter_axim_urem_10ns_3ns_10_14_seq_U2 |lap_filter_axim_urem_10ns_3ns_10_14_seq | 0| 0| 80| 95|
+--------------------------------------------+-----------------------------------------+---------+-------+-----+-----+
|Total | | 0| 0| 1416| 1686|
+--------------------------------------------+-----------------------------------------+---------+-------+-----+-----+

* Memory:
+------------+--------------------------+---------+---+----+------+-----+------+-------------+
| Memory | Module | BRAM_18K| FF| LUT| Words| Bits| Banks| W*Bits*Banks|
+------------+--------------------------+---------+---+----+------+-----+------+-------------+
|lap_buf_U |lap_filter_axim_lap_buf | 2| 0| 0| 800| 24| 1| 19200|
|line_buf_U |lap_filter_axim_line_buf | 8| 0| 0| 2400| 32| 1| 76800|
+------------+--------------------------+---------+---+----+------+-----+------+-------------+
|Total | | 10| 0| 0| 3200| 56| 2| 96000|
+------------+--------------------------+---------+---+----+------+-----+------+-------------+

* FIFO:
N/A

* Expression:
+--------------------------+----------+-------+---+----+------------+------------+
| Variable Name | Operation| DSP48E| FF| LUT| Bitwidth P0| Bitwidth P1|
+--------------------------+----------+-------+---+----+------------+------------+
|p_addr1_fu_608_p2 | * | 1| 0| 0| 3| 10|
|p_addr3_fu_617_p2 | * | 1| 0| 0| 3| 10|
|p_addr_fu_599_p2 | * | 1| 0| 0| 3| 10|
|tmp_38_i8_fu_819_p2 | * | 1| 0| 0| 8| 7|
|tmp_38_i_fu_976_p2 | * | 1| 0| 0| 8| 7|
|tmp_39_i9_fu_791_p2 | * | 1| 0| 0| 8| 8|
|tmp_39_i_fu_948_p2 | * | 1| 0| 0| 8| 8|
|tmp_40_i1_fu_800_p2 | * | 1| 0| 0| 8| 5|
|tmp_40_i_fu_957_p2 | * | 1| 0| 0| 8| 5|
|tmp_s_fu_590_p2 | * | 1| 0| 0| 3| 10|
|y_i16_op_cast_fu_1158_p2 | * | 1| 0| 1| 24| 17|
|a_1_fu_862_p2 | + | 0| 0| 2| 2| 1|
|b_2_fu_919_p2 | + | 0| 0| 10| 10| 1|
|b_fu_730_p2 | + | 0| 0| 10| 10| 1|
|grp_fu_560_p0 | + | 0| 0| 11| 11| 2|
|indvar_next1_fu_1191_p2 | + | 0| 0| 10| 10| 1|
|indvar_next2_fu_709_p2 | + | 0| 0| 10| 10| 1|
|indvar_next_fu_897_p2 | + | 0| 0| 10| 10| 1|
|next_mul1_fu_532_p2 | + | 0| 0| 19| 19| 10|
|next_mul2_fu_844_p2 | + | 0| 0| 12| 12| 10|
|next_mul_fu_850_p2 | + | 0| 0| 12| 12| 10|
|p_addr10_fu_1007_p2 | + | 0| 0| 13| 13| 13|
|p_addr11_fu_1050_p2 | + | 0| 0| 12| 12| 12|
|p_addr12_fu_1017_p2 | + | 0| 0| 12| 12| 12|
|p_addr13_fu_1040_p2 | + | 0| 0| 12| 12| 12|
|p_addr2_fu_1069_p2 | + | 0| 0| 12| 12| 12|
|p_addr4_fu_759_p2 | + | 0| 0| 13| 13| 13|
|p_addr5_fu_1064_p2 | + | 0| 0| 12| 12| 12|
|p_addr6_fu_740_p2 | + | 0| 0| 12| 12| 12|
|p_addr7_fu_773_p2 | + | 0| 0| 13| 13| 13|
|p_addr8_fu_1060_p2 | + | 0| 0| 12| 12| 12|
|p_addr9_fu_929_p2 | + | 0| 0| 12| 12| 12|
|sum2_i_fu_1094_p2 | + | 0| 0| 16| 32| 32|
|tmp4_fu_526_p2 | + | 0| 0| 31| 31| 10|
|tmp6_fu_1027_p2 | + | 0| 0| 32| 32| 32|
|tmp7_fu_1074_p2 | + | 0| 0| 32| 32| 32|
|tmp_11_fu_715_p2 | + | 0| 0| 12| 12| 12|
|tmp_13_fu_903_p2 | + | 0| 0| 12| 12| 12|
|tmp_17_fu_750_p2 | + | 0| 0| 11| 11| 2|
|tmp_2_fu_685_p2 | + | 0| 0| 31| 31| 31|
|tmp_31_fu_681_p2 | + | 0| 0| 31| 31| 31|
|tmp_33_fu_872_p2 | + | 0| 0| 31| 31| 31|
|x_1_fu_633_p2 | + | 0| 0| 10| 10| 1|
|y_1_fu_548_p2 | + | 0| 0| 10| 10| 1|
|sum3_neg_i_fu_1098_p2 | - | 0| 0| 16| 32| 32|
|tmp_42_i_fu_1114_p2 | - | 0| 0| 32| 32| 32|
|tmp_43_i_fu_1119_p2 | - | 0| 0| 32| 32| 32|
|tmp_i1_fu_1104_p2 | - | 0| 0| 32| 32| 32|
|y_4_fu_1125_p2 | - | 0| 0| 32| 32| 32|
|phitmp_fu_1163_p3 | Select | 0| 0| 24| 1| 2|
|ap_sig_bdd_1026 | and | 0| 0| 1| 1| 1|
|ap_sig_bdd_387 | and | 0| 0| 1| 1| 1|
|ap_sig_bdd_408 | and | 0| 0| 1| 1| 1|
|exitcond1_fu_1185_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond2_fu_703_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond3_fu_913_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond4_fu_856_p2 | icmp | 0| 0| 2| 2| 2|
|exitcond5_fu_627_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond6_fu_542_p2 | icmp | 0| 0| 11| 10| 10|
|exitcond7_fu_891_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond_fu_724_p2 | icmp | 0| 0| 11| 10| 9|
|icmp_fu_1148_p2 | icmp | 0| 0| 30| 24| 1|
|tmp_10_fu_645_p2 | icmp | 0| 0| 11| 10| 1|
|tmp_20_fu_657_p2 | icmp | 0| 0| 11| 10| 9|
|tmp_28_fu_663_p2 | icmp | 0| 0| 11| 10| 1|
|tmp_6_fu_580_p2 | icmp | 0| 0| 11| 10| 1|
|tmp_8_fu_675_p2 | icmp | 0| 0| 11| 10| 1|
|tmp_9_fu_639_p2 | icmp | 0| 0| 11| 10| 10|
|tmp_12_fu_651_p2 | or | 0| 0| 1| 1| 1|
|tmp_29_fu_669_p2 | or | 0| 0| 1| 1| 1|
+--------------------------+----------+-------+---+----+------------+------------+
|Total | | 11| 0| 849| 922| 754|
+--------------------------+----------+-------+---+----+------------+------------+

* Multiplexer:
+-------------------------------+-----+-----------+-----+-----------+
| Name | LUT | Input Size| Bits| Total Bits|
+-------------------------------+-----+-----------+-----+-----------+
|a_reg_377 | 2| 2| 2| 4|
|ap_NS_fsm | 102| 58| 1| 58|
|ap_reg_ppiten_pp0_it2 | 1| 2| 1| 2|
|ap_reg_ppiten_pp1_it2 | 1| 2| 1| 2|
|ap_reg_ppiten_pp2_it2 | 1| 2| 1| 2|
|ap_sig_ioackin_cam_fb_ARREADY | 1| 2| 1| 2|
|ap_sig_ioackin_lap_fb_AWREADY | 1| 2| 1| 2|
|ap_sig_ioackin_lap_fb_WREADY | 1| 2| 1| 2|
|b1_reg_423 | 10| 2| 10| 20|
|b_1_reg_366 | 10| 2| 10| 20|
|cam_fb_ARADDR | 32| 3| 32| 96|
|indvar1_reg_452 | 10| 2| 10| 20|
|indvar2_reg_355 | 10| 2| 10| 20|
|indvar_reg_412 | 10| 2| 10| 20|
|lap_buf_address0 | 10| 3| 10| 30|
|lap_fil_val_1_phi_fu_438_p8 | 24| 2| 24| 48|
|lap_fil_val_1_reg_434 | 24| 2| 24| 48|
|line_buf_address0 | 24| 9| 12| 108|
|line_buf_address1 | 24| 8| 12| 96|
|line_buf_d1 | 32| 4| 32| 128|
|phi_mul1_reg_331 | 19| 2| 19| 38|
|phi_mul2_reg_400 | 12| 2| 12| 24|
|phi_mul_reg_388 | 12| 2| 12| 24|
|x_reg_343 | 10| 2| 10| 20|
|y_reg_319 | 10| 2| 10| 20|
+-------------------------------+-----+-----------+-----+-----------+
|Total | 393| 123| 268| 854|
+-------------------------------+-----+-----------+-----+-----------+

* Register:
+-----------------------------------------+----+----+-----+-----------+
| Name | FF | LUT| Bits| Const Bits|
+-----------------------------------------+----+----+-----+-----------+
|a_1_reg_1413 | 2| 0| 2| 0|
|a_reg_377 | 2| 0| 2| 0|
|ap_CS_fsm | 57| 0| 57| 0|
|ap_reg_ioackin_cam_fb_ARREADY | 1| 0| 1| 0|
|ap_reg_ioackin_lap_fb_AWREADY | 1| 0| 1| 0|
|ap_reg_ioackin_lap_fb_WREADY | 1| 0| 1| 0|
|ap_reg_ppiten_pp0_it0 | 1| 0| 1| 0|
|ap_reg_ppiten_pp0_it1 | 1| 0| 1| 0|
|ap_reg_ppiten_pp0_it2 | 1| 0| 1| 0|
|ap_reg_ppiten_pp1_it0 | 1| 0| 1| 0|
|ap_reg_ppiten_pp1_it1 | 1| 0| 1| 0|
|ap_reg_ppiten_pp1_it2 | 1| 0| 1| 0|
|ap_reg_ppiten_pp2_it0 | 1| 0| 1| 0|
|ap_reg_ppiten_pp2_it1 | 1| 0| 1| 0|
|ap_reg_ppiten_pp2_it2 | 1| 0| 1| 0|
|ap_reg_ppstg_exitcond1_reg_1576_pp2_it1 | 1| 0| 1| 0|
|ap_reg_ppstg_exitcond2_reg_1336_pp0_it1 | 1| 0| 1| 0|
|ap_reg_ppstg_exitcond7_reg_1429_pp1_it1 | 1| 0| 1| 0|
|ap_reg_ppstg_tmp_11_reg_1345_pp0_it1 | 12| 0| 12| 0|
|ap_reg_ppstg_tmp_13_reg_1438_pp1_it1 | 12| 0| 12| 0|
|b1_reg_423 | 10| 0| 10| 0|
|b_1_reg_366 | 10| 0| 10| 0|
|b_2_reg_1446 | 10| 0| 10| 0|
|b_3_reg_1379 | 8| 0| 8| 0|
|b_4_reg_1457 | 8| 0| 8| 0|
|b_reg_1353 | 10| 0| 10| 0|
|exitcond1_reg_1576 | 1| 0| 1| 0|
|exitcond2_reg_1336 | 1| 0| 1| 0|
|exitcond4_reg_1409 | 1| 0| 1| 0|
|exitcond7_reg_1429 | 1| 0| 1| 0|
|fl_reg_1240 | 11| 0| 11| 0|
|icmp_reg_1556 | 1| 0| 1| 0|
|indvar1_reg_452 | 10| 0| 10| 0|
|indvar2_reg_355 | 10| 0| 10| 0|
|indvar_reg_412 | 10| 0| 10| 0|
|lap_buf_load_reg_1590 | 24| 0| 24| 0|
|lap_fil_val_1_reg_434 | 24| 0| 24| 0|
|line_buf_addr_2_reg_1358 | 12| 0| 12| 0|
|line_buf_addr_3_reg_1451 | 12| 0| 12| 0|
|next_mul1_reg_1221 | 19| 0| 19| 0|
|next_mul2_reg_1399 | 12| 0| 12| 0|
|next_mul_reg_1404 | 12| 0| 12| 0|
|offset_cam_addr_cast_reg_1206 | 31| 0| 31| 0|
|offset_lap_addr_cast_reg_1211 | 31| 0| 31| 0|
|p_addr1_reg_1279 | 8| 0| 13| 5|
|p_addr2_reg_1517 | 12| 0| 12| 0|
|p_addr3_reg_1286 | 7| 0| 12| 5|
|p_addr5_reg_1512 | 12| 0| 12| 0|
|p_addr8_reg_1507 | 12| 0| 12| 0|
|p_addr_reg_1271 | 7| 0| 12| 5|
|phi_mul1_reg_331 | 19| 0| 19| 0|
|phi_mul2_reg_400 | 12| 0| 12| 0|
|phi_mul_reg_388 | 12| 0| 12| 0|
|phitmp_reg_1566 | 24| 0| 24| 0|
|reg_484 | 32| 0| 32| 0|
|reg_490 | 8| 0| 8| 0|
|reg_494 | 8| 0| 8| 0|
|sl_reg_1245 | 10| 0| 10| 0|
|tl_reg_1250 | 10| 0| 10| 0|
|tmp2_reg_1467 | 16| 0| 16| 0|
|tmp4_reg_1216 | 31| 0| 31| 0|
|tmp5_reg_1389 | 16| 0| 16| 0|
|tmp6_reg_1492 | 32| 0| 32| 0|
|tmp7_reg_1522 | 32| 0| 32| 0|
|tmp_11_reg_1345 | 12| 0| 12| 0|
|tmp_12_reg_1308 | 1| 0| 1| 0|
|tmp_13_reg_1438 | 12| 0| 12| 0|
|tmp_17_reg_1364 | 11| 0| 11| 0|
|tmp_29_reg_1312 | 1| 0| 1| 0|
|tmp_29_trn_cast1_reg_1477 | 11| 0| 12| 1|
|tmp_2_reg_1325 | 31| 0| 31| 0|
|tmp_31_reg_1320 | 31| 0| 31| 0|
|tmp_33_reg_1418 | 31| 0| 31| 0|
|tmp_38_reg_1552 | 1| 0| 1| 0|
|tmp_39_i9_reg_1384 | 15| 0| 16| 1|
|tmp_39_i_reg_1462 | 15| 0| 16| 1|
|tmp_40_reg_1561 | 24| 0| 24| 0|
|tmp_43_i_reg_1547 | 32| 0| 32| 0|
|tmp_6_reg_1256 | 1| 0| 1| 0|
|tmp_7_cast1_reg_1260 | 19| 0| 31| 12|
|tmp_8_reg_1316 | 1| 0| 1| 0|
|tmp_i1_reg_1537 | 32| 0| 32| 0|
|tmp_s_reg_1266 | 7| 0| 12| 5|
|x_1_reg_1301 | 10| 0| 10| 0|
|x_cast_reg_1293 | 10| 0| 11| 1|
|x_reg_343 | 10| 0| 10| 0|
|y_1_reg_1229 | 10| 0| 10| 0|
|y_2_reg_1394 | 8| 0| 8| 0|
|y_3_reg_1472 | 8| 0| 8| 0|
|y_reg_319 | 10| 0| 10| 0|
+-----------------------------------------+----+----+-----+-----------+
|Total |1053| 0| 1089| 36|
+-----------------------------------------+----+----+-----+-----------+



================================================================
== Interface
================================================================
* Summary:
+--------------------------+-----+-----+------------+-----------------+--------------+
| RTL Ports | Dir | Bits| Protocol | Source Object | C Type |
+--------------------------+-----+-----+------------+-----------------+--------------+
|s_axi_BUS_AXI4LS_AWVALID | in | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_AWREADY | out | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_AWADDR | in | 6| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_WVALID | in | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_WREADY | out | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_WDATA | in | 32| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_WSTRB | in | 4| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_ARVALID | in | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_ARREADY | out | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_ARADDR | in | 6| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_RVALID | out | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_RREADY | in | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_RDATA | out | 32| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_RRESP | out | 2| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_BVALID | out | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_BREADY | in | 1| s_axi | BUS_AXI4LS | scalar |
|s_axi_BUS_AXI4LS_BRESP | out | 2| s_axi | BUS_AXI4LS | scalar |
|ap_clk | in | 1| ap_ctrl_hs | lap_filter_axim | return value |
|ap_rst_n | in | 1| ap_ctrl_hs | lap_filter_axim | return value |
|interrupt | out | 1| ap_ctrl_hs | lap_filter_axim | return value |
|m_axi_cam_fb_AWVALID | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWREADY | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWADDR | out | 32| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWID | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWLEN | out | 8| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWSIZE | out | 3| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWBURST | out | 2| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWLOCK | out | 2| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWCACHE | out | 4| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWPROT | out | 3| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWQOS | out | 4| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWREGION | out | 4| m_axi | cam_fb | pointer |
|m_axi_cam_fb_AWUSER | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_WVALID | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_WREADY | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_WDATA | out | 32| m_axi | cam_fb | pointer |
|m_axi_cam_fb_WSTRB | out | 4| m_axi | cam_fb | pointer |
|m_axi_cam_fb_WLAST | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_WID | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_WUSER | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARVALID | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARREADY | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARADDR | out | 32| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARID | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARLEN | out | 8| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARSIZE | out | 3| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARBURST | out | 2| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARLOCK | out | 2| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARCACHE | out | 4| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARPROT | out | 3| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARQOS | out | 4| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARREGION | out | 4| m_axi | cam_fb | pointer |
|m_axi_cam_fb_ARUSER | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_RVALID | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_RREADY | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_RDATA | in | 32| m_axi | cam_fb | pointer |
|m_axi_cam_fb_RLAST | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_RID | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_RUSER | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_RRESP | in | 2| m_axi | cam_fb | pointer |
|m_axi_cam_fb_BVALID | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_BREADY | out | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_BRESP | in | 2| m_axi | cam_fb | pointer |
|m_axi_cam_fb_BID | in | 1| m_axi | cam_fb | pointer |
|m_axi_cam_fb_BUSER | in | 1| m_axi | cam_fb | pointer |
|m_axi_lap_fb_AWVALID | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWREADY | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWADDR | out | 32| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWID | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWLEN | out | 8| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWSIZE | out | 3| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWBURST | out | 2| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWLOCK | out | 2| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWCACHE | out | 4| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWPROT | out | 3| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWQOS | out | 4| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWREGION | out | 4| m_axi | lap_fb | pointer |
|m_axi_lap_fb_AWUSER | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_WVALID | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_WREADY | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_WDATA | out | 32| m_axi | lap_fb | pointer |
|m_axi_lap_fb_WSTRB | out | 4| m_axi | lap_fb | pointer |
|m_axi_lap_fb_WLAST | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_WID | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_WUSER | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARVALID | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARREADY | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARADDR | out | 32| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARID | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARLEN | out | 8| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARSIZE | out | 3| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARBURST | out | 2| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARLOCK | out | 2| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARCACHE | out | 4| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARPROT | out | 3| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARQOS | out | 4| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARREGION | out | 4| m_axi | lap_fb | pointer |
|m_axi_lap_fb_ARUSER | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_RVALID | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_RREADY | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_RDATA | in | 32| m_axi | lap_fb | pointer |
|m_axi_lap_fb_RLAST | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_RID | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_RUSER | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_RRESP | in | 2| m_axi | lap_fb | pointer |
|m_axi_lap_fb_BVALID | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_BREADY | out | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_BRESP | in | 2| m_axi | lap_fb | pointer |
|m_axi_lap_fb_BID | in | 1| m_axi | lap_fb | pointer |
|m_axi_lap_fb_BUSER | in | 1| m_axi | lap_fb | pointer |
+--------------------------+-----+-----+------------+-----------------+--------------+

  1. 2015年03月20日 05:19 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:2

コメント

ここひと月、私事で忙しくてゆっくり見ていなかったのですがお役にたてて光栄です。

シミュレーションの波形と、3+800っていう数字から、あれ?って気付いたのですが
情報が多いと楽ですね。
今日も「動かない」の一言で回されてくる基板と格闘ですw
  1. 2015/03/20(金) 09:00:03 |
  2. URL |
  3. おる #-
  4. [ 編集 ]

昨日の朝、Visual StudioでシミュレーションしたCソースコードが違っていたんで、あれ?となったんですが、気づくまで行きませんでした。
ありがとうございました。
無駄にした期間がもったいないですが、シミュレーションのフレームワークもできたので、これからスピードアップしたいと思います。
  1. 2015/03/20(金) 09:03:42 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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