reset
暂时无法在飞书文档外展示此内容
✅ 三种时钟模式简要定义
|--------------|---------------------------------|----------------------------------------------|
| 模式 | 全称 | 描述 |
| Common Clock | 共用参考时钟 | Root Complex(RC)和 Endpoint(EP)使用同一颗外部 Refclk |
| SRNS | Separate Refclk No SSC | RC 和 EP 使用独立时钟源,但 不允许展频(SSC) |
| SRIS | Separate Refclk Independent SSC | RC 和 EP 使用独立时钟源,允许各自带有 SSC 抖动 |
📊 Common Clock vs SRNS vs SRIS 全面对比表
|---------------|-----------------------|----------------------|---------------------------|
| 维度 | Common Clock | SRNS | SRIS |
| 📡 时钟来源 | RC 和 EP 共用 1 路 Refclk | RC 和 EP 各自独立时钟,无 SSC | RC 和 EP 各自独立时钟,带 SSC |
| 🔧 硬件布线 | 最简单,共用时钟线 | 需要两路精准无抖动 Refclk | 需要两路独立 SSC Refclk(最自由) |
| 🎯 对时钟精度要求 | 无需严格 | 极高(±300ppm 以内) | 支持频偏(±300ppm),靠 CDR 恢复 |
| 🔁 PHY 要求 | 最宽松,几乎所有都支持 | 需支持 SRNS 模式 | 需支持 SRIS + SSC 抖动恢复 |
| 📈 LTSSM 建链速度 | 快(TS 少) | 中等 | 慢(Training 更长) |
| 📶 抗干扰能力(EMI) | 一般 | 好 | 最好(因 SSC 降低 EMI) |
| ⚙️ 软件/固件配置复杂度 | 最低 | 中等 | 最高(需配置 SSC,控制 Training) |
| 📦 应用场景 | 主板内部连接,嵌入式 SoC+PHY | 板间通信、FPGA ↔ CPU | 插拔设备(M.2 SSD、Mini PCIe 卡) |
测量lane margin,步骤, 眼图
RC(Root Complex)发现 EP 是否支持 margining, 读ep是否支持margin capability
RC 向 EP 发出 Lane Margining 请求
EP 在 PHY 内部执行 margin 测试
EP 通过标准 PCIe 配置空间报告 margin 数据
RC 读取这些数据并进行软件分析
是否应该用 ERR_COR (可纠错)来"通告"一个非致命错误,而不是直接用 ERR_NONFATAL 来报告它 ,取决于谁发现了错误 ,以及它是否有权负责处理这个错误。
In subsequent specifications that support Role-Based Error Reporting, non-fatal errors are sometimes signale with ERR_NONFATAL, sometimes signaled with ERR_COR, and sometimes not signaled at all, depending upon th role of the agent that detects the error and whether the agent implements AER (see Section 6.2.3.2.4 ). On som platforms, sending ERR_NONFATAL will preclude another agent from attempting recovery or determining th ultimate disposition of the error. For cases where the detecting agent is not the appropriate agent to determin the ultimate disposition of the error, a detecting agent with AER can signal the non-fatal error with ERR_COR which serves as an advisory notification to software. For cases where the detecting agent is the appropriate one the agent signals the non-fatal error with ERR_NONFATAL.
|------------------------------------|--------------|-----------------|
| 情况 | 应该使用的信号 | 原因 |
| Agent 检测到非致命错误,自己负责处理(如 Root Port) | ERR_NONFATAL | 直接报告并由自己处理 |
| Agent 检测到非致命错误,但不是最终处理人(如 Switch) | ERR_COR | 仅通知系统,避免干扰真正负责者 |
| Agent 检测到,但错误无关紧要或不影响功能 | 不报告 | 避免干扰系统 |
poison怎么处理
When a poisoned TLP is received by its ultimate PCI Express destination, if the severity is non-fatal and the Receiver deals with the poisoned data in a manner that permits continued operation, the Receiver must handle this case95 as an Advisory Non-Fatal Error.96 A Receiver with AER signals the error (if enabled) by sending an ERR_COR Message. A Receiver without AER sends no error Message for this case. Refer to Section 2.7.2.2 for special rules that apply for poisoned Memory Write Requests.
An example is a Root Complex that receives a poisoned Memory Write TLP that targets host memory. If the Root Complex propagates the poisoned data along with its indication to host memory, it signals the error (if enabled) with an ERR_COR. If the Root Complex does not propagate the poison to host memory, it signals the error (if enabled) with ERR_NONFATAL.
Another example is a Requester that receives a poisoned Memory Read Completion TLP. If the Requester propagates the poisoned data internally or handles the error like it would for a Completion with UR/CA Status, it signals the error (if enabled) with an ERR_COR. If the Requester does not handle the poison in a manner that permits continued operation, it signals the error (if enabled) with ERR_NONFATAL.
|---------------------------------------|-------------------|------------|---------------|
| 情况 | 设备处理方式 | 系统能继续工作? | 报告方式(若支持 AER) |
| RC 接收到 poisoned Memory Write | 将数据连同 poison 写入内存 | ✅ 是 | ERR_COR |
| RC 接收到 poisoned Memory Write | 阻止写入 | ❌ 否(系统更敏感) | ERR_NONFATAL |
| Requester 收到 poisoned Read Completion | 使用数据或模仿 UR/CA 行为 | ✅ 是 | ERR_COR |
| Requester 收到 poisoned Read Completion | 不能处理 → 崩溃或报错 | ❌ 否 | ERR_NONFATAL |
| 无 AER | 不论何种情况 | N/A | 不报告错误 |
Address-based routing
PCIe 的 Type 1 Header 中的 Base/Limit 寄存器仅用于 下行方向的地址路由(RC/Switch 向下找设备)。 对于 EP 发起的 TLP(上行),PCIe Switch 和 Root Port 不判断地址是否在 Base/Limit 范围内,它们只负责把数据送上去。
双方如何确定是common clock/SRNS/SRIS
PHY 启动时检查 sris_mode 使能与否
-
sris_mode_enable = 1→ SRIS 模式 -
sris_mode_enable = 0→ SRNS / Common Clock
Ctrl自研寄存器中定义了sris_mode
LTSSM 在 Polling.Active 中交换 TS1 Ordered Sets
- 检查对方 TS1 中的 Common Clock Bit
如果双方都设置 Common Clock Bit = 1,则进入 Common Clock 模式(最快速,最简单)
如果任一方设置 Common Clock Bit = 0,则进入 Recovery.RcvrLock → Recovery.RcvrCfg → Recovery.Equalization 流程
link control register中定义了 Common Clock Configuration ,bit6
-
如果本地启用了
sris_mode_enable=1,则进入 SRIS-specific training(有抖动补偿能力) -
如果未启用
sris_mode,则按 SRNS 处理,要求对方没有 SSC,否则训练失败
UI名词解释
UI 是每个比特位在时间上的单位宽度;
在链路越快的情况下,UI 越小,对 jitter/margin 等要求越高;
很多测试工具都基于 UI 来评估眼图质量、误码容差等。
假设你的串行链路传输速率是 10 Gbps,那么每秒钟传输 100 亿个 bit。也就是说,每一个 bit 占用的时间就是 100ps,这个时间就是 Unit Interval。
FS/LS
✅ 背景:FIR 滤波器 3 个 Tap 系数
在 PCIe 中,发射器通过 3 tap 的 FIR 滤波器调节信号波形:
-
C₋₁:pre-cursor tap,对应第一个前符号对当前符号的影响。
-
C₀:cursor tap,对应当前符号的主要幅度。
-
C₊₁:post-cursor tap,对应第一个后符号对当前符号的影响。
✅ 第1条:TS1 中使用的是绝对值
txt
复制编辑
C-1 和 C+1 以绝对值发送,C0 是正数
-
在 TS1 Ordered Set 中(Phase 2/3),用 6-bit 表示这些系数。
-
C-1和C+1通过另外的 "polarity 位" 表示其方向(加性还是减性),但 值本身用绝对值发送。 -
C0一定是正的。
✅ 第2条:FS 定义
txt
复制编辑
FS = |C-1| + C0 + |C+1|
FS 表示信号的总摆幅,用于判断是否满足发送器输出的最大电压范围(如 800mV full swing)。
-
Full Swing 模式下:FS ∈ [24, 63]
-
Reduced Swing 模式下:FS ∈ [12, 63]
所有的 coefficient 系数值是 6-bit 的整数,范围一般在 [0, 63] 内。
✅ 第3条:LF 定义
txt
复制编辑
LF = C0 - |C-1| - |C+1| ``LF / FS 是相对摆幅的比例
LF 不是一个直接传输的值,而是通过公式 LF = C0 - |C-1| - |C+1| 计算出来,用于估计信号在低频区域的最小差分电压。
举个例子:
- 如果
FS = 40,LF = 8,则LF/FS = 0.2,表示最低摆幅占总摆幅 20%,衡量信号质量。
✅ 第4条:合法系数的约束(适用于 Equalization 请求)
以下是发往对方端口的 coefficients 请求必须满足的约束,否则 请求无效:
a. 限制 Pre-cursor 大小
mathematica
复制编辑
|C-1| ≤ Floor(FS / 4)
- 目的是避免过大的前向干扰影响系统稳定性
b. FS 必须一致
mathematica
复制编辑
|C-1| + C0 + |C+1| == FS
- 保证整个 TX 输出功率不会因均衡变化而改变。
c. LF 必须 ≥ 规定值
mathematica
复制编辑
C0 - |C-1| - |C+1| ≥ LF
- 保证最小输出电压满足 spec 里的 Eye Opening 要求。
FS/LS和preset和coefficient的关系
✅ 1. Preset(预设)
-
是 PCIe 规定的一组固定的 FIR 滤波器设置编号;
-
每个 preset 对应一组系数:
C-1(pre-cursor),C0(cursor),C+1(post-cursor); -
一共有 11 个标准 preset(0~10),用于 TX FIR 模型。
✅ 2. Coefficient(三个 tap)
-
对应的三个系数如下(简写):
-
scss
-
复制编辑
-
PresetN → {Pre-Cursor (C-1), Cursor (C0), Post-Cursor (C+1)}
✅ 3. FS 和 LF
-
FS(Full Swing) =
|C-1| + C0 + |C+1| -
LF(Low Frequency Swing) ≈ C0(也可能考虑 DC 增益路径,规范略有差异)
-
这些值用来衡量发射信号质量(幅度、频率响应等)
PCIe链路中的 Equalization(均衡)过程,主要是通过调节发射端的 FIR滤波器系数(coefficients) 和接收端的 CTLE / DFE 等电路,来补偿信号在信道中传输导致的衰减与失真 ,从而提升 眼图(Eye Diagram)质量,降低误码率(BER)
EQ at 2.5 and 5.0 GT/s
🔧 1. 什么是 "Tx Equalization at 2.5 and 5.0 GT/s is only de-emphasis"?
-
在 Gen1 和 Gen2 速率下(2.5 和 5.0 GT/s) ,发射端 只有"去加重"机制(De-emphasis) ,没有完整的三抽头 FIR 均衡器。
-
与 Gen3/Gen4 的 FIR
[C-1, C0, C+1]不同,Gen1/2 的 Tx 仅能设置是否"在转换时刻"降低或增强信号幅度。
📉 2. 什么是 De-emphasis(去加重)?
去加重是一种 降低转换符号幅度 的技术:
-
连续的 1 或 0(non-transition bits)信号保持较高幅度;
-
发生从 1→0 或 0→1 的转变时(transition bits),信号幅度会降低(比如降低 3.5 dB)。
目的:补偿信号在信道中因频率特性引起的高频损耗。
高速速率(8.0 GT/s、16.0 GT/s、32.0 GT/s)下的 Tx 均衡(Equalization)机制
Tx(发送端)必须同时支持两种调节模式:
-
Coefficient 模式:高分辨率,微调;
-
Preset 模式:低分辨率,预设组合(通常为 11 个 preset)。
这两种控制方式可以被接收端(Rx)通过 Equalization 协议请求修改。
Equalization 协议通过标准 PCIe 的 物理链路 实现,不需要额外物理路径;
是对 PCIe Link Layer 的一个 增强扩展;
通过 TS1/TS2 Ordered Set 中的字段(如 preset/coefficient、Use Preset 位) 发起调节请求。
发送端使用一个 三抽头 FIR 滤波器:
v_out[n] = c-1·x[n-1] + c0·x[n] + c+1·x[n+1]
-
x[n]:输入的码流 -
c-1:前向抽头(pre-cursor) -
c+1:后向抽头(post-cursor) -
c0:主抽头(cursor)
✅ 系统约束:
-
c0不直接传输,它是 隐含的,由如下规则计算: -
c0 = 1 - |c-1| - |c+1| -
c-1和c+1是 可配置/调节的值 -
所有系数必须满足:
-
-1 ≤ c-1 ≤ 00 ≤ c0 ≤ 1-1 ≤ c+1 ≤ 0 -
并且总和不超过 1,避免发送功率过大。
一、FIR(三阶)等化器基础
如 Figure 8-4 所示,Tx 使用如下的 FIR 结构:
voutn=vinn−1⋅c−1+vinn⋅c0+vinn+1⋅c+1
其中:
-
c_{-1}:pre-cursor coefficient (前游系数),产生 Pre-shoot(Vc) -
c_{0}:cursor coefficient(主脉冲),产生主要信号 -
c_{+1}:post-cursor coefficient (后游系数),产生 De-emphasis(Vb) -
约束条件:
|c_{-1}| + c_0 + |c_{+1}| = 1,即总幅度保持单位增益(1)
如何理解Va/Vb/Vc/Vd
|------------|-----------------------------------------------------|------------|
| 项目 | 表达式 | 说明 |
| FIR 输出 | Vout[n] = C₋₁·d[n−1] + C₀·d[n] + C₊₁·d[n+1] | 基础公式 |
| Full Swing | `FS = | C₋₁ |
| Vc | Vc = Vd × C₋₁ / FS | 预加重电平(跳变前) |
| Vb | Vb = Vd × C₊₁ / FS | 去加重电平(跳变后) |
| Va | Va = Vd × C₀ / FS | 跳变中心电平 |
Vc:pre-shoot 电压 ,发生在跳变前(对应 FIR 中的 C₋₁)
Vb:de-emphasis 电压 ,发生在跳变后(对应 FIR 中的 C₊₁)
Va:跳变中心主脉冲电平(对应 C₀)
Vd:最大电平摆幅
什么时候用fom什么时候用dir,两者可以同时使用吗?
🧩 一句话理解:
|--------|--------------------------------------|-----------------------|
| 模式 | 核心特点 | 应用时机 |
| FOM 模式 | 用"评分值"来挑选最佳 Preset | 适合快速粗调、PHY 支持 FOM 接口时 |
| DIR 模式 | 用"调大/调小/停止"逐步微调系数 | 精调阶段;PHY 不支持 FOM 时必须用 |
| 可混合使用 | Phase 2 用 FOM 选起点 + Phase 4 用 DIR 微调 | 推荐最佳实践 |
🧠 详细比较:
|------|--------------------------------------|---------------------------|
| 特性 | FOM | DIR |
| 本质 | PHY 返回一个评分数值表示当前 Preset 的眼图质量 | PHY 返回 方向值:调大/调小/停止 |
| 精度 | 评分值粗略但快速 | 非常精细,可以逐步逼近最优 |
| 适用阶段 | 常用于 Phase 2 和 Phase 3 的 preset 筛选 | 常用于 Phase 2 和 Phase 3 的微调 |
| 启用条件 | PHY 必须支持 FOM 接口(phy_mac_fomfeedback) | 所有平台几乎都支持 |
| 是否可选 | 是,可完全跳过(preset vector = 0) | 否,必须支持,必须执行 |
| 优点 | 快速挑选最佳 preset,减少 DIR 起始点偏差 | 精准调节,确保最佳眼图 |
| 缺点 | 有些平台不支持;不如 DIR 精细 | 调节耗时较长(最多 24ms) |
打开和不打开 EQ Coefficient Request feature in Figure Of Merit的区别在哪里?TS1传输的参数有啥区别?
✅ 一、两种模式的本质区别
|--------------------------|------------------------------|-------------------------|---------------------|-----------|
| 模式 | TS1 中控制字段 | 发起者行为 | 对端响应 | 优势 |
| ✅ 打开 Coefficient Request | Use Preset = 0,附带 C-1/C0/C+1 | 主控通过 TS1 明确发送 具体的 EQ 系数 | 对端直接设置 TX EQ 系数为指定值 | 高精度、自定义调节 |
| ⛔ 关闭 Coefficient Request | Use Preset = 1,只发 preset 编号 | 主控通过 TS1 发送一个 preset 编号 | 对端查 preset 表, | |
实际芯片没有定义CX_EQ_MASTER_COEF_REQ_FOR_FOM_ENABLE,没有打开这个功能
Destructive 和Non-Destructive眼图测试的区别
✅ 一、核心区别总结:Destructive vs Non-Destructive
|--------------------|-----------------------------------------------------|---------------------------------------------|
| 特性 | 非破坏性 RX Margining<br>(Eye Monitor / Scope Slicer) | 破坏性 RX Margining<br>(Data Slicer + LBERT) |
| 数据通道是否受影响 | ❌ 不影响主数据路径 | ✅ 直接操作主 slicer,会干扰数据流 |
| 使用的采样器 | 旁路 Slicer(scope slicer / PMIX) | 主数据路径上的 Data Slicer |
| 是否适用于 live traffic | ✅ 是,数据仍可正常传输 | ❌ 否,只适合 loopback 或 PRBS pattern 情况 |
| 误码检测机制 | Scope slicer + internal error comparator | 通过 LBERT 比较实际接收数据与预定义 Pattern |
| 测试精度 | 适中,速率高时可能 offset 与主 slicer 有差异 | ✅ 高,真实反映主路径误码 |
| 是否可用于低 BER | 一般用于高 BER (~1e-5) | ✅ 可用于 extrapolate 到 1e-12,适合实际系统 margin 测试 |
| 是否需要 CDR reset | ❌ 不需要 | ✅ 可能需要,offset 太大时 CDR 会 unlock |
✅ 二、为何需要破坏性 RX Margining?
🔍 原因 1:模拟主数据路径真实误码率
-
破坏性 margining 使用的是 Data Path 的 Slicer,可以直接反映 "真实接收路径" 在不同 margin 条件下的误码情况。
-
所以它适合做高置信度 BER 评估,比如 extrapolation 到 1e-12。
🔍 原因 2:非破坏性 margining 的局限
-
Scope Slicer 通常存在 PMIX 时延、Phase 偏移,实际不能 100% 代表主 slicer。
-
对于误码很低(如 < 1e-9)的测试,Scope Slicer 精度受限,非破坏性 margining 很难测到 edge condition。
🔍 原因 3:用于评估 PHY 极限条件下的 margin
-
比如你希望验证 PHY 是否还能接收一个幅度只有 ±80mV、相位 offset ±0.25UI 的信号。
-
用真实数据 slicer 扫描这些条件,才是最终系统 margin 的关键保证。
怎么判断non-destructive还是destructive,不是根据是否使用了PRBS pattern
|------------------------------------------------|-------------------|-----------------------|
| 使用的采样器类型 | 是否 Destructive | 说明 |
| ✅ 独立的 Scope Slicer / Monitor Sampler(不影响主数据通路) | ❌ Non-destructive | Synopsys 非破坏性脚本使用的是这种 |
| ❌ 真实数据路径的 Data Slicer(改变其采样点) | ✅ Destructive | 会直接影响 LTSSM、CRC、链路可靠性 |
采用synopsys的pcie rp的ip,测试Non-destructive RX Eye和destructive RX Eye之前的进入loopback过程中会不会进行进行eq?
如果你准备进行 Eye 或 Margin 测试:
|-----------------------|-----------------------------------------|
| 场景 | 建议 |
| Loopback + PRBS | ❌ 不触发 EQ,需手动设 EQ 参数 |
| 想测试真实 EQ 后的 RX Margin | ✅ 在与真实设备建链后再跑 Non-destructive Eye |
| 想自动 EQ 后再做 Loopback | ❌ PCIe Spec 不支持"EQ 后切 Loopback"路径 |
| 自定义 EQ 参数 sweep | ✅ 可通过软件改 CTLE/DFE 寄存器做 EQ profile sweep |
Loopback + PRBS没有触发eq,这种模式下测量出来的眼图,不能反映接真实设备的眼图,那测试出来的眼图有什么作用呢?
评估 PHY 本身的接收容限(通道 margin 能力)
-
在 PRBS 模式下(尤其是高转移率的 PRBS7/PRBS15):
-
模拟最差的均衡压力条件(跳变多、ISI 大)
-
测试 RX 能接受的 最窄 eye width 和 最小 eye height
-
-
比如:你扫出的 eye 左右 margin = ±60 UI step、上下 margin = ±90 mV
-
意味着你这套 PHY 和板子有这么大的余量
-
可用于评估 design margin / 工艺裕度
-
2. 用于 EQ 参数调节的参考(Preset 调优的前置数据)
-
EQ 通常由 CTLE + DFE + Phase offset 构成
-
通过 Loopback + PRBS + Non-destructive eye:
-
可以测试不同 EQ 参数组合下的 eye shape
-
找出某组合下 Margin 最大 → 用作真实建链时的默认 Preset
-
-
实际用途举例:
-
比较 preset0, preset1, preset5, preset6 在不同 DFE/CTLE setting 下的效果
-
用于优化 EQ Preset recommendation table
-
3. 设计 bring-up 阶段的故障排查工具
在没有对端设备、或对端无法配合 EQ 调试的阶段:
|------------------|--------------------------------|
| 问题 | 用 Loopback RX Eye 如何排查 |
| 接收器 CDR 无法锁定? | 看 eye 是否基本对称、有眼高,排除 layout 问题 |
| EQ 调节无效? | 看不同 CTLE/DFE 下 eye 是否明显变化 |
| 跨 PVT 工况 eye 缩小? | Sweep 温度/电压,记录 eye width drift |
4. 用于量产阶段的 PHY QA 验收 / margin 数据收集
-
比如在每颗 SoC 出厂时扫一次 Loopback 眼图
-
记录 eye width/height 是否达标
-
可作为生产线的 PHY 合格标准
对于量产芯片。rx eq都采用自适应自动调节参数,是不是软件唯一可以调节的就是tx 的preset值
对,下面是推荐做法
RX EQ 全部使用自动模式(自动 DFE + 自动 CTLE + 自动 VGA);
软件预扫 Preset(可用于平台 calibration 阶段);
每种 PCB/连接器组合选择一个最优 Preset 值,固化到寄存器初始化代码;
如果使用 PCIe Gen4/5,保留 Equalization Phase(TS1/TS2)过程中允许对端调节;
所有系统误码监控(BER/AER)用于事后验证 EQ 是否成功。
rx eye可以用来校准tx的preset值吗?
🔧 实际校准方法:用 RX Eye 测最佳 Preset
|----|-----------------------------------------------|
| 步骤 | 内容 |
| 1 | 固定 RX EQ 设置(DFE/CTLE),或使用默认自动适应 |
| 2 | 在 TX 侧依次设置不同 Preset(如 PCIe Gen3 的 0~10) |
| 3 | 每种 Preset 下跑 Non-destructive RX Eye 测试 |
| 4 | 比较每组 Eye Diagram 的 Width/Height 或 误码分布 |
| 5 | 选择 margin 最大、Eye 最对称、误码最低的那个 Preset |
| 6 | 将该 Preset 固定为默认值,或设为 EQ training 的 fallback 值 |
PME#、WAKE#、PM_PME Message、Beacon是什么关系
-
PCI 时代(PME# 单线机制)
-
设备检测到唤醒条件,且
PME_En=1。 -
设备置位
PME_Status并 拉低 PME# 信号。 -
平台/OS 看到 PME# 被拉低 → 开始唤醒流程。
-
OS 必须逐个轮询 设备配置空间,找到
PME_Status=1的设备。 -
OS 清除
PME_Status,设备释放 PME# → 流程完成。
👉 特点:
-
唤醒与身份通过同一根 PME# 引脚,需要软件轮询确定发起者。
-
简单,但在复杂拓扑下效率差。
-
PCIe 时代(WAKE#/Beacon + PM_PME Message)
-
设备在 D3Cold 时检测到唤醒条件,拉低 WAKE# (或发送 Beacon)请求平台上电。
-
平台恢复电源,重新训练链路。
-
链路恢复后,设备向 Root Complex 发送 PM_PME Message,明确告知"是我发起唤醒"。
-
RC/OS 收到 PM_PME,不需要轮询,即可直接识别发起者。
-
OS 清理
PME_Status,流程完成。
👉 特点:
-
唤醒(WAKE#/Beacon)与身份(PM_PME Message)分离。
-
适合多层拓扑,避免软件轮询,提高效率。