仅对英特尔可见 — GUID: nik1410565033286
Ixiasoft
仅对英特尔可见 — GUID: nik1410565033286
Ixiasoft
10.1.4. 链路在L0状态挂起(Link Hangs in L0 State)
链路可能会停止传输数据的原因很多。下表列出了一些可能的原因。
可能的原因 |
症状和根本原因 |
解决方法和解决方案 |
---|---|---|
Avalon‑ST信号违反Avalon-ST协议 |
Avalon-ST协议违规包括以下错误:
这些错误适用于仿真以及硬件。 |
添加逻辑以检测tx_st_ready在超过100个周期内保持置低状态的情况。设置后触发条件以检查最后两个TLP的Avalon-ST信号以验证正确的tx_st_sop和tx_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是否存在以下错误:
|
修改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)。 |