最近在 RK3588 载板设计中我把 PCIe3.0 的一路 REFCLK 直接并联拉到两个 PCIe 设备上结果 Gen3 Link 怎么都训练不过去只能降级到 Gen1。后来把时钟链路改成同源时钟 buffer 方案才彻底解决多设备共用 100MHz 参考时钟的问题。这篇文章结合 RK3588 PCIE30 同源时钟的实际设计详细展开 buffer 电路图的绘制思路、关键器件参数、常见坑点以及 PCB 布局要求适合正在做 RK3588 底板或核心板扩展的硬件工程师参考。1. RK3588 PCIE30 同源时钟与 buffer 的前置概念1.1 为什么 PCIe3.0 需要 100MHz 参考时钟PCIe 并不是像传统并行总线那样靠数据线里夹带的时钟边沿来同步。PCIe 采用串行差分传输收发双方各自使用一个本地的 100MHz 参考时钟通过 PLL 倍频恢复出高速时钟。所以参考时钟的质量直接决定了 PCIe 链路能不能稳定跑在 Gen1、Gen2 还是 Gen3。PCIe 参考时钟的基本要求频率100MHz。频率精度必须满足 ±300ppm具体取决于工作模式。抖动随着速率提升Jitter 预算越来越严格。波形通常是 HCSL 或 LP-HCSL 差分信号。对于 RK3588当我们要把 PCIe3.0 接口引到 M.2 SSD、PCIe 网卡、SATA 扩展卡时不能只关注高速数据差分线更要关注 REFCLK 有没有被正确送达到每一个端点。很多“Link Training 失败”的案例最后查下来都是 REFCLK 没送到、幅度不够或者抖动量超了。1.2 同源时钟Common Clock模式是什么PCIe 的时钟架构可以分成三类时钟架构英文缩写说明共同时钟Common Clock所有设备共享同一个 100MHz 时钟源最常见独立非展频时钟SRNSRC 和 EP 各自独立时钟不使用展频独立展频同步时钟SRISRC 和 EP 各自独立时钟但带 SSC 同步功能“同源时钟”对应的就是 Common Clock 模式。它的核心思想是Root Complex 和所有 Endpoint 的 REFCLK 都来自同一个时钟树源头。这样两端 PLL 的参考相位关系相对固定时序预算更好做是 RK3588 方案里最常用的模式。但如果一个时钟源同时驱动太多负载就存在几个问题驱动能力不足信号幅度下降。fanout 后走线分叉点反射变大波形质量恶化。各路负载之间相互耦合抖动累积。单点故障会导致整个时钟域瘫痪。这时候就需要时钟 buffer 来复制、整形、增强 REFCLK 信号。1.3 同源时钟 buffer 在电路中的角色同源时钟 buffer 本质上是一个低抖动差分时钟扇出芯片。它接收一路 100MHz 差分时钟输出多路同频同相的 100MHz 差分时钟分别送给 RK3588 的 PCIe 控制器和各个外部 PCIe 设备。buffer 在电路中的价值可以总结为三点增强驱动能力把 1 路输入变成 2 路、4 路甚至 8 路输出。隔离不同负载避免一路设备的反射影响到另一路设备。保持同源关系所有输出都来自同一个输入源符合 Common Clock 设计要求。因此在 RK3588 载板上如果打算接多个 PCIe3.0 设备同源时钟 buffer 不是可选项而是必要设计。2. 设计前必须搞清楚的几个关键点2.1 RK3588 REFCLK 的输入输出关系在 RK3588 官方 EVB 和多数第三方核心板设计中PCIe 控制器工作在同源时钟模式SoC 会直接输出 REFCLK。原理图网络名常见为PCIE30_REFCLKPPCIE30_REFCLKN需要注意的是这些 REFCLK 引脚能否直接作为输出取决于 SoC 的时钟控制器配置以及采用的时钟拓扑。设计载板时一定要先确认核心板厂商是否把 REFCLK 引出以及引出的网络名和电平标准。一部分 RK3588 方案会采用独立外部时钟发生器而不是从 SoC 输出 REFCLK。这种情况下时钟源来自板载可编程时钟芯片同源 buffer 只是对时钟发生器输出做 fanout。两种方式都需要保证“源端 → buffer → 多个端点”整体是同源的。2.2 HCSL 与 LP-HCSL 电平标准PCIe REFCLK 最常见的电平标准是 HCSLHigh-Speed Current Steering Logic它靠电流源驱动外部 50Ω 到地电阻产生电压摆幅。典型摆幅在 0.6V 到 1.2V 左右。HCSL 最典型的特征是每个输出引脚需要接一个 50Ω 到 GND 的终端电阻用于把电流转换为电压。如果没有接这个电阻输出幅度可能非常小PCIe 设备无法识别时钟。LP-HCSL 是低功耗版本许多现代时钟 buffer 芯片内部已经集成了终端处理外部不再需要 50Ω 电阻。在画同源时钟 buffer 电路图之前首先要查清楚你选的 buffer 输出是标准 HCSL 还是 LP-HCSL这决定了外部终端电阻要不要画。2.3 时钟 buffer 芯片选型RK3588 PCIE30 同源时钟 buffer 选型时我会优先关注以下几点:输出电压类型推荐 LP-HCSL 或 HCSL和 PCIe REFCLK 匹配。输出路数根据 PCIe 设备数量选择 1:2、1:4 或者 1:8。输入类型支持差分输入并且输入可以和 SoC REFCLK 直接AC耦合。抖动指标在 100MHz 参考时钟范围内附加抖动尽量低建议选择 PCIe Gen3 或 Gen4 级别 buffer。SSC 支持必须能透传展频时钟否则开启 Spread Spectrum 后链路会不稳定。供电电压常见为 3.3V要确认输出电压摆幅兼容后级。常见型号有 TI LMK00301、Renesas 9DBL0241、Diodes PI6CB33200 等。选型时不要只看“能不能出 100MHz”一定要看手册里是否明确支持 PCIe 应用以及 Jitter 指标是否满足 Gen3 要求。2.4 SSC 展频时钟要不要考虑很多 RK3588 方案默认支持 PCIe SSC也就是把 100MHz 时钟以 -0.5% 的扩频方式调制降低系统 EMI。同源时钟 buffer 必须要能承载这种调制信号。如果 buffer 内部带了很窄的 PLL 滤波环SSC 的调制信号会被滤掉端点收到的时钟不再带展频可能与 Root Complex 的展频状态不一致从而导致链路不稳定。所以选型时最好选择“SSC-compatible”或“SSC pass-through”的 buffer并且不要对 REFCLK 做额外的窄带滤波。3. 同源时钟 buffer 电路图设计3.1 完整信号链路先看一个最常见的 RK3588 PCIE30 同源时钟 buffer 应用场景输入RK3588 PCIE30_REFCLKP/N。Buffer1:4 差分时钟 buffer。输出1M.2 NVMe SSD 插槽。输出2PCIe 转 SATA 扩展卡插槽。输出3备用 PCIe 设备。输出4空载或调试。信号链路可以概括为RK3588 PCIE30_REFCLKP/N │ ▼ AC耦合电容 100nF × 2 │ ▼ Clock Buffer U1 INP / INN │ ├── OUT0P/N ──► 串阻 0Ω/22Ω ──► AC耦合 ──► M.2 Slot REFCLK ├── OUT1P/N ──► 串阻 0Ω/22Ω ──► AC耦合 ──► PCIe SATA Card ├── OUT2P/N ──► 串阻 0Ω/22Ω ──► AC耦合 ──► 备用端点 └── OUT3P/N ──► 预留调试原理图网络清单可以整理成如下风格网络名称源端目的端说明PCIE30_REFCLKPRK3588 PinC1 → U1.INP正极输入PCIE30_REFCLKNRK3588 PinC2 → U1.INN负极输入VCC_3V3_CLK电源FB1 → U1.VCC时钟电源域PCIE_CLK_OUT0PU1.OUTP串阻 → AC耦合 → SlotM.2 时钟PCIE_CLK_OUT0NU1.OUTN串阻 → AC耦合 → SlotM.2 时钟这种网络清单在做设计评审时非常有用可以快速发现漏接、错接。3.2 输入侧电路设计RK3588 REFCLK 输入到 buffer 之前一般需要加 AC 耦合电容。AC 耦合电容的作用是隔离源端和 buffer 输入的直流偏置避免共模电压不一致。典型参数电容100nF0.1uF贴片 0402 或 0603。差分对两根线上各放一颗必须对称。电容靠近 buffer 输入端放置。input 侧是否需要在 buffer 输入端加终端电阻要看 buffer 手册。有的 buffer 内部已经内置了输入端接和偏置电路外部只需要 AC 耦合。如果需要外部终端通常是 100Ω 跨接在 INP/INN 之间或者按芯片手册要求接特定结构。示例连接RK3588 PCIE30_REFCLKP ── C1 100nF ── U1.INP RK3588 PCIE30_REFCLKN ── C2 100nF ── U1.INN多余未使用的 REFCLK 输入引脚不要悬空建议按照手册要求接地或接电源。3.3 buffer 输出侧电路设计输出侧是同源时钟 buffer 电路图最容易出问题的地方。这里需要同时考虑终端电阻、串阻和 AC 耦合电容。如果 buffer 输出是标准 HCSL每个输出引脚必须接 50Ω 到 GND 终端电阻。REFCLK_P 和 REFCLK_N 各自接一颗 50Ω 电阻到地。串阻 R22Ω 放在 buffer 输出与 AC 耦合电容之间用于抑制反射。如果 buffer 输出是 LP-HCSL通常不需要外部 50Ω 终端。仍然建议预留串阻位置比如 0Ω 或 22Ω。AC 耦合电容一般要保留。具体电路示意U1.OUT0P ── R0P 22Ω ── C0P 100nF ── Slot.CLKP U1.OUT0N ── R0N 22Ω ── C0N 100nF ── Slot.CLKNHCSL 输出时U1.OUT0P 还需要一个 50Ω 到 GND。这个电阻可以放在 buffer 输出脚附近不要离太远。注意有些 buffer 输出内部已经是电流源结构外部终端必须按手册连接。如果你画了 LP-HCSL buffer却额外加了一堆 50Ω 电阻反而会把输出负载拉垮。设计前务必去数据手册“Applications Information”章节确认。3.4 电源与去耦电路时钟 buffer 的电源设计直接决定抖动指标。PCIe Gen3 对 REFCLK 抖动非常敏感电源纹波会通过 buffer 内部放大后叠加到输出时钟上导致 Link Training 失败。推荐做法单独分配给 buffer 一个 3.3V 电源域。使用磁珠隔离避免数字电路开关噪声耦合进来。磁珠典型值100Ω 100MHz。磁珠后放置 100nF、1uF 去耦电容靠近 buffer 电源引脚。如果 buffer 有多个 VCC 引脚每个引脚都要放一颗 100nF。芯片附近放一个 10uF 钽电容或陶瓷电容用作中频储能。典型电源电路3V3_SYS ── FB1 磁珠 ── 3V3_CLK │ ├── C10uF ── GND ├── C2 1uF ── GND ├── C3 100nF ── GND └── U1.VCC注意磁珠不等于纯电阻它有频率特性不能用于大电流场景。时钟 buffer 电流一般只有几十毫安磁珠方案足够。3.5 使能与调试电路同源时钟 buffer 通常有 OE 引脚或 PDB 引脚用于使能输出。这个引脚不要直接悬空。推荐做法用 10kΩ 上拉到 3V3_CLK让 buffer 默认输出使能。预留一个 0Ω 电阻到 GPIO方便后面用软件控制时钟输出开关。如果 buffer 有输出选择引脚通过电阻配置模式不要随意接反。调试阶段还可以在每个输出支路上预留 0Ω 电阻。万一某一路 PCIe 设备时钟时序有问题可以先把这路断开隔离故障。4. 从原理图到 PCB 的关键设计4.1 差分阻抗与线宽RK3588 PCIE30 的 REFCLK 是 100MHz 差分时钟但它的高速边沿仍然需要按高频信号处理。差分阻抗建议控制在 100Ω ±10%。叠层计算得到的线宽和线距需要以板厂实际叠层为准。一般推荐差分对线宽 4mil 到 6mil。线距 5mil 到 8mil。差分对之间间距保持 3W 以上。避免跨越平面分割。时钟线尽量走内层外层走线容易被电磁干扰影响。4.2 等长与时序预算同源时钟 buffer 多路输出要尽量等长。这里分为两个层次输入到 buffer 之前的 REFCLK 走线尽量短。buffer 输出的多路 REFCLK走线长度尽量保持接近避免各路 skew 过大。PCIe REFCLK 本身的等长要求没有高速数据线那么苛刻但偏差不要超过数十 mil。在 Allegro 或 Altium Designer 中可以直接建立 Match Group 来做等长约束。经验做法输入线走 500mil 以内。输出线根据扇出位置做等长。差分对内 P/N 误差控制在 5mil 以内。4.3 buffer 的位置与散热时钟 buffer 的布局位置有两个极端都不能走太靠近 RK3588可能导致电源通流和散热拥挤也容易耦合 SoC 开关噪声。太靠近 PCIe 设备输入线过长输入阻抗不连续。推荐位置是放在 RK3588 REFCLK 引脚和 PCIe 插槽之间的中间位置偏向 RK3588 一侧 1/3 处。如果板子空间紧张优先保证输入线短因为输入信号质量是全局的基础。对于 1:4 buffer芯片封装通常会发热但不会特别严重。布局时仍然要留出散热过孔不要放在大面积铺铜的死角。4.4 时钟线与高速线的隔离PCIe3.0 数据线速率高达 8GT/s而同源时钟 buffer 输出的 REFCLK 是 100MHz。虽然频率相差很大但 REFCLK 属于高阻抗时钟信号非常容易被周围高速数据线串扰。隔离建议REFCLK 差分对与 PCIe TX/RX 差分对间距至少 3W。如果空间允许间距做到 5W 以上。不要与电源开关节点、电感、晶振靠近。不要与 I2C、GPIO 等小信号并行走长线。如果必须在同一层交叉尽量垂直交叉避免长距离平行。5. 常见问题与排查思路问题现象常见原因解决思路PCIe Link 停在 Detect 状态REFCLK 没送到端点或幅度太低用示波器测量 Slot REFCLK 引脚确认 100MHz 信号是否存在设备只能识别 Gen1REFCLK 抖动过大或 SSC 不匹配检查 buffer 电源纹波、终端电阻、输出串阻两个 PCIe 插槽只有一个识别其中一路 REFCLK fanout 走线过长或阻抗异常检查输出端等长和终端负载M.2 设备间歇性掉卡时钟 buffer 电源去耦不足加强去耦缩小电源回路buffer 输出波形幅度偏低HCSL 输出缺少 50Ω 对地终端按手册补终端电阻buffer 芯片发烫电源短路或输出模式配置错误确认供电电压、输出终端配置关闭 SSC 后正常开启后失败buffer 不具备 SSC 透传能力更换支持 SSC 的 buffer 型号主从插槽时钟串扰输出差分对间距不足拉开输出线间距做包地处理排查时建议从链路末端往前查先测端点接收到的 REFCLK 波形。再测 buffer 输出引脚波形。再测 buffer 输入引脚波形。对比各点频率、摆幅、抖动。确认 buffer 的 OE 是否正常拉高。很多问题其实不是原理图逻辑错误而是布局布线导致信号质量退化。示波器最好使用 500MHz 以上带宽配合差分探头测量 REFCLK不要用普通单端探头直接勾。6. 工程最佳实践6.1 原理图自查清单每次画完 RK3588 PCIE30 同源时钟 buffer 电路图我都会按下面清单过一遍[ ] 输入侧 AC 耦合电容是否配对两颗电容是否对称[ ] 输入侧是否正确处理了直流偏置[ ] buffer 输出终端电阻是否与 HCSL/LP-HCSL 类型匹配[ ] 输出串阻是否预留调试 0Ω 是否好拆[ ] 每个 VCC 引脚是否有 100nF 去耦电容[ ] 磁珠隔离电源后10uF 储能电容是否放在 buffer 附近[ ] OE 上拉/下拉是否正确是否接 GPIO 预留[ ] 空闲输出通道是否做了终端处理或悬空处理[ ] SSC 展频透传是否满足[ ] 差分网络命名是否统一方便 layout 和测试6.2 时钟信号测试要点硬件调试阶段不要只拿示波器看“有没有波”。还需要关注频率是否为 100MHz。差分摆幅是否在芯片手册允许范围内。上升沿/下降沿是否单调。相邻周期 jitter 是否超标。各路输出之间是否存在明显相位差。如果条件允许用频谱仪看 100MHz 附近的杂散和相位噪声。同一块板子时钟 buffer 对 PCIe Gen3 的影响可能要到长时间大流量压力测试后才能暴露。6.3 多负载场景下的长期稳定性如果 RK3588 方案长期挂 M.2 SSD 和 PCIe 扩展卡建议做以下测试高低温循环测试关注 REFCLK 幅度随温度变化。电源纹波实测确认 buffer 电源在负载突变时没有跌落。长时间读写 SSD观察是否有 Link Down。用 PCIe 协议分析仪抓 Link Training 过程确认 Training Sequence 没有反复重训。同源时钟 buffer 看似只是一个“复制时钟”的小芯片只要设计中任意一处终端电阻或去耦没处理好整条 PCIe 链路都会变得极其脆弱。尤其 RK3588 这种带有多个 PCIe 控制器的平台REFCLK 质量直接决定了外设扩展上限。对于准备自己画 RK3588 底板的朋友建议先从单路 PCIe3.0 设备开始验证等 REFCLK 链路稳定之后再扩展到双路或多路。多路并发的时钟风扇设计不是靠“把线多拉几根出去”就能解决的。