================================================================ == Vivado HLS Report for 'write_pixel' ================================================================ * Date: Wed May 30 18:59:16 2018 * Version: 2017.4 (Build 2086221 on Fri Dec 15 21:13:33 MST 2017) * Project: edge_detection * Solution: solution0 * Product family: zynq * Target device: xc7z020clg484-1 ================================================================ == Performance Estimates ================================================================ + Timing (ns): * Summary: +--------+-------+----------+------------+ | Clock | Target| Estimated| Uncertainty| +--------+-------+----------+------------+ |ap_clk | 10.00| 8.75| 1.25| +--------+-------+----------+------------+ + Latency (clock cycles): * Summary: +-----+-----+-----+-----+---------+ | Latency | Interval | Pipeline| | min | max | min | max | Type | +-----+-----+-----+-----+---------+ | 332| 332| 332| 332| none | +-----+-----+-----+-----+---------+ + Detail: * Instance: N/A * Loop: +--------------+-----+-----+----------+-----------+-----------+------+----------+ | | Latency | Iteration| Initiation Interval | Trip | | | Loop Name | min | max | Latency | achieved | target | Count| Pipelined| +--------------+-----+-----+----------+-----------+-----------+------+----------+ |- write_loop | 325| 325| 3| 1| 1| 324| yes | +--------------+-----+-----+----------+-----------+-----------+------+----------+ ================================================================ == Utilization Estimates ================================================================ * Summary: +-----------------+---------+-------+--------+-------+ | Name | BRAM_18K| DSP48E| FF | LUT | +-----------------+---------+-------+--------+-------+ |DSP | -| -| -| -| |Expression | -| -| 0| 85| |FIFO | -| -| -| -| |Instance | -| -| -| -| |Memory | -| -| -| -| |Multiplexer | -| -| -| 143| |Register | -| -| 87| -| +-----------------+---------+-------+--------+-------+ |Total | 0| 0| 87| 228| +-----------------+---------+-------+--------+-------+ |Available | 280| 220| 106400| 53200| +-----------------+---------+-------+--------+-------+ |Utilization (%) | 0| 0| ~0 | ~0 | +-----------------+---------+-------+--------+-------+ + Detail: * Instance: N/A * DSP48: N/A * Memory: N/A * FIFO: N/A * Expression: +----------------------------------+----------+-------+---+----+------------+------------+ | Variable Name | Operation| DSP48E| FF| LUT| Bitwidth P0| Bitwidth P1| +----------------------------------+----------+-------+---+----+------------+------------+ |i_fu_157_p2 | + | 0| 0| 16| 9| 1| |ap_block_pp0_stage0_01001 | and | 0| 0| 8| 1| 1| |ap_block_state4_pp0_stage0_iter1 | and | 0| 0| 8| 1| 1| |ap_block_state5_io | and | 0| 0| 8| 1| 1| |exitcond_i_fu_151_p2 | icmp | 0| 0| 13| 9| 9| |ap_block_pp0_stage0_11001 | or | 0| 0| 8| 1| 1| |ap_block_state1 | or | 0| 0| 8| 1| 1| |ap_enable_pp0 | xor | 0| 0| 8| 1| 2| |ap_enable_reg_pp0_iter1 | xor | 0| 0| 8| 2| 1| +----------------------------------+----------+-------+---+----+------------+------------+ |Total | | 0| 0| 85| 26| 18| +----------------------------------+----------+-------+---+----+------------+------------+ * Multiplexer: +----------------------------------------+----+-----------+-----+-----------+ | Name | LUT| Input Size| Bits| Total Bits| +----------------------------------------+----+-----------+-----+-----------+ |ap_NS_fsm | 44| 9| 1| 9| |ap_done | 9| 2| 1| 2| |ap_enable_reg_pp0_iter1 | 9| 2| 1| 2| |ap_enable_reg_pp0_iter2 | 9| 2| 1| 2| |ap_sig_ioackin_m_axi_out_array_AWREADY | 9| 2| 1| 2| |ap_sig_ioackin_m_axi_out_array_WREADY | 9| 2| 1| 2| |i_i_reg_120 | 9| 2| 9| 18| |out_array_blk_n_AW | 9| 2| 1| 2| |out_array_blk_n_B | 9| 2| 1| 2| |out_array_blk_n_W | 9| 2| 1| 2| |out_array_offset_blk_n | 9| 2| 1| 2| |out_stream_V_blk_n | 9| 2| 1| 2| +----------------------------------------+----+-----------+-----+-----------+ |Total | 143| 31| 20| 47| +----------------------------------------+----+-----------+-----+-----------+ * Register: +----------------------------------------+----+----+-----+-----------+ | Name | FF | LUT| Bits| Const Bits| +----------------------------------------+----+----+-----+-----------+ |ap_CS_fsm | 8| 0| 8| 0| |ap_done_reg | 1| 0| 1| 0| |ap_enable_reg_pp0_iter0 | 1| 0| 1| 0| |ap_enable_reg_pp0_iter1 | 1| 0| 1| 0| |ap_enable_reg_pp0_iter2 | 1| 0| 1| 0| |ap_reg_ioackin_m_axi_out_array_AWREADY | 1| 0| 1| 0| |ap_reg_ioackin_m_axi_out_array_WREADY | 1| 0| 1| 0| |ap_reg_pp0_iter1_exitcond_i_reg_174 | 1| 0| 1| 0| |exitcond_i_reg_174 | 1| 0| 1| 0| |i_i_reg_120 | 9| 0| 9| 0| |out_array_offset1_i_reg_163 | 30| 0| 30| 0| |tmp_reg_183 | 32| 0| 32| 0| +----------------------------------------+----+----+-----+-----------+ |Total | 87| 0| 87| 0| +----------------------------------------+----+----+-----+-----------+ ================================================================ == Interface ================================================================ * Summary: +--------------------------+-----+-----+------------+------------------+--------------+ | RTL Ports | Dir | Bits| Protocol | Source Object | C Type | +--------------------------+-----+-----+------------+------------------+--------------+ |ap_clk | in | 1| ap_ctrl_hs | write_pixel | return value | |ap_rst | in | 1| ap_ctrl_hs | write_pixel | return value | |ap_start | in | 1| ap_ctrl_hs | write_pixel | return value | |ap_done | out | 1| ap_ctrl_hs | write_pixel | return value | |ap_continue | in | 1| ap_ctrl_hs | write_pixel | return value | |ap_idle | out | 1| ap_ctrl_hs | write_pixel | return value | |ap_ready | out | 1| ap_ctrl_hs | write_pixel | return value | |out_stream_V_dout | in | 32| ap_fifo | out_stream_V | pointer | |out_stream_V_empty_n | in | 1| ap_fifo | out_stream_V | pointer | |out_stream_V_read | out | 1| ap_fifo | out_stream_V | pointer | |m_axi_out_array_AWVALID | out | 1| m_axi | out_array | pointer | |m_axi_out_array_AWREADY | in | 1| m_axi | out_array | pointer | |m_axi_out_array_AWADDR | out | 32| m_axi | out_array | pointer | |m_axi_out_array_AWID | out | 1| m_axi | out_array | pointer | |m_axi_out_array_AWLEN | out | 32| m_axi | out_array | pointer | |m_axi_out_array_AWSIZE | out | 3| m_axi | out_array | pointer | |m_axi_out_array_AWBURST | out | 2| m_axi | out_array | pointer | |m_axi_out_array_AWLOCK | out | 2| m_axi | out_array | pointer | |m_axi_out_array_AWCACHE | out | 4| m_axi | out_array | pointer | |m_axi_out_array_AWPROT | out | 3| m_axi | out_array | pointer | |m_axi_out_array_AWQOS | out | 4| m_axi | out_array | pointer | |m_axi_out_array_AWREGION | out | 4| m_axi | out_array | pointer | |m_axi_out_array_AWUSER | out | 1| m_axi | out_array | pointer | |m_axi_out_array_WVALID | out | 1| m_axi | out_array | pointer | |m_axi_out_array_WREADY | in | 1| m_axi | out_array | pointer | |m_axi_out_array_WDATA | out | 32| m_axi | out_array | pointer | |m_axi_out_array_WSTRB | out | 4| m_axi | out_array | pointer | |m_axi_out_array_WLAST | out | 1| m_axi | out_array | pointer | |m_axi_out_array_WID | out | 1| m_axi | out_array | pointer | |m_axi_out_array_WUSER | out | 1| m_axi | out_array | pointer | |m_axi_out_array_ARVALID | out | 1| m_axi | out_array | pointer | |m_axi_out_array_ARREADY | in | 1| m_axi | out_array | pointer | |m_axi_out_array_ARADDR | out | 32| m_axi | out_array | pointer | |m_axi_out_array_ARID | out | 1| m_axi | out_array | pointer | |m_axi_out_array_ARLEN | out | 32| m_axi | out_array | pointer | |m_axi_out_array_ARSIZE | out | 3| m_axi | out_array | pointer | |m_axi_out_array_ARBURST | out | 2| m_axi | out_array | pointer | |m_axi_out_array_ARLOCK | out | 2| m_axi | out_array | pointer | |m_axi_out_array_ARCACHE | out | 4| m_axi | out_array | pointer | |m_axi_out_array_ARPROT | out | 3| m_axi | out_array | pointer | |m_axi_out_array_ARQOS | out | 4| m_axi | out_array | pointer | |m_axi_out_array_ARREGION | out | 4| m_axi | out_array | pointer | |m_axi_out_array_ARUSER | out | 1| m_axi | out_array | pointer | |m_axi_out_array_RVALID | in | 1| m_axi | out_array | pointer | |m_axi_out_array_RREADY | out | 1| m_axi | out_array | pointer | |m_axi_out_array_RDATA | in | 32| m_axi | out_array | pointer | |m_axi_out_array_RLAST | in | 1| m_axi | out_array | pointer | |m_axi_out_array_RID | in | 1| m_axi | out_array | pointer | |m_axi_out_array_RUSER | in | 1| m_axi | out_array | pointer | |m_axi_out_array_RRESP | in | 2| m_axi | out_array | pointer | |m_axi_out_array_BVALID | in | 1| m_axi | out_array | pointer | |m_axi_out_array_BREADY | out | 1| m_axi | out_array | pointer | |m_axi_out_array_BRESP | in | 2| m_axi | out_array | pointer | |m_axi_out_array_BID | in | 1| m_axi | out_array | pointer | |m_axi_out_array_BUSER | in | 1| m_axi | out_array | pointer | |out_array_offset_dout | in | 32| ap_fifo | out_array_offset | pointer | |out_array_offset_empty_n | in | 1| ap_fifo | out_array_offset | pointer | |out_array_offset_read | out | 1| ap_fifo | out_array_offset | pointer | +--------------------------+-----+-----+------------+------------------+--------------+ ============================================================ + Verbose Summary: Synthesis Manager ============================================================ InlineROM: 1 ExposeGlobal: 0 ============================================================ + Verbose Summary: CDFG Model ============================================================ IsTopModel: 0 ResetActiveHigh: 1 IsCombinational: 2 IsDatapathOnly: 0 HasWiredReturn: 1 HasMFsm: 0 HasVarLatency: 1 IsPipeline: 0 IsRtlPipelined: 0 IsInstanceOverlapped: 0 IsDontTouch: 0 HasImplIP: 0 IsGatedGlobalClock: 0 + Individual pipeline summary: * Pipeline-0: initiation interval (II) = 1, depth = 3 ============================================================ + Verbose Summary: Schedule ============================================================ * Number of FSM states : 10 * Pipeline : 1 Pipeline-0 : II = 1, D = 3, States = { 3 4 5 } * Dataflow Pipeline: 0 * FSM state transitions: 1 --> 2 / true 2 --> 3 / true 3 --> 6 / (exitcond_i) 4 / (!exitcond_i) 4 --> 5 / true 5 --> 3 / true 6 --> 7 / true 7 --> 8 / true 8 --> 9 / true 9 --> 10 / true 10 --> * FSM state operations: : 3.63ns ST_1 : Operation 11 [1/1] (3.63ns) ---> "%out_array_offset_rea = call i32 @_ssdm_op_Read.ap_fifo.i32P(i32* %out_array_offset)" ---> Core 32 'FIFO' ST_1 : Operation 12 [1/1] (0.00ns) ---> "%out_array_offset1_i = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %out_array_offset_rea, i32 2, i32 31)" : 8.75ns ST_2 : Operation 13 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(float* %out_stream_V, [8 x i8]* @ap_fifo_str, i32 0, i32 0, [1 x i8]* @p_str44, i32 0, i32 0, [1 x i8]* @p_str45, [1 x i8]* @p_str46, [1 x i8]* @p_str47, i32 2, i32 2, i32 16, i32 16, [1 x i8]* @p_str48, [1 x i8]* @p_str49)" ST_2 : Operation 14 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(float* %out_array, [6 x i8]* @p_str6, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 400, [10 x i8]* @p_str7, [6 x i8]* @p_str8, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_2 : Operation 15 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32* %out_array_offset, [8 x i8]* @ap_fifo_str, i32 0, i32 0, [1 x i8]* @p_str29, i32 0, i32 0, [1 x i8]* @p_str30, [1 x i8]* @p_str31, [1 x i8]* @p_str32, i32 2, i32 2, i32 16, i32 16, [1 x i8]* @p_str33, [1 x i8]* @p_str34)" ST_2 : Operation 16 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(float* %out_stream_V, [8 x i8]* @ap_fifo_str, i32 0, i32 0, [1 x i8]* @p_str44, i32 0, i32 0, [1 x i8]* @p_str45, [1 x i8]* @p_str46, [1 x i8]* @p_str47, i32 2, i32 2, i32 16, i32 16, [1 x i8]* @p_str48, [1 x i8]* @p_str49)" ST_2 : Operation 17 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(float* %out_array, [6 x i8]* @p_str6, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 400, [10 x i8]* @p_str7, [6 x i8]* @p_str8, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_2 : Operation 18 [1/1] (0.00ns) ---> "%sext_i = zext i30 %out_array_offset1_i to i64" ST_2 : Operation 19 [1/1] (0.00ns) ---> "%out_array_addr = getelementptr float* %out_array, i64 %sext_i" ST_2 : Operation 20 [1/1] (8.75ns) ---> "%out_array_addr_i_wr_s = call i1 @_ssdm_op_WriteReq.m_axi.floatP(float* %out_array_addr, i32 324)" [edge_detection/edge_detection.cpp:72] ---> Core 9 'm_axi' ST_2 : Operation 21 [1/1] (1.76ns) ---> "br label %0" [edge_detection/edge_detection.cpp:69] : 1.94ns ST_3 : Operation 22 [1/1] (0.00ns) ---> "%i_i = phi i9 [ 0, %entry ], [ %i, %1 ]" ST_3 : Operation 23 [1/1] (1.66ns) ---> "%exitcond_i = icmp eq i9 %i_i, -188" [edge_detection/edge_detection.cpp:69] ---> Core 25 'Cmp' ST_3 : Operation 24 [1/1] (1.93ns) ---> "%i = add i9 %i_i, 1" [edge_detection/edge_detection.cpp:69] ---> Core 14 'AddSub' ST_3 : Operation 25 [1/1] (0.00ns) ---> "br i1 %exitcond_i, label %.exit, label %1" [edge_detection/edge_detection.cpp:69] : 3.63ns ST_4 : Operation 26 [1/1] (3.63ns) ---> "%tmp = call float @_ssdm_op_Read.ap_fifo.volatile.floatP(float* %out_stream_V)" [edge_detection/edge_detection.cpp:71] ---> Core 32 'FIFO' : 8.75ns ST_5 : Operation 27 [1/1] (0.00ns) ---> "%empty = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 324, i64 324, i64 324)" ST_5 : Operation 28 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([11 x i8]* @p_str2) nounwind" [edge_detection/edge_detection.cpp:69] ST_5 : Operation 29 [1/1] (0.00ns) ---> "%tmp_2_i = call i32 (...)* @_ssdm_op_SpecRegionBegin([11 x i8]* @p_str2)" [edge_detection/edge_detection.cpp:69] ST_5 : Operation 30 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecPipeline(i32 -1, i32 1, i32 1, i32 0, [1 x i8]* @p_str1) nounwind" [edge_detection/edge_detection.cpp:70] ST_5 : Operation 31 [1/1] (8.75ns) ---> "call void @_ssdm_op_Write.m_axi.floatP(float* %out_array_addr, float %tmp, i4 -1)" [edge_detection/edge_detection.cpp:72] ---> Core 9 'm_axi' ST_5 : Operation 32 [1/1] (0.00ns) ---> "%empty_9 = call i32 (...)* @_ssdm_op_SpecRegionEnd([11 x i8]* @p_str2, i32 %tmp_2_i)" [edge_detection/edge_detection.cpp:73] ST_5 : Operation 33 [1/1] (0.00ns) ---> "br label %0" [edge_detection/edge_detection.cpp:69] : 8.75ns ST_6 : Operation 34 [5/5] (8.75ns) ---> "%out_array_addr_i_wr_1 = call i1 @_ssdm_op_WriteResp.m_axi.floatP(float* %out_array_addr)" [edge_detection/edge_detection.cpp:72] ---> Core 9 'm_axi' : 8.75ns ST_7 : Operation 35 [4/5] (8.75ns) ---> "%out_array_addr_i_wr_1 = call i1 @_ssdm_op_WriteResp.m_axi.floatP(float* %out_array_addr)" [edge_detection/edge_detection.cpp:72] ---> Core 9 'm_axi' : 8.75ns ST_8 : Operation 36 [3/5] (8.75ns) ---> "%out_array_addr_i_wr_1 = call i1 @_ssdm_op_WriteResp.m_axi.floatP(float* %out_array_addr)" [edge_detection/edge_detection.cpp:72] ---> Core 9 'm_axi' : 8.75ns ST_9 : Operation 37 [2/5] (8.75ns) ---> "%out_array_addr_i_wr_1 = call i1 @_ssdm_op_WriteResp.m_axi.floatP(float* %out_array_addr)" [edge_detection/edge_detection.cpp:72] ---> Core 9 'm_axi' : 8.75ns ST_10 : Operation 38 [1/5] (8.75ns) ---> "%out_array_addr_i_wr_1 = call i1 @_ssdm_op_WriteResp.m_axi.floatP(float* %out_array_addr)" [edge_detection/edge_detection.cpp:72] ---> Core 9 'm_axi' ST_10 : Operation 39 [1/1] (0.00ns) ---> "ret void" ============================================================ + Verbose Summary: Binding ============================================================ STG Binding: ---------------- STG Properties BEGIN ---------------- - Is combinational: 0 - Is one-state seq: 0 - Is datapath-only: 0 - Is pipelined: 0 - Is top level: 0 Port [ Return ] is wired: 1; IO mode=ap_ctrl_hs:ce=0 Port [ out_stream_V]: wired=1; compound=1; hidden=0; nouse=0; global=0; static=0; extern=0; dir=0; type=3; pingpong=0; private_global=0; IO mode=ap_fifo:ce=0 Port [ out_array]: wired=1; compound=1; hidden=0; nouse=0; global=0; static=0; extern=0; dir=1; type=4; pingpong=0; private_global=0; IO mode=m_axi:ce=0 Port [ out_array_offset]: wired=1; compound=1; hidden=0; nouse=0; global=0; static=0; extern=0; dir=0; type=3; pingpong=0; private_global=0; IO mode=ap_fifo:ce=0 ---------------- STG Properties END ------------------ ---------------- Datapath Model BEGIN ---------------- out_array_offset_rea (read ) [ 00000000000] out_array_offset1_i (partselect ) [ 00100000000] StgValue_13 (specinterface ) [ 00000000000] StgValue_14 (specinterface ) [ 00000000000] StgValue_15 (specinterface ) [ 00000000000] StgValue_16 (specinterface ) [ 00000000000] StgValue_17 (specinterface ) [ 00000000000] sext_i (zext ) [ 00000000000] out_array_addr (getelementptr ) [ 00011111111] out_array_addr_i_wr_s (writereq ) [ 00000000000] StgValue_21 (br ) [ 00111100000] i_i (phi ) [ 00010000000] exitcond_i (icmp ) [ 00011100000] i (add ) [ 00111100000] StgValue_25 (br ) [ 00000000000] tmp (read ) [ 00010100000] empty (speclooptripcount) [ 00000000000] StgValue_28 (specloopname ) [ 00000000000] tmp_2_i (specregionbegin ) [ 00000000000] StgValue_30 (specpipeline ) [ 00000000000] StgValue_31 (write ) [ 00000000000] empty_9 (specregionend ) [ 00000000000] StgValue_33 (br ) [ 00111100000] out_array_addr_i_wr_1 (writeresp ) [ 00000000000] StgValue_39 (ret ) [ 00000000000] ---------------- Datapath Model END ------------------ * FSMD analyzer results: - Output states: Port: out_array | {2 5 6 7 8 9 10 } - Input state : Port: write_pixel : out_stream_V | {4 } Port: write_pixel : out_array | {} Port: write_pixel : out_array_offset | {1 } - Chain level: State 1 State 2 out_array_addr : 1 out_array_addr_i_wr_s : 2 State 3 exitcond_i : 1 i : 1 StgValue_25 : 2 State 4 State 5 empty_9 : 1 State 6 State 7 State 8 State 9 State 10 ============================================================ + Verbose Summary: Datapath Resource usage ============================================================ * Functional unit list: |----------|---------------------------------|---------|---------| | Operation| Functional Unit | FF | LUT | |----------|---------------------------------|---------|---------| | add | i_fu_157 | 0 | 16 | |----------|---------------------------------|---------|---------| | icmp | exitcond_i_fu_151 | 0 | 13 | |----------|---------------------------------|---------|---------| | read | out_array_offset_rea_read_fu_92 | 0 | 0 | | | tmp_read_fu_105 | 0 | 0 | |----------|---------------------------------|---------|---------| | writeresp| grp_writeresp_fu_98 | 0 | 0 | |----------|---------------------------------|---------|---------| | write | StgValue_31_write_fu_111 | 0 | 0 | |----------|---------------------------------|---------|---------| |partselect| out_array_offset1_i_fu_131 | 0 | 0 | |----------|---------------------------------|---------|---------| | zext | sext_i_fu_141 | 0 | 0 | |----------|---------------------------------|---------|---------| | Total | | 0 | 29 | |----------|---------------------------------|---------|---------| Memories: N/A * Register list: +---------------------------+--------+ | | FF | +---------------------------+--------+ | exitcond_i_reg_174 | 1 | | i_i_reg_120 | 9 | | i_reg_178 | 9 | | out_array_addr_reg_168 | 32 | |out_array_offset1_i_reg_163| 30 | | tmp_reg_183 | 32 | +---------------------------+--------+ | Total | 113 | +---------------------------+--------+ * Multiplexer (MUX) list: |---------------------|------|------|------|--------||---------||---------| | Comp | Pin | Size | BW | S x BW || Delay || LUT | |---------------------|------|------|------|--------||---------||---------| | grp_writeresp_fu_98 | p0 | 2 | 1 | 2 | | grp_writeresp_fu_98 | p1 | 2 | 32 | 64 || 9 | |---------------------|------|------|------|--------||---------||---------| | Total | | | | 66 || 3.538 || 9 | |---------------------|------|------|------|--------||---------||---------| * Summary: +-----------+--------+--------+--------+ | | Delay | FF | LUT | +-----------+--------+--------+--------+ | Function | - | 0 | 29 | | Memory | - | - | - | |Multiplexer| 3 | - | 9 | | Register | - | 113 | - | +-----------+--------+--------+--------+ | Total | 3 | 113 | 38 | +-----------+--------+--------+--------+