The RC interface of the PCIe® core has the capability to start up to four Completions in the same beat on the requester completion interface. This straddle option is enabled during core customization in the AMD Vivado™ IDE. The straddle option can be used only with the Dword-aligned mode.
When the straddle option is enabled, Completion TLPs are transferred on the AXI4-Stream interface as a continuous stream, with no packet boundaries.
Thus, the signals m_axis_rc_tkeep
and m_axis_rc_tlast
are not useful in determining the boundaries of Completion TLPs delivered on the
interface (the core sets m_axis_rc_tkeep
to all 1s and
m_axis_rc_tlast
to 0 permanently when the straddle option is in
use.). Instead, delineation of TLPs is performed using the following signals provided
within the m_axis_rc_tuser
bus.
-
is_sop[3:0]
: The core sets this output to a non-zero value in a beat when there is at least one Completion TLP starting in the beat. When straddle is disabled, onlyis_sop[0]
is valid andis_sop[3:1]
are permanently set to 0. 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 byis_sop0_ptr[1:0]
. -
0011
: Two new TLPs are starting in this beat.is_sop0_ptr[1:0]
provides the starting position of the first TLP andis_sop1_ptr[1:0]
provides the starting position of the second TLP. -
0111
: Three new TLPs are starting in this beat.is_sop0_ptr[1:0]
provides the starting position of the first TLP,is_sop1_ptr[1:0]
provides the starting position of the second TLP, andis_sop2_ptr[1:0]
provides the starting position of the third TLP. -
1111
: Four new TLPs are starting in this beat.is_sop0_ptr[1:0]
provides the starting position of the first TLP,is_sop1_ptr[1:0]
provides the starting position of the second TLP,is_sop2_ptr[1:0]
provides the starting position of the third TLP, andis_sop3_ptr[1:0]
provides the starting position of the fourth TLP. - All other settings are reserved.
-
-
is_sop0_ptr[1:0]
: Whenis_sop[0]
is set, this field indicates the offset of the first Completion TLP starting in the current beat. Valid settings are2'b00
(TLP starting at Dword 0), and2'b01
(TLP starting at Dword 4),2'b10
(TLP starting at Dword 8), and2'b11
(TLP starting at Dword 12). -
is_sop1_ptr[1:0]
: Whenis_sop[1]
is set, this field indicates the offset of the second Completion TLP starting in the current beat. Valid settings are2'b01
(TLP starting at Dword 4),2'b10
(TLP starting at Dword 8), and2'b11
(TLP starting at Dword 12). -
is_sop2_ptr[1:0]
: Whenis_sop[2]
is set, this field indicates the offset of the third Completion TLP starting in the current beat. Valid settings are2'b10
(TLP starting at Dword 8), and2'b11
(TLP starting at Dword 12). -
is_sop3_ptr[1:0]
: Whenis_sop[3]
is set, this field indicates the offset of the fourth Completion TLP starting in the current beat. Its only valid setting is2'b11
(TLP starting at Dword 12). -
is_eop[3:0]
: These outputs signals that one or more TLPs are ending in this beat. These outputs are set in the final beat of a TLP. When straddle is disabled, onlyis_eop[0]
is valid andis_eop[3:1]
are permanently set to 0. When straddle is enabled, the settings are as follows:-
0000
: No TLPs are ending in this beat. -
0001
: A single TLP is ending in this beat. The setting ofis_eop0_ptr[3:0]
provides the offset of the last Dword of this TLP. -
0011
: Two TLPs are ending in this beat.is_eop0_ptr[3:0]
provides the offset of the last Dword of the first TLP andis_eop1_ptr[3:0]
provides the offset of the last Dword of the second TLP. -
0111
: Three TLPs are ending in this beat.is_eop0_ptr[3:0]
provides the offset of the last Dword of the first TLP,is_eop1_ptr[3:0]
provides the offset of the last Dword of the second TLP, andis_eop2_ptr[3:0]
provides the offset of the last Dword of the third TLP. -
1111
: Four TLPs are ending in this beat.is_eop0_ptr[3:0]
provides the offset of the last Dword of the first TLP,is_eop1_ptr[3:0]
provides the offset of the last Dword of the second TLP,is_eop2_ptr[3:0]
provides the offset of the last Dword of the third TLP, andis_eop3_ptr[3:0]
provides the offset of the last Dword of the fourth TLP. - All other settings are reserved.
-
-
is_eop0_ptr[3:0]
: Whenis_eop[0]
is set, this field provides the offset of the last Dword of the first TLP ending in this beat. It can take any value from 0 through 15. The offset for the last byte can be determined from the starting address and length of the TLP, or from the byte enable signalsbyte_en[63:0]
. -
is_eop1_ptr[3:0]
: Whenis_eop[1]
is set, this field provides the offset of the last Dword of the second TLP ending in this beat. It can take any value from 6 through 15. -
is_eop2_ptr[3:0]
: Whenis_eop[2]
is set, this field provides the offset of the last Dword of the third TLP ending in this beat. It can take any value from 10 through 15. -
is_eop3_ptr[3:0]
: Whenis_eop[3]
is set, this field provides the offset of the last Dword of the fourth TLP ending in this beat. It can take values of 14 or 15.
The following figure illustrates the transfer of 11 Completion TLPs on the requester
completion interface when the straddle option is enabled. The first Completion TLP
(COMPL 1) starts at Dword position 0 of Beat 1 and ends in Dword position 2 of Beat 2.
The second TLP (COMPL 2) starts in Dword position 8 of the same beat and ends in Dword
position 14. Thus, there is one TLP starting in Beat 1, whose starting position is
indicated by is_sop0_ptr, and two TLPs ending, whose ending Dword positions are
indicated by is_eop0_ptr
and is_eop1_ptr
,
respectively.
Beat 3 has COMPL 3 starting at Dword offset 8, ending at Dword offset10. There is also a
second TLP (CMPL 4) in the same beat, starting at Dword offset 12 and continuing to the
next beat. In this beat, is_sop0_ptr
points to the starting Dword
offset of COMPL 3 and is_sop1_ptr
points to the starting Dword offset
of COMPL 4. is_eop0_ptr
points to the offset of the last Dword offset
of COMPL 4.
Beat 4 has COMPL 4 ending with Dword offset 0, and has three new complete TLPs
in it (COMPL 5, 6, and 7). The starting Dword offsets of the new Completions 5, 6, and 7
are provided by is_sop0_ptr
, is_sop1_ptr
, and is_sop2_ptr
,
respectively. The ending offsets of Completions 4, 5, 6, and 7 are indicated by is_eop0_ptr
, is_eop1_ptr
, is_eop2_ptr
, and is_eop3_ptr
, respectively.
Finally, Beat 5 contains four complete TLPs (COMPL 8 – 11). Their starting
Dword offsets are signaled by is_sop0_ptr
, is_sop1_ptr
, is_sop2_ptr
, and is_sop3_ptr
, respectively.
The ending offsets are indicated by is_eop0_ptr
,
is_eop1_ptr
, is_eop2_ptr
, and is_eop3_ptr
,
respectively. Thus, all the four SOP and EOP pointers provide valid information in this
beat.