P-Tile Avalon® Streaming Intel® FPGA IP for PCI Express* 用户指南

ID 683059
日期 4/04/2024
Public
文档目录

4.4.2. Avalon® -ST RX接口

应用层(Application Layer)通过 Avalon® -ST RX接口接收来自 PCI Express* IP core的传输层(Transaction Layer)的数据。应用程序必须先置位rx_st_ready_i才能开始传输。

当P-Tile IP在1x16配置中运行时,此接口支持每个周期两个rx_st_sop_o信号和两个rx_st_eop_o信号。此接口也不遵循rx_st_ready_irx_st_valid_o之间的固定延迟。

x16内核提供两个分段,每个分段有256比特的数据(rx_st_data_o[511:256]rx_st_data_o[255:0]),128比特的标头(rx_st_hdr_o[255:128]rx_st_hdr_o[127:0])和32比特的TLP前缀(rx_st_tlp_prfx_o[63:32]rx_st_tlp_prfx_o[31:0])。如果此内核是在1x16模式下配置的,那么这两个分段都使用,因此数据总线变成512-bit总线rx_st_data_o[511:0]。如rx_st_sop_o[1:0]信号所示,数据包的起始部分可以出现在高分段或者低分段中。

注: 为了在Gen4 x16模式下实现预期的性能,用户应用程序需要利用这种分段总线架构。否则,可能会出现一些性能下降情况。

如果此内核是在2x8或者1x8模式下配置的,那么仅使用低分段。在这种情况下,数据总线是256-bit总线rx_st_data_o[255:0]

最后,如果此内核是在4x4模式下配置的,那么仅使用低分段,并且只有数据的MSB 128比特是有效的。在这种情况下,数据总线是128-bit总线rx_st_data_o[127:0]

x8内核提供一个包含256比特数据,128比特标头和32比特TLP前缀的分段。如果此内核是在4x4模式下配置的,那么仅使用数据的LSB 128比特。

x4内核提供一个包含128比特数据,128比特标头和32比特TLP前缀的分段。

表 52.  Avalon-ST RX接口
信号名称 方向 描述 时钟域 EP/RP/BP

x16 PCIe配置: rx_st_data_o[511:0]

x8 PCIe配置: rx_st_data_o[255:0]

x4配置: rx_st_data_o[127:0]

O

这是接收(Receive)数据总线。Application Layer通过此总线接收来自传输层(Transaction Layer)的数据。

对于包含低256比特中的end-of-packet周期的TLP,512-bit接口支持高256比特中的start-of-packet周期。

coreclkout_hip EP/RP/BP

x16: rx_st_empty_o[5:0]

x8: rx_st_empty_o[2:0]

x4: rx_st_empty_o[1:0]

O

rx_st_empty_o[5:0]总线是x16模式下的分割总线。rx_st_empty_o[5:3]对应于高分段(rx_st_data_o[511:256]),rx_st_empty_o[2:0]对应于低分段(rx_st_data_o[255:0])。

rx_st_empty_o信号指定每个分段中被忽略的双字(dword)数量。必须从每个分段的最高有效位开始计算被忽略的双字(dword)数量。

只有当rx_st_eop_o信号置位时, rx_st_empty_o信号才有效。当rx_st_eop_o信号没被置位时,这些信号都是无效的。

coreclkout_hip EP/RP/BP
rx_st_ready_i I

表示应用层(Application Layer)准备好接收数据。

readyLatency为27个周期。

如果应用层(Application Layer)在周期<n>上置低rx_st_ready_i, 那么在rx_st_ready_i置低后,PCIe Hard IP中的传输层(Transaction Layer)将继续发送流量至<n>+ readyLatency个周期。

一旦rx_st_ready_i重新置位,rx_st_valid_o就会在readyLatency周期内恢复数据传输。

为了实现最佳性能,应用层(Application Layer)必须包含一个足够大的接收缓冲器,以避免rx_st_ready_i的置低。

coreclkout_hip EP/RP/BP

x16: rx_st_sop_o[1:0]

x8/x4: rx_st_sop_o

O

rx_st_valid_o[1:0]的对应比特一起置位时,表示TLP的第一个周期。

rx_st_sop_o[1]: 置位时,表示在rx_st_data_o[511:256]上TLP的起始。

rx_st_sop_o[0]: 置位时,表示在rx_st_data_o[255:0]上TLP的起始。

coreclkout_hip EP/RP/BP

x16: rx_st_eop_o[1:0]

x8/x4: rx_st_eop_o

O

rx_st_eop_o[1:0]总线是x16模式下的分割总线。

置位时,rx_st_eop_o[1]表示在高分段(rx_st_data_o[511:256])上TLP的结束。

置位时,rx_st_eop_o[0]表示在低分段(rx_st_data_o[255:0])上TLP的结束。

rx_st_valid_o[1:0]的对应比特一起置位时,rx_st_eop_o信号表示TLP的最后一个周期。

coreclkout_hip EP/RP/BP

x16: rx_st_valid_o[1:0]

x8/x4: rx_st_valid_o

O

这些信号会限定进入应用层(Application Layer)的rx_st_data_o信号。

coreclkout_hip EP/RP/BP

x16: rx_st_hdr_o[255:0]

x8/x4: rx_st_hdr_o[127:0]

O

这是接收的标头,符合PCIe规范的TLP标头格式。

coreclkout_hip EP/RP/BP

x16: rx_st_tlp_prfx_o[63:0]

x8/x4: rx_st_tlp_prfx_o[31:0]

O

这是接收到的第一个TLP前缀,符合PCIe规范的TLP前缀格式。包含了PASID。

当对应的rx_st_sop_o置位时,这些信号是有效的。

TLP前缀使用Big Endian实现(即Fmt域位于bits [31:29],Type域位于bits [28:24])。

如果一个给定的TLP没有前缀,那么dword (包括Fmt域)为全零。

coreclkout_hip EP/RP/BP

x16: rx_st_vf_active_o[1:0]

x8: rx_st_vf_active_o

x4: NA

O

当这些信号置位时,它们表示接收到的TLP针对的是一个虚拟功能。当这些信号置低时,接收到的TLP针对的是一个物理功能,而rx_st_func_num信号则表示功能编号。

当对应的rx_st_sop_o置位时,这些信号是有效的。

这些信号在x4配置下与rx_st_hdr_o信号进行多路复用(multiplexed)。

这些信号仅在Endpoint模式下有效。

coreclkout_hip EP

x16: rx_st_func_num_o[5:0]

x8: rx_st_func_num_o[2:0]

x4: NA

O

指定已接收的TLP的目标物理功能编号。

当对应的rx_st_sop_o置位时,这些信号是有效的。

这些信号在x4配置下与rx_st_hdr_o信号进行多路复用(multiplexed)。

这些信号仅在Endpoint模式下有效。

coreclkout_hip EP

x16: rx_st_vf_num_o[21:0]

x8: rx_st_vf_num_o[10:0]

x4: NA

O

指定已接收的TLP的目标VF编号。应用程序将此信息用于request和completion TLPs。对于completion TLP,这些比特指定该completion TLP的requester的VF编号。

rx_st_vf_active_o和对应的rx_st_sop_o置位时,这些信号是有效的。

这些信号在x4配置下与rx_st_hdr_o信号进行多路复用(multiplexed)。

这些信号仅在Endpoint模式下有效。

coreclkout_hip EP

x16: rx_st_bar_range_o[5:0]

x8/x4: rx_st_bar_range_o[2:0]

O

指定正在输出的TLP的BAR。

对于每个BAR范围,定义了以下编码:
  • 000: Memory BAR 0
  • 001: Memory BAR 1
  • 010: Memory BAR 2
  • 011: Memory BAR 3
  • 100: Memory BAR 4
  • 101: Memory BAR 5
  • 110: I/O BAR
  • 111: Expansion ROM BAR

rx_st_sop_orx_st_valid_o置位时,这些输出是有效的。

coreclkout_hip EP

x16: rx_st_tlp_abort_o[1:0]

x8/x4: rx_st_tlp_abort_o

O

rx_st_valid_o置位时,此输出信号是有效的。它指示应用逻辑由于ECRC错误而丢弃TLP。应用逻辑不应期望TLP被重放。

默认情况下,PCIe Hard IP会丢弃错误的TLP。然而,在TLP Bypass模式下,错误的TLP会被转发到RX数据包接口。

coreclkout_hip BP

x16: rx_st_data_par_o[63:0]

x8: rx_st_data_par_o[31:0]

x4: rx_st_data_par_o[15:0]

O 如果使能了Enable Byte Parity Ports on Avalon-ST Interface参数,那么应用逻辑可以使用这些信号对rx_st_data_o执行奇偶校验。如果在PCIe Hard IP内部的Rx缓冲器的输入上检测到了奇偶校验错误,那么将会置位rx_par_err_o信号。 coreclkout_hip EP/RP/BP

x16: rx_st_hdr_par_o[31:0]

x8/x4: rx_st_hdr_par_o[15:0]

O 如果使能了Enable Byte Parity Ports on Avalon-ST Interface参数,那么应用逻辑可以使用这些信号对rx_st_hdr_o执行奇偶校验。如果在PCIe Hard IP内部的Rx缓冲器的输入上检测到了奇偶校验错误,那么将会置位rx_par_err_o信号。 coreclkout_hip EP/RP/BP

x16: rx_st_tlp_prfx_par_o[7:0]

x8/x4: rx_st_tlp_prfx_par_o[3:0]

O 如果使能了Enable Byte Parity Ports on Avalon-ST Interface参数,那么应用逻辑可以使用这些信号对rx_st_prfx_o执行奇偶校验。如果在PCIe Hard IP内部的Rx缓冲器的输入上检测到了奇偶校验错误,那么将会置位rx_par_err_o信号。 coreclkout_hip EP/RP/BP
rx_par_err_o O 置位一个周期以表示在RX缓冲器的输入上的TLP中检测到一个奇偶校验错误。该错误在VSEC寄存器中被记录为无法纠正的内部错误。如果出现该错误,那么您必须复位Hard IP,因为奇偶校验错误会使Hard IP处于一种未知状态。 coreclkout_hip EP/RP/BP
图 17.  1x16模式下的 Avalon® -ST RX数据包接口
图 18. 2x8和1x8模式下的 Avalon® -ST RX数据包接口
注: 在2x8模式下,两个x8端口的信号名称中的pn前缀为p0和p1。在1x8模式下,一个x8端口的信号名称中的pn前缀为p0。
图 19. 4x4模式下的 Avalon® -ST RX数据包接口
注: 在4x4模式下,四个x4端口的信号名称中的pn前缀分别为p0、p1、p2和p3。
注: 在1x16模式或2x8和1x8模式的图中,D0_0代表一个256-bit数据块。但是在4x4模式的图中,D0_0代表一个128-bit数据块。