PCIe—TS1/TS2 之Polling.Configuration (二)

article/2025/7/6 16:35:57

前文

在 Polling.Configuration 次状态中,发送⽅停⽌发送 TS1 序列,转⽽发送 TS2 序列,TS2 序列中的链路和通道(lane)字段仍然使⽤填充字段填充。 该状态中,发送⽅转⽽发送 TS2 的⽬的是通知链路对端的设备:本⽅已经做好准备进⼊状态机中的下⼀个状态。设计转而发送 TS2 是为了使链路两端设备的LTSSM 同步⽽设计的握⼿机制。双⽅设备都⽆法独⾃进⼊下⼀ 状态,除⾮链路两端的设备都准备就绪。开始发送TS2 序列是通知对端本方准备就绪的一种⽅式。所以⼀旦设备同时发送并且接收到 TS2 序列,就代表本⽅和对端设备都已经就绪, 设备可以进⼊下⼀状态。

回忆一下:

速率/编码与 TS1/TS2 类型:
    使用 8b/10b 编码 (2.5 GT/s 或 5.0 GT/s):
          TS1 有序集:可以是标准 TS1(Symbol6 = D10.2) 或 EQ TS1(Symbol6 bit7 = 1b)。
          TS2 有序集:可以是标准 TS2(Symbol6 = D5.2) 或 EQ TS2 (Symbol6 bit7 = 1b)。
          传输 EQ TS1/TS2 的能力是可选的(Implementation Specific)。
使用 128b/130b 编码 (8.0 GT/s 或更高):
          TS2 有序集:可以是标准 TS2(Symbol7 = 45h) 或 128b/130b EQ TS2(Symbol7 bit7 = 1b)。(注:规范未定义 128b/130b 编码下的 EQ TS1,TS1 在此编码下只有标准形式)

接收端要求 (必须接受):
        支持 ≥8.0 GT/s 的端口: 在 LTSSM 所有状态中,必须接受收到的 TS1/TS2 是标准类型还是 EQ 类型,除非当前状态逻辑明确要求查找特定类型(例如,在特定协商阶段只认 EQ TS1)。
        支持 ≥16.0 GT/s 的端口:在 LTSSM 所有状态中,必须接受收到的 128b/130b TS2 是标准类型还是128b/130b EQ 类型,除非明确要求查找特定类型。

接收端要求 (允许但不强制):
    不支持 8.0 GT/s 的端口:允许但不是必需)接受 EQ TS1/TS2 有序集。它们主要设计用于处理标准 TS1/TS2。
    不支持 16.0 GT/s 的端口:允许(但不是必需)接受 128b/130b EQ TS2 有序集。

关键连续性要求 (8b/10b 编码下):
        使用 8b/10b 编码时,TS1 或 TS2 有序集只有在当前 Symbol6 的值与前一个接收到的 TS1 或 TS2 有序集的 Symbol6 的值完全匹配时,才被认为是连续的 (Continuous)。因为接收端的状态机依赖于检测连续的、匹配的训练序列来进行状态转换(如从 Polling 进入 Configuration,或在 Configuration 中达成一致)。如果 Symbol6 在传输过程中意外改变,会破坏连续性计数,可能导致状态机超时、复位或进入恢复状态 (Recovery)。所以对发送的TS序列进行约束,要求发送端在发送一串连续的 TS1 或 TS2 时,不能随意更改 Symbol6 的值。如果需要更改(例如,从标准 TS1 切换到 EQ TS1),必须中断序列(例如发送 COM 符号),然后再开始发送新类型的序列。

EQ TS1/TS2

        这些变体主要用于支持更高数据速率(尤其是 ≥8.0 GT/s)下的链路均衡 (Link Equalization) 过程。EQ TS1/TS2 携带了与均衡相关的特定系数信息(Preset, Coefficients),用于在 Configuration 和 Recovery 状态中动态调整发送端的预加重和接收端的均衡器设置,以补偿信道损耗,确保信号完整性。接收端“必须接受”两种类型(除非明确要求特定类型)的设计确保了:
         A.后向兼容性:高速新设备能正确理解低速旧设备发送的标准 TS1/TS2。
         B.前向兼容性/灵活性:新设备可以自由选择发送标准或 EQ 类型(如果支持),而旧设备(不支持高速)也能正常工作(因为它们主要处理标准类型,且允许忽略 EQ 类型)。
        协商顺利进行: 避免因对方发送了非预期的(但协议允许的)序列类型而导致链路训练失败。
Symbol6 连续性的重要性:

这是确保接收端能可靠检测到一串连续训练序列的核心机制。接收端通过计数连续接收到多少个 Symbol6 匹配的 TS1/TS2 来判断链路是否稳定、参数是否已交换完成。随意改变 Symbol6 会重置这个计数器,破坏状态机逻辑。

TS2格式

 

 

处于Polling.Configuration期间

        发送⽅在所有识别的通道上发送 TS2 序列,其链路和通道字段使⽤填充字段填充。并且发送⽅必须通知对端⾃⼰所⽀持的所有数据速率,即使是那些不打算使⽤的数据速率。此外,如果有需要的话,每个通道的接收⽅必须独⽴地恢复差分输⼊信号的极性。Transmit Margin 字段必须重置为 000b。

Polling.Configuration进⼊Configuration 状态

        在任意通道上接收到 8 个连续的链路和通道(lane)字段填充的 TS2 序 列后,并且从接收到第⼀个 TS2 序列开始,已经发送了⾄少 16 个 TS2 序列后,退出 Polling.Configuration 状态进⼊ Configuration 状态。

不知道大家有没有这样的问题,为什么不是所有通道呢?

核心原因:处理通道极性反转 (Lane Polarity Inversion)和通道映射 (Lane Reversal)** 问题

1.  物理布线可能错位:
     在实际硬件实现中(尤其是通过连接器或插槽连接时),发送端(TX)与接收端(RX)的物理通道(Lanes)连接可能发生错位或反转。例如:设备 A 的 Lane 0 TX 可能意外连接到设备 B 的 Lane 3 RX;设备 A 的 Lane 1 TX 连接到设备 B 的 Lane 2 RX,等等。甚至可能出现极性反转(差分信号的 P 和 N 线交换)。

2.  Polling.Configuration 阶段尚未进行通道编号分配和极性校正:
          Polling.Configuration` 子状态的核心目标是同步状态机(确认双方都准备好进入真正的参数协商阶段),而不是确定最终的通道顺序或校正极性。此时发送的 TS2 中的 `Link Number` 和 `Lane Number` 字段仍然使用填充值(PAD,如 0xFF, 0x1F),表明链路和通道尚未配置。通道编号分配和极性反转校正是在后续的 `Configuration` 状态(特别是 `Configuration.Lanenum` 子状态)中完成的。

之所以要求任意一条通道(Any Lane)成功接收到连续的 TS2,意味着至少存在一条物理上可用的、方向正确的通信路径。因为这证明了:
        A.物理连接存在:至少有一对 TX-RX 是连通的。
        B.基础通信能力:该通道上的信号质量足以完成位锁定、符号锁定和解码 TS2。
        C.对端设备已就绪:对端设备已进入 `Polling.Configuration` 状态并开始发送 TS2。
只要存在这样一条通道,就足以证明双方设备都已准备好进入下一阶段 (`Configuration` 状态) 进行更精细的协商。** 在 `Configuration` 状态中,协议机制会处理错位通道的重新编号和极性校正.

如果要求所有通道要求,则会产生弊端:那么任何一条通道由于物理错位、极性反转、信号质量问题等原因未能锁定或接收成功,都会阻止整个链路进入 `Configuration` 状态。而最终会导致链路训练失败,即使大部分通道甚至只有一条通道是完好的(理论上 PCIe x1 链路也能工作)。这与 PCIe 支持链路宽度降级 (Link Width Degradation)的设计目标违背。牢记在Polling.Configuration阶段,设备尚未知道哪些通道是有效的,也不知道正确的映射关系。

第二个问题,为什么是至少发送16个TS2,而接收8个?

发送端条件 (`发送至少 16 个 TS2`)目的是为了确保本端设备有足够的时间在至少一条通道上发送出足够多的 TS2 序列,以便让对端有机会检测到。
        为什么是 16?这是一个工程上选择的保守值,考虑了:
            a.对端设备可能稍晚进入 `Polling.Configuration` 状态。
            b.时钟频率的微小差异(允许的 +/-300 ppm 容差)。
            c.信号传播和锁定所需的时间。
            d.确保即使在最坏情况下,对端也有足够高的概率在`N_FTS`超时之前接收到连续的TS2。
            e.与接收条件 (`8 个连续 TS2`) 的关系:发送 16 个 TS2 是下限保证,接收 8 个连续 TS2 是信号质量证明。两者结合确保握手是可靠的。接收端也需要连续收到 8 个才能确认信号稳定。

总结一下为什么是“任意通道”而非“所有通道”

1.  解决物理不确定性:允许在物理通道连接可能存在错位或反转的情况下,只要至少有一条通道能可靠通信,链路训练就能继续推进到下一阶段。
2.  阶段分工明确: `Polling.Configuration` 只负责状态同步握手,不负责通道映射和极性校正(这是 `Configuration` 状态的任务)。
3.  保证健壮性:支持链路宽度降级。即使部分通道失效,只要有一条通道可用,链路也能以最小宽度(x1)建立。
4. 符合实际需求:只要有一条通道证明双方已就绪并连通,就没有必要等待所有通道(尤其当部分通道可能因物理原因暂时无法通信时)。
5.  工程实践优化:避免因单条通道问题导致整个链路训练卡死在 `Polling.Configuration` 状态。协议设计优先保证链路能在可用资源下建立。

简单来说:PCIe 在 `Polling.Configuration` 阶段采用“任意通道”成功接收 TS2 的策略,是一种“先搭上线,再细聊分工”的智慧。它优先保证双方能在最基础的层面上确认彼此的存在和就绪状态(哪怕只用了一条通道),把复杂的通道排序、极性校正、最终宽度确定等问题留到专门设计的 `Configuration` 状态中去解决。这极大地提高了链路在各种非理想物理连接条件下的成功率和健壮性。

Polling.Configuration进⼊Detect 状态

如果上述条件在 48 ms 的超时后仍未满⾜,退出 Polling.Configuration 状态进⼊ Detect 状态。

TS1和TS2对比

​一、基础结构对比​

​字段位置​​TS1序列​​TS2序列​​共性说明​
​Symbol 0​COM(K28.5)COM(K28.5)起始标识符,用于同步接收端
​Symbol 1-2​Link/Lane Number(初始为PAD)Link/Lane Number(初始为PAD)配置阶段传递拓扑映射信息
​Symbol 3​N_FTS(FTS序列数量)N_FTS(FTS序列数量)决定接收端时钟恢复所需FTS数量
​Symbol 4​Rate ID(速率支持标识)Rate ID(速率支持标识)协商链路速率(如Gen3/4/5)
​Symbol 5​控制命令(Hot Reset/Loopback等)控制命令(Hot Reset/Loopback等)触发链路状态变更
​Symbol 6-15​​D10.2(固定标识符)​​D5.2(固定标识符)​序列类型标识,用于连续性检测

​关键差异​​:

  • ​标识符不同​​:TS1使用D10.2,TS2使用D5.2,这是区分两类序列的核心标志。
  • ​Symbol 6-15作用​​:TS1/TS2的该字段在标准模式下仅填充标识符,但在​​Modified模式​​下(如协商备用协议)可携带自定义数据。

​二、功能角色差异​

​功能​​TS1序列​​TS2序列​
​核心作用​​链路参数检测​​(宽度、速率、电气特性)​参数结果确认​​(验证TS1的协商结果)
​均衡控制​含​​EC字段​​(均衡相位指示),用于动态调整均衡参数含​​速率切换请求字段​​,触发重均衡流程
​特殊场景​在Polling/Recovery状态主导训练在Configuration状态确认配置
​Modified模式​替换Symbol 6-15,支持备用协议协商同TS1,但用于TLP Signaling 2等扩展功能

​示例流程​​:

  1. ​链路初始化​​:设备在Polling.Active状态互发TS1,检测物理层参数。
  2. ​配置确认​​:进入Configuration状态后,发送TS2确认Link/Lane Number等参数。
  3. ​速率切换​​:TS2的Symbol 4置位Speed_change,触发升速并启动均衡(TS1携带EC字段)。

​三、物理层处理差异​

​特性​​TS1序列​​TS2序列​
​连续性条件​8b/10b编码需​​Symbol 6匹配​
128b/130b编码需​​Symbol 6-9匹配​
同TS1
​中断机制​仅可被SKP或EIEOS有序集中断同TS1
​高速率支持​8GT/s+时用于​​均衡相位同步​​(EC字段关键)8GT/s+时用于​​速率切换请求​

四、应用场景总结​

​场景​​TS1主导​​TS2主导​
链路初始化(Polling)✓ 连续发送检测对端存在
参数配置(Configuration)✓ 确认链路宽度/通道映射
错误恢复(Recovery)✓ 携带Hot Reset/Loopback命令
速率切换✓ 传递均衡参数(EC字段)✓ 发起速率变更请求

为什么Polling.Active需要1024个TS1?

  • 最坏情况覆盖
    考虑时钟频率容差(±300 ppm)、信号传播延迟、锁定时间波动等因素,需保守设计。

  • 公式推导

    最小同步时间 = (时钟漂移容差) × (锁定窗口) + (传输延迟)= 600 ppm × T_lock + T_prop
    • 以 2.5 GT/s 为例(1 符号 = 4 ns):
      1024 符号 ≈ 4.1 μs,覆盖典型锁定时间(1~3 μs)+ 余量

不同情况下的N_FTS对比:

 为什么需要动态协商N_FTS?

解决低功耗唤醒/速率切换时因 时钟失步 导致的数据错误。同时动态协商避免过度保守(如 Gen1 用 N_FTS=255 浪费带宽)或冒险(如 Gen5 用 N_FTS=5 导致锁定失败)。第二个好处就是覆盖不同厂商的CDR 电路性能差异(锁定时间 50ns~500ns)。此外,优化 N_FTS 还可减少唤醒延迟(L0s→L0 典型值 1~4 μs


http://www.hkcw.cn/article/OmDKIxRcJD.shtml

相关文章

如何增加 cPanel中的 PHP 最大上传大小?

PHP通过限制文件上传大小来保护服务器性能,但默认限制对于许多现代网页应用来说太低了。当PHP应用程序显示错误信息,要求你增加PHP的最大上传文件大小时,你可能会遇到这个问题。有多种方法可以提高上传限制,包括直接编辑PHP配置文…

linux——文件系统

被打开的文件放到内存中没有被打开的文件放到磁盘 1. 硬件-->磁盘 磁盘的存储基本单位:扇区(512字节) 512字节写入到磁盘,磁盘如何转动: 磁盘写入的时候是向柱面进行批量写入的 CHS地址:cylind heade…

HBM的那些事2 写操作

搞懂写,把下面这幅图搞定,基本上就掌握了7成了。 术语解释 WL : write latency,说的是命令到发送数据的WDQS的间隔,注意这里不包含twpre1的时间,通过配置MR1实现。 twpre1: 在发送写数据之前,W…

B1039 PAT乙级JAVA题解 到底买不买

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果…

力扣HOT100之多维动态规划:62. 不同路径

这道题用二维dp数组来做相当简单,是一道入门题。直接上动规五部曲: 1.确定dp[i][j]的含义:从起点到位置为[i][j]处的路径总数 2.确定递推公式 dp[i][j] dp[i - 1][j] dp[i][j - 1]; 3.dp数组初始化 dp[0][j] 1;dp[i][0] 1; 4.确定遍历顺序…

css呼吸灯

效果图 只是简单的呼吸效果,您按照需求自己拓展即可。 代码 keyframes light{from{opacity: 1;}to{opacity: 0.2;}}使用 .view{animation-name: light;animation-duration: 1s;animation-timing-function: linear;animation-iteration-count: infinite;animation-…

AI入门——AI大模型、深度学习、机器学习总结

以下是对AI深度学习、机器学习相关核心技术的总结与拓展,结合技术演进逻辑与前沿趋势,以全新视角呈现关键知识点 一、深度学习:从感知到认知的技术革命 核心突破:自动化特征工程的范式变革 深度学习通过多层神经网络架构&#x…

python训练营打卡第42天

Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 1.回调函数 def handle_result(result):"""处理计算结果的回调函数"""print(f"计算结果是: {resul…

ISO18436-2 CATII级振动分析师能力矩阵

ISO18436-2021是当前针对针对分析师的一个标准,它对振动分析师的能力和知识体系做了4级分类,这里给出的是一家公司响应ISO18436的CATII级标准,做的一个专题培训的教学大纲。摘自: 【振動噪音產學技術聯盟】04/19-23 ISO 18436-2…

YARN应用日志查看

YARN应用日志查看 1、页面查看2、命令行查看1、页面查看 1.1、YARN ResourceManager Web UI Spark on YARN时,YARN的资源管理器(ResourceManager)和历史服务器(History Server)提供了强大的日志和监控功能,可以帮助用户查看和管理Spark作业 访问YARN ResourceManager的…

免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE

酒店系统主屏幕 房间管理 酒店管理系统的房间管理,可实现对酒店所有房间的实时掌控。它能清晰显示房间状态,如已预订、已入住、空闲等,便于高效安排入住与退房,合理分配资源,提升服务效率,保障酒店运营有条…

29 C 语言内存管理与多文件编程详解:栈区、全局静态区、static 与 extern 深度解析

1 C 语言内存管理概述 1.1 内存分区模型解析 在 C 语言程序中,内存的合理管理是确保程序高效运行的核心。为了深入理解变量的作用域、生命周期及内存分配机制,我们需要先掌握内存分区模型。C 语言将内存划分为以下几个核心区域: 栈区&#…

JavaScript 性能优化实战:从原理到框架的全栈优化指南

在 Web 应用复杂度指数级增长的今天,JavaScript 性能优化已成为衡量前端工程质量的核心指标。本文将结合现代浏览器引擎特性与一线大厂实践经验,构建从基础原理到框架定制的完整优化体系,助你打造高性能 Web 应用。 一、性能优化基础&#x…

2025年十大AI幻灯片工具深度评测与推荐

我来告诉你一个好消息。 我们已经亲自测试和对比了市面上最优秀的AI幻灯片工具,让你无需再为选择而烦恼。 得益于AI技术的飞速发展,如今你可以快速制作出美观、专业的幻灯片。 这些智能平台的功能远不止于配色美化——它们能帮你头脑风暴、梳理思路、…

MATLAB 安装与使用详细教程

目录 第一部分:MATLAB 安装教程第二部分:MATLAB 界面介绍第三部分:MATLAB 基础使用第四部分:MATLAB 脚本编程第五部分:MATLAB 编程示例 第一部分:MATLAB 安装教程 1 下载 MATLAB 安装文件 访问 MathWor…

【C++进阶篇】C++11新特性(上篇)

💡 解锁C11新技能:初始化、类型推导与智能指针的奥秘! 一. C11简介1.1 C11发展历史 二. 初始化列表2.1 内置类型2.2 initializer_list详解 三. 简化声明3.1 auto 自动推导类型3.2.1 注意事项 3.3 decltype 获取推导类型3.3.1 没有括号3.3.2 有…

Unity中应对高速运动的物体,碰撞组件失效的问题?

尝试方法一:修改重力组件Rigidbody中的碰撞检测模式Collision Detection 把碰撞检测模式Collision Detection属性修改成Continuous Dynamic后,发现效果不是很明显,还会有碰撞组件失效的问题。 尝试方法二:射线检测替代物理碰撞 private Vector3 _prevPos;void Start() {…

高性能MYSQL(三):性能剖析

一、性能剖析概述 (一)关于性能优化 1.什么是性能? 我们将性能定义为完成某件任务所需要的时间度量,换句话说,性能即响应时间,这是一个非常重要的原则。 我们通过任务和时间而不是资源来测量性能。数据…

《深入解析SPI协议及其FPGA高效实现》-- 第二篇:SPI控制器FPGA架构设计

第二篇:SPI控制器FPGA架构设计 聚焦模块化设计、时序优化与资源管理 1. 系统级架构设计 1.1 模块化硬件架构 verilog module spi_controller (input wire clk, // 系统时钟 (100 MHz)input wire rst_n, // 异步复位// 配置接口…

rabbitmq Fanout交换机简介

给每个服务创建一个队列,然后每个业务订阅一个队列,进行消费。 如订单服务起个多个服务,代码是一样的,消费的也是同一个队列。加快了队列中的消息的消费速度。 可以看到两个消费者已经在消费了