by support »
A split transaction takes place whenever the read request is longer than the Maximal Payload size. In most settings, the maximal read request size is bigger than the allowed payload size, so this is a rather common scenario in data-intensive applications. The size limits are determined by both sides' capabilities.
When the request requires a data chunk which can't fit into a single TLP, the completer sends them in segments in increasing address order (unless relaxed ordering is allowed). There is also a Lower Address field in each completion TLP, which tells the receiver what the starting address' LSBs are, but that's actually unnecessary information, if the receiver increments its address pointer as it receives the data.
There's also a restriction on where the completion TLPs may be split (on 64 or 128 bytes' boundary) but this is, again, unnecessary to know if you're on the receiving part (unless you want to take advantage of this).
Hope this clarified things a bit.
A split transaction takes place whenever the read request is longer than the Maximal Payload size. In most settings, the maximal read request size is bigger than the allowed payload size, so this is a rather common scenario in data-intensive applications. The size limits are determined by both sides' capabilities.
When the request requires a data chunk which can't fit into a single TLP, the completer sends them in segments in increasing address order (unless relaxed ordering is allowed). There is also a Lower Address field in each completion TLP, which tells the receiver what the starting address' LSBs are, but that's actually unnecessary information, if the receiver increments its address pointer as it receives the data.
There's also a restriction on where the completion TLPs may be split (on 64 or 128 bytes' boundary) but this is, again, unnecessary to know if you're on the receiving part (unless you want to take advantage of this).
Hope this clarified things a bit.