================================================================ == 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 | +--------------------+-----+-----+----------+-----------+-----------+------+----------+ ============================================================ + Verbose Summary: Synthesis Manager ============================================================ InlineROM: 1 ExposeGlobal: 0 ============================================================ + Verbose Summary: CDFG Model ============================================================ IsTopModel: 1 ResetActiveHigh: 1 IsCombinational: 0 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 = 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: Timing violations ============================================================ Target clock period: 10ns, clock uncertainty: 1.25ns. : 1ns The critical path consists of the following: s_axi read on port 'result_offset' [7] (1 ns) : 8.75ns The critical path consists of the following: 'getelementptr' operation ('B_addr') [15] (0 ns) bus request on port 'B' (vector_mult/vector_mult.cpp:9) [31] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'A' (vector_mult/vector_mult.cpp:9) [30] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'A' (vector_mult/vector_mult.cpp:9) [30] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'A' (vector_mult/vector_mult.cpp:9) [30] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'A' (vector_mult/vector_mult.cpp:9) [30] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'A' (vector_mult/vector_mult.cpp:9) [30] (8.75 ns) : 8.75ns The critical path consists of the following: 'getelementptr' operation ('result_addr') [12] (0 ns) bus request on port 'result' (vector_mult/vector_mult.cpp:9) [32] (8.75 ns) : 1.74ns The critical path consists of the following: 'phi' operation ('i') with incoming values : ('i', vector_mult/vector_mult.cpp:8) [35] (0 ns) 'add' operation ('i', vector_mult/vector_mult.cpp:8) [37] (1.74 ns) : 8.75ns The critical path consists of the following: bus read on port 'A' (vector_mult/vector_mult.cpp:9) [44] (8.75 ns) : 8.51ns The critical path consists of the following: 'mul' operation ('tmp_1', vector_mult/vector_mult.cpp:9) [46] (8.51 ns) : 8.75ns The critical path consists of the following: bus write on port 'result' (vector_mult/vector_mult.cpp:9) [47] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'result' (vector_mult/vector_mult.cpp:9) [51] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'result' (vector_mult/vector_mult.cpp:9) [51] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'result' (vector_mult/vector_mult.cpp:9) [51] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'result' (vector_mult/vector_mult.cpp:9) [51] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'result' (vector_mult/vector_mult.cpp:9) [51] (8.75 ns) ============================================================ + Verbose Summary: Binding ============================================================ N/A * FSMD analyzer results: - Output states: - Input state : - Chain level: State 1 State 2 State 3 State 4 State 5 State 6 State 7 State 8 State 9 State 10 State 11 State 12 State 13 State 14 State 15 State 16 State 17 ============================================================ + Verbose Summary: Datapath Resource usage ============================================================ N/A