用于 PCIe* 解决方案的 Intel® Stratix® 10 Avalon® -ST和Single Root I/O Virtualization (SR-IOV)接口用户指南

ID 683111
日期 12/06/2017
Public
文档目录

10.1.4. 链路在L0状态挂起(Link Hangs in L0 State)

链路可能会停止传输数据的原因很多。下表列出了一些可能的原因。

表 87.  链路在L0挂起(Link Hangs in L0)

可能的原因

症状和根本原因

解决方法和解决方案

Avalon‑ST信号违反Avalon-ST协议

Avalon-ST协议违规包括以下错误:

  • 每个tx_st_eop多个 tx_st_sop
  • 两个或更多个tx_st_eop没有对应的tx_st_sop
  • rx_st_valid没有通过tx_st_soptx_st_eop置位。

这些错误适用于仿真以及硬件。

添加逻辑以检测tx_st_ready在超过100个周期内保持置低状态的情况。设置后触发条件以检查最后两个TLP的Avalon-ST信号以验证正确的tx_st_soptx_st_eop信号。

错误的有效负载大小

确定由Endpoint传输的最后一个TLP的长度字段是否大于由链路伙伴显示的InitFC信用。有关仿真,请参阅日志文件和仿真转储。对于硬件,使用第三方逻辑分析程序跟踪来获得PCIe传输。

如果有效负载(payload)大于显示的initFC信用,那么必须将已发表请求的InitFC增加到大于max payload size的值,或者将请求的TLP的有效负载大小减小到小于InitFC的值。

流程控制信用上溢(Flow control credit overflows)

确定tx_cred总线中与当前TLP类型关联的信用字段是否小于请求的信用值。当信用不足时,内核会等待链路伙伴(link partner)发布正确的信用类型。如果链路伙伴的信用增加超过预期,则可能无法获得足够的信用,从而会导致 Intel® Stratix® 10 Hard IP for PCI Express IP Core信用计算与链路伙伴不同步的情况。

添加逻辑以检测tx_st_ready信号在超过100个周期内保持置低的情况。设置后触发条件来检查tx_cred_ *tx_st_ *接口的值。添加一个FIFO状态信号来确定TXFIFO是否已满。

发送错误形成的TLP

请参阅错误日志文件以查找链路上传输的最后一个良好数据包。将此数据包与Avalon-ST接口上发送的TLP相关联。确定发送的最后一个TLP是否存在以下错误:

  • 发送的实际有效负载与长度字段不匹配。
  • 格式和类型字段被错误地指定。
  • TD字段被置位,表示TLP digest (ECRC)的存在,但ECRC DWORD未出现在TLP的末尾。
  • 有效负载跨越4KByte边界。

修改Application Layer逻辑以纠正错误状况。

Root Port发布的不足Posted信用

如果使用大于maximum payload size的有效载荷发送一个Memory Write TLP,那么Root Port 可能会在仿真中向Endpoint释放不正确的发布数据信用。因此,Endpoint没有足够的信用来发送额外的内存写入请求(Memory Write Requests)。

确保Application Layer发送的Memory Write Requests的有效载荷小于或等于maximum payload size指定的值。

缺少完成数据包或丢失的数据包

RX Completion TLP可能会导致RX FIFO溢出。确保所有未决Memory Read Requests的未完成的总读取数据小于RX缓冲区中已分配的完成信用。

您必须确保所有未完成读取请求的数据不超过RX缓冲区中的完成信用(completion credit)。