当前位置:   article > 正文

7 Series FPGAs Integrated Block for PCI Express IP核中基于64位事务层接口的AXI4-Stream接口设计(三)续

7 Series FPGAs Integrated Block for PCI Express IP核中基于64位事务层接口的AXI4-Stream接口设计(三)续

PCIe通信中,Inbound Packets(入站数据包)是从PCIe设备(通常是Endpoint,即EP)发送到主机系统(通常是Root Complex,即RC)的数据包。这些数据包通常包含设备发送到主机内存的数据,或者是设备对主机发出的请求或中断的响应。

3 Throttling the Datapath on the Receive AXI4-Stream Interface

用户应用逻辑可以通过取消断言(deasserting)m_axis_rx_tready信号来在任何时候暂停从PCIe核心接收数据。

  • 如果在没有数据传输进行时取消断言m_axis_rx_tready,并且有一个TLP可用,PCIe IP核将断言m_axis_rx_tvalid并在m_axis_rx_tdata[63:0]上呈现第一个TLP的QWORD(64位)。
  • IP核将保持这种状态,直到用户应用逻辑再次断言m_axis_rx_tready,以表示它准备好接收在m_axis_rx_tdata[63:0]上呈现的数据。
  • 一旦用户应用逻辑断言了m_axis_rx_tready,PCIe IP核将继续呈现后续的TLP QWORDs,只要m_axis_rx_tready保持断言状态。
  • 如果在数据传输过程中取消断言m_axis_rx_tready,IP核将暂停数据传输,直到m_axis_rx_tready再次被断言。

m_axis_rx_tready信号被取消断言(deasserted)时,数据传输将被暂停,并且这种暂停可以持续任意数量的时钟周期。PCIe IP核将持续等待,直到用户应用逻辑再次断言m_axis_rx_tready信号,表示它已经准备好接收传输层数据包(TLPs, Transaction Layer Packets)。

图3-19展示了PCIe IP核心在断言m_axis_rx_tvalid的同时在m_axis_rx_tdata[63:0]上呈现数据。

用户应用逻辑通过取消断言m_axis_rx_tready来插入等待状态。IP核在检测到m_axis_rx_tready再次被断言之前不会呈现下一个TLP QWORD。

用户应用逻辑可以根据需要断言(assert)或取消断言(deassert)m_axis_rx_tready信号,以平衡从PCIe IP核接收新的TLP(传输层数据包)的速率与应用逻辑内部处理TLP数据的速率。

4 Receiving Back-to-Back Transactions on the Receive Interface

在PCIe通信中,当数据以高速率传输时,PCIe IP核可能会在接收AXI4-Stream接口上连续地发送背靠背(back-to-back)的TLPs(传输层数据包)。这意味着在前一个TLP的m_axis_rx_tlast信号被断言后的下一个时钟周期,IP核就可以开始发送下一个新的TLP,并断言m_axis_rx_tvalid信号。

用户应用逻辑必须被设计用来处理这种背靠背TLPs的呈现。这通常要求应用逻辑能够持续监控m_axis_rx_tvalidm_axis_rx_tlast信号,以便在数据到达时及时处理,并在一个TLP结束且下一个TLP开始时进行切换。图3-20展示了在接收接口上呈现的背靠背TLPs的示例。

如果用户应用逻辑不能接受背靠背的数据包,它可以通过取消断言m_axis_rx_tready信号来暂停TLP的传输。图3-21可能展示了如何使用m_axis_rx_tready来暂停第二个TLP的接收的一个例子。

5 Packet Data Poisoning and TLP Digest on the 64-Bit Receive AXI4-Stream Interface

为了在用户应用中简化逻辑,PCIe IP核基于接收到的TLP(事务层数据包)的TLP Digest(TD)和数据毒化(EP)头字段的值执行自动预处理。

所有接收到的数据头字段中数据毒化位被设置的TLP(即EP = 1)都会被呈现给用户应用。当接收到被毒化的TLP时,核心会在整个被毒化TLP的持续时间内断言m_axis_rx_tuser[1]信号(通常标记为rx_err_fwd),如图3-24所示。

在PCIe通信中,数据毒化(Data Poisoning)是一种错误处理机制,当某个数据包由于硬件故障(如内存错误)而被标记为无效时,就会使用这种机制。数据毒化允许设备在检测到错误时,通过设置数据包中的EP位来指示该数据包已被污染(即无效)。

在PCIe通信中,TLP(事务层数据包)的头部包含一个TLP Digest(TD)位字段。当这个字段被设置为1(TD = 1)时,意味着TLP包含一个End-to-End CRC(ECRC),用于在传输过程中检测TLP的完整性。

  • Trim TLP Digest选项开启(On)

IP核会从接收到的TLP中移除并丢弃ECRC字段。同时,清除TLP头部中的TLP Digest位(即设置TD = 0)。

在这种情况下,用户应用接收到的TLP将不包含ECRC字段,且TLP Digest位将被清除。

  • Trim TLP Digest选项关闭(Off)

IP核不会从接收到的TLP中移除ECRC字段。整个TLP,包括TLP Digest和ECRC,将被呈现给用户应用的接收器接口。

在这种情况下,用户应用需要自行处理ECRC字段和TLP Digest位。

6 ECRC Error on the 64-Bit Receive AXI4-Stream Interface

在7系列FPGA中,集成的PCI Express IP核会在启用ECRC检查的情况下,对传入的事务数据包进行ECRC(End-to-End CRC)校验。如果IP核在事务数据包中检测到ECRC错误,它会通过同时断言m_axis_rx_tuser[0](通常标记为rx_ecrc_err)和m_axis_rx_tlast信号来指示这个错误,如图3-25所示。

这里的m_axis_rx_tuser[0]是一个用户自定义字段(tuser),在AXI4-Stream接口中用于传输与主数据流相关的辅助信息。在这个场景中,它被用作指示ECRC错误的信号。当该信号被断言时,用户应用知道接收到的数据包包含了一个ECRC错误。

7 Packet Base Address Register Hit on the Receive AXI4-Stream Interface

当7系列FPGA中的PCI Express集成块配置为Root Port时,它确实不执行任何BAR(Base Address Register)解码或过滤操作。当配置为Endpoint时,IP核会对接收到的内存和I/O TLP(事务层数据包)请求地址进行解码,以确定它们正在访问IP核Type0配置空间中的哪个基本地址寄存器(BAR)。解码后的基地址通过m_axis_rx_tuser[9:2](即rx_bar_hit[7:0])信号进行指示。

关于rx_bar_hit[7:0]信号的行为,可以归纳如下:

  • 对于每个接收到的内存或I/O TLP,至少有一个位,最多有两个相邻的位会被设置为1。
  • 如果接收到的TLP针对的是32位内存或I/O BAR,则只有一个位会被断言(即设置为1)。
  • 如果接收到的TLP针对的是64位内存BAR,则两个相邻的位会被断言。
  • 如果IP核接收到一个没有被任何一个BAR解码的TLP(即误导向的TLP),则IP核会静默地丢弃它,并自动生成一个Unsupported Request消息。
  • 即使IP核被配置为使用64位BAR,系统也可能不总是分配一个64位地址。在这种情况下,只有rx_bar_hit[7:0]信号中的一个位会被断言。
  • 不允许BAR地址范围重叠。

表3-1展示了rx_bar_hit[7:0]信号与BARs之间的映射关系,以及它们在IP核Type0配置头中的相应字节偏移量。这个表可以帮助用户理解哪个BAR被特定的TLP所访问。

对于接收接口上的内存或I/O TLP来说,m_axis_rx_tuser[9:2]是一个用户定义的信号字段,通常在PCIe的AXI流接口中使用。对于内存或I/O的TLP交易,这个字段在接收接口上被用来传递rx_bar_hit[7:0]这个信息。信号rx_bar_hit[7:0]通常与PCIe的地址匹配有关。在某些PCIe系统中,可用来指示TLP的目标地址是否匹配了某个预定义的地址范围(例如,BAR)。如果匹配,相应的位会被置位。

  • 对于内存或I/O TLP交易:当PCIe接口接收一个内存或I/O的TLP时,m_axis_rx_tuser[9:2]字段会被用来传递rx_bar_hit[7:0]的值。这个值从m_axis_rx_tvalid信号被断言时开始,并持续整个TLP的长度。如下图所示。

  • 对于非内存和非I/O的交易:当PCIe接口接收一个非内存和非I/O的交易时(例如,配置、消息等),rx_bar_hit[7:0]信号是未定义的(undefined)。因此,在这种情况下,你不应该依赖m_axis_rx_tuser[9:2]来获取rx_bar_hit[7:0]的值。

(rx_bar_hit[7:0]) 通过 m_axis_rx_tuser[9:2] 信号使得接收到的内存和I/O事务能够被导向用户应用程序中适当的目标地址范围。这里,rx_bar_hit[7:0] 用于指示接收到的地址与哪个基地址寄存器(BAR)匹配,从而允许应用程序逻辑根据这一信息将事务导向到正确的处理逻辑。

8 Packet Transfer During Link-Down Event on Receive AXI4-Stream Interface

与链路伙伴的通信丢失是通过取消断言user_lnk_up信号来指示的。当user_lnk_up信号被取消断言时,它实际上对整个IP核起到了热复位(Hot Reset)的作用。因此,所有存储在IP核内部或正在呈现给接收接口的事务层数据包(TLPs)都将无法恢复地丢失。

具体来说,当一个TLP正在通过接收AXI4-Stream接口传输时,它会根据TLP头部中的Length字段呈现其正确的长度。然而,由于通信的丢失(由user_lnk_up信号的取消断言指示),这个TLP会变得损坏,并且应该被用户应用程序丢弃。

图3-27描述了数据包传输中断的场景。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/646293
推荐阅读
相关标签
  

闽ICP备14008679号