When the straddle option is in use, the core does not start a new Completion TLP in the same
beat when it has asserted discontinue to abort the Completion TLP ending in the beat.
Handling of Completion Errors
When a Completion TLP is received from the link, the core matches it against the outstanding
requests in the Split Completion Table to determine the corresponding request, and compares
the fields in its header against the expected values to detect any error conditions. The core then
signals the error conditions in a 4-bit error code sent to the user logic as part of the completion
descriptor. The core also indicates the last completion for a request by setting the Request
Completed bit (bit 30) in the descriptor. The error conditions signaled by the various error codes
are described below:
•
0010
: Request terminated by a Completion TLP with UR, CA or CRS status. In this case, there
is no data associated with the completion, and the Request Completed bit in the completion
descriptor is set. On receiving such a Completion from the core, the user logic can discard the
corresponding request.
•
0011
: Read Request terminated by a Completion TLP with incorrect byte count. This
condition occurs when a Completion TLP is received with a byte count not matching the
expected count. The Request Completed bit in the completion descriptor is set. On receiving
such a completion from the core, the user logic can discard the corresponding request.
•
0100
: This code indicates the case when the current Completion being delivered has the
same tag of an outstanding request, but its Requester ID, TC, or Attr fields did not match with
the parameters of the outstanding request. The user logic should discard any data that follows
the descriptor. In addition, if the Request Completed bit in the descriptor is not set, the user
logic should continue to discard the data subsequent completions for this tag until it receives
a completion descriptor with the Request Completed bit set. On receiving a completion
descriptor with the Request Completed bit set, the user logic can remove all state associated
with the request.
•
0101
: Error in starting address. The low address bits in the Completion TLP header did not
match with the starting address of the next expected byte for the request. The user logic
should discard any data that follows the descriptor. In addition, if the Request Completed bit
in the descriptor is not set, the user logic should continue to discard the data subsequent
Completions for this tag until it receives a completion descriptor with the Request Completed
bit set. On receiving a completion descriptor with the Request Completed bit set, the user
logic can discard the corresponding request.
•
0110
: Invalid tag. This error code indicates that the tag in the Completion TLP did not match
with the tags of any outstanding request. The user logic should discard any data following the
descriptor.
•
0111
: Invalid byte count. The byte count in the Completion was higher than the total number
of bytes expected for the request. In this case, the Request Completed bit in the completion
descriptor is also set. On receiving such a completion from the core, the user logic can discard
the corresponding request.
Chapter 4: Designing with the Core
PG346 (v3.3) November 16, 2022
CPM Mode for PCI Express
186