FC2カウンター FPGAの部屋 Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化1(割り算を削除)
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化1(割り算を削除)

Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション3(原因が分かった)
ZYBO Linux (Ubuntu 14.04 LTS) 上でMakefile を作ってラプラシアンフィルタIPの制御ソフトをコンパイル4(うまく行った)
で、Vivado HLS 2014.4 で合成したラプラシアンフィルタIP が動作した。

今回は、Vivado HLS のAnalysis 画面を見ながら、高速化を試みる。

Vivado HLS 2014.4 でAnalysis ボタンをクリックし、更に、Recource - lap_filter_axim タブのRecource タブをクリックする。
すると、lap_filter_axim_srem_11ns_3ns_11_15_seq_U0 がクロックを消費しているように見える。
これはCソースコードの何処なのかを知るために、lap_filter_axim_srem_11ns_3ns_11_15_seq_U0 のsrem で右クリックして、右クリックメニューからGoto Source を選択する。
lap_fil_hls_14_4_34_150322.png

右にCソースコードが表示された。該当する行がハイライトされている。
lap_fil_hls_14_4_35_150322.png

該当する行は

fl = (y-1)%3;

だった。
次に、、lap_filter_axim_srem_11ns_3ns_11_15_seq_U0 で右クリックし、右クリックメニューからGoto Verilog を選択する。
lap_fil_hls_14_4_36_150322.png

すると、該当する Verilog コードが表示される。
lap_fil_hls_14_4_37_150322.png

それは、lap_filter_axim_srem_11ns_3ns_11_15_seq.v にある lap_filter_axim_srem_11ns_3ns_11_15_seq_div モジュールを呼んでいる。つまり、割り算をしていた訳だ。

割り算をするとクロックが余計に必要になるので、カウンタで代用することにした。
int line_sel; を定義して、最初は 0 に設定し、その後は、1、2、3 と進んで、その後は 1 に戻る。
lap_fil_hls_14_4_39_150322.png

lap_fil_hls_14_4_40_150322.png

これで高位合成し、IP 化も行った。

シミュレーション環境に持って行って、Vivado HLS 2014.4 のラプラシアンフィルタIP と入れ替え、IP を更新して、論理シミュレーションを行った。下に論理シミュレーションの波形を示す。
lap_fil_hls_14_4_42_150322.png

DMA Write 間の時間は、131.81 us だった。
Cソースコードの修正前は、131.95 us だったので、140 ns の改善ということになる。100MHzクロックなので 14 クロックだ。以前の論理シミュレーション波形を下に示す。
lap_fil_hls_14_4_27_150321.png

ざっと計算して 1% 程度の改善にしかならなかった。割り算はそれ自体はクロックを消費しても、DMA Write 1回について 1回なので、このような結果になった。アムダールの法則を実感してしまった。
内部のループが圧倒的にクロックを消費しているので、そこを改善しないと効果が薄い。。。

Cソースコード (laplacian_filter.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;
    int line_sel;

    offset_cam_addr = cam_addr/sizeof(int);
    offset_lap_addr = lap_addr/sizeof(int);
    
    // RGB値をY(輝度成分)のみに変換し、ラプラシアンフィルタを掛けた。
    for (y=0, line_sel=0; y<VERTICAL_PIXEL_WIDTH; y++){
        // 最初のライン, y=1 012, y=2 120, y=3 201, y=4 012
        switch(line_sel){
            case 1 :
                fl = 0; sl = 1; tl = 2;
                break;
            case 2 :
                fl = 1; sl = 2; tl = 0;
                break;
            case 3 :
                fl = 2; sl = 0; tl = 1;
                break;
            default :
                fl = 0; sl = 1; tl = 2;
        }

        //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[tl], (const int*)cam_fb_addr, HORIZONTAL_PIXEL_WIDTH*sizeof(int));
                        for (b=0; b<HORIZONTAL_PIXEL_WIDTH; b++){ // ライン
                            line_buf[tl][b] = conv_rgb2y(line_buf[tl][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));

        line_sel++;
        if (line_sel > 3){
            line_sel = 1;
        }
    }
    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);
}


合成結果は、割り算を削除したので、前回の結果と比較するとリソース使用量が減っている。
前回の高位合成結果の内のUtilization Estimates を示す。

================================================================
== 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|
+-----------------+---------+-------+-------+-------+


割り算を削除した今回の高位合成結果の内のUtilization Estimates を示す。

================================================================
== Utilization Estimates
================================================================
* Summary:
+-----------------+---------+-------+-------+-------+
| Name | BRAM_18K| DSP48E| FF | LUT |
+-----------------+---------+-------+-------+-------+
|Expression | -| 11| 0| 1080|
|FIFO | -| -| -| -|
|Instance | 0| -| 1168| 1392|
|Memory | 10| -| 0| 0|
|Multiplexer | -| -| -| 401|
|Register | -| -| 1086| -|
+-----------------+---------+-------+-------+-------+
|Total | 10| 11| 2254| 2873|
+-----------------+---------+-------+-------+-------+
|Available | 120| 80| 35200| 17600|
+-----------------+---------+-------+-------+-------+
|Utilization (%) | 8| 13| 6| 16|
+-----------------+---------+-------+-------+-------+


最後に高位合成時のレポートを貼っておく。

================================================================
== Vivado HLS Report for 'lap_filter_axim'
================================================================
* Date: Sun Mar 22 05:31:18 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 |
+---------+------------+---------+------------+---------+
| 1445401| 8083685401| 1445402| 8083685402| none |
+---------+------------+---------+------------+---------+

+ Detail:
* Instance:
N/A

* Loop:
+------------------------------+---------+------------+-----------------+-----------+-----------+------+----------+
| | Latency | Iteration | Initiation Interval | Trip | |
| Loop Name | min | max | Latency | achieved | target | Count| Pipelined|
+------------------------------+---------+------------+-----------------+-----------+-----------+------+----------+
|- Loop 1 | 1445400| 8083685400| 2409 ~ 13472809 | -| -| 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 |
| +++ Loop 1.1.1.2 | 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| 1080|
|FIFO | -| -| -| -|
|Instance | 0| -| 1168| 1392|
|Memory | 10| -| 0| 0|
|Multiplexer | -| -| -| 401|
|Register | -| -| 1086| -|
+-----------------+---------+-------+-------+-------+
|Total | 10| 11| 2254| 2873|
+-----------------+---------+-------+-------+-------+
|Available | 120| 80| 35200| 17600|
+-----------------+---------+-------+-------+-------+
|Utilization (%) | 8| 13| 6| 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|
+------------------------------------+----------------------------------+---------+-------+-----+-----+
|Total | | 0| 0| 1168| 1392|
+------------------------------------+----------------------------------+---------+-------+-----+-----+

* 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_691_p2 | * | 1| 0| 0| 2| 10|
|p_addr3_fu_700_p2 | * | 1| 0| 0| 2| 10|
|p_addr_fu_682_p2 | * | 1| 0| 0| 2| 10|
|tmp_2_fu_673_p2 | * | 1| 0| 0| 2| 10|
|tmp_38_i8_fu_902_p2 | * | 1| 0| 0| 8| 7|
|tmp_38_i_fu_1059_p2 | * | 1| 0| 0| 8| 7|
|tmp_39_i9_fu_874_p2 | * | 1| 0| 0| 8| 8|
|tmp_39_i_fu_1031_p2 | * | 1| 0| 0| 8| 8|
|tmp_40_i1_fu_883_p2 | * | 1| 0| 0| 8| 5|
|tmp_40_i_fu_1040_p2 | * | 1| 0| 0| 8| 5|
|y_i16_op_cast_fu_1226_p2 | * | 1| 0| 1| 24| 17|
|a_1_fu_945_p2 | + | 0| 0| 2| 2| 1|
|b_2_fu_1002_p2 | + | 0| 0| 10| 10| 1|
|b_fu_813_p2 | + | 0| 0| 10| 10| 1|
|indvar_next1_fu_1259_p2 | + | 0| 0| 10| 10| 1|
|indvar_next2_fu_792_p2 | + | 0| 0| 10| 10| 1|
|indvar_next_fu_980_p2 | + | 0| 0| 10| 10| 1|
|line_sel_1_fu_1274_p2 | + | 0| 0| 32| 32| 1|
|next_mul1_fu_542_p2 | + | 0| 0| 19| 19| 10|
|next_mul2_fu_927_p2 | + | 0| 0| 12| 12| 10|
|next_mul_fu_933_p2 | + | 0| 0| 12| 12| 10|
|p_addr10_fu_1087_p2 | + | 0| 0| 12| 12| 12|
|p_addr11_fu_1121_p2 | + | 0| 0| 12| 12| 12|
|p_addr12_fu_1097_p2 | + | 0| 0| 12| 12| 12|
|p_addr13_fu_1112_p2 | + | 0| 0| 12| 12| 12|
|p_addr2_fu_1138_p2 | + | 0| 0| 12| 12| 12|
|p_addr4_fu_842_p2 | + | 0| 0| 12| 12| 12|
|p_addr5_fu_1134_p2 | + | 0| 0| 12| 12| 12|
|p_addr6_fu_823_p2 | + | 0| 0| 12| 12| 12|
|p_addr7_fu_856_p2 | + | 0| 0| 12| 12| 12|
|p_addr8_fu_1130_p2 | + | 0| 0| 12| 12| 12|
|p_addr9_fu_1012_p2 | + | 0| 0| 12| 12| 12|
|sum2_i_fu_1162_p2 | + | 0| 0| 16| 32| 32|
|tmp21_fu_1106_p2 | + | 0| 0| 32| 32| 32|
|tmp22_fu_1142_p2 | + | 0| 0| 32| 32| 32|
|tmp_12_fu_986_p2 | + | 0| 0| 12| 12| 12|
|tmp_17_fu_833_p2 | + | 0| 0| 11| 11| 2|
|tmp_35_fu_764_p2 | + | 0| 0| 31| 31| 31|
|tmp_37_fu_955_p2 | + | 0| 0| 31| 31| 31|
|tmp_8_fu_768_p2 | + | 0| 0| 31| 31| 31|
|tmp_fu_536_p2 | + | 0| 0| 31| 31| 10|
|tmp_s_fu_798_p2 | + | 0| 0| 12| 12| 12|
|x_1_fu_716_p2 | + | 0| 0| 10| 10| 1|
|y_1_fu_554_p2 | + | 0| 0| 10| 10| 1|
|sum3_neg_i_fu_1166_p2 | - | 0| 0| 16| 32| 32|
|tmp_42_i_fu_1182_p2 | - | 0| 0| 32| 32| 32|
|tmp_43_i_fu_1187_p2 | - | 0| 0| 32| 32| 32|
|tmp_i1_fu_1172_p2 | - | 0| 0| 32| 32| 32|
|y_4_fu_1193_p2 | - | 0| 0| 32| 32| 32|
|newSel2_fu_602_p3 | Select | 0| 0| 3| 1| 1|
|newSel_fu_594_p3 | Select | 0| 0| 3| 1| 3|
|p_s_fu_1296_p3 | Select | 0| 0| 32| 1| 1|
|phitmp_fu_1231_p3 | Select | 0| 0| 24| 1| 2|
|sel_tmp1_fu_620_p3 | Select | 0| 0| 3| 1| 1|
|sel_tmp3_fu_628_p3 | Select | 0| 0| 3| 1| 3|
|tl_fu_636_p3 | Select | 0| 0| 2| 1| 2|
|tmp_5_fu_644_p3 | Select | 0| 0| 2| 1| 2|
|tmp_6_fu_652_p3 | Select | 0| 0| 2| 1| 2|
|ap_sig_bdd_1016 | and | 0| 0| 1| 1| 1|
|ap_sig_bdd_373 | and | 0| 0| 1| 1| 1|
|ap_sig_bdd_394 | and | 0| 0| 1| 1| 1|
|exitcond1_fu_1253_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond2_fu_786_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond3_fu_996_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond4_fu_939_p2 | icmp | 0| 0| 2| 2| 2|
|exitcond5_fu_710_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond6_fu_548_p2 | icmp | 0| 0| 11| 10| 10|
|exitcond7_fu_974_p2 | icmp | 0| 0| 11| 10| 9|
|exitcond_fu_807_p2 | icmp | 0| 0| 11| 10| 9|
|icmp1_fu_1290_p2 | icmp | 0| 0| 38| 30| 1|
|icmp_fu_1216_p2 | icmp | 0| 0| 30| 24| 1|
|sel_tmp2_fu_566_p2 | icmp | 0| 0| 40| 32| 2|
|sel_tmp4_fu_572_p2 | icmp | 0| 0| 40| 32| 1|
|sel_tmp_fu_560_p2 | icmp | 0| 0| 40| 32| 2|
|tmp_13_fu_722_p2 | icmp | 0| 0| 11| 10| 10|
|tmp_19_fu_728_p2 | icmp | 0| 0| 11| 10| 1|
|tmp_30_fu_740_p2 | icmp | 0| 0| 11| 10| 9|
|tmp_32_fu_746_p2 | icmp | 0| 0| 11| 10| 1|
|tmp_4_fu_663_p2 | icmp | 0| 0| 11| 10| 1|
|tmp_7_fu_758_p2 | icmp | 0| 0| 11| 10| 1|
|or_cond_fu_588_p2 | or | 0| 0| 1| 1| 1|
|tmp_29_fu_734_p2 | or | 0| 0| 1| 1| 1|
|tmp_33_fu_752_p2 | or | 0| 0| 1| 1| 1|
|not_sel_tmp4_fu_578_p2 | xor | 0| 0| 2| 1| 2|
|not_sel_tmp_fu_610_p2 | xor | 0| 0| 2| 1| 2|
+--------------------------+----------+-------+---+----+------------+------------+
|Total | | 11| 0|1080| 1073| 776|
+--------------------------+----------+-------+---+----+------------+------------+

* Multiplexer:
+-------------------------------+----+-----------+-----+-----------+
| Name | LUT| Input Size| Bits| Total Bits|
+-------------------------------+----+-----------+-----+-----------+
|a_reg_387 | 2| 2| 2| 4|
|ap_NS_fsm | 78| 44| 1| 44|
|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_433 | 10| 2| 10| 20|
|b_1_reg_376 | 10| 2| 10| 20|
|cam_fb_ARADDR | 32| 3| 32| 96|
|indvar1_reg_462 | 10| 2| 10| 20|
|indvar2_reg_365 | 10| 2| 10| 20|
|indvar_reg_422 | 10| 2| 10| 20|
|lap_buf_address0 | 10| 3| 10| 30|
|lap_fil_val_1_phi_fu_448_p8 | 24| 2| 24| 48|
|lap_fil_val_1_reg_444 | 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|
|line_sel_reg_329 | 32| 2| 32| 64|
|phi_mul1_reg_341 | 19| 2| 19| 38|
|phi_mul2_reg_410 | 12| 2| 12| 24|
|phi_mul_reg_398 | 12| 2| 12| 24|
|x_reg_353 | 10| 2| 10| 20|
|y_reg_317 | 10| 2| 10| 20|
+-------------------------------+----+-----------+-----+-----------+
|Total | 401| 111| 300| 904|
+-------------------------------+----+-----------+-----+-----------+

* Register:
+-----------------------------------------+----+----+-----+-----------+
| Name | FF | LUT| Bits| Const Bits|
+-----------------------------------------+----+----+-----+-----------+
|a_1_reg_1511 | 2| 0| 2| 0|
|a_reg_387 | 2| 0| 2| 0|
|ap_CS_fsm | 43| 0| 43| 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_1675_pp2_it1 | 1| 0| 1| 0|
|ap_reg_ppstg_exitcond2_reg_1427_pp0_it1 | 1| 0| 1| 0|
|ap_reg_ppstg_exitcond7_reg_1527_pp1_it1 | 1| 0| 1| 0|
|ap_reg_ppstg_tmp_12_reg_1536_pp1_it1 | 12| 0| 12| 0|
|ap_reg_ppstg_tmp_s_reg_1436_pp0_it1 | 12| 0| 12| 0|
|b1_reg_433 | 10| 0| 10| 0|
|b_1_reg_376 | 10| 0| 10| 0|
|b_2_reg_1544 | 10| 0| 10| 0|
|b_3_reg_1477 | 8| 0| 8| 0|
|b_4_reg_1555 | 8| 0| 8| 0|
|b_reg_1444 | 10| 0| 10| 0|
|exitcond1_reg_1675 | 1| 0| 1| 0|
|exitcond2_reg_1427 | 1| 0| 1| 0|
|exitcond4_reg_1507 | 1| 0| 1| 0|
|exitcond7_reg_1527 | 1| 0| 1| 0|
|icmp_reg_1655 | 1| 0| 1| 0|
|indvar1_reg_462 | 10| 0| 10| 0|
|indvar2_reg_365 | 10| 0| 10| 0|
|indvar_reg_422 | 10| 0| 10| 0|
|lap_buf_load_reg_1689 | 24| 0| 24| 0|
|lap_fil_val_1_reg_444 | 24| 0| 24| 0|
|line_buf_addr_2_reg_1449 | 12| 0| 12| 0|
|line_buf_addr_3_reg_1549 | 12| 0| 12| 0|
|line_sel_reg_329 | 32| 0| 32| 0|
|next_mul1_reg_1319 | 19| 0| 19| 0|
|next_mul2_reg_1497 | 12| 0| 12| 0|
|next_mul_reg_1502 | 12| 0| 12| 0|
|offset_cam_addr_cast_reg_1304 | 31| 0| 31| 0|
|offset_lap_addr_cast_reg_1309 | 31| 0| 31| 0|
|p_addr1_reg_1371 | 7| 0| 12| 5|
|p_addr2_reg_1616 | 12| 0| 12| 0|
|p_addr3_reg_1378 | 7| 0| 12| 5|
|p_addr5_reg_1611 | 12| 0| 12| 0|
|p_addr8_reg_1606 | 12| 0| 12| 0|
|p_addr_reg_1363 | 7| 0| 12| 5|
|p_s_reg_1694 | 32| 0| 32| 0|
|phi_mul1_reg_341 | 19| 0| 19| 0|
|phi_mul2_reg_410 | 12| 0| 12| 0|
|phi_mul_reg_398 | 12| 0| 12| 0|
|phitmp_reg_1665 | 24| 0| 24| 0|
|reg_494 | 32| 0| 32| 0|
|reg_500 | 8| 0| 8| 0|
|reg_504 | 8| 0| 8| 0|
|tl_reg_1332 | 2| 0| 2| 0|
|tmp17_reg_1487 | 16| 0| 16| 0|
|tmp19_reg_1565 | 16| 0| 16| 0|
|tmp21_reg_1591 | 32| 0| 32| 0|
|tmp22_reg_1621 | 32| 0| 32| 0|
|tmp_12_reg_1536 | 12| 0| 12| 0|
|tmp_29_reg_1399 | 1| 0| 1| 0|
|tmp_2_reg_1358 | 7| 0| 12| 5|
|tmp_31_trn_cast_reg_1455 | 11| 0| 12| 1|
|tmp_32_trn_cast_reg_1466 | 10| 0| 12| 2|
|tmp_33_reg_1403 | 1| 0| 1| 0|
|tmp_34_trn_cast_reg_1575 | 10| 0| 12| 2|
|tmp_35_reg_1411 | 31| 0| 31| 0|
|tmp_37_reg_1516 | 31| 0| 31| 0|
|tmp_39_i9_reg_1482 | 15| 0| 16| 1|
|tmp_39_i_reg_1560 | 15| 0| 16| 1|
|tmp_42_reg_1651 | 1| 0| 1| 0|
|tmp_43_i_reg_1646 | 32| 0| 32| 0|
|tmp_44_reg_1660 | 24| 0| 24| 0|
|tmp_4_reg_1348 | 1| 0| 1| 0|
|tmp_5_cast1_reg_1352 | 19| 0| 31| 12|
|tmp_5_reg_1338 | 2| 0| 2| 0|
|tmp_6_reg_1343 | 2| 0| 2| 0|
|tmp_7_reg_1407 | 1| 0| 1| 0|
|tmp_8_reg_1416 | 31| 0| 31| 0|
|tmp_i1_reg_1636 | 32| 0| 32| 0|
|tmp_reg_1314 | 31| 0| 31| 0|
|tmp_s_reg_1436 | 12| 0| 12| 0|
|x_1_reg_1393 | 10| 0| 10| 0|
|x_cast_reg_1385 | 10| 0| 11| 1|
|x_reg_353 | 10| 0| 10| 0|
|y_1_reg_1327 | 10| 0| 10| 0|
|y_2_reg_1492 | 8| 0| 8| 0|
|y_3_reg_1570 | 8| 0| 8| 0|
|y_reg_317 | 10| 0| 10| 0|
+-----------------------------------------+----+----+-----+-----------+
|Total |1086| 0| 1126| 40|
+-----------------------------------------+----+----+-----+-----------+



================================================================
== 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月22日 11:25 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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