================================================================ == Vivado HLS Report for 'vector_mult' ================================================================ * Date: Mon Mar 19 11:25:20 2018 * Version: 2017.4 (Build 2086221 on Fri Dec 15 21:13:33 MST 2017) * Project: vector_mult * 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 | +-----+-----+-----+-----+---------+ | 23| 23| 23| 23| none | +-----+-----+-----+-----+---------+ + Detail: * Instance: N/A * Loop: +--------------------+-----+-----+----------+-----------+-----------+------+----------+ | | Latency | Iteration| Initiation Interval | Trip | | | Loop Name | min | max | Latency | achieved | target | Count| Pipelined| +--------------------+-----+-----+----------+-----------+-----------+------+----------+ |- vector_mult_loop | 10| 10| 4| 1| 1| 8| yes | +--------------------+-----+-----+----------+-----------+-----------+------+----------+ ================================================================ == Utilization Estimates ================================================================ * Summary: +-----------------+---------+-------+--------+-------+ | Name | BRAM_18K| DSP48E| FF | LUT | +-----------------+---------+-------+--------+-------+ |DSP | -| -| -| -| |Expression | -| 3| 0| 100| |FIFO | -| -| -| -| |Instance | 6| -| 1686| 1972| |Memory | -| -| -| -| |Multiplexer | -| -| -| 188| |Register | 0| -| 277| 32| +-----------------+---------+-------+--------+-------+ |Total | 6| 3| 1963| 2292| +-----------------+---------+-------+--------+-------+ |Available | 280| 220| 106400| 53200| +-----------------+---------+-------+--------+-------+ |Utilization (%) | 2| 1| 1| 4| +-----------------+---------+-------+--------+-------+ + Detail: * Instance: +------------------------------+----------------------------+---------+-------+-----+-----+ | Instance | Module | BRAM_18K| DSP48E| FF | LUT | +------------------------------+----------------------------+---------+-------+-----+-----+ |vector_mult_AXILiteS_s_axi_U |vector_mult_AXILiteS_s_axi | 0| 0| 150| 232| |vector_mult_A_m_axi_U |vector_mult_A_m_axi | 2| 0| 512| 580| |vector_mult_B_m_axi_U |vector_mult_B_m_axi | 2| 0| 512| 580| |vector_mult_result_m_axi_U |vector_mult_result_m_axi | 2| 0| 512| 580| +------------------------------+----------------------------+---------+-------+-----+-----+ |Total | | 6| 0| 1686| 1972| +------------------------------+----------------------------+---------+-------+-----+-----+ * DSP48: N/A * Memory: N/A * FIFO: N/A * Expression: +-----------------------------------+----------+-------+---+----+------------+------------+ | Variable Name | Operation| DSP48E| FF| LUT| Bitwidth P0| Bitwidth P1| +-----------------------------------+----------+-------+---+----+------------+------------+ |tmp_1_fu_239_p2 | * | 3| 0| 20| 32| 32| |i_1_fu_233_p2 | + | 0| 0| 13| 4| 1| |ap_block_pp0_stage0_01001 | and | 0| 0| 8| 1| 1| |ap_block_state12_io | and | 0| 0| 8| 1| 1| |exitcond_fu_227_p2 | icmp | 0| 0| 11| 4| 5| |ap_block_pp0_stage0_11001 | or | 0| 0| 8| 1| 1| |ap_block_state10_pp0_stage0_iter1 | or | 0| 0| 8| 1| 1| |ap_block_state2_io | 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 | | 3| 0| 100| 48| 46| +-----------------------------------+----------+-------+---+----+------------+------------+ * Multiplexer: +-------------------------------+----+-----------+-----+-----------+ | Name | LUT| Input Size| Bits| Total Bits| +-------------------------------+----+-----------+-----+-----------+ |A_blk_n_AR | 9| 2| 1| 2| |A_blk_n_R | 9| 2| 1| 2| |B_blk_n_AR | 9| 2| 1| 2| |B_blk_n_R | 9| 2| 1| 2| |ap_NS_fsm | 62| 15| 1| 15| |ap_enable_reg_pp0_iter1 | 9| 2| 1| 2| |ap_enable_reg_pp0_iter3 | 9| 2| 1| 2| |ap_sig_ioackin_A_ARREADY | 9| 2| 1| 2| |ap_sig_ioackin_B_ARREADY | 9| 2| 1| 2| |ap_sig_ioackin_result_AWREADY | 9| 2| 1| 2| |ap_sig_ioackin_result_WREADY | 9| 2| 1| 2| |i_reg_156 | 9| 2| 4| 8| |result_blk_n_AW | 9| 2| 1| 2| |result_blk_n_B | 9| 2| 1| 2| |result_blk_n_W | 9| 2| 1| 2| +-------------------------------+----+-----------+-----+-----------+ |Total | 188| 43| 18| 49| +-------------------------------+----+-----------+-----+-----------+ * Register: +-------------------------------+----+----+-----+-----------+ | Name | FF | LUT| Bits| Const Bits| +-------------------------------+----+----+-----+-----------+ |A_addr_read_reg_285 | 32| 0| 32| 0| |A_offset1_reg_253 | 30| 0| 30| 0| |B_addr_read_reg_290 | 32| 0| 32| 0| |B_offset3_reg_248 | 30| 0| 30| 0| |ap_CS_fsm | 14| 0| 14| 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_enable_reg_pp0_iter3 | 1| 0| 1| 0| |ap_reg_ioackin_A_ARREADY | 1| 0| 1| 0| |ap_reg_ioackin_B_ARREADY | 1| 0| 1| 0| |ap_reg_ioackin_result_AWREADY | 1| 0| 1| 0| |ap_reg_ioackin_result_WREADY | 1| 0| 1| 0| |exitcond_reg_276 | 1| 0| 1| 0| |i_reg_156 | 4| 0| 4| 0| |result_offset5_reg_243 | 30| 0| 30| 0| |tmp_1_reg_295 | 32| 0| 32| 0| |exitcond_reg_276 | 64| 32| 1| 0| +-------------------------------+----+----+-----+-----------+ |Total | 277| 32| 214| 0| +-------------------------------+----+----+-----+-----------+ ================================================================ == Interface ================================================================ * Summary: +------------------------+-----+-----+------------+--------------+--------------+ | RTL Ports | Dir | Bits| Protocol | Source Object| C Type | +------------------------+-----+-----+------------+--------------+--------------+ |s_axi_AXILiteS_AWVALID | in | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_AWREADY | out | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_AWADDR | in | 6| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_WVALID | in | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_WREADY | out | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_WDATA | in | 32| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_WSTRB | in | 4| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_ARVALID | in | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_ARREADY | out | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_ARADDR | in | 6| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_RVALID | out | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_RREADY | in | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_RDATA | out | 32| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_RRESP | out | 2| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_BVALID | out | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_BREADY | in | 1| s_axi | AXILiteS | scalar | |s_axi_AXILiteS_BRESP | out | 2| s_axi | AXILiteS | scalar | |ap_clk | in | 1| ap_ctrl_hs | vector_mult | return value | |ap_rst_n | in | 1| ap_ctrl_hs | vector_mult | return value | |interrupt | out | 1| ap_ctrl_hs | vector_mult | return value | |m_axi_A_AWVALID | out | 1| m_axi | A | pointer | |m_axi_A_AWREADY | in | 1| m_axi | A | pointer | |m_axi_A_AWADDR | out | 32| m_axi | A | pointer | |m_axi_A_AWID | out | 1| m_axi | A | pointer | |m_axi_A_AWLEN | out | 8| m_axi | A | pointer | |m_axi_A_AWSIZE | out | 3| m_axi | A | pointer | |m_axi_A_AWBURST | out | 2| m_axi | A | pointer | |m_axi_A_AWLOCK | out | 2| m_axi | A | pointer | |m_axi_A_AWCACHE | out | 4| m_axi | A | pointer | |m_axi_A_AWPROT | out | 3| m_axi | A | pointer | |m_axi_A_AWQOS | out | 4| m_axi | A | pointer | |m_axi_A_AWREGION | out | 4| m_axi | A | pointer | |m_axi_A_AWUSER | out | 1| m_axi | A | pointer | |m_axi_A_WVALID | out | 1| m_axi | A | pointer | |m_axi_A_WREADY | in | 1| m_axi | A | pointer | |m_axi_A_WDATA | out | 32| m_axi | A | pointer | |m_axi_A_WSTRB | out | 4| m_axi | A | pointer | |m_axi_A_WLAST | out | 1| m_axi | A | pointer | |m_axi_A_WID | out | 1| m_axi | A | pointer | |m_axi_A_WUSER | out | 1| m_axi | A | pointer | |m_axi_A_ARVALID | out | 1| m_axi | A | pointer | |m_axi_A_ARREADY | in | 1| m_axi | A | pointer | |m_axi_A_ARADDR | out | 32| m_axi | A | pointer | |m_axi_A_ARID | out | 1| m_axi | A | pointer | |m_axi_A_ARLEN | out | 8| m_axi | A | pointer | |m_axi_A_ARSIZE | out | 3| m_axi | A | pointer | |m_axi_A_ARBURST | out | 2| m_axi | A | pointer | |m_axi_A_ARLOCK | out | 2| m_axi | A | pointer | |m_axi_A_ARCACHE | out | 4| m_axi | A | pointer | |m_axi_A_ARPROT | out | 3| m_axi | A | pointer | |m_axi_A_ARQOS | out | 4| m_axi | A | pointer | |m_axi_A_ARREGION | out | 4| m_axi | A | pointer | |m_axi_A_ARUSER | out | 1| m_axi | A | pointer | |m_axi_A_RVALID | in | 1| m_axi | A | pointer | |m_axi_A_RREADY | out | 1| m_axi | A | pointer | |m_axi_A_RDATA | in | 32| m_axi | A | pointer | |m_axi_A_RLAST | in | 1| m_axi | A | pointer | |m_axi_A_RID | in | 1| m_axi | A | pointer | |m_axi_A_RUSER | in | 1| m_axi | A | pointer | |m_axi_A_RRESP | in | 2| m_axi | A | pointer | |m_axi_A_BVALID | in | 1| m_axi | A | pointer | |m_axi_A_BREADY | out | 1| m_axi | A | pointer | |m_axi_A_BRESP | in | 2| m_axi | A | pointer | |m_axi_A_BID | in | 1| m_axi | A | pointer | |m_axi_A_BUSER | in | 1| m_axi | A | pointer | |m_axi_B_AWVALID | out | 1| m_axi | B | pointer | |m_axi_B_AWREADY | in | 1| m_axi | B | pointer | |m_axi_B_AWADDR | out | 32| m_axi | B | pointer | |m_axi_B_AWID | out | 1| m_axi | B | pointer | |m_axi_B_AWLEN | out | 8| m_axi | B | pointer | |m_axi_B_AWSIZE | out | 3| m_axi | B | pointer | |m_axi_B_AWBURST | out | 2| m_axi | B | pointer | |m_axi_B_AWLOCK | out | 2| m_axi | B | pointer | |m_axi_B_AWCACHE | out | 4| m_axi | B | pointer | |m_axi_B_AWPROT | out | 3| m_axi | B | pointer | |m_axi_B_AWQOS | out | 4| m_axi | B | pointer | |m_axi_B_AWREGION | out | 4| m_axi | B | pointer | |m_axi_B_AWUSER | out | 1| m_axi | B | pointer | |m_axi_B_WVALID | out | 1| m_axi | B | pointer | |m_axi_B_WREADY | in | 1| m_axi | B | pointer | |m_axi_B_WDATA | out | 32| m_axi | B | pointer | |m_axi_B_WSTRB | out | 4| m_axi | B | pointer | |m_axi_B_WLAST | out | 1| m_axi | B | pointer | |m_axi_B_WID | out | 1| m_axi | B | pointer | |m_axi_B_WUSER | out | 1| m_axi | B | pointer | |m_axi_B_ARVALID | out | 1| m_axi | B | pointer | |m_axi_B_ARREADY | in | 1| m_axi | B | pointer | |m_axi_B_ARADDR | out | 32| m_axi | B | pointer | |m_axi_B_ARID | out | 1| m_axi | B | pointer | |m_axi_B_ARLEN | out | 8| m_axi | B | pointer | |m_axi_B_ARSIZE | out | 3| m_axi | B | pointer | |m_axi_B_ARBURST | out | 2| m_axi | B | pointer | |m_axi_B_ARLOCK | out | 2| m_axi | B | pointer | |m_axi_B_ARCACHE | out | 4| m_axi | B | pointer | |m_axi_B_ARPROT | out | 3| m_axi | B | pointer | |m_axi_B_ARQOS | out | 4| m_axi | B | pointer | |m_axi_B_ARREGION | out | 4| m_axi | B | pointer | |m_axi_B_ARUSER | out | 1| m_axi | B | pointer | |m_axi_B_RVALID | in | 1| m_axi | B | pointer | |m_axi_B_RREADY | out | 1| m_axi | B | pointer | |m_axi_B_RDATA | in | 32| m_axi | B | pointer | |m_axi_B_RLAST | in | 1| m_axi | B | pointer | |m_axi_B_RID | in | 1| m_axi | B | pointer | |m_axi_B_RUSER | in | 1| m_axi | B | pointer | |m_axi_B_RRESP | in | 2| m_axi | B | pointer | |m_axi_B_BVALID | in | 1| m_axi | B | pointer | |m_axi_B_BREADY | out | 1| m_axi | B | pointer | |m_axi_B_BRESP | in | 2| m_axi | B | pointer | |m_axi_B_BID | in | 1| m_axi | B | pointer | |m_axi_B_BUSER | in | 1| m_axi | B | pointer | |m_axi_result_AWVALID | out | 1| m_axi | result | pointer | |m_axi_result_AWREADY | in | 1| m_axi | result | pointer | |m_axi_result_AWADDR | out | 32| m_axi | result | pointer | |m_axi_result_AWID | out | 1| m_axi | result | pointer | |m_axi_result_AWLEN | out | 8| m_axi | result | pointer | |m_axi_result_AWSIZE | out | 3| m_axi | result | pointer | |m_axi_result_AWBURST | out | 2| m_axi | result | pointer | |m_axi_result_AWLOCK | out | 2| m_axi | result | pointer | |m_axi_result_AWCACHE | out | 4| m_axi | result | pointer | |m_axi_result_AWPROT | out | 3| m_axi | result | pointer | |m_axi_result_AWQOS | out | 4| m_axi | result | pointer | |m_axi_result_AWREGION | out | 4| m_axi | result | pointer | |m_axi_result_AWUSER | out | 1| m_axi | result | pointer | |m_axi_result_WVALID | out | 1| m_axi | result | pointer | |m_axi_result_WREADY | in | 1| m_axi | result | pointer | |m_axi_result_WDATA | out | 32| m_axi | result | pointer | |m_axi_result_WSTRB | out | 4| m_axi | result | pointer | |m_axi_result_WLAST | out | 1| m_axi | result | pointer | |m_axi_result_WID | out | 1| m_axi | result | pointer | |m_axi_result_WUSER | out | 1| m_axi | result | pointer | |m_axi_result_ARVALID | out | 1| m_axi | result | pointer | |m_axi_result_ARREADY | in | 1| m_axi | result | pointer | |m_axi_result_ARADDR | out | 32| m_axi | result | pointer | |m_axi_result_ARID | out | 1| m_axi | result | pointer | |m_axi_result_ARLEN | out | 8| m_axi | result | pointer | |m_axi_result_ARSIZE | out | 3| m_axi | result | pointer | |m_axi_result_ARBURST | out | 2| m_axi | result | pointer | |m_axi_result_ARLOCK | out | 2| m_axi | result | pointer | |m_axi_result_ARCACHE | out | 4| m_axi | result | pointer | |m_axi_result_ARPROT | out | 3| m_axi | result | pointer | |m_axi_result_ARQOS | out | 4| m_axi | result | pointer | |m_axi_result_ARREGION | out | 4| m_axi | result | pointer | |m_axi_result_ARUSER | out | 1| m_axi | result | pointer | |m_axi_result_RVALID | in | 1| m_axi | result | pointer | |m_axi_result_RREADY | out | 1| m_axi | result | pointer | |m_axi_result_RDATA | in | 32| m_axi | result | pointer | |m_axi_result_RLAST | in | 1| m_axi | result | pointer | |m_axi_result_RID | in | 1| m_axi | result | pointer | |m_axi_result_RUSER | in | 1| m_axi | result | pointer | |m_axi_result_RRESP | in | 2| m_axi | result | pointer | |m_axi_result_BVALID | in | 1| m_axi | result | pointer | |m_axi_result_BREADY | out | 1| m_axi | result | pointer | |m_axi_result_BRESP | in | 2| m_axi | result | pointer | |m_axi_result_BID | in | 1| m_axi | result | pointer | |m_axi_result_BUSER | in | 1| m_axi | result | pointer | +------------------------+-----+-----+------------+--------------+--------------+ ============================================================ + Verbose Summary: Synthesis Manager ============================================================ InlineROM: 1 ExposeGlobal: 0 ============================================================ + Verbose Summary: CDFG Model ============================================================ IsTopModel: 1 ResetActiveHigh: 1 IsCombinational: 2 IsDatapathOnly: 2 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 = 4 ============================================================ + Verbose Summary: Schedule ============================================================ * Number of FSM states : 17 * Pipeline : 1 Pipeline-0 : II = 1, D = 4, States = { 9 10 11 12 } * Dataflow Pipeline: 0 * FSM state transitions: 1 --> 2 / true 2 --> 3 / true 3 --> 4 / true 4 --> 5 / true 5 --> 6 / true 6 --> 7 / true 7 --> 8 / true 8 --> 9 / true 9 --> 13 / (exitcond) 10 / (!exitcond) 10 --> 11 / true 11 --> 12 / true 12 --> 9 / true 13 --> 14 / true 14 --> 15 / true 15 --> 16 / true 16 --> 17 / true 17 --> * FSM state operations: : 1.00ns ST_1 : Operation 18 [1/1] (1.00ns) ---> "%result_offset_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %result_offset)" ---> Core 10 's_axilite' ST_1 : Operation 19 [1/1] (1.00ns) ---> "%B_offset_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %B_offset)" ---> Core 10 's_axilite' ST_1 : Operation 20 [1/1] (1.00ns) ---> "%A_offset_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %A_offset)" ---> Core 10 's_axilite' ST_1 : Operation 21 [1/1] (0.00ns) ---> "%result_offset5 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %result_offset_read, i32 2, i32 31)" ST_1 : Operation 22 [1/1] (0.00ns) ---> "%B_offset3 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %B_offset_read, i32 2, i32 31)" ST_1 : Operation 23 [1/1] (0.00ns) ---> "%A_offset1 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %A_offset_read, i32 2, i32 31)" : 8.75ns ST_2 : Operation 24 [1/1] (0.00ns) ---> "%tmp_4 = zext i30 %B_offset3 to i64" ST_2 : Operation 25 [1/1] (0.00ns) ---> "%B_addr = getelementptr i32* %B, i64 %tmp_4" ST_2 : Operation 26 [1/1] (0.00ns) ---> "%tmp_5 = zext i30 %A_offset1 to i64" ST_2 : Operation 27 [1/1] (0.00ns) ---> "%A_addr = getelementptr i32* %A, i64 %tmp_5" ST_2 : Operation 28 [7/7] (8.75ns) ---> "%A_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %A_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_2 : Operation 29 [7/7] (8.75ns) ---> "%B_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %B_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_3 : Operation 30 [6/7] (8.75ns) ---> "%A_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %A_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_3 : Operation 31 [6/7] (8.75ns) ---> "%B_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %B_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_4 : Operation 32 [5/7] (8.75ns) ---> "%A_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %A_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_4 : Operation 33 [5/7] (8.75ns) ---> "%B_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %B_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_5 : Operation 34 [4/7] (8.75ns) ---> "%A_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %A_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_5 : Operation 35 [4/7] (8.75ns) ---> "%B_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %B_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_6 : Operation 36 [3/7] (8.75ns) ---> "%A_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %A_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_6 : Operation 37 [3/7] (8.75ns) ---> "%B_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %B_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_7 : Operation 38 [2/7] (8.75ns) ---> "%A_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %A_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_7 : Operation 39 [2/7] (8.75ns) ---> "%B_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %B_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_8 : Operation 40 [1/1] (0.00ns) ---> "%tmp_3 = zext i30 %result_offset5 to i64" ST_8 : Operation 41 [1/1] (0.00ns) ---> "%result_addr = getelementptr i32* %result, i64 %tmp_3" ST_8 : Operation 42 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecBitsMap(i32* %result), !map !13" ST_8 : Operation 43 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecBitsMap(i32* %B), !map !19" ST_8 : Operation 44 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecBitsMap(i32* %A), !map !23" ST_8 : Operation 45 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecTopModule([12 x i8]* @vector_mult_str) nounwind" ST_8 : Operation 46 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 0, [10 x i8]* @p_str, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 0, [1 x i8]* @p_str1, [1 x i8]* @p_str1, [1 x i8]* @p_str1, i32 0, i32 0, i32 0, i32 0, [1 x i8]* @p_str1, [1 x i8]* @p_str1) nounwind" [vector_mult/vector_mult.cpp:5] ST_8 : Operation 47 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32* %result, [6 x i8]* @p_str2, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [7 x i8]* @p_str3, [6 x i8]* @p_str4, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_8 : Operation 48 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 %result_offset, [10 x i8]* @mode5, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @bundle6, [6 x i8]* @p_str4, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_8 : Operation 49 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32* %B, [6 x i8]* @p_str2, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [2 x i8]* @p_str5, [6 x i8]* @p_str4, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_8 : Operation 50 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 %B_offset, [10 x i8]* @mode3, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @bundle4, [6 x i8]* @p_str4, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_8 : Operation 51 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32* %A, [6 x i8]* @p_str2, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [2 x i8]* @p_str6, [6 x i8]* @p_str4, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_8 : Operation 52 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 %A_offset, [10 x i8]* @mode, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @bundle, [6 x i8]* @p_str4, [1 x i8]* @p_str1, i32 16, i32 16, i32 16, i32 16, [1 x i8]* @p_str1, [1 x i8]* @p_str1)" ST_8 : Operation 53 [1/7] (8.75ns) ---> "%A_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %A_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_8 : Operation 54 [1/7] (8.75ns) ---> "%B_addr_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %B_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_8 : Operation 55 [1/1] (8.75ns) ---> "%result_addr_wr_req = call i1 @_ssdm_op_WriteReq.m_axi.i32P(i32* %result_addr, i32 8)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_8 : Operation 56 [1/1] (1.76ns) ---> "br label %1" [vector_mult/vector_mult.cpp:8] : 1.74ns ST_9 : Operation 57 [1/1] (0.00ns) ---> "%i = phi i4 [ 0, %0 ], [ %i_1, %2 ]" ST_9 : Operation 58 [1/1] (1.30ns) ---> "%exitcond = icmp eq i4 %i, -8" [vector_mult/vector_mult.cpp:8] ---> Core 25 'Cmp' ST_9 : Operation 59 [1/1] (1.73ns) ---> "%i_1 = add i4 %i, 1" [vector_mult/vector_mult.cpp:8] ---> Core 14 'AddSub' ST_9 : Operation 60 [1/1] (0.00ns) ---> "br i1 %exitcond, label %3, label %2" [vector_mult/vector_mult.cpp:8] : 8.75ns ST_10 : Operation 61 [1/1] (8.75ns) ---> "%A_addr_read = call i32 @_ssdm_op_Read.m_axi.i32P(i32* %A_addr)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_10 : Operation 62 [1/1] (8.75ns) ---> "%B_addr_read = call i32 @_ssdm_op_Read.m_axi.i32P(i32* %B_addr)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.51ns ST_11 : Operation 63 [1/1] (8.51ns) ---> "%tmp_1 = mul nsw i32 %A_addr_read, %B_addr_read" [vector_mult/vector_mult.cpp:9] ---> Core 16 'Mul' : 8.75ns ST_12 : Operation 64 [1/1] (0.00ns) ---> "%empty = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 8, i64 8, i64 8) nounwind" ST_12 : Operation 65 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([17 x i8]* @p_str7) nounwind" [vector_mult/vector_mult.cpp:9] ST_12 : Operation 66 [1/1] (0.00ns) ---> "%tmp_2 = call i32 (...)* @_ssdm_op_SpecRegionBegin([17 x i8]* @p_str7) nounwind" [vector_mult/vector_mult.cpp:9] ST_12 : Operation 67 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecPipeline(i32 -1, i32 1, i32 1, i32 0, [1 x i8]* @p_str1) nounwind" [vector_mult/vector_mult.cpp:10] ST_12 : Operation 68 [1/1] (8.75ns) ---> "call void @_ssdm_op_Write.m_axi.i32P(i32* %result_addr, i32 %tmp_1, i4 -1)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_12 : Operation 69 [1/1] (0.00ns) ---> "%empty_4 = call i32 (...)* @_ssdm_op_SpecRegionEnd([17 x i8]* @p_str7, i32 %tmp_2) nounwind" [vector_mult/vector_mult.cpp:9] ST_12 : Operation 70 [1/1] (0.00ns) ---> "br label %1" [vector_mult/vector_mult.cpp:8] : 8.75ns ST_13 : Operation 71 [5/5] (8.75ns) ---> "%result_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %result_addr)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_14 : Operation 72 [4/5] (8.75ns) ---> "%result_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %result_addr)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_15 : Operation 73 [3/5] (8.75ns) ---> "%result_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %result_addr)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_16 : Operation 74 [2/5] (8.75ns) ---> "%result_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %result_addr)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' : 8.75ns ST_17 : Operation 75 [1/5] (8.75ns) ---> "%result_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %result_addr)" [vector_mult/vector_mult.cpp:9] ---> Core 9 'm_axi' ST_17 : Operation 76 [1/1] (0.00ns) ---> "ret void" [vector_mult/vector_mult.cpp:12] ============================================================ + 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: 1 Port [ Return ] is wired: 1; IO mode=ap_ctrl_hs:ce=0 Port [ A]: wired=1; compound=1; hidden=0; nouse=0; global=0; static=0; extern=0; dir=0; type=4; pingpong=0; private_global=0; IO mode=m_axi:ce=0 Port [ B]: wired=1; compound=1; hidden=0; nouse=0; global=0; static=0; extern=0; dir=0; type=4; pingpong=0; private_global=0; IO mode=m_axi:ce=0 Port [ result]: 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 [ A_offset]: wired=1; compound=0; hidden=0; nouse=0; global=0; static=0; extern=0; dir=0; type=0; pingpong=0; private_global=0; IO mode=ap_none:ce=0 Port [ B_offset]: wired=1; compound=0; hidden=0; nouse=0; global=0; static=0; extern=0; dir=0; type=0; pingpong=0; private_global=0; IO mode=ap_none:ce=0 Port [ result_offset]: wired=1; compound=0; hidden=0; nouse=0; global=0; static=0; extern=0; dir=0; type=0; pingpong=0; private_global=0; IO mode=ap_none:ce=0 ---------------- STG Properties END ------------------ ---------------- Datapath Model BEGIN ---------------- result_offset_read (read ) [ 000000000000000000] B_offset_read (read ) [ 000000000000000000] A_offset_read (read ) [ 000000000000000000] result_offset5 (partselect ) [ 001111111000000000] B_offset3 (partselect ) [ 001000000000000000] A_offset1 (partselect ) [ 001000000000000000] tmp_4 (zext ) [ 000000000000000000] B_addr (getelementptr ) [ 000111111111100000] tmp_5 (zext ) [ 000000000000000000] A_addr (getelementptr ) [ 000111111111100000] tmp_3 (zext ) [ 000000000000000000] result_addr (getelementptr ) [ 000000000111111111] StgValue_42 (specbitsmap ) [ 000000000000000000] StgValue_43 (specbitsmap ) [ 000000000000000000] StgValue_44 (specbitsmap ) [ 000000000000000000] StgValue_45 (spectopmodule ) [ 000000000000000000] StgValue_46 (specinterface ) [ 000000000000000000] StgValue_47 (specinterface ) [ 000000000000000000] StgValue_48 (specinterface ) [ 000000000000000000] StgValue_49 (specinterface ) [ 000000000000000000] StgValue_50 (specinterface ) [ 000000000000000000] StgValue_51 (specinterface ) [ 000000000000000000] StgValue_52 (specinterface ) [ 000000000000000000] A_addr_rd_req (readreq ) [ 000000000000000000] B_addr_rd_req (readreq ) [ 000000000000000000] result_addr_wr_req (writereq ) [ 000000000000000000] StgValue_56 (br ) [ 000000001111100000] i (phi ) [ 000000000100000000] exitcond (icmp ) [ 000000000111100000] i_1 (add ) [ 000000001111100000] StgValue_60 (br ) [ 000000000000000000] A_addr_read (read ) [ 000000000101000000] B_addr_read (read ) [ 000000000101000000] tmp_1 (mul ) [ 000000000100100000] empty (speclooptripcount) [ 000000000000000000] StgValue_65 (specloopname ) [ 000000000000000000] tmp_2 (specregionbegin ) [ 000000000000000000] StgValue_67 (specpipeline ) [ 000000000000000000] StgValue_68 (write ) [ 000000000000000000] empty_4 (specregionend ) [ 000000000000000000] StgValue_70 (br ) [ 000000001111100000] result_addr_wr_resp (writeresp ) [ 000000000000000000] StgValue_76 (ret ) [ 000000000000000000] ---------------- Datapath Model END ------------------ * FSMD analyzer results: - Output states: Port: result | {8 12 13 14 15 16 17 } - Input state : Port: vector_mult : A | {2 3 4 5 6 7 8 10 } Port: vector_mult : B | {2 3 4 5 6 7 8 10 } Port: vector_mult : A_offset | {1 } Port: vector_mult : B_offset | {1 } Port: vector_mult : result_offset | {1 } - Chain level: State 1 State 2 B_addr : 1 A_addr : 1 A_addr_rd_req : 2 B_addr_rd_req : 2 State 3 State 4 State 5 State 6 State 7 State 8 result_addr : 1 result_addr_wr_req : 2 State 9 exitcond : 1 i_1 : 1 StgValue_60 : 2 State 10 State 11 State 12 empty_4 : 1 State 13 State 14 State 15 State 16 State 17 ============================================================ + Verbose Summary: Datapath Resource usage ============================================================ * Functional unit list: |----------|-------------------------------|---------|---------|---------| | Operation| Functional Unit | DSP48E | FF | LUT | |----------|-------------------------------|---------|---------|---------| | mul | tmp_1_fu_239 | 3 | 0 | 20 | |----------|-------------------------------|---------|---------|---------| | add | i_1_fu_233 | 0 | 0 | 13 | |----------|-------------------------------|---------|---------|---------| | icmp | exitcond_fu_227 | 0 | 0 | 9 | |----------|-------------------------------|---------|---------|---------| | | result_offset_read_read_fu_98 | 0 | 0 | 0 | | | B_offset_read_read_fu_104 | 0 | 0 | 0 | | read | A_offset_read_read_fu_110 | 0 | 0 | 0 | | | A_addr_read_read_fu_137 | 0 | 0 | 0 | | | B_addr_read_read_fu_142 | 0 | 0 | 0 | |----------|-------------------------------|---------|---------|---------| | readreq | grp_readreq_fu_116 | 0 | 0 | 0 | | | grp_readreq_fu_123 | 0 | 0 | 0 | |----------|-------------------------------|---------|---------|---------| | writeresp| grp_writeresp_fu_130 | 0 | 0 | 0 | |----------|-------------------------------|---------|---------|---------| | write | StgValue_68_write_fu_147 | 0 | 0 | 0 | |----------|-------------------------------|---------|---------|---------| | | result_offset5_fu_167 | 0 | 0 | 0 | |partselect| B_offset3_fu_177 | 0 | 0 | 0 | | | A_offset1_fu_187 | 0 | 0 | 0 | |----------|-------------------------------|---------|---------|---------| | | tmp_4_fu_197 | 0 | 0 | 0 | | zext | tmp_5_fu_207 | 0 | 0 | 0 | | | tmp_3_fu_217 | 0 | 0 | 0 | |----------|-------------------------------|---------|---------|---------| | Total | | 3 | 0 | 42 | |----------|-------------------------------|---------|---------|---------| Memories: N/A * Register list: +----------------------+--------+ | | FF | +----------------------+--------+ | A_addr_read_reg_285 | 32 | | A_addr_reg_264 | 32 | | A_offset1_reg_253 | 30 | | B_addr_read_reg_290 | 32 | | B_addr_reg_258 | 32 | | B_offset3_reg_248 | 30 | | exitcond_reg_276 | 1 | | i_1_reg_280 | 4 | | i_reg_156 | 4 | | result_addr_reg_270 | 32 | |result_offset5_reg_243| 30 | | tmp_1_reg_295 | 32 | +----------------------+--------+ | Total | 291 | +----------------------+--------+ * Multiplexer (MUX) list: |----------------------|------|------|------|--------||---------||---------| | Comp | Pin | Size | BW | S x BW || Delay || LUT | |----------------------|------|------|------|--------||---------||---------| | grp_readreq_fu_116 | p1 | 2 | 32 | 64 || 9 | | grp_readreq_fu_123 | p1 | 2 | 32 | 64 || 9 | | grp_writeresp_fu_130 | p0 | 2 | 1 | 2 | | grp_writeresp_fu_130 | p1 | 2 | 32 | 64 || 9 | |----------------------|------|------|------|--------||---------||---------| | Total | | | | 194 || 7.076 || 27 | |----------------------|------|------|------|--------||---------||---------| * Summary: +-----------+--------+--------+--------+--------+ | | DSP48E | Delay | FF | LUT | +-----------+--------+--------+--------+--------+ | Function | 3 | - | 0 | 42 | | Memory | - | - | - | - | |Multiplexer| - | 7 | - | 27 | | Register | - | - | 291 | - | +-----------+--------+--------+--------+--------+ | Total | 3 | 7 | 291 | 69 | +-----------+--------+--------+--------+--------+