Link Basics
Ordered sets, DLLPs and TLPs on a PCIe link
A PCI Express link carries three distinct vocabularies at once: ordered sets, which are short fixed patterns used by the physical layer to keep the link aligned and trained; data link layer packets (DLLPs), which carry acknowledgements, flow control credits and power management handshakes between the two ends of a link; and transaction layer packets (TLPs), which carry the actual memory, I/O and configuration requests and completions.
A PCI Express link carries three distinct vocabularies at once: ordered sets, which are short fixed patterns used by the physical layer to keep the link aligned and trained; data link layer packets (DLLPs), which carry acknowledgements, flow control credits and power management handshakes between the two ends of a link; and transaction layer packets (TLPs), which carry the actual memory, I/O and configuration requests and completions. They are easy to separate once you know what each one is for, because they differ in who originates them, what they acknowledge, and what happens when one is lost.
The distinction matters beyond theory. Anyone reading a protocol analyser trace, or working through a language reference such as the ABAP syntax and statement basics that a developer keeps open beside the bench, is doing the same job: mapping a formal vocabulary onto observed behaviour. The three layers below are the vocabulary of the link.
What is an ordered set and where does it appear?
An ordered set is a short, fixed-length sequence of symbols sent on the link with no packet header, no CRC and no addressing. It appears at the physical layer, on the wire itself, and it is never forwarded to the data link or transaction layers. The receiver recognises it by pattern, not by parsing.
Ordered sets do the housekeeping that must happen before any packet can move. They establish bit and symbol lock, align the lanes of a multi-lane link, and negotiate the link width and speed during training. They also carry the electrical idle ordered sets that let both ends enter and leave low-power states in step, and the SKP ordered sets that absorb small frequency differences between the two reference clocks by inserting or removing symbols.
In a capture, ordered sets look like repeating short patterns rather than structured frames. They have no sequence number, no credit field and no completion. If you see the same symbol group repeating at a steady cadence during link bring-up, you are looking at training traffic, not at data.
What does a data link layer packet do that a transaction layer packet does not?
A DLLP manages the link itself. A TLP carries work for the device at the other end. That is the whole division.
A DLLP is generated and consumed by the data link layer at each end of a single link. It never crosses a switch to a further device. Its jobs are acknowledgement and retry, flow control credit returns, and power management. The acknowledgement DLLP tells the transmitter which TLPs arrived intact, so the transmitter can release its replay buffer. The flow control DLLP returns credits, so the transmitter knows how much buffer space the receiver has free for each traffic class. Neither of these exists at the transaction layer.
A TLP, by contrast, is end-to-end. It is assembled by the transaction layer, addressed to a function somewhere in the hierarchy, and it may pass through several switches before it is consumed. It carries a memory read or write, an I/O request, a configuration access, a message, or a completion. It has a header that identifies the requester, the tag and the target, and it can require a completion to be sent back.
So the practical rule is: if the packet is about keeping this link healthy, it is a DLLP. If it is about moving data or changing a register somewhere in the fabric, it is a TLP.
How do the three layers divide the work?
The physical layer owns the wire. It serialises and deserialises, recovers the clock, aligns lanes, and exchanges ordered sets with its peer. It guarantees that symbols arrive with the correct framing and that the link is trained and stable. It does not know what a packet means.
The data link layer owns one hop. It wraps and unwraps TLPs, assigns sequence numbers, checks the LCRC, acknowledges good reception, requests replay of bad reception, and reports flow control credits. It guarantees reliable delivery across a single link, hop by hop. It does not know where the TLP is ultimately going.
The transaction layer owns the request. It builds and interprets TLPs, manages tags and completions, applies ordering rules and traffic classes, and handles the split transaction model in which a request and its completion are separate packets. It guarantees the semantics of the operation, not the delivery of any individual packet.
| Layer | What it sends | What it guarantees |
|---|---|---|
| Physical | Ordered sets, symbols, electrical idle | Symbol lock, lane alignment, trained and stable link |
| Data link | DLLPs: ACK/NAK, flow control credits, power management | Reliable hop-by-hop delivery of TLPs, LCRC checked |
| Transaction | TLPs: memory, I/O, config, message, completion | Request semantics, ordering, tag and completion matching |
How do you tell them apart in a capture?
- Work in order, from the bottom up. A capture read out of sequence produces confident and wrong conclusions.
- Confirm the link is trained before reading anything else. Look for the ordered set exchange during training, then for a steady stream of SKP ordered sets. If training never completes, no DLLP or TLP will be meaningful.
- Identify the DLLPs next. They are short, they have no address, and they cluster around the traffic they serve: an ACK follows the TLPs it acknowledges, a credit return follows the packets that consumed the credits.
- Match each ACK to the sequence numbers it covers. A gap in the acknowledged sequence numbers is the signal that a replay happened, and the replay will appear as a retransmission of the same TLP with the same sequence number.
- Read the TLPs last. Check the type field first, then the requester and tag, then whether a completion is expected. A non-posted request without a matching completion is the interesting case.
- Correlate across layers only after each layer is understood on its own. A missing completion is usually a transaction layer problem, but it can also be a data link layer replay that never succeeded, and the two look different in the trace.
Common mistakes
- Treating a DLLP as if it were routable. DLLPs do not cross a switch. A capture taken on one link will not show the DLLPs of another link, and their absence is not a fault.
- Assuming ordered sets are packets. They have no header, no CRC and no sequence number, so counting them as traffic inflates any throughput figure taken from a raw symbol count.
- Reading TLPs before confirming link training. A link that is still negotiating width or speed will show malformed-looking traffic that is simply the training sequence.
- Confusing a replay with a duplicate request. A replayed TLP carries the same sequence number as the original. A genuinely duplicated request carries a new one, and the two require different responses from the receiver.
- Ignoring credit returns when diagnosing stalls. A transmitter that has run out of credits is not broken; it is waiting, and the credit return DLLP that unblocks it will be visible in the trace.
Why the three vocabularies stay separate
The separation is deliberate. Ordered sets must be recognisable without parsing, so they are fixed patterns. DLLPs must be cheap, because they are generated per link and per credit event, so they carry no address. TLPs must be routable and semantically rich, so they carry the full header and the ordering rules. Each layer pays only for what it needs, and each one can be debugged on its own terms. Once the three are separated in your reading, a capture stops being a wall of symbols and becomes three readable conversations happening at different scopes on the same wire.
The page behind these facts
The figures on this page are read from the source the text names, pcisig.com, consulted on September 6, 2026. How this desk reads a document, and what it does with a figure it cannot source, is set out in sources and method.