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

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • How to Read the Diagrams
  • Part 0: What Is a Protocol?10
  • Part 1: Timing and Clocking11
  • Part 2: Encoding and Framing12
  • Part 3: Handshakes13
  • Part 4: Flow Control17
  • Part 5: Transactions19
  • Part 6: Concurrency and Performance17
    • Latency, Throughput and Bandwidth
    • Little's Law
    • Outstanding Transactions
    • Tags and IDs
    • In-Order or Out-of-Order
    • Reorder Buffers
    • Interleaving
    • Split Completions
    • Protocol Efficiency
    • Peak and Sustained Bandwidth
    • Queueing Intuition
    • Tail Latency
    • Buffers That Hide Latency
    • Virtual Output Queues
    • Performance Modelling
    • Protocols Compared: Concurrency and Performance
    • Drills: Concurrency and Performance
  • Part 7: Ordering13
  • Part 8: Sharing and Arbitration12
  • Part 9: Deadlock and Liveness13
  • Part 10: Reliability and Recovery20
  • Part 11: Bring-Up and Link Management10
  • Part 12: Power8
  • Part 13: Shared State and Coherence9
  • Part 14: Security and Isolation7
  • Part 15: Specifying and Verifying11
  • Part 16: Protocols Dissected17
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 6: Concurrency and Performance
  1. Topics
  2. First Principles of Hardware Protocols
  3. Part 6: Concurrency and Performance
  4. Split Completions

Part 6 · Concurrency and Performance · Senior (S)

Split Completions

One read request can be answered by several completions. Why completers split large reads, the rules for where they may split, and what the requester must do to accept the pieces.

On this page

    Note

    Level: Senior (S) · Answers: How many requests can be in flight?

    Before this: Tags and IDs

    A device asks for 512 bytes in one read request. The data comes back as three packets: 208 bytes, 256 bytes, 48 bytes. The device's designer had assumed one request means one response, freed the request's tag on the first packet, and handed it to a new read. The other two packets were then delivered to the new read.

    Why would one request be answered in several pieces, and what rules govern the pieces?

    The obvious answer, and why it breaks

    The obvious model is one request, one response. But a request can ask for more data than one response packet may carry: the largest packet a link accepts is limited so that buffers stay small and a big packet does not hold the link for too long. A completer may also want to start sending the first part of a large read before it has fetched the rest. So large reads come back in pieces, and the requester must expect it.

    The idea: split at agreed boundaries

    • A request may ask for up to a maximum read request size; a completion may carry at most a maximum payload size. When the first exceeds the second, the answer must be split.

    • Splits may happen only at naturally aligned completion boundaries (for example every 64 or 128 bytes), so every piece starts or ends on a predictable address and receivers can place data in aligned chunks.

    • The pieces of one request come back in address order, each carrying the same tag and a count of bytes still to come.

    • The request's tag stays reserved until the last piece arrives (lesson 6.4).

    The completer splits the read at aligned boundaries, in address order; the tag is freed only after the last piece.

    Worked numbers: the opening split

    Maximum payload 256 bytes, completion boundary 64 bytes, a 512-byte read starting at 0x1030 (illustrative settings):

    Diagram
    Read covers 0x1030 to 0x122F                         = 512 bytes
    Piece 1: 0x1030 up to the boundary 0x1100           = 208 bytes  (ends on a 64-byte boundary, <= 256)
    Piece 2: 0x1100 to 0x11FF                            = 256 bytes  (the maximum payload)
    Piece 3: 0x1200 to 0x122F                            =  48 bytes  (the end of the request)
    Total                                                = 512 bytes

    Other splits would also be legal (for example 16 bytes to 0x1040, then aligned pieces), so a requester must handle any legal split, not one pattern.

    What the requester must do

    Duty

    Why

    Keep the tag until the byte count reaches zero

    Freeing it on the first piece hands later pieces to the wrong request

    Have buffer space for the whole request when it is issued

    Pieces may arrive back to back; refusing one blocks completions for other requests behind it

    Place each piece by its address

    Pieces have different sizes depending on alignment

    Plan for the maximum number of pieces

    Some designs track completions per request; size those tables for the worst split

    How real protocols chose

    Protocol

    Split completions

    PCI Express

    A read larger than the maximum payload size (128 to 4096 bytes, configured per link) returns as several completions, split only at the Read Completion Boundary (64 or 128 bytes for a root complex, 128 bytes for other components) and returned in increasing address order.

    AXI

    One read burst returns its beats on the read-data channel with RLAST on the last; the equivalent of splitting is a long burst arriving as many beats, possibly interleaved with others (lesson 6.7).

    What breaks

    The opening bug (illustrative), and its cousin: a device tested against one completer that always returned whole 256-byte pieces was connected to a root complex that split at 64-byte boundaries. Its completion tracker had room for at most 2 pieces per read and overflowed on the third. Test against completers that split as finely as the rules allow.

    Why this matters

    Senior lens. Wherever request size can exceed response size, ask three questions: where may the completer split, how does the requester know the last piece has arrived, and what is the worst number of pieces? Then check tag lifetime, response buffering and tracking tables against that worst case, and make the verification completer split as finely and as unusually as the rules allow.

    Interview

    Asked: "Why might a 512-byte read come back in several pieces?"

    Weak answer: Because the link is slow.

    Strong answer: Because a completion can carry at most the link's maximum payload size, and the completer may only split at aligned completion boundaries. In PCIe, with a 256-byte maximum payload and 64-byte boundary, a 512-byte read at an unaligned address might return as 208, 256 and 48 bytes, in address order, all with the same tag and a remaining byte count. The requester must keep the tag until the last piece, buffer the whole request up front, and handle any legal split.

    Follow-ups: (1) When may the requester free the tag? (2) Why must the requester reserve buffer space at request time?

    Check yourself A 256-byte read at 0x2010 with a 128-byte boundary and 256-byte maximum payload. Give one legal split.

    0x2010–0x207F (112 bytes, ending on a 128-byte boundary), 0x2080–0x210F (144 bytes, the end of the request). It could also come back whole, 256 bytes, if the completer chooses.

    Check yourself How does a requester know a split read is complete?

    Each completion carries a count of bytes remaining (or the total and a position); the read is complete when the remaining count reaches zero.

    Key takeaways

    • A read larger than the maximum payload returns as several completions, split only at aligned boundaries and in address order.

    • The requester keeps the tag and the buffer space until the last piece arrives.

    • Design and test for the worst legal split, not the usual one.

    Keep going

    Next: Lesson 6.9, Protocol Efficiency. From line rate to useful bandwidth: the overhead stack, layer by layer.

    Related topics

    • Part 6 overview: Concurrency and Performance

    Previous

    94 / 234

    Next: Protocol Efficiency

    Up next

    Up nextProtocol Efficiency

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Latency, Throughput and Bandwidth
    • Little's Law
    • Outstanding Transactions