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.