当前位置: 首页 > ops >正文

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仲裁的优先级,从高到低

  1. 来自XADM模块XALI0/1/2接口,TLP完成报文,优先级是最高的;
  2. 来自重传缓冲区,重传报文;
  3. 来自PCIe EP内部,TLP消息报文,包括应用逻辑通过MSI接口触发的EP内部产生的TLP消息报文;
  4. 来自PCIe EP内部,TLP完成报文,即对CPU PIO访问PCI MEM/IO/配置空间寄存器读或写的TLP完成报文。
  5. 来自XADM模块XALI0/1/2接口,TLP请求报文,优先级最低。

DLLP仲裁的优先级,从高到低

  1. DLLP完成报文,优先级最高;
  2. 不需要确认的DLLP请求报文;
  3. 高优先级的需要确认的DLLP请求报文;
  4. 流控DLLP报文;
  5. 厂商自定义的DLLP消息报文;
  6. 功耗管理DLLP报文。
TLP仲裁

我们这里不讨论DLLP优先级仲裁的具体情况。我们讨论来自XADM模块XALI0/1/2接口的具体优先级仲裁情况。前面说过,来自XADM模块XALI0/1/2接口的TLP完成报文优先级最高,TLP请求报文优先级最低。XADM模块XALI0/1/2三个接口之间的优先级仲裁存在三种模式:

  1. 轮询模式:三个接口优先级相同,这是默认模式。
  2. 固定优先级模式:XALI2优先级最高、XALI0优先级最低。
  3. 基于VC的优先级仲裁模式。基于VC的仲裁首先将VC分为HPVC和LPVC两个组。LPVC组优先级低于HPVC组。
    1. 在HPVC组内,ID号越大的VC优先级越高;
    2. 在LPVC组内,优先级按照轮询RR或加权轮询WRR来计算。
流控信令牌对发送仲裁机制的影响

        XADM模块在发送TLP报文之前会检查指定类型的TLP流量信令牌(这句话的意思:非确认型、确认型和完成型等TLP都有各自流量信令牌?)是否满足发送要求。只有流量信令牌满足要求,XADM才会根据定制的仲裁模式对TLP报文进行仲裁发送。即使来自PCIe EP内部的TLP消息报文和TLP完成报文的优先级比较高,它们的发送仍然需要仲裁逻辑来控制,XADM在发送这些报文之前仍然需要流量信令牌满足要求。

        举例说明,在轮询仲裁模式下,来自XALI1的非确认型事务请求报文P后面跟着来自XALI0的完成报文CPL。

  1. 在P和CPL流量信令牌都满足要求的条件下,XADM先发送P,然后发送CPL。
  2. 当P的流量信令牌不满要求且CPL流量信令牌满足要求时,XADM发送CPL,而不发送P。此时在XALI1接口上在P之后所有报文都将被阻塞,包括非确认型事务请求报文NP或完成报文CPL。

应用逻辑要正确使用XALI0/1/2,因为XADM本身不保证XALI0/1/2之间的序。

        如果应用逻辑使用一个XALI#接口发送多种类型的事务时,当前事务请求由于流量信令牌的原因被阻塞,其后的所有事务或完成都会被阻塞,无论它们的流量信令牌是否满足要求。为了避免这种情况发送,应用逻辑可以:

  1. 应用逻辑应该使用不同的XALI接口发送不同类型的事务:例如XALI0用于发送非确认型请求事务,XALI1用于发送确认型请求事务,XALI2用于发送完成型事务。
  2. 应用逻辑根据PCIe EP控制器的xadm_*_cdts信号,来选择发送流量信令牌满足要求的事务或完成报文。在检测xadm_*_cdts信号时,即使流量信令牌满足要求,应用逻辑还需要注意到:在检测到信号和发送报文之间的时间间隔内,PCIe EP控制器内部产生的TLP报文会减少流量信令牌,从而造成当前报文阻塞。

在链路空闲时,当PCIe EP控制器接收到一个正确的TLP报文时,就会发送一个确认型DLLP报文。一般情况,不对默认模式进行修改,除非远程设备发生意外重传。

设计师也可以对重传定时器的超时阈值进行修改。一般情况,不对默认模式进行修改,除非远程设备发生意外重传。

http://www.xdnf.cn/news/7918.html

相关文章:

  • Qwen 3技术报告详细解读
  • linux中cpu内存浮动占用,C++文件占用cpu内存、定时任务不运行报错(root) PAM ERROR (Permission denied)
  • 【时时三省】(C语言基础)调用函数
  • clock的时钟频率check代码
  • vue之混入mixin
  • 禾纳EAT3152AP MOS电源芯片PIN TO PIN替代泰德TDM3307/2307方案
  • DDoS防护实战——从基础配置到高防IP部署
  • 86.评论日记
  • 二进制编码、定点数与浮点数
  • 【版本控制】Perforce P4服务器安全配置指南(附常见漏洞、详细配置参数)
  • IEEE Transactions on Wireless Communications 2025年1月-5月论文速览
  • 深入理解 Python 的with语法:资源管理的优雅解决方案
  • C++:array容器
  • Linux 内核探秘:从零构建 GPIO 设备驱动程序实战指南
  • MySQL主键与外键详解:数据关系的基石与守护者
  • 助力 FPGA 国产化,ALINX 携多款方案亮相深圳、广州“紫光同创 FPGA 技术研讨会”
  • 【时时三省】Python 语言----文件
  • java 通过IO控制台输入内容写入到文本当中
  • SQL窗口函数破解:如何优雅获取各分组极值
  • docker中部署Universal Media Server (UMS)
  • Go语言打造:超高性能分布式唯一ID生成工具
  • 关于FPGA 和 ASIC设计选择方向的讨论
  • VoiceFixer语音修复介绍与使用
  • 软件工程(六):一致性哈希算法
  • 【Redis】AOF日志的三种写回机制
  • 一文详解并查集:从基础原理到高级应用
  • MAYA 转换为 STP:深度技术解析与全流程实践指南
  • OpenCV CUDA模块特征检测与描述------创建一个 盒式滤波器(Box Filter)函数createBoxFilter()
  • GPU P-State 模式说明
  • MCP入门介绍