Visible to Intel only — GUID: wme1602804513154
Ixiasoft
Visible to Intel only — GUID: wme1602804513154
Ixiasoft
4.4.1.3. Avalon® Streaming RX Interface
The Application Layer receives data from the Transaction Layer of the PCI Express IP core over the Avalon® Streaming RX interface. The application must assert rx_st_ready_i before transfers can begin. For R-tile, the rx_st_ready_i has to be always high. The buffer control in user 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 x16 configuration. It also does not follow a fixed latency between rx_st_ready_i and rx_st_valid_o as specified by the Avalon® Interface Specifications.
The x16 core provides four segments with each one having 256 bits of data (rx_st_data_o[255:0]), 128 bits of header (rx_st_hdr_o[127:0]), and 32 bits of TLP prefix (rx_st_ prfx_o[31:0]). If this core is configured in the 1x16 mode, four segments are used, so the data bus becomes a 1024-bit bus with four rx_st_data_o[255:0]. The start of packet can appear in the any of the segments, as indicated by the rx_st_sop_o signal in each segment.
- rx_stN_sop_i pulses on segments 0 and 2 (st0 and st2), or
- rx_stN_sop_i pulses on segments 1 and 3 (st1 and st3).
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). For a single TLP spanning across multiple segments, the application logic also needs to process the TLP in the order of the segment index (segment st0->st1->st2->st3->st0)
If this core is configured in the 2x8 mode, there are still four Avalon® Streaming segments if the core IP is set up in double-width mode.
Parity generation is done via a 32:1 XOR (i.e. there is one parity bit for every 32 data, header or prefix bits).
- 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.