================================================================ == Vivado HLS Report for 'matrix_mult' ================================================================ * Date: Mon Mar 19 10:08:09 2018 * Version: 2017.4 (Build 2086221 on Fri Dec 15 21:13:33 MST 2017) * Project: matrix_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 | +------+------+------+------+---------+ | 2411| 2411| 2411| 2411| none | +------+------+------+------+---------+ + Detail: * Instance: N/A * Loop: +----------------------------------+------+------+----------+-----------+-----------+------+----------+ | | Latency | Iteration| Initiation Interval | Trip | | | Loop Name | min | max | Latency | achieved | target | Count| Pipelined| +----------------------------------+------+------+----------+-----------+-----------+------+----------+ |- memcpy.tempA.A | 65| 65| 3| 1| 1| 64| yes | |- memcpy.tempB.B | 65| 65| 3| 1| 1| 64| yes | |- matrix_mult__outer_loop | 2192| 2192| 274| -| -| 8| no | | + matrix_mult__inner_loop | 272| 272| 34| -| -| 8| no | | ++ matrix_mult__innermost_loop | 32| 32| 4| -| -| 8| no | |- memcpy.result.tempResult.gep | 65| 65| 3| 1| 1| 64| 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 = 3 * Pipeline-1: initiation interval (II) = 1, depth = 3 * Pipeline-2: initiation interval (II) = 1, depth = 3 ============================================================ + Verbose Summary: Schedule ============================================================ * Number of FSM states : 36 * Pipeline : 3 Pipeline-0 : II = 1, D = 3, States = { 9 10 11 } Pipeline-1 : II = 1, D = 3, States = { 19 20 21 } Pipeline-2 : II = 1, D = 3, States = { 29 30 31 } * 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 --> 12 / (exitcond3) 10 / (!exitcond3) 10 --> 11 / true 11 --> 9 / true 12 --> 13 / true 13 --> 14 / true 14 --> 15 / true 15 --> 16 / true 16 --> 17 / true 17 --> 18 / true 18 --> 19 / true 19 --> 22 / (exitcond4) 20 / (!exitcond4) 20 --> 21 / true 21 --> 19 / true 22 --> 23 / true 23 --> 24 / (!exitcond2) 29 / (exitcond2) 24 --> 25 / (!exitcond1) 23 / (exitcond1) 25 --> 26 / (!exitcond) 24 / (exitcond) 26 --> 27 / true 27 --> 28 / true 28 --> 25 / true 29 --> 32 / (exitcond5) 30 / (!exitcond5) 30 --> 31 / true 31 --> 29 / true 32 --> 33 / true 33 --> 34 / true 34 --> 35 / true 35 --> 36 / true 36 --> * FSM state operations: : 1.00ns ST_1 : Operation 37 [1/1] (1.00ns) ---> "%result_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %result)" ---> Core 10 's_axilite' ST_1 : Operation 38 [1/1] (1.00ns) ---> "%B_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %B)" ---> Core 10 's_axilite' ST_1 : Operation 39 [1/1] (1.00ns) ---> "%A_read = call i32 @_ssdm_op_Read.s_axilite.i32(i32 %A)" ---> Core 10 's_axilite' ST_1 : Operation 40 [1/1] (0.00ns) ---> "%result5 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %result_read, i32 2, i32 31)" ST_1 : Operation 41 [1/1] (0.00ns) ---> "%B3 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %B_read, i32 2, i32 31)" ST_1 : Operation 42 [1/1] (0.00ns) ---> "%A1 = call i30 @_ssdm_op_PartSelect.i30.i32.i32.i32(i32 %A_read, i32 2, i32 31)" ST_1 : Operation 43 [1/1] (0.00ns) ---> "%tempA = alloca [64 x i32], align 16" [matrix_mult/matrix_mult.cpp:5] ---> Core 37 'RAM' ST_1 : Operation 44 [1/1] (0.00ns) ---> "%tempB = alloca [64 x i32], align 16" [matrix_mult/matrix_mult.cpp:5] ---> Core 37 'RAM' ST_1 : Operation 45 [1/1] (0.00ns) ---> "%tempResult = alloca [64 x i32], align 16" [matrix_mult/matrix_mult.cpp:5] ---> Core 37 'RAM' : 8.75ns ST_2 : Operation 46 [1/1] (0.00ns) ---> "%tmp_16 = zext i30 %A1 to i64" ST_2 : Operation 47 [1/1] (0.00ns) ---> "%gmem_addr_2 = getelementptr i32* %gmem, i64 %tmp_16" ST_2 : Operation 48 [7/7] (8.75ns) ---> "%gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' : 8.75ns ST_3 : Operation 49 [6/7] (8.75ns) ---> "%gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' : 8.75ns ST_4 : Operation 50 [5/7] (8.75ns) ---> "%gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' : 8.75ns ST_5 : Operation 51 [4/7] (8.75ns) ---> "%gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' : 8.75ns ST_6 : Operation 52 [3/7] (8.75ns) ---> "%gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' : 8.75ns ST_7 : Operation 53 [2/7] (8.75ns) ---> "%gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' : 8.75ns ST_8 : Operation 54 [1/1] (0.00ns) ---> "%tmp_14 = zext i30 %result5 to i64" ST_8 : Operation 55 [1/1] (0.00ns) ---> "%gmem_addr = getelementptr i32* %gmem, i64 %tmp_14" ST_8 : Operation 56 [1/1] (0.00ns) ---> "%tmp_15 = zext i30 %B3 to i64" ST_8 : Operation 57 [1/1] (0.00ns) ---> "%gmem_addr_1 = getelementptr i32* %gmem, i64 %tmp_15" ST_8 : Operation 58 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecBitsMap(i32* %gmem), !map !11" ST_8 : Operation 59 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecTopModule([12 x i8]* @matrix_mult_str) nounwind" ST_8 : Operation 60 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 %result, [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_str2, [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 61 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 %B, [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_str2, [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 62 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 0, [10 x i8]* @p_str3, 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" [matrix_mult/matrix_mult.cpp:5] ST_8 : Operation 63 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32* %gmem, [6 x i8]* @p_str, i32 0, i32 0, [1 x i8]* @p_str1, i32 0, i32 32, [1 x i8]* @p_str1, [6 x i8]* @p_str2, [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 64 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecInterface(i32 %A, [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_str2, [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 65 [1/7] (8.75ns) ---> "%gmem_addr_2_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_2, i32 64)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' ST_8 : Operation 66 [1/1] (1.76ns) ---> "br label %burst.rd.header" : 1.87ns ST_9 : Operation 67 [1/1] (0.00ns) ---> "%indvar = phi i7 [ 0, %0 ], [ %indvar_next, %burst.rd.body ]" ST_9 : Operation 68 [1/1] (1.48ns) ---> "%exitcond3 = icmp eq i7 %indvar, -64" ---> Core 25 'Cmp' ST_9 : Operation 69 [1/1] (1.87ns) ---> "%indvar_next = add i7 %indvar, 1" ---> Core 14 'AddSub' ST_9 : Operation 70 [1/1] (0.00ns) ---> "br i1 %exitcond3, label %burst.rd.header7.preheader, label %burst.rd.body" : 8.75ns ST_10 : Operation 71 [1/1] (8.75ns) ---> "%gmem_addr_2_read = call i32 @_ssdm_op_Read.m_axi.i32P(i32* %gmem_addr_2)" [matrix_mult/matrix_mult.cpp:6] ---> Core 9 'm_axi' : 3.25ns ST_11 : Operation 72 [1/1] (0.00ns) ---> "%empty = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 64, i64 64, i64 64) nounwind" ST_11 : Operation 73 [1/1] (0.00ns) ---> "%burstread_rbegin = call i32 (...)* @_ssdm_op_SpecRegionBegin([17 x i8]* @burstread_OC_region_s) nounwind" ST_11 : Operation 74 [1/1] (0.00ns) ---> "%empty_5 = call i32 (...)* @_ssdm_op_SpecPipeline(i32 1, i32 1, i32 1, i32 0, [1 x i8]* @p_str7) nounwind" ST_11 : Operation 75 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([15 x i8]* @memcpy_OC_tempA_OC_A)" ST_11 : Operation 76 [1/1] (0.00ns) ---> "%tmp = zext i7 %indvar to i64" [matrix_mult/matrix_mult.cpp:6] ST_11 : Operation 77 [1/1] (0.00ns) ---> "%tempA_addr = getelementptr [64 x i32]* %tempA, i64 0, i64 %tmp" [matrix_mult/matrix_mult.cpp:6] ST_11 : Operation 78 [1/1] (3.25ns) ---> "store i32 %gmem_addr_2_read, i32* %tempA_addr, align 4" [matrix_mult/matrix_mult.cpp:6] ---> Core 37 'RAM' ST_11 : Operation 79 [1/1] (0.00ns) ---> "%burstread_rend = call i32 (...)* @_ssdm_op_SpecRegionEnd([17 x i8]* @burstread_OC_region_s, i32 %burstread_rbegin) nounwind" ST_11 : Operation 80 [1/1] (0.00ns) ---> "br label %burst.rd.header" : 8.75ns ST_12 : Operation 81 [7/7] (8.75ns) ---> "%gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' : 8.75ns ST_13 : Operation 82 [6/7] (8.75ns) ---> "%gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' : 8.75ns ST_14 : Operation 83 [5/7] (8.75ns) ---> "%gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' : 8.75ns ST_15 : Operation 84 [4/7] (8.75ns) ---> "%gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' : 8.75ns ST_16 : Operation 85 [3/7] (8.75ns) ---> "%gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' : 8.75ns ST_17 : Operation 86 [2/7] (8.75ns) ---> "%gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' : 8.75ns ST_18 : Operation 87 [1/7] (8.75ns) ---> "%gmem_addr_1_rd_req = call i1 @_ssdm_op_ReadReq.m_axi.i32P(i32* %gmem_addr_1, i32 64)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' ST_18 : Operation 88 [1/1] (1.76ns) ---> "br label %burst.rd.header7" : 1.87ns ST_19 : Operation 89 [1/1] (0.00ns) ---> "%indvar9 = phi i7 [ %indvar_next1, %burst.rd.body8 ], [ 0, %burst.rd.header7.preheader ]" ST_19 : Operation 90 [1/1] (1.48ns) ---> "%exitcond4 = icmp eq i7 %indvar9, -64" ---> Core 25 'Cmp' ST_19 : Operation 91 [1/1] (1.87ns) ---> "%indvar_next1 = add i7 %indvar9, 1" ---> Core 14 'AddSub' ST_19 : Operation 92 [1/1] (0.00ns) ---> "br i1 %exitcond4, label %burst.rd.end6.preheader, label %burst.rd.body8" : 8.75ns ST_20 : Operation 93 [1/1] (8.75ns) ---> "%gmem_addr_1_read = call i32 @_ssdm_op_Read.m_axi.i32P(i32* %gmem_addr_1)" [matrix_mult/matrix_mult.cpp:7] ---> Core 9 'm_axi' : 3.25ns ST_21 : Operation 94 [1/1] (0.00ns) ---> "%empty_6 = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 64, i64 64, i64 64) nounwind" ST_21 : Operation 95 [1/1] (0.00ns) ---> "%burstread_rbegin1 = call i32 (...)* @_ssdm_op_SpecRegionBegin([17 x i8]* @burstread_OC_region_s) nounwind" ST_21 : Operation 96 [1/1] (0.00ns) ---> "%empty_7 = call i32 (...)* @_ssdm_op_SpecPipeline(i32 1, i32 1, i32 1, i32 0, [1 x i8]* @p_str8) nounwind" ST_21 : Operation 97 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([15 x i8]* @memcpy_OC_tempB_OC_B)" ST_21 : Operation 98 [1/1] (0.00ns) ---> "%tmp_1 = zext i7 %indvar9 to i64" [matrix_mult/matrix_mult.cpp:7] ST_21 : Operation 99 [1/1] (0.00ns) ---> "%tempB_addr = getelementptr [64 x i32]* %tempB, i64 0, i64 %tmp_1" [matrix_mult/matrix_mult.cpp:7] ST_21 : Operation 100 [1/1] (3.25ns) ---> "store i32 %gmem_addr_1_read, i32* %tempB_addr, align 4" [matrix_mult/matrix_mult.cpp:7] ---> Core 37 'RAM' ST_21 : Operation 101 [1/1] (0.00ns) ---> "%burstread_rend14 = call i32 (...)* @_ssdm_op_SpecRegionEnd([17 x i8]* @burstread_OC_region_s, i32 %burstread_rbegin1) nounwind" ST_21 : Operation 102 [1/1] (0.00ns) ---> "br label %burst.rd.header7" : 1.77ns ST_22 : Operation 103 [1/1] (1.76ns) ---> "br label %burst.rd.end6" [matrix_mult/matrix_mult.cpp:10] : 8.75ns ST_23 : Operation 104 [1/1] (0.00ns) ---> "%i = phi i4 [ %i_1, %7 ], [ 0, %burst.rd.end6.preheader ]" ST_23 : Operation 105 [1/1] (1.30ns) ---> "%exitcond2 = icmp eq i4 %i, -8" [matrix_mult/matrix_mult.cpp:10] ---> Core 25 'Cmp' ST_23 : Operation 106 [1/1] (0.00ns) ---> "%empty_8 = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 8, i64 8, i64 8) nounwind" ST_23 : Operation 107 [1/1] (1.73ns) ---> "%i_1 = add i4 %i, 1" [matrix_mult/matrix_mult.cpp:10] ---> Core 14 'AddSub' ST_23 : Operation 108 [1/1] (0.00ns) ---> "br i1 %exitcond2, label %burst.wr.header.preheader, label %1" [matrix_mult/matrix_mult.cpp:10] ST_23 : Operation 109 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([24 x i8]* @p_str4) nounwind" [matrix_mult/matrix_mult.cpp:11] ST_23 : Operation 110 [1/1] (0.00ns) ---> "%tmp_12 = call i32 (...)* @_ssdm_op_SpecRegionBegin([24 x i8]* @p_str4) nounwind" [matrix_mult/matrix_mult.cpp:11] ST_23 : Operation 111 [1/1] (0.00ns) ---> "%tmp_17 = trunc i4 %i to i3" [matrix_mult/matrix_mult.cpp:10] ST_23 : Operation 112 [1/1] (0.00ns) ---> "%tmp_2 = call i6 @_ssdm_op_BitConcatenate.i6.i3.i3(i3 %tmp_17, i3 0)" [matrix_mult/matrix_mult.cpp:13] ST_23 : Operation 113 [1/1] (1.76ns) ---> "br label %2" [matrix_mult/matrix_mult.cpp:12] ST_23 : Operation 114 [1/1] (8.75ns) ---> "%gmem_addr_wr_req = call i1 @_ssdm_op_WriteReq.m_axi.i32P(i32* %gmem_addr, i32 64)" [matrix_mult/matrix_mult.cpp:18] ---> Core 9 'm_axi' ST_23 : Operation 115 [1/1] (1.76ns) ---> "br label %burst.wr.header" : 2.23ns ST_24 : Operation 116 [1/1] (0.00ns) ---> "%j = phi i4 [ 0, %1 ], [ %j_1, %6 ]" ST_24 : Operation 117 [1/1] (0.00ns) ---> "%j_cast3 = zext i4 %j to i6" [matrix_mult/matrix_mult.cpp:12] ST_24 : Operation 118 [1/1] (1.30ns) ---> "%exitcond1 = icmp eq i4 %j, -8" [matrix_mult/matrix_mult.cpp:12] ---> Core 25 'Cmp' ST_24 : Operation 119 [1/1] (0.00ns) ---> "%empty_9 = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 8, i64 8, i64 8) nounwind" ST_24 : Operation 120 [1/1] (1.73ns) ---> "%j_1 = add i4 %j, 1" [matrix_mult/matrix_mult.cpp:12] ---> Core 14 'AddSub' ST_24 : Operation 121 [1/1] (0.00ns) ---> "br i1 %exitcond1, label %7, label %3" [matrix_mult/matrix_mult.cpp:12] ST_24 : Operation 122 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([24 x i8]* @p_str5) nounwind" [matrix_mult/matrix_mult.cpp:12] ST_24 : Operation 123 [1/1] (0.00ns) ---> "%tmp_13 = call i32 (...)* @_ssdm_op_SpecRegionBegin([24 x i8]* @p_str5) nounwind" [matrix_mult/matrix_mult.cpp:12] ST_24 : Operation 124 [1/1] (1.82ns) ---> "%tmp_5 = add i6 %tmp_2, %j_cast3" [matrix_mult/matrix_mult.cpp:13] ---> Core 14 'AddSub' ST_24 : Operation 125 [1/1] (0.00ns) ---> "%tmp_6 = zext i6 %tmp_5 to i64" [matrix_mult/matrix_mult.cpp:13] ST_24 : Operation 126 [1/1] (0.00ns) ---> "%tempResult_addr_1 = getelementptr inbounds [64 x i32]* %tempResult, i64 0, i64 %tmp_6" [matrix_mult/matrix_mult.cpp:13] ST_24 : Operation 127 [1/1] (1.76ns) ---> "br label %4" [matrix_mult/matrix_mult.cpp:15] ST_24 : Operation 128 [1/1] (0.00ns) ---> "%empty_12 = call i32 (...)* @_ssdm_op_SpecRegionEnd([24 x i8]* @p_str4, i32 %tmp_12) nounwind" [matrix_mult/matrix_mult.cpp:16] ST_24 : Operation 129 [1/1] (0.00ns) ---> "br label %burst.rd.end6" [matrix_mult/matrix_mult.cpp:10] : 5.08ns ST_25 : Operation 130 [1/1] (0.00ns) ---> "%tempResult_load_1 = phi i32 [ 0, %3 ], [ %tmp_11, %5 ]" [matrix_mult/matrix_mult.cpp:16] ST_25 : Operation 131 [1/1] (0.00ns) ---> "%k = phi i4 [ 0, %3 ], [ %k_1, %5 ]" ST_25 : Operation 132 [1/1] (3.25ns) ---> "store i32 %tempResult_load_1, i32* %tempResult_addr_1, align 4" [matrix_mult/matrix_mult.cpp:16] ---> Core 37 'RAM' ST_25 : Operation 133 [1/1] (0.00ns) ---> "%k_cast2 = zext i4 %k to i6" [matrix_mult/matrix_mult.cpp:15] ST_25 : Operation 134 [1/1] (1.30ns) ---> "%exitcond = icmp eq i4 %k, -8" [matrix_mult/matrix_mult.cpp:15] ---> Core 25 'Cmp' ST_25 : Operation 135 [1/1] (0.00ns) ---> "%empty_10 = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 8, i64 8, i64 8) nounwind" ST_25 : Operation 136 [1/1] (1.73ns) ---> "%k_1 = add i4 %k, 1" [matrix_mult/matrix_mult.cpp:15] ---> Core 14 'AddSub' ST_25 : Operation 137 [1/1] (0.00ns) ---> "br i1 %exitcond, label %6, label %5" [matrix_mult/matrix_mult.cpp:15] ST_25 : Operation 138 [1/1] (1.82ns) ---> "%tmp_8 = add i6 %k_cast2, %tmp_2" [matrix_mult/matrix_mult.cpp:16] ---> Core 14 'AddSub' ST_25 : Operation 139 [1/1] (0.00ns) ---> "%tmp_9 = zext i6 %tmp_8 to i64" [matrix_mult/matrix_mult.cpp:16] ST_25 : Operation 140 [1/1] (0.00ns) ---> "%tempA_addr_1 = getelementptr inbounds [64 x i32]* %tempA, i64 0, i64 %tmp_9" [matrix_mult/matrix_mult.cpp:16] ST_25 : Operation 141 [2/2] (3.25ns) ---> "%tempA_load = load i32* %tempA_addr_1, align 4" [matrix_mult/matrix_mult.cpp:16] ---> Core 37 'RAM' ST_25 : Operation 142 [1/1] (0.00ns) ---> "%tmp_18 = trunc i4 %k to i3" [matrix_mult/matrix_mult.cpp:15] ST_25 : Operation 143 [1/1] (0.00ns) ---> "%tmp_s = call i6 @_ssdm_op_BitConcatenate.i6.i3.i3(i3 %tmp_18, i3 0)" [matrix_mult/matrix_mult.cpp:16] ST_25 : Operation 144 [1/1] (1.82ns) ---> "%tmp_4 = add i6 %tmp_s, %j_cast3" [matrix_mult/matrix_mult.cpp:16] ---> Core 14 'AddSub' ST_25 : Operation 145 [1/1] (0.00ns) ---> "%tmp_7 = zext i6 %tmp_4 to i64" [matrix_mult/matrix_mult.cpp:16] ST_25 : Operation 146 [1/1] (0.00ns) ---> "%tempB_addr_1 = getelementptr inbounds [64 x i32]* %tempB, i64 0, i64 %tmp_7" [matrix_mult/matrix_mult.cpp:16] ST_25 : Operation 147 [2/2] (3.25ns) ---> "%tempB_load = load i32* %tempB_addr_1, align 4" [matrix_mult/matrix_mult.cpp:16] ---> Core 37 'RAM' ST_25 : Operation 148 [1/1] (0.00ns) ---> "%empty_11 = call i32 (...)* @_ssdm_op_SpecRegionEnd([24 x i8]* @p_str5, i32 %tmp_13) nounwind" [matrix_mult/matrix_mult.cpp:16] ST_25 : Operation 149 [1/1] (0.00ns) ---> "br label %2" [matrix_mult/matrix_mult.cpp:12] : 3.25ns ST_26 : Operation 150 [1/2] (3.25ns) ---> "%tempA_load = load i32* %tempA_addr_1, align 4" [matrix_mult/matrix_mult.cpp:16] ---> Core 37 'RAM' ST_26 : Operation 151 [1/2] (3.25ns) ---> "%tempB_load = load i32* %tempB_addr_1, align 4" [matrix_mult/matrix_mult.cpp:16] ---> Core 37 'RAM' : 8.51ns ST_27 : Operation 152 [1/1] (8.51ns) ---> "%tmp_10 = mul nsw i32 %tempB_load, %tempA_load" [matrix_mult/matrix_mult.cpp:16] ---> Core 16 'Mul' : 2.55ns ST_28 : Operation 153 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([28 x i8]* @p_str6) nounwind" [matrix_mult/matrix_mult.cpp:16] ST_28 : Operation 154 [1/1] (2.55ns) ---> "%tmp_11 = add nsw i32 %tmp_10, %tempResult_load_1" [matrix_mult/matrix_mult.cpp:16] ---> Core 14 'AddSub' ST_28 : Operation 155 [1/1] (0.00ns) ---> "br label %4" [matrix_mult/matrix_mult.cpp:15] : 3.25ns ST_29 : Operation 156 [1/1] (0.00ns) ---> "%indvar1 = phi i7 [ %indvar_next2, %burst.wr.body ], [ 0, %burst.wr.header.preheader ]" ST_29 : Operation 157 [1/1] (1.48ns) ---> "%exitcond5 = icmp eq i7 %indvar1, -64" ---> Core 25 'Cmp' ST_29 : Operation 158 [1/1] (1.87ns) ---> "%indvar_next2 = add i7 %indvar1, 1" ---> Core 14 'AddSub' ST_29 : Operation 159 [1/1] (0.00ns) ---> "br i1 %exitcond5, label %memcpy.tail, label %burst.wr.body" ST_29 : Operation 160 [1/1] (0.00ns) ---> "%tmp_3 = zext i7 %indvar1 to i64" [matrix_mult/matrix_mult.cpp:18] ST_29 : Operation 161 [1/1] (0.00ns) ---> "%tempResult_addr = getelementptr [64 x i32]* %tempResult, i64 0, i64 %tmp_3" [matrix_mult/matrix_mult.cpp:18] ST_29 : Operation 162 [2/2] (3.25ns) ---> "%tempResult_load = load i32* %tempResult_addr, align 4" [matrix_mult/matrix_mult.cpp:18] ---> Core 37 'RAM' : 3.25ns ST_30 : Operation 163 [1/2] (3.25ns) ---> "%tempResult_load = load i32* %tempResult_addr, align 4" [matrix_mult/matrix_mult.cpp:18] ---> Core 37 'RAM' : 8.75ns ST_31 : Operation 164 [1/1] (0.00ns) ---> "%empty_13 = call i32 (...)* @_ssdm_op_SpecLoopTripCount(i64 64, i64 64, i64 64) nounwind" ST_31 : Operation 165 [1/1] (0.00ns) ---> "%burstwrite_rbegin = call i32 (...)* @_ssdm_op_SpecRegionBegin([18 x i8]* @burstwrite_OC_region) nounwind" ST_31 : Operation 166 [1/1] (0.00ns) ---> "%empty_14 = call i32 (...)* @_ssdm_op_SpecPipeline(i32 1, i32 1, i32 1, i32 0, [1 x i8]* @p_str9) nounwind" ST_31 : Operation 167 [1/1] (0.00ns) ---> "call void (...)* @_ssdm_op_SpecLoopName([29 x i8]* @memcpy_OC_result_OC_s)" ST_31 : Operation 168 [1/1] (8.75ns) ---> "call void @_ssdm_op_Write.m_axi.i32P(i32* %gmem_addr, i32 %tempResult_load, i4 -1)" [matrix_mult/matrix_mult.cpp:18] ---> Core 9 'm_axi' ST_31 : Operation 169 [1/1] (0.00ns) ---> "%burstwrite_rend = call i32 (...)* @_ssdm_op_SpecRegionEnd([18 x i8]* @burstwrite_OC_region, i32 %burstwrite_rbegin) nounwind" ST_31 : Operation 170 [1/1] (0.00ns) ---> "br label %burst.wr.header" : 8.75ns ST_32 : Operation 171 [5/5] (8.75ns) ---> "%gmem_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %gmem_addr)" [matrix_mult/matrix_mult.cpp:18] ---> Core 9 'm_axi' : 8.75ns ST_33 : Operation 172 [4/5] (8.75ns) ---> "%gmem_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %gmem_addr)" [matrix_mult/matrix_mult.cpp:18] ---> Core 9 'm_axi' : 8.75ns ST_34 : Operation 173 [3/5] (8.75ns) ---> "%gmem_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %gmem_addr)" [matrix_mult/matrix_mult.cpp:18] ---> Core 9 'm_axi' : 8.75ns ST_35 : Operation 174 [2/5] (8.75ns) ---> "%gmem_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %gmem_addr)" [matrix_mult/matrix_mult.cpp:18] ---> Core 9 'm_axi' : 8.75ns ST_36 : Operation 175 [1/5] (8.75ns) ---> "%gmem_addr_wr_resp = call i1 @_ssdm_op_WriteResp.m_axi.i32P(i32* %gmem_addr)" [matrix_mult/matrix_mult.cpp:18] ---> Core 9 'm_axi' ST_36 : Operation 176 [1/1] (0.00ns) ---> "ret void" [matrix_mult/matrix_mult.cpp:19] ============================================================ + 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' [5] (1 ns) : 8.75ns The critical path consists of the following: 'getelementptr' operation ('gmem_addr_2') [16] (0 ns) bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [27] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [27] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [27] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [27] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [27] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [27] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [27] (8.75 ns) : 1.87ns The critical path consists of the following: 'phi' operation ('indvar') with incoming values : ('indvar_next') [30] (0 ns) 'add' operation ('indvar_next') [32] (1.87 ns) : 8.75ns The critical path consists of the following: bus read on port 'gmem' (matrix_mult/matrix_mult.cpp:6) [40] (8.75 ns) : 3.25ns The critical path consists of the following: 'getelementptr' operation ('tempA_addr', matrix_mult/matrix_mult.cpp:6) [41] (0 ns) 'store' operation (matrix_mult/matrix_mult.cpp:6) of variable 'gmem_addr_2_read', matrix_mult/matrix_mult.cpp:6 on array 'tempA', matrix_mult/matrix_mult.cpp:5 [42] (3.25 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [46] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [46] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [46] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [46] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [46] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [46] (8.75 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [46] (8.75 ns) : 1.87ns The critical path consists of the following: 'phi' operation ('indvar9') with incoming values : ('indvar_next1') [49] (0 ns) 'add' operation ('indvar_next1') [51] (1.87 ns) : 8.75ns The critical path consists of the following: bus read on port 'gmem' (matrix_mult/matrix_mult.cpp:7) [59] (8.75 ns) : 3.25ns The critical path consists of the following: 'getelementptr' operation ('tempB_addr', matrix_mult/matrix_mult.cpp:7) [60] (0 ns) 'store' operation (matrix_mult/matrix_mult.cpp:7) of variable 'gmem_addr_1_read', matrix_mult/matrix_mult.cpp:7 on array 'tempB', matrix_mult/matrix_mult.cpp:5 [61] (3.25 ns) : 1.77ns The critical path consists of the following: multiplexor before 'phi' operation ('i') with incoming values : ('i', matrix_mult/matrix_mult.cpp:10) [67] (1.77 ns) : 8.75ns The critical path consists of the following: bus request on port 'gmem' (matrix_mult/matrix_mult.cpp:18) [123] (8.75 ns) : 2.23ns The critical path consists of the following: 'icmp' operation ('exitcond1', matrix_mult/matrix_mult.cpp:12) [81] (1.3 ns) blocking operation 0.931 ns on control path) : 5.08ns The critical path consists of the following: 'phi' operation ('k') with incoming values : ('k', matrix_mult/matrix_mult.cpp:15) [94] (0 ns) 'add' operation ('tmp_8', matrix_mult/matrix_mult.cpp:16) [103] (1.83 ns) 'getelementptr' operation ('tempA_addr_1', matrix_mult/matrix_mult.cpp:16) [105] (0 ns) 'load' operation ('tempA_load', matrix_mult/matrix_mult.cpp:16) on array 'tempA', matrix_mult/matrix_mult.cpp:5 [106] (3.25 ns) : 3.25ns The critical path consists of the following: 'load' operation ('tempA_load', matrix_mult/matrix_mult.cpp:16) on array 'tempA', matrix_mult/matrix_mult.cpp:5 [106] (3.25 ns) : 8.51ns The critical path consists of the following: 'mul' operation ('tmp_10', matrix_mult/matrix_mult.cpp:16) [113] (8.51 ns) : 2.55ns The critical path consists of the following: 'add' operation ('tmp_11', matrix_mult/matrix_mult.cpp:16) [114] (2.55 ns) : 3.25ns The critical path consists of the following: 'phi' operation ('indvar1') with incoming values : ('indvar_next2') [126] (0 ns) 'getelementptr' operation ('tempResult_addr', matrix_mult/matrix_mult.cpp:18) [136] (0 ns) 'load' operation ('tempResult_load', matrix_mult/matrix_mult.cpp:18) on array 'tempResult', matrix_mult/matrix_mult.cpp:5 [137] (3.25 ns) : 3.25ns The critical path consists of the following: 'load' operation ('tempResult_load', matrix_mult/matrix_mult.cpp:18) on array 'tempResult', matrix_mult/matrix_mult.cpp:5 [137] (3.25 ns) : 8.75ns The critical path consists of the following: bus write on port 'gmem' (matrix_mult/matrix_mult.cpp:18) [138] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'gmem' (matrix_mult/matrix_mult.cpp:18) [142] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'gmem' (matrix_mult/matrix_mult.cpp:18) [142] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'gmem' (matrix_mult/matrix_mult.cpp:18) [142] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'gmem' (matrix_mult/matrix_mult.cpp:18) [142] (8.75 ns) : 8.75ns The critical path consists of the following: bus access on port 'gmem' (matrix_mult/matrix_mult.cpp:18) [142] (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 State 18 State 19 State 20 State 21 State 22 State 23 State 24 State 25 State 26 State 27 State 28 State 29 State 30 State 31 State 32 State 33 State 34 State 35 State 36 ============================================================ + Verbose Summary: Datapath Resource usage ============================================================ N/A