Requester Request Interface - 3.4 English

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

Document ID
PG346
Release Date
2023-11-20
Version
3.4 English
Table 1. Requester Request Interface Port Descriptions (1024-bit Interface)
Name Width I/O Description
pcie0_s_axis_rq_tdata pcie1_s_axis_rq_tdata 1024 I Requester-side request data from the user application to the PCIe core.
pcie0_s_axis_rq_tuser pcie1_s_axis_rq_tuser 373 I This is a set of signals containing sideband information for the TLP being transferred. These signals are valid when pcie(n)_s_axis_rq_tvalid is high. The individual signals in this set are described in the following table.
pcie0_s_axis_rq_tlast pcie1_s_axis_rq_tlast 1 I The user application must assert this signal in the last cycle of a TLP to indicate the end of the packet. When the TLP is transferred in a single beat, the user logic 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 s_axis_rq_tuser bus to determine the start and end of TLPs.

pcie0_s_axis_rq_tkeep pcie1_s_axis_rq_tkeep 32 I The assertion of bit i of this bus during a transfer indicates to the core that Dword i of the pcie(n)_s_axis_rq_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_rq_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 RQ 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_rq_tuser bus in that case to signal the start and end of TLPs transferred over the interface.

pcie0_s_axis_rq_tvalid pcie1_s_axis_rq_tvalid 1 I The user application must assert this output whenever it is driving valid data on the pcie(n)_s_axis_rq_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_rq_tready signal.
pcie0_s_axis_rq_tready pcie1_s_axis_rq_tready 1 O 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_rq_tvalid and pcie(n)_s_axis_rq_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.

With this output port, each bit indicates the same value, so the user logic can use any of the bit.

Table 2. Sideband Signals in pcie(n)_s_axis_rq_tuser (1024-bit Interface)
Bit Index Name Width Description
15:0 first_be[15:0] 16 Byte enables for the first Dword of the payload. first_be[3:0] reflects the setting of the First Byte Enable bits in the Transaction-Layer header of the first TLP in this beat; first_be[7:4] reflects the setting of the First Byte Enable bits in the Transaction-Layer header of the second TLP in this beat. first_be[11:8] reflects the setting of the First Byte Enable bits in the Transaction-Layer header of the third TLP in this beat; and first_be[15:12] reflects the setting of the First Byte Enable bits in the Transaction-Layer header of the fourth TLP in this beat.

For Memory Reads, I/O Reads and Configuration Reads, these 4 bits indicate the valid bytes to be read in the first Dword. For Memory Writes, I/O Writes and Configuration Writes, these bits indicate the valid bytes in the first Dword of the payload.

The core samples this field in the first beat of a packet, when pcie(n)_s_axis_rq_tvalid and pcie(n)_s_axis_rq_tready are both High.

31:16 last_be[15:0] 16 Byte enables for the last Dword.

Byte enables for the last Dword of the payload. last_be[3:0] reflects the setting of the Last Byte Enable bits in the Transaction-Layer header of the first TLP in this beat; last_be[7:4] reflects the setting of the Last Byte Enable bits in the Transaction-Layer header of the second TLP in this beat. last_be[11:8] reflects the setting of the Last Byte Enable bits in the Transaction-Layer header of the third TLP in this beat; and last_be[15:12] reflects the setting of the Last Byte Enable bits in the Transaction-Layer header of the fourth TLP in this beat.

For Memory Reads and Writes of one DW transfers and zero length transfers, these bits should be 0s.

For Memory Reads of 2 Dwords or more, these 4 bits indicate the valid bytes to be read in the last Dword of the block of data. For Memory Writes of 2 Dwords or more, these bits indicate the valid bytes in the last Dword of the payload.

The core samples this field in the first beat of a packet, when pcie(n)_s_axis_rq_tvalid and pcie(n)_s_axis_rq_tready are both High.

47:32 addr_offset[15:0] 16 When 128b the address-aligned mode is in use on this interface, the user application must provide the offset where the payload data begins (in multiples of 4 bytes) on the data bus on this sideband bus. This enables the core to determine the alignment of the data block being transferred.

addr_offset[3:0] corresponds to the offset for the first TLP starting in this beat,addr_offset[7:4] is for second TLP, addr_offset[11:8] for third TLP and addr_offset[15:12] for fourth TLP

The core samples this field in the first beat of a packet, when pcie(n)_s_axis_rq_tvalid and pcie(n)_s_axis_rq_tready are both High.

When the requester request interface is configured in the Dword-alignment mode, these bits must always be set to 0.

51:48 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 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 at locations determined by is_sop0_ptr[1:0] and is_sop1_ptr[1:0] respectively.
  • 0111: Three TLPs are starting in this beat at locations determined by is_sop0_ptr[1:0], is_sop1_ptr[1:0] and is_sop2_ptr[1:0] respectively.
  • 1111: Four TLPs are starting in this beat at locations determined by is_sop0_ptr[1:0], is_sop1_ptr[1:0], is_sop_2_ptr[1:0] and is_sop3_ptr[1:0] respectively.
  • All other values are reserved.

Use of this signal is optional for the user logic when the straddle option is not enabled, because a new TLP always starts in the beat following tlast assertion.

53:52 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
Note: If a new TLP is to start in a new data beat (without remnant from the previous TLP) then it should always start in byte lane 0
55:54 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
57:56 is_sop2_ptr[1:0]   Location of third SOP in the beat:
  • 00:Reserved
  • 01: Reserved
  • 10: Byte lane 64
  • 11: Byte lane 96
59:58 is_sop3_ptr[1:0]   Location of fourth SOP in the beat:
  • 00:Reserved
  • 01: Reserved
  • 10: Reserved
  • 11: Byte lane 96
63:60 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.

68:64 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.
73:69 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.
78:74 is_eop2_ptr[4:0] 5 Offset of the last Dword of the third TLP ending in this beat. This output is valid when is_eop[2] is asserted.
83:79 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.
84 discontinue 1 This signal can be asserted by the user application during a transfer if it has detected an error 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 of a TLP except the first beat during its transfer. 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_rq_tvalid is High. The core samples this signal only when pcie(n)_s_axis_rq_tready is High. Thus, once asserted, it should not be deasserted until pcie(n)_s_axis_rq_tready is High.

When the straddle option is enabled on the RQ 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).

128:85 reserved 44 These bits are reserved.
256:129 parity[127:0] 128 Odd parity for the 1024-bit 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_rq_tdata.
260:257 pasid_valid[3:0] 4 Indicates PASID TLP 0,1,2,3 is valid based on the bits set.
340:261 pasid[79:0] 80 Every 20 bits indicates PASID TLP Prefix for TLP0,1,2,3 to the user design
344:341

pasid_exe_req[3:0]

4 Indicates Execute Requested for TLP0,1,2,3.
348:345

pasid_pmode_req[3:0]

4 Indicates Privileged Mode Requested for TLP0,1,2,3 to the user design.
354:349 seq_num0[5:0] 6 The user logic can optionally supply a 6-bit sequence number in this field to keep track of the progress of the request in the core’s transmit pipeline. The core outputs this sequence number on its pcie(n)_cfg_status_rq_seq_num0 or pcie(n)_cfg_status_rq_seq_num1 output when the request TLP has progressed to a point in the pipeline where a Completion TLP from the user logic is not able to pass it.

The core samples this field in the first beat of a packet, when pcie(n)_s_axis_rq_tvalid and pcie(n)_s_axis_rq_tready are both high.

This input can be hardwired to 0 when the user logic is not monitoring the pcie(n)_cfg_status_rq_seq_num* outputs of the core.

360:355 seq_num1[5:0] 6 If there is a second TLP starting in the same beat, the user logic can optionally provide a 6-bit sequence number for this TLP on this input. This sequence number is used in the same manner as seq_num0.

The core samples this field in the first beat of a packet, when pcie(n)_s_axis_rq_tvalid and pcie(n)_s_axis_rq_tready are both high.

This input can be hardwired to 0 when the user logic is not monitoring the pcie(n)_cfg_status_rq_seq_num* outputs of the core.

366:361 seq_num2[5:0] 6 Sequence number for the third TLP starting in this beat.
372:367 seq_num3[5:0] 6 Sequence number for the fourth TLP starting in this beat.