Completer Completion Interface - 3.4 English

Versal Adaptive SoC CPM Mode for PCI Express Product Guide (PG346)

Document ID
PG346
Release Date
2024-05-30
Version
3.4 English
Table 1. Completer Completion Interface Port Descriptions (1024-bit Interface)
Name I/O Width Description
pcie0_s_axis_cc_tdata pcie1_s_axis_cc_tdata I 1024 Completion data from the user application to the PCIe core.
pcie0_s_axis_cc_tuser pcie1_s_axis_cc_tuser I 233 This is a set of signals containing sideband information for the TLP being transferred. These signals are valid when pcie(n)_s_axis_cc_tvalid is High.

The individual signals in this set are described in the following table.

pcie0_s_axis_cc_tlast pcie1_s_axis_cc_tlast I 1 The user application must assert this signal in the last cycle of a packet to indicate the end of the packet. When the TLP is transferred in a single beat, the user application must set this bit in the first cycle of the transfer.

This input is used by the core only when the straddle option is disabled. When the straddle option is enabled, the core ignores the setting of this input, using instead the is_sop/is_eop signals in the pcie(n)_s_axis_cc_tuser bus to determine the start and end of TLPs.

pcie0_s_axis_cc_tkeep pcie1_s_axis_cc_tkeep I 32 The assertion of bit i of this bus during a transfer indicates to the core that Dword i of the pcie(n)_s_axis_cc_tdata bus contains valid data. The user logic must set this bit to 1 contiguously for all Dwords starting from the first Dword of the descriptor to the last Dword of the payload. Thus, pcie(n)_s_axis_cc_tdata must be set to all 1s in all beats of a packet, except in the final beat when the total size of the packet is not a multiple of the width of the data bus (both in Dwords). This is true for both Dword-aligned and 128b address-aligned modes of payload transfer.

The tkeep bits are valid only when straddle is not enabled on the CC interface. When straddle is enabled, the core ignores the setting of these bits when receiving data across the interface. The user logic must set the is_sop/is_eop signals in the pcie(n)_s_axis_cc_tuser bus in that case to signal the start and end of TLPs transferred over the interface.

pcie0_s_axis_cc_tvalid pcie1_s_axis_cc_tvalid I 1 The user application must assert this output whenever it is driving valid data on the pcie(n)_s_axis_cc_tdata bus. The user application must keep the valid signal asserted during the transfer of a packet. The core paces the data transfer using the pcie(n)_s_axis_cc_tready signal.
pcie0_s_axis_cc_tready pcie1_s_axis_cc_tready O 1 Activation of this signal by the PCIe core indicates that it is ready to accept data. Data is transferred across the interface when both pcie(n)_s_axis_cc_tvalid and pcie(n)_s_axis_cc_tready are asserted in the same cycle.

If the core deasserts the ready signal when the valid signal is High, the user logic must maintain the data on the bus and keep the valid signal asserted until the core has asserted the ready signal.

Table 2. Sideband Signals in pcie(n)_s_axis_cc_tuser (1024-bit Interface)
Bit Index Name Width Description
3:0 is_sop[3:0] 4 Signals the start of a new TLP in this beat. These outputs are set in the first beat of a TLP. When straddle is disabled, only is_sop[0] is valid. When straddle is enabled, the settings are as follows:
  • 0000: No new TLP starting in this beat.
  • 0001: A single new TLP starts in this beat. Its start position is indicated by is_sop0_ptr[1:0].
  • 0011: Two new TLPs are starting in this beat. is_sop0_ptr[1:0] provides the start position of the first TLP and is_sop1_ptr[1:0] provides the start position of the second TLP.
  • 0111: Three new TLPs are starting in this beat. is_sop0_ptr[1:0] provides the start position of the first TLP, is_sop1_ptr[1:0] provides the start position of the second TLP and is_sop2_ptr[1:0] provides the start position of the third TLP
  • 1111: Four new TLPs are starting in this beat. is_sop0_ptr[1:0] provides the start position of the first TLP, is_sop1_ptr[1:0] provides the start position of the second TLP, is_sop2_ptr[1:0] provides the start position of the third TLP and is_sop3_ptr[1:0] provides the start position of the fourth TLP
  • All other values: Reserved.

This field is used by the core only when the straddle option is enabled. When straddle is disabled, the core uses tlast to determine the first beat of an incoming TLP.

5:4 is_sop0_ptr[1:0] 2 Location of first SOP in the beat:
  • 00: Byte lane 0
  • 01: Byte lane 32
  • 10: Byte lane 64
  • 11: Byte lane 96
7:6 is_sop1_ptr[1:0] 2 Location of second SOP in the beat:
  • 00:Reserved
  • 01: Byte lane 32
  • 10: Byte lane 64
  • 11: Byte lane 96
9:8 is_sop2_ptr[1:0] 2 Location of third SOP in the beat:
  • 00:Reserved
  • 01: Reserved
  • 10: Byte lane 64
  • 11: Byte lane 96
11:10 is_sop3_ptr[1:0] 2 Location of fourth SOP in the beat:
  • 00:Reserved
  • 01: Reserved
  • 10: Reserved
  • 11: Byte lane 96
15:12 is_eop[3:0] 4 Indicates that a TLP is ending in this beat. These outputs are set in the final beat of a TLP. When straddle is enabled, the settings are as follows:
  • 0000: No TLPs ending in this beat.
  • 0001: A single TLP is ending in this beat. is_eop0_ptr[4:0] provides the offset of the last Dword of this TLP.
  • 0011: Two TLPs are ending in this beat. is_eop0_ptr[4:0] provides the offset of the last Dword of the first TLP and is_eop1_ptr[4:0]provides the offset of the last Dword of the second TLP.
  • 0111: Three TLPs are ending in this beat. is_eop0_ptr[4:0] provides the offset of the last Dword of the first TLP, is_eop1_ptr[4:0] provides the offset of the last Dword of the second TLP and is_eop2_ptr[4:0] provides the offset of the third Dword of the second TLP.
  • 1111: Four TLPs are ending in this beat. is_eop0_ptr[4:0] provides the offset of the last Dword of the first TLP, is_eop1_ptr[4:0] provides the offset of the last Dword of the second TLP, is_eop2_ptr[4:0] provides the offset of the last Dword of the third TLP and is_eop3_ptr[4:0] provides the offset of the last Dword of the fourth TLP.

The use of this signal is optional for the user logic when the straddle option is not enabled, because tlast Is asserted in the final beat of a TLP.

20:16 is_eop0_ptr[4:0] 5 Offset of the last Dword of the first TLP ending in this beat. This output is valid when is_eop[0] is asserted.

This field is used by the core only when the straddle option is enabled.

25:21 is_eop1_ptr[4:0] 5 Offset of the last Dword of the second TLP ending in this beat. This output is valid when is_eop[1] is asserted.

This field is used by the core only when the straddle option is enabled.

30:26 is_eop2_ptr[4:0] 5 Offset of the last Dword of the second TLP ending in this beat. This output is valid when is_eop[2] is asserted.

This field is used by the core only when the straddle option is enabled.

35:31 is_eop3_ptr[4:0] 5 Offset of the last Dword of the fourth TLP ending in this beat. This output is valid when is_eop[3] is asserted.

This field is used by the core only when the straddle option is enabled.

36 discontinue 1 This signal can be asserted by the user application during a transfer if it has detected an error (such as an uncorrectable ECC error while reading the payload from memory) in the data being transferred and needs to abort the packet. The core nullifies the corresponding TLP on the link to avoid data corruption.

The user logic can assert this signal in any beat during the transfer except the first beat of the TLP. It can either choose to terminate the packet prematurely in the cycle where the error was signaled, or continue until all bytes of the payload are delivered to the core. In the latter case, the core treats the error as sticky for the following beats of the packet, even if the user logic deasserts the discontinue signal before the end of the packet.

The discontinue signal can be asserted only when pcie(n)_s_axis_cc_tvalid is High. The core samples this signal only when pcie(n)_s_axis_cc_tready is High. Thus, once asserted, it should not be deasserted until pcie(n)_s_axis_cc_tready is High.

When the straddle option is enabled on the CC interface, the user should not start a new TLP in the same beat when a TLP is ending with discontinue asserted.

When the core is configured as an Endpoint, this error is also reported by the core to the Root Complex it is attached to, using Advanced Error Reporting (AER).

164:37 parity 128 Odd parity for the data. When parity checking is enabled in the core, user logic must set bit i of this bus to the odd parity computed for byte i of pcie(n)_s_axis_cc_tdata.

On detection of a parity error, the core nullifies the corresponding TLP on the link and reports it as an Uncorrectable Internal Error.

The parity bits can be permanently tied to 0 if parity check is not enabled in the core.

232:165 Reserved 65 Reserved