
这次我们来看 RK3588 硬件电路设计里经常被忽略、但直接影响 PCIe 3.0 链路能否稳定工作的一个模块同源时钟 buffer 芯片。很多 RK3588 板卡的问题不是核心 CPU 跑不起来而是 PCIe 链路反复训练失败或者明明支持 Gen3设备却一直工作在 Gen1这时候往回查往往会发现根因在 REFCLK 这条“看似简单”的时钟路径上。在 RK3588 这类高性能 SoC 上PCIe 3.0 参考时钟的分配并不是简单地把一个 100MHz 振荡器分两路而是要用专门的时钟 buffer 芯片做扇出把同源的 100MHz 差分时钟分别送到 Root Complex 和各个 Endpoint。这样做的好处是时钟同源链路训练和 SSC 扩频跟踪都会更容易收敛。下面我把同源时钟架构的原理、buffer 芯片选型、原理图设计、PCB Layout、链路调试和问题排查完整过一遍。如果你正在做 RK3588 的板卡硬件设计或者准备用 RK3588 做 PCIe 扩展设备的主控板这篇文章可以直接作为设计检查清单用。内容不涉及具体芯片型号的硬性绑定而是给你一套通用的分析方法拿到任何一款时钟 buffer 芯片都知道要确认哪些参数、在原理图上放在哪里、Layout 上怎么走、上电之后怎么验证。1. 核心能力速览RK3588 PCIe 3.0 同源时钟设计要点先给一张速查表把 RK3588 PCIe 3.0 同源时钟 buffer 设计的核心框架列出来后面各个章节再逐个展开。设计项说明接口速率PCIe 3.0单 Lane 速率 8 GT/s具体 Lane 数和控制器组以 RK3588 芯片手册为准参考时钟频率100 MHz 差分时钟推荐时钟架构同源时钟Common ClockRC 和 EP 参考时钟来自同一时钟源时钟 buffer 作用1 路输入、多路输出完成时钟扇出和电平分配关键性能指标附加抖动、输出-输出 skew、SSC 扩频透传能力、差分摆幅典型输出电平HCSL 或兼容 HCSL多数 PCIe REFCLK buffer 也支持 LVDS/LVPECL 电平配置原理图关注点AC 耦合电容、源端串阻、去耦电容、时钟 buffer 使能脚Layout 关注点100Ω 差分阻抗、等长、包地、与高速数据线隔离调试手段示波器看波形、Linux lspci 看链路状态、PCIe 协议分析仪抓训练序列这张表基本覆盖了 RK3588 PCIe 3.0 同源时钟设计的整个框架从接口速率、参考时钟频率到 buffer 芯片的作用、关键指标、原理图关注点、Layout 关注点和调试手段。实际上RK3588 的 PCIe 硬件电路设计并不复杂复杂的是时序和信号质量的边界条件。时钟源、buffer 芯片、RK3588 REFCLK 引脚、下游端点 REFCLK 引脚这四个节点之间的电气连接任何一个环节的阻抗不匹配、电平不兼容、抖动超标或者供电不干净都可能表现为链路训练失败。所以后面每一节都会对应这张表里的一行展开。2. 为什么 PCIe 3.0 需要同源时钟 buffer2.1 PCIe 参考时钟的几种架构PCIe 规范里参考时钟的使用方式并不只有一种。最常见的三种架构分别是 Common Clock、SRIS 和 SRNS。Common Clock 就是我们常说的同源时钟或公共时钟Root Complex 和 Endpoint 的 REFCLK 来自同一个时钟源经过 buffer 芯片分配到各个设备。SRIS 是每个设备使用独立的参考时钟各自带独立的扩频时钟。SRNS 则是设备使用独立参考时钟但不做扩频。RK3588 作为 Root Complex在很多实际板卡方案里都对应 Common Clock 架构。同源时钟的好处在于所有 PCIe 设备的 PHY 可以基于同一个时钟基准进行相位跟踪SSC 扩频的方向和比例一致链路无需在接收端做复杂的扩频补偿训练序列更容易收敛。在硬件设计上同源时钟架构需要额外增加一颗时钟 buffer 芯片但换来的是链路稳定性和调试成本的下降。2.2 为什么不能直接用振荡器分叉有人会问RK3588 的 PCIe 参考时钟能不能直接用一个 100MHz 振荡器然后并联分成两路从原理图上画起来确实简单但实际工程中不推荐。第一个原因是普通振荡器输出驱动能力有限一拖多之后信号边沿会退化负载反射在分叉点叠加抖动指标迅速恶化第二个原因是多个负载之间的串联阻抗不可能完全一致链路两端的时钟信号会出现明显的相位差第三个原因是 PCIe Gen3 对参考时钟的相位抖动和周期抖动有明确要求靠 PCB 走线分叉很难满足。所以正规做法是插入一颗时钟 buffer 芯片。buffer 芯片内部有驱动电路可以把输入时钟整形、放大后输出多路低抖动差分时钟。它解决的不是“有没有时钟”的问题而是“时钟质量是否满足 8GT/s 链路要求”的问题。2.3 时钟 buffer 本质上解决什么问题时钟 buffer 芯片本质上是一个 1 输入多输出的时钟分配器。它把 100MHz 输入时钟整形、驱动放大后输出多路低抖动差分时钟提供 1:2、1:4、1:8 等扇出方案。对于 RK3588 的 PCIe 3.0 设计时钟 buffer 解决了三个问题驱动能力方面一个时钟源可以稳定驱动多路 PCIe 设备电平匹配方面输出差分电平与 PCIe PHY 的要求匹配抖动控制方面通过内部电路处理时钟在扇出过程中的附加抖动。从设计角度说时钟 buffer 是 RK3588 PCIe 同源时钟架构的“枢纽”。选择哪颗 buffer、放在原理图什么位置、输出怎么端接、Layout 怎么走线直接决定了 PCIe 链路上限。这也是为什么本篇要单独把“同源时钟 buffer 芯片解读”作为一个独立话题来讲。3. 时钟 buffer 芯片选型要点3.1 输入输出电平PCIe REFCLK 常用的是 HCSL 电平具备低电压摆幅和快速边沿适合 100MHz 差分时钟传输。很多时钟 buffer 芯片的输出直接兼容 HCSL也有芯片支持通过引脚配置切换 LVDS、LVPECL、HCSL。在实际选型时要看 RK3588 的 PCIe REFCLK 输入要求以及下游端点 PHY 的 REFCLK 电平要求尽量选择输出模式兼容性好的芯片方便做兼容设计。需要特别注意的是不同电平标准的共模电压和摆幅不一致。HCSL 差分摆幅通常在 0.8V 左右LVDS 摆幅约 350mVLVPECL 摆幅更大。如果 buffer 输出电平和接收端 PHY 的输入电平不匹配即使频率和相位对接收端也可能无法正确解析时钟。遇到这种情况优先检查 AC 耦合电容的放置和接收端的偏置要求。3.2 附加抖动附加抖动是时钟 buffer 选型时最重要的指标之一它表示时钟通过 buffer 之后新增的抖动。PCIe Gen3 对 REFCLK 的相位抖动和周期抖动都有要求如果 buffer 芯片的附加抖动过大即使源端时钟很好也会导致链路眼图劣化最终表现为 Gen3 协商不成功。芯片手册上通常给的是附加抖动的典型值但实际项目中还要看工作在哪个电压、温度、负载条件下。同一个型号在不同供电电压、不同输出负载下附加抖动会略有差异。设计时建议预留 30% 到 50% 的余量不要卡着 PCIe 规范的上限选型。如果条件允许可以让 buffer 厂商提供应用笔记或推荐电路直接参照参考设计做。3.3 扇出数量根据 RK3588 板卡的 PCIe 设备数量选择扇出。例如一个 PCIe 3.0 x4 插槽加一个 x1 插槽再加上 RK3588 自身的 PCIe PHY REFCLK可能就需要 1:3 或 1:4。多路输出多的芯片封装大、功耗也大选型时不要盲目追求扇出数。另外扇出数不等于实际可用数。有些 buffer 芯片会把其中一路输出作为内部反馈或用于扩频跟踪实际可用的扇出数会比标称少。画原理图之前建议对照 datasheet 里的功能框图确认每个输出的用途避免 Layout 阶段才发现输出不够用。3.4 SSC 扩频支持PCIe 允许 REFCLK 带扩频常见的是 -0.3% 到 -0.5% 的 down-spread。设计上通常希望 clock buffer 能透传输入时钟的 SSC 特性不做额外处理。如果 buffer 内部有 PLL 并改变了扩频特性可能导致 SSC 不一致链路易出现周期性的信号劣化。需要关注的细节是SSC 透传能力并不只由 buffer 芯片决定还和输入时钟源的调制频率、调制比例有关。如果输入时钟本身没有扩频buffer 输出也不会自动带扩频如果输入时钟带扩频buffer 必须足够带宽才能完整透传。选型时看 datasheet 里是否有 SSC 透传或 SSC 支持的描述如果没有明确提到建议先用示波器实测验证。3.5 供电电压与功耗时钟 buffer 常见供电有 3.3V、2.5V、1.8V。RK3588 板卡上一般有 3.3V 的电源域选型时优先选择与系统电源轨匹配的芯片避免为单独一路电源增加成本。低功耗设计时也要看静态电流和输出驱动电流多个空载输出要评估是否可关闭。时钟 buffer 的电源质量直接影响输出抖动这一点比平均功耗更值得关注。如果 buffer 电源纹波偏大输出时钟的抖动会同步变大。建议在 buffer 电源入口做好去耦并避免把时钟 buffer 的电源直接接到大电流开关器件同一条走线末端必要时用磁珠或 π 型滤波隔离。4. RK3588 PCIe 同源时钟原理图设计4.1 时钟树拓扑原理图设计的第一步是确定时钟树拓扑。所谓时钟树就是从 100MHz 时钟源到 RK3588 各 PCIe 控制器 REFCLK 输入、再到下游端点 REFCLK 输入的完整分配路径。同源时钟架构下典型结构如下方代码块示意100MHz 时钟源 | Clock Buffer 1:4 | | | RC EP1 EP2这个拓扑里RC 表示 RK3588 的 PCIe PHY REFCLK 输入EP1、EP2 表示下游端点设备的 REFCLK 输入。时钟 buffer 的输入接 100MHz 时钟源输出分别接这些 REFCLK 引脚。具体拓扑要结合 RK3588 芯片手册确认PCIe 控制器有几组、每组对应哪个 REFCLK 引脚、是否支持内部时钟输出。不同封装和不同板卡参考设计会存在差异这里不给死接法按实际原理图走。4.2 100MHz 时钟源选择100MHz 参考时钟源可以是无源晶体加振荡器电路也可以直接使用有源振荡器XO。对 PCIe 3.0 而言推荐使用性能更好的有源振荡器或 TCXO尤其是当板卡环境温度波动大时晶振的频率稳定度和相位噪声会影响 PCIe 链路质量。时钟源输出接到 buffer 芯片输入时要注意输入电平的匹配。有的 buffer 输入支持单端时钟有的要求差分输入。如果输入是单端另一个输入脚需要通过合适的上拉或下拉处理具体以 datasheet 为准。从 RK3588 硬件电路设计的实际项目来看时钟源位置尽量靠近时钟 buffer中间不要经过太长的过孔穿越。如果时钟源输出信号边沿较差可以在输入端预留串阻或端接网络作为调试余量。原理图上保留一个 0Ω 电阻用于断开时钟输入是排查时钟源问题时很方便的做法。4.3 AC 耦合电容和串阻PCIe REFCLK 差分对通常是 AC 耦合的。在 SerDes 应用中输入输出端都有共模电压要求AC 耦合电容用于隔离直流偏置避免电平不匹配。常见选择是 0.1uF 或 0.01uF 的 0402/0603 电容放在靠近接收端的位置。至于源端串阻HCSL 输出的源端阻抗较低通常会在输出脚串联 22Ω 或 33Ω 电阻具体取值要根据芯片输出阻抗和走线阻抗来定。很多 RK3588 参考设计的原理图上PCIe REFCLK 时钟的差分对里会放一个 0.1uF 电容和一个串阻。这里不要照抄而是理解用途电容做 AC 耦合电阻做源端匹配和边沿限流。如果 buffer 输出到 RK3588 REFCLK 引脚的距离很短串阻可以省略如果走线较长或经过连接器串阻能有效抑制反射。设计时先按参考设计放上调试阶段再根据波形决定是否调整。4.4 电源去耦时钟 buffer 的供电去耦直接影响输出抖动。电源引脚附近放 0.1uF 高频去耦电容在芯片供电入口再放 1uF 到 10uF 的体电容形成一个完整的去耦网络。如果板卡电源纹波较大还需要注意时钟 buffer 的电源是否与其他大电流开关器件共用必要时加一个磁珠或 π 型滤波隔离。RK3588 板卡上通常有多路电源域PCIe 时钟 buffer 建议使用独立的 LDO 供电或者从干净的 3.3V 模拟电源域取电。不要把时钟 buffer 的电源直接接到 FPGA 内核电源或大电流 LED 驱动电源上否则时钟抖动会随着负载波动明显变化。电源去耦电容的摆放位置优先级是“靠近电源脚 靠近输出脚 靠近输入脚”这一点很多原理图评审时最容易忽略。4.5 使能脚和控制引脚时钟 buffer 通常有输出使能脚用来控制输出是否有效。对于 PCIe 设备如果某些端点未插卡关闭相应输出可以减少 EMI 和功耗。原理图设计时把这些控制引脚接到 RK3588 的 GPIO 或上拉到固定电平并且预留 0Ω 电阻或跳线作为调试入口方便后续调整。如果时钟 buffer 支持输出上拉、下拉或同步使能设计时要注意使能时序。PCIe 规范里参考时钟要先稳定之后 PERST# 才能释放。如果 buffer 使能脚和 PCIe 复位信号同时动作可能导致链路训练时时钟还没稳定。建议在软件时序里先打开时钟 buffer 输出延时几毫秒后再释放 PCIe 复位。5. PCB LayoutRK3588 PCIe 参考时钟走线设计5.1 差分阻抗PCIe REFCLK 走线按 100Ω 差分阻抗控制这几乎是对所有 PCIe 高速信号线的统一要求。时钟 buffer 输出的 REFCLK 差分对也要按 100Ω 差分阻抗设计而不是按普通单端时钟的 50Ω 单端阻抗来处理。阻抗控制的关键在于 PCB 叠层参考平面是否完整、介质厚度、线宽、线距。如果叠层设计有问题即使时钟 buffer 选得再好REFCLK 走线的阻抗跳变会导致反射增加抖动链路训练就会不稳定。实际设计中很多原理图能跑通但 Layout 出问题就是因为 REFCLK 差分对被当成普通时钟线处理只做了单端 50Ω或者差分阻抗控制不正确。在 Allegro 这类工具里设置差分规则时要把 REFCLK 网络单独建一个约束类线宽、线距、阻抗目标值单独设定避免被通用规则覆盖。5.2 等长与走线长度同一对 REFCLK 差分线内部要尽量等长P/N 之间的长度差尽量控制在 5mil 以内一般设计软件里可以直接做蛇形等长。不同差分对之间不要求绝对等长但建议把 REFCLK 走线长度控制在不需要额外补偿的短程范围内走线越短插入损耗和串扰越小。另外时钟 buffer 到 RK3588 REFCLK 引脚的距离、buffer 到端点 REFCLK 引脚的距离要和对应数据线的距离综合评估。不要为了一个方向的等长让时钟走线绕一大圈反而增加噪声耦合。PCIe 数据线通常需要等长但 REFCLK 作为参考信号更重要的是保证整个时钟路径短而直接。5.3 包地与间距REFCLK 差分线两侧建议包地与其他高速差分线之间保持至少 3 倍线宽的间距有条件可以做到 4 到 5 倍间距。时钟线是参考信号容易被数据线串扰污染把 REFCLK 当“敏感信号”对待不要和 PCIe TX/RX 数据线平行长距离走线。时钟输出路径上如果经过连接器连接器处的 REFCLK 引脚周围也要留出足够的空间避免与电源脚或地脚短距离耦合。包地不是把地线画满就行而是要让包地线在两端有连续的地过孔连接到底层地平面否则包地线本身会成为悬浮天线反而增加辐射。在 Layout 后期检查 REFCLK 差分对两边的地过孔是否在走线拐角和末端均匀分布这是信号完整性审查时经常查的细节。5.4 参考平面完整性REFCLK 走线下方必须有完整的参考平面避免跨分割。如果 REFCLK 跨过电源/地平面的缝隙回路面积增大辐射和抖动都会变差。在布局阶段就要规划好时钟 buffer、RK3588、PCIe 插槽尽量放在同一侧减少 REFCLK 走线穿越不同平面区域的次数。跨分割问题在多层 PCB 上尤其明显。假设 REFCLK 走线在表层第二层是地平面但走线经过一个电源分割槽回流电流需要绕行信号回路面积瞬间变大。解决方法是检查 REFCLK 走过的每一段下方都有连续参考平面必要时换层并增加回流地过孔换层处要保证回路连续。6. RK3588 PCIe 链路调试与验证6.1 查看参考时钟波形用示波器测时钟 buffer 输入和输出的 100MHz 波形重点看频率是否稳定在 100MHz、差分摆幅是否符合要求、上升沿是否圆滑、有没有明显抖动。如果使用带 SSC 的时钟源用示波器的余辉模式可以观察到扩频的效果。测量时注意示波器带宽和探头负载普通 500MHz 示波器在 PCIe REFCLK 测试上问题不大但如果要精确测量附加抖动最好用带时钟恢复功能的示波器或专用时钟抖动分析工具。测量点建议放在 buffer 输出末端也就是 RK3588 REFCLK 引脚前的测试点。这里看到的是链路实际接收到的时钟质量比直接测 buffer 输出脚更有参考意义。示波器探头尽量短接地避免地环路引入额外噪声导致误判抖动超标。6.2 启动后观察链路状态PCB 回板、焊接、上电之后PCIe 链路是否训练成功第一个直接的反馈来自操作系统。RK3588 跑 Linux 后在终端里用 PCIe 用户空间工具就能快速确认设备有没有被枚举、当前跑在什么速率、什么宽度。下面这三个命令是最常用的检查手段分别对应设备列表、链路详细状态和内核日志建议按顺序执行。# 列出 PCIe 设备 lspci # 查看指定设备的链路状态 lspci -vvv -s 01:00.0 # 查看内核日志中的 PCIe 信息 dmesg | grep -i pcilspci -vvv输出中LnkSta 字段显示当前链路速率和宽度例如LnkSta: Speed 8GT/s, Width x4如果看到Speed 2.5GT/s或Width x1说明链路训练只到了 Gen1 或 x1需要回过去检查 REFCLK、复位时序、电源、以及数据线的链路裕量。如果设备根本没有出现在lspci列表里优先查 PCIe 复位信号和 REFCLK 是否到达端点再查电源和时钟 buffer 输出。6.3 压力测试设备枚举成功不代表链路可靠。建议在 Linux 下做高速读写压力测试例如对 NVMe 做 fio 随机读写或者用 iperf 测试 PCIe 网卡吞吐长时间运行后看是否有错误计数、丢数据、链路降速。如果长时间压力测试后链路稳定速率和宽度保持 Gen3/x4说明同源时钟设计基本过关。如果出现偶发掉链路优先检查时钟 buffer 供电、SSC 配置和参考平面完整性。压力测试时还要注意温度变化。PCIe 链路在冷启动时稳定运行一段时间温度上升后不稳定常见原因是时钟 buffer 的温漂或供电电压随温度下降。这种情况下可以监测 buffer 芯片表面温度和 REFCLK 波形对比冷热态差异判断是时钟源还是电源问题。6.4 PCIe 协议分析仪在信号完整性要求较高的项目中可以用 PCIe 协议分析仪抓链路训练序列看在 TS1/TS2 训练序列中是否出现链路协商失败、detect 状态反复、或接收端无法锁定。这是判断时钟问题最有说服力的手段但成本较高通常用于量产前的信号完整性验证。协议分析仪能看到的现象往往能帮助定位如果分析仪显示链路在 Detect 状态反复跳变说明电气握手没成功可能 REFCLK 没到位或电平不匹配如果链路能进入 Configuration 但最终回退到 Gen1说明训练序列可以传输但速度协商失败大概率是高速信号质量或时钟抖动问题。7. RK3588 PCIe 同源时钟常见问题与排查方法问题现象可能原因排查方式解决方案设备枚举不到REFCLK 未送到端点示波器测端点 REFCLK 引脚检查 buffer 输出、AC 耦合电容、串阻设备枚举不到复位时序不对检查 RK3588 PCIe 复位 GPIO 时序调整复位时序确保 PERST# 满足要求链路只能训练到 Gen1REFCLK 抖动偏大用示波器或抖动分析仪测量 REFCLK优化时钟 buffer 电源去耦、缩短走线链路只能训练到 Gen1SSC 扩频不匹配检查时钟源和 buffer 是否透传 SSC使用支持 SSC 透传的 buffer确认扩频方向和比例一致链路训练速度随机走线阻抗不连续用 TDR 测试阻抗调整线宽、间距、参考平面压力测试掉链路时钟 buffer 供电纹波大示波器测 buffer 电源纹波增加去耦电容或加磁珠隔离多个端点同时工作不稳定buffer 扇出过多或输出负载不平衡检查各输出波形选择扇出数足够的 buffer分别做端接匹配时钟波形上升沿圆滑走线过长或源端串阻过大检查串阻阻值和走线长度减小串阻优化走线长度和拓扑实际调试时建议把链路训练状态和 REFCLK 波形对照分析。REFCLK 有波形但链路起不来大概率不是“没有时钟”而是“时钟质量不满足要求”或者复位、配置有问题。先把最简单的链路状态确认清楚再做信号质量优化比盲目改原理图效率高得多。8. RK3588 PCIe 同源时钟设计的最佳实践8.1 第一版留调试余量原理图设计时不建议把所有端接完全固定。PCIe REFCLK 差分对上的 AC 耦合电容、源端串阻、buffer 输出使能脚建议都预留 0Ω 和不同阻值的兼容位置。这样调试时可以根据实际波形调整端接避免为了换一个电阻就重新打板。调试余量还包括测试点。REFCLK 差分对靠近接收端的位置预留两个测试点或者直接留一个小的焊盘方便示波器探头连接。高速信号测试点要尽量小避免产生明显的阻抗不连续否则测试点本身会劣化信号质量。8.2 保持时钟源单一在一个板卡上如果有多组 PCIe 3.0 控制器尽量用同一个 100MHz 时钟源通过 buffer 扇出而不是为不同控制器分别配晶振。同源时钟的优势在于所有 PCIe 设备参考同一时钟链路训练最容易收敛。不同晶振之间的频率偏差和相位漂移会引入额外的跟踪难度。如果板卡必须使用两颗时钟源建议选择相同型号、相同频率精度的器件并且在 Layout 上保持一致的走线长度和负载。多时钟源方案在系统级联时接收端要做独立时钟补偿复杂度明显增加一般只在特殊场景下使用。8.3 信号完整性仿真前置在 Layout 阶段可以通过简单的阻抗计算工具或者 SI 仿真软件先确认 REFCLK 走线的阻抗、长度、串扰是否在可控范围。对 PCIe 3.0 来说前端仿真确实能降低返板概率。时钟 buffer 的数据手册通常会给出推荐的参考电路按参考设计做成功率更高。如果项目没有专职 SI 工程师也可以用开源或免费工具做基础的眼图和 TDR 仿真至少能发现明显的阻抗断裂和过长走线。仿真