PCIe EP控制器(TLP发送仲裁)
PCIe EP控制器并不检查需要发送TLP的错误。PCIe EP控制器不检查TLP负载是否超过最大负载长度限制,即max_payload_size,也不检查TLP负载是否超过重传缓冲区溢出上限要求,即CX_MAX_MTU(控制器设计参数);TLP负载长度由AXI/AHB桥或者应用逻辑来保证上限。
TLP事务层报文和DLLP数据链路层报文具有相同的优先级,TLP和DLLP之间采用轮询RR仲裁方式。
TLP仲裁的优先级,从高到低
- 来自XADM模块XALI0/1/2接口,TLP完成报文,优先级是最高的;
- 来自重传缓冲区,重传报文;
- 来自PCIe EP内部,TLP消息报文,包括应用逻辑通过MSI接口触发的EP内部产生的TLP消息报文;
- 来自PCIe EP内部,TLP完成报文,即对CPU PIO访问PCI MEM/IO/配置空间寄存器读或写的TLP完成报文。
- 来自XADM模块XALI0/1/2接口,TLP请求报文,优先级最低。
DLLP仲裁的优先级,从高到低
- DLLP完成报文,优先级最高;
- 不需要确认的DLLP请求报文;
- 高优先级的需要确认的DLLP请求报文;
- 流控DLLP报文;
- 厂商自定义的DLLP消息报文;
- 功耗管理DLLP报文。
TLP仲裁
我们这里不讨论DLLP优先级仲裁的具体情况。我们讨论来自XADM模块XALI0/1/2接口的具体优先级仲裁情况。前面说过,来自XADM模块XALI0/1/2接口的TLP完成报文优先级最高,TLP请求报文优先级最低。XADM模块XALI0/1/2三个接口之间的优先级仲裁存在三种模式:
- 轮询模式:三个接口优先级相同,这是默认模式。
- 固定优先级模式:XALI2优先级最高、XALI0优先级最低。
- 基于VC的优先级仲裁模式。基于VC的仲裁首先将VC分为HPVC和LPVC两个组。LPVC组优先级低于HPVC组。
- 在HPVC组内,ID号越大的VC优先级越高;
- 在LPVC组内,优先级按照轮询RR或加权轮询WRR来计算。
流控信令牌对发送仲裁机制的影响
XADM模块在发送TLP报文之前会检查指定类型的TLP流量信令牌(这句话的意思:非确认型、确认型和完成型等TLP都有各自流量信令牌?)是否满足发送要求。只有流量信令牌满足要求,XADM才会根据定制的仲裁模式对TLP报文进行仲裁发送。即使来自PCIe EP内部的TLP消息报文和TLP完成报文的优先级比较高,它们的发送仍然需要仲裁逻辑来控制,XADM在发送这些报文之前仍然需要流量信令牌满足要求。
举例说明,在轮询仲裁模式下,来自XALI1的非确认型事务请求报文P后面跟着来自XALI0的完成报文CPL。
- 在P和CPL流量信令牌都满足要求的条件下,XADM先发送P,然后发送CPL。
- 当P的流量信令牌不满要求且CPL流量信令牌满足要求时,XADM发送CPL,而不发送P。此时在XALI1接口上在P之后所有报文都将被阻塞,包括非确认型事务请求报文NP或完成报文CPL。
应用逻辑要正确使用XALI0/1/2,因为XADM本身不保证XALI0/1/2之间的序。
如果应用逻辑使用一个XALI#接口发送多种类型的事务时,当前事务请求由于流量信令牌的原因被阻塞,其后的所有事务或完成都会被阻塞,无论它们的流量信令牌是否满足要求。为了避免这种情况发送,应用逻辑可以:
- 应用逻辑应该使用不同的XALI接口发送不同类型的事务:例如XALI0用于发送非确认型请求事务,XALI1用于发送确认型请求事务,XALI2用于发送完成型事务。
- 应用逻辑根据PCIe EP控制器的xadm_*_cdts信号,来选择发送流量信令牌满足要求的事务或完成报文。在检测xadm_*_cdts信号时,即使流量信令牌满足要求,应用逻辑还需要注意到:在检测到信号和发送报文之间的时间间隔内,PCIe EP控制器内部产生的TLP报文会减少流量信令牌,从而造成当前报文阻塞。
在链路空闲时,当PCIe EP控制器接收到一个正确的TLP报文时,就会发送一个确认型DLLP报文。一般情况,不对默认模式进行修改,除非远程设备发生意外重传。
设计师也可以对重传定时器的超时阈值进行修改。一般情况,不对默认模式进行修改,除非远程设备发生意外重传。