Visible to Intel only — GUID: wme1602804513154
Ixiasoft
Visible to Intel only — GUID: wme1602804513154
Ixiasoft
4.3.1.3. Avalon® Streaming RX Interface
The Application Layer receives data from the Transaction Layer of the R-tile PCI Express IP core over the Avalon® Streaming RX interface. For R-tile, the rx_st_ready_i has to be always high. The buffer control in the application logic needs to be handled by the RX Flow Control interface. Refer to RX Flow Control Interface for more details.
This interface supports four rx_st_sop_o signals and four rx_st_eop_o signals per cycle when the R-tile IP is operating in a 1x16 configuration.
In Configuration Mode 0 (1x16) with a double-width configuration, the core provides four segments with each one having 256 bits of data (pX_rx_stN_data_o[255:0]), 128 bits of header (pX_rx_stN_hdr_o[127:0]), and 32 bits of TLP prefix (pX_rx_stN_prefix_o[31:0]). If this core is configured in the 1x16 mode, the data bus becomes a 1024-bit bus.
In Configuration Mode 1 (2x8) with a double-width configuration, there are still four Avalon® Streaming segments (two for each x8 port).
Parity generation is done via a 32:1 XOR (i.e. there is one parity bit for every 32 data, header or prefix bits).
- The start of a packet (pX_rx_stN_sop_o) may occur in any of the segments (_stN_).
- For a single TLP spanning across multiple segments, the application logic needs to process the TLP in the order of the segment index (segment st0 → st1 → st2 → st3 → st0).
- For multiple TLPs arriving on the same clock cycle, the application logic needs to process the TLPs in the order of the segment index (i.e. segment st0 → st1 → st2 → st3 → st0).
- There is a maximum of three SOPs (pX_rx_stN_sop_o) in a single clock cycle. The following table describes the possible combinations across segments:
Table 54. Possible Combinations of Three pX_rx_stN_sop_o on a Single Clock Cycle pX_rx_st0_sop_o pX_rx_st0_eop_o pX_rx_st1_sop_o pX_rx_st1_eop_o pX_rx_st2_sop_o pX_rx_st2_eop_o pX_rx_st3_sop_o pX_rx_st3_eop_o 1'b1 1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0 1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0 1'b1 1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0 1'b0 1'b1 1'b1 1'b1 1'b0 1'b0 1'b1 1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0 1'b1 1'b1 1'b0 1'b1 1'b0 1'b0 1'b1 1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0 1'b1 1'b1 1'b1 1'b1 1'b0
Signal Name | Direction | Description | EP/RP/BP | Clock Domain |
---|---|---|---|---|
pX_rx_stN_data_o[W:0] where X = 0,1,2,3 (IP core number) and W varies based on the core. N = 0,1,2,3 (segment number) |
Output | This is the Receive data bus. The Application Layer receives data from the Transaction Layer of the IP core on this bus. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_hdr_o[127:0] where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | This is the received header, which follows the TLP header format of the PCIe specifications. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_prefix_o[31:0] where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | This is the first TLP prefix received, which follows the TLP prefix format of the PCIe specifications. PASID is supported. These signals are valid when the corresponding rx_st_sop_o is asserted. The TLP prefix uses a Big Endian implementation (i.e, the Fmt field is in bits [31:29] and the Type field is in bits [28:24]). If no prefix is present for a given TLP, that dword (including the Fmt field) is all zeros. |
EP/RP/BP | coreclkout_hip |
pX_rx_stN_sop_o where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Signals the first cycle of the TLP when asserted in conjunction with the corresponding bit of rx_stN_valid_o. rx_stN_sop_o: When asserted, signals the start of a TLP on rx_stN_data_o[255:0]. For example, when asserted, rx_st2_sop_o signals the start of a TLP on rx_st2_data_o[255:0]. |
EP/RP/BP | coreclkout_hip |
pX_rx_stN_eop_o where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Signals the last cycle of the TLP when asserted in conjunction with the corresponding bit of rx_stN_valid_o. rx_stN_eop_o: When asserted, signals the end of a TLP on rx_stN_data_o[255:0]. For example, when asserted, rx_st2_eop_o signals the end of a TLP on rx_st2_data_o[255:0]. |
EP/RP/BP | coreclkout_hip |
pX_rx_stN_dvalid_o where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | These signals qualify the rx_stN_data_o signals going into the Application Layer. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_hvalid_o where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | These signals qualify the rx_stN_hdr_o signals going into the Application Layer. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_pvalid_o where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | These signals qualify the rx_stN_prefix_o signals going into the Application Layer. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_data_par_o[Z:0] where X = 0,1,2,3 (IP core number) and Z varies based on the core. N = 0,1,2,3 (segment number) |
Output | Parity signals for rx_stN_data_o. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_hdr_par_o[3:0] where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Parity signals for rx_stN_hdr_o. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_prefix_par_o where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Parity signals for rx_stN_prefix_o. | EP/RP/BP | coreclkout_hip |
pX_rx_st_ready_i | Input | Indicates the Application Layer is ready to accept data. This signal should always be set to 1. The Flow Control on the RX side is handled through the Credit Control Interface. | EP/RP/BP | coreclkout_hip |
pX_rx_stN_empty_o[2:0] where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Specifies the number of dwords that are empty during cycles when the rx_stN_eop_o signals are asserted. These signals are not valid when the rx_stN_eop_o signals are not asserted. |
EP/RP/BP | coreclkout_hip |
pX_rx_stN_bar_o[2:0] where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Specify the BAR for the TLP being output. These outputs are valid when both rx_stN_sop_o and rx_stN_valid_o are asserted. |
EP/RP | coreclkout_hip |
pX_rx_stN_vfactive_o where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | When asserted, these signals indicate that the received TLP is targeting a virtual function. When these signals are deasserted, the received TLP is targeting a physical function and the rx_stN_pfnum_o signals indicate the function number. These signals are valid when the corresponding rx_stN_sop_o is asserted. |
EP/RP | coreclkout_hip |
pX_rx_stN_vfnum_o[10:0] where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Specify the target VF number for the received TLP. The application uses this information for both request and completion TLPs. For a completion TLP, these bits specify the VF number of the requester for this completion TLP. These signals are valid when rx_stN_vf_active_o and the corresponding rx_stN_sop_o are asserted. |
EP/RP | coreclkout_hip |
pX_rx_stN_pfnum_o[2:0] where X = 0,1,2,3 (IP core number) N = 0,1,2,3 (segment number) |
Output | Specify the target physical function number for the received TLP. These signals are valid when the corresponding rx_stN_sop_o is asserted. |
EP/RP | coreclkout_hip |
- Clock cycle 1: Application logic asserts p0_rx_st_ready_i signal. This signal must be set high all the time. The RX flow control must be handled by the Application logic using the RX Flow Control interface (refer to RX Flow Control Interface for details).
- Clock cycle 2:
- The start of the first TLP (T0) arrives in segment 1, when p0_rx_st1_sop_o is asserted.
- The signal p0_rx_st1_hvalid_o is asserted to validate the header of this first TLP (T0H0) in the p0_rx_st1_hdr_o bus.
- The signal p0_rx_st1_dvalid_o is asserted to validate the data of this first TLP (T0D0) in the p0_rx_st1_data_o bus.
- The end of this first TLP (T0) is in segment 2, denoted by the assertion of p0_rx_st2_eop_o.
- The signal p0_rx_st2_dvalid_o is asserted to validate the data of this first TLP (T0D1) in the p0_rx_st2_data_o bus.
- The bus p0_rx_st2_empty_o indicates the number of dwords that are not valid in the p0_rx_st2_data_o bus (T0D1).
- Clock cycle 3:
- The next TLP (T1), arrives in segment 1, as denoted by the assertion of p0_rx_st1_sop_o.
- The signal p0_rx_st1_hvalid_o is asserted to validate the header of this TLP (T1H0) in the p0_rx_st1_hdr_o bus.
- The signal p0_rx_st1_dvalid_o is asserted to validate the data of this TLP (T1D0) in the p0_rx_st1_data_o bus.
- The signal p0_rx_st2_dvalid_o is asserted to validate the data of this TLP (T1D1) in the p0_rx_st2_data_o bus.
- The signal p0_rx_st3_dvalid_o is asserted to validate the data of this TLP (T1D2) in the p0_rx_st3_data_o bus.
- Clock cycle 4:
- The end of the T1 TLP is in segment 0, denoted by the assertion of p0_rx_st0_eop_o.
- The signal p0_rx_st0_dvalid_o is asserted to validate the data of this TLP (T1D3) in the p0_rx_st0_data_o bus.
- The bus p0_rx_st0_empty_o indicates the number of dwords that are not valid in the p0_rx_st0_data_o bus (T1D3).
The next TLP arrives in the next clock cycle in segment 1 and finishes in segment 0.