Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutRoadmapCareersInternshipsFAQContactPrivacyTerms
Skip to lesson

Course contents

  • Architecture Metrics Reference
  • Workload Taxonomy for Architects
  • Architecture Glossary
  • Computer Architecture Cheatsheet
  • Pipeline Fundamentals14
  • Memory Hierarchy15
  • NoC and Interconnect Architecture6
  • Coherency and Memory Ordering9
  • Performance Analysis9
  • Accelerator Architectures6
    • Accelerators for the Architect
      • When an Accelerator Pays Off
      • Dataflow Patterns as Reuse Contracts
      • Systolic Execution and Utilization Cliffs
      • Locality, Scratchpads and Tile Sizing
      • DMA and Double Buffering
      • Integration, Launch Cost and Signoff
  • SoC Architecture Tradeoffs9
  • Architecture Interview Prep14
Loading lesson

←Accelerators for the Architect
  1. Topics
  2. Computer Architecture
  3. Accelerator Architectures
  4. Accelerators for the Architect
  5. Systolic Execution and Utilization Cliffs
On this page

    Computer ArchitectureAll levels

    Systolic Execution and Utilization Cliffs

    A pipelined MAC engine shows fill, drain and padding losses, proved by a runnable model.

    A pipeline, not magic

    A systolic engine is a pipeline of multiply-accumulate stages. Weights stay at their stage while one activation row per cycle flows in.

    Throughput is one row per cycle after fill. Latency is 3 cycles here, and it is paid on every short phase.

    Rows fed (latency 3)

    Cycles (latency + rows)

    Active slots / total

    Utilization

    64 (long stream)

    67

    256 / 268

    96%

    4 (full tile)

    7

    16 / 28

    57%

    3 (short phase)

    6

    12 / 24

    50%

    3 wide on 4-wide array

    6

    9 / 24

    38%

    Fill, drain and padding

    Padding a 3-wide tile to width 4 multiplies the 50% phase efficiency by 3/4. The result is 37.5%, about 38%.

    Diagram
    4 rows: cycles = 3 + 4 = 7, util = (4 x 4) / (4 x 7) = 16 / 28 = 57.1% ≈ 57%
    3 rows: cycles = 3 + 3 = 6, util = (3 x 4) / (4 x 6) = 12 / 24 = 50%
    3 rows padded to width 4: 50% x 3 / 4 = 37.5% ≈ 38%
    64 rows: cycles = 3 + 64 = 67, util = 256 / 268 = 95.5% ≈ 96%

    Testbench

    The model below is a pipelined MAC stage with stationary weights. The testbench feeds 4 rows then 3 padded rows and checks every sum plus the first-result latency of 3.

    mac_pipe4.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    module mac_pipe4 (
      input  logic        clk,
      input  logic        rst_n,
      input  logic        in_valid,
      input  logic [7:0]  a_vec0,
      input  logic [7:0]  a_vec1,
      input  logic [7:0]  a_vec2,
      input  logic [7:0]  a_vec3,
      input  logic [7:0]  w0,
      input  logic [7:0]  w1,
      input  logic [7:0]  w2,
      input  logic [7:0]  w3,
      output logic        out_valid,
      output logic [15:0] sum_out
    );
      logic [15:0] s0, q1, q2, q3;
      logic v1, v2, v3;
      always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
          s0 <= 16'd0; q1 <= 16'd0; q2 <= 16'd0; q3 <= 16'd0;
          v1 <= 1'b0; v2 <= 1'b0; v3 <= 1'b0; out_valid <= 1'b0;
        end else begin
          s0 <= a_vec0 * w0 + a_vec1 * w1 + a_vec2 * w2 + a_vec3 * w3;
          q1 <= s0; q2 <= q1; q3 <= q2;
          v1 <= in_valid; v2 <= v1; v3 <= v2; out_valid <= v3;
        end
      end
      assign sum_out = q3;
    endmodule
    

    Common mistakes

    Reading MAC-active counters as end-to-end speed repeats the legacy trap. Idle feeders and padded lanes hide inside high MAC activity.

    Likely probes: fill math and skinny-shape cliffs.

    • Total cycles equal depth plus rows; divide active slots by total slots.

    • Padding multiplies phase efficiency by the used width fraction.

    • Long streams amortize fill; short phases pay it every time.

    Check yourself Latency is 3 and 4 rows are fed. How many cycles pass, and what is utilization?

    7 cycles. Active slots are 16 over 28 total, so about 57%.

    Check yourself A 3-wide tile runs on a 4-wide array with latency 3. What is combined efficiency?

    Phase gives 12/24 = 50%, times width 3/4, giving 37.5%, about 38%.

    Related topics

    • AI Accelerator Systems

    • GPU Design

    Previous

    60 / 86

    Next: Locality, Scratchpads and Tile Sizing

    Up next

    Up nextLocality, Scratchpads and Tile Sizing

    Sign in to save progress

    Practice this lessonPrevious lessonReport an error

    See also

    • When an Accelerator Pays Off
    • DMA and Double Buffering
    • Integration, Launch Cost and Signoff