Completion Error Handling
When the PCIe Controller receives a completion TLP from the link, it matches
the TLP 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 PCIe Controller then signals the error conditions
on MASTER_AXI_RRESP and sets SLVERR (2'b10) or
DECERR(2'b11). The PCIe Controller asserts this signal as well
as the MASTER_AXI_RRESP and MASTER_AXI_RVALID signals. When
the client receives a read response with slave error as the response code, it should discard
the data sent by the PCIe Controller and it should either discard or retry the
corresponding request.
The PCIe error conditions that can lead to a slave error are:
- The completion TLP received from the link was poisoned.
- Request terminated by a completion TLP with UR, CA, or CRS status.
- Read request terminated by a completion TLP with incorrect byte count.
- The current completion being delivered has the same tag as an outstanding request, but its requester ID, TC, or Attr fields did not match the parameters of the outstanding request.
- Error in starting address.
- Request terminated by a completion timeout, or by a function-level reset (FLR) targeting the function that generated the request.