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_i与rx_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]信号所示,数据包的起始部分可以出现在高分段或者低分段中。
如果此内核是在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前缀的分段。
| 信号名称 | 方向 | 描述 | 时钟域 | 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范围,定义了以下编码:
当rx_st_sop_o和rx_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 |