拓冰建站拓冰建站
首页 / 资讯中心 / 正文

RK3588 PCIe3.0同源时钟buffer电路图设计全流程解析

这次我们把 RK3588 硬件设计里最容易翻车、又经常被一笔带过的一环说清楚PCIe3.0 同源时钟Common Clock架构下参考时钟 buffer 电路图怎么画。很多工程师第一次画 RK3588 底板时会把 PCIe 数据线上的注意力全部放在阻抗和等长上却忽略参考时钟这一路。结果 PCIe 锁不上 Gen3或者设备枚举不稳定最后查半天发现是时钟 buffer 的电源滤波、端接、SSC 同源处理出了问题。RK3588 内部集成 PCIe3.0 控制器多个 PCIe 接口共用一个参考时钟时通常采用同源时钟分配方案一个 100MHz 时钟源经过差分时钟 buffer 扇出多路时钟分别送到 RK3588 和下游 PCIe 设备。这样所有参考时钟来自同一颗源扩频时钟SSC相位一致PCIe 链路才能稳定跑在 Gen3 速率。这篇文章围绕“同源时钟 buffer 电路图绘制”展开会先讲清同源时钟的基础概念和为什么需要 buffer然后给出原理图绘制流程、关键技术参数、PCB 布局布线要点、信号测试方法以及一套 Linux 下的链路速率验证手段。适合正在做 RK3588 核心板、底板、定制开发板的硬件工程师和 PCB 工程师也适合想搞明白参考时钟链路原理的嵌入式软件工程师。1. RK3588 PCIe3.0 同源时钟 buffer 核心能力速览能力项说明目标芯片RK3588 系列 SoC支持 PCIe3.0 控制器参考时钟频率100 MHz 差分参考时钟典型时钟架构Common Clock同源时钟多路 PCIe 设备共享同一颗时钟源关键器件100MHz 差分振荡器或时钟发生器 差分时钟 buffer电平标准常见为 HCSL / LP-HCSL具体以 RK3588 芯片手册为准设计内容器件选型、原理图连接、AC/DC 耦合、端接、电源滤波、PCB 差分对阻抗与等长验证方式原理图评审、信号完整性仿真、示波器测量、频谱仪观察 SSC、Linux 下lspci枚举主要风险PCIe 链路降速、设备枚举失败、SSC 失锁、时钟抖动超标、电源纹波耦合、静电损坏这张表是全文的索引。后面所有内容都围绕这张表展开建议做 RK3588 板卡设计时把这张表转成你的设计检查清单。2. 同源时钟基础为什么 RK3588 需要时钟 bufferPCIe 参考时钟的标准频率是 100MHz。这个 100MHz 并不只是一个“能跑就行”的时钟它要满足 PCIe 规范对频率精度、相位噪声、抖动、扩频时钟SSC等一系列要求。PCIe 参考时钟分配方式中Common Clock同源时钟是最传统、也是很多 SoC 默认支持的架构。它的核心思想是Root ComplexRC和 EndpointEP使用同一个参考时钟源。数据链路的训练和恢复都基于这个统一的时钟基准这样收发双方的参考沿一致SSC 扩展方向一致链路训练的成功率最高。那什么时候需要时钟 buffer典型场景有三个RK3588 的 PCIe3.0 接口不止一个需要同时给多个 PCIe 设备提供参考时钟。控制系统上还外接了 PCIe Switch、NVMe 转接卡、千兆网卡、Wi-Fi 模组等设备这些设备都需要 100MHz 参考时钟。时钟源本身驱动能力有限不能直接并联多个负载否则波形失真、抖动变大无法满足 PCIe 规范。这时一颗差分时钟 buffer 就能把一路 100MHz 时钟扇出成多路同时对每一路提供足够的驱动能力。更关键的是所有输出仍然来自同一个输入源所以每一路都保持“同源”关系。这就是同源时钟 buffer 在 RK3588 设计中的价值。如果不用 buffer而是让每个 PCIe 设备各自使用独立晶振那需要芯片支持 SRISSeparate Reference Clock with Independent SSC或 SRNSSeparate Reference Clock with No SSC模式。RK3588 是否所有 PCIe 控制器都支持独立参考时钟需要查阅芯片手册。从工程稳妥性角度看同源时钟 时钟 buffer 是验证成本最低、可靠性最高的方案。2.1 同源时钟 vs 独立时钟什么时候不能混用这里要特别强调同源时钟架构和独立参考时钟架构对链路训练的要求完全不同。如果 RK3588 控制器配置为 Common Clock 模式而下游设备端使用了独立的参考时钟两端 SSC 的调制频率和相位不一致链路可能经常训练失败或者速率降到 Gen1/Gen2 才能稳定。因此原理图绘制前第一步不是连线而是确认 RK3588 的 PCIe 工作模式。如果选择 Common Clock 模式那所有 PCIe 参考时钟必须来自同一个时钟源时钟 buffer 就是连接“时钟源”和“多个 PCIe 设备”的枢纽。3. RK3588 PCIe3.0 同源时钟 buffer 电路图绘制流程这里给出一个适合 RK3588 底板的通用绘制流程。实际项目可能有差异但主线流程基本一致。3.1 确定时钟拓扑首先画出参考时钟的拓扑结构。常见的 RK3588 同源时钟拓扑如下位置器件信号说明时钟源100MHz 差分振荡器或时钟发生器CLK_P / CLK_N产生 PCIe 参考时钟时钟 buffer 输入差分时钟 bufferIN_P / IN_N接收 100MHz 差分时钟时钟 buffer 输出 1RK3588 PCIe REFCLKREFCLK_P / REFCLK_N连接到 RK3588 指定引脚时钟 buffer 输出 2PCIe Switch 或下游 EPREFCLK_P / REFCLK_N连接到下游设备这个拓扑是典型的“一进多出”结构。时钟源可以是板载 100MHz 振荡器也可以由 SoC 或外置时钟芯片产生。具体选哪一种取决于系统的时钟规划和 BOM 成本预算。纯做 RK3588 最小系统时用一颗 100MHz 差分振荡器 时钟 buffer 就够了。3.2 器件选型时钟 buffer 怎么挑时钟 buffer 的选型要关注几个核心参数输入频率必须支持 100MHz。输出路数根据需要扇出的 PCIe 设备数量决定常见有 2 路、4 路、8 路等。输出电平标准优先选择支持 HCSL / LP-HCSL 输出的型号和 RK3588 参考时钟输入匹配。附加抖动时钟 buffer 本身会引入附加抖动建议选附加抖动尽量小的型号。PCIe Gen3 对参考时钟的抖动要求非常严器件选型时不能只看“能不能出 100MHz”。扩频时钟SSC透传能力如果时钟源本身带 SSCbuffer 需要能直接透传不能额外滤除或整形。供电电压常见为 1.8V 或 3.3V需要和 RK3588 系统电源对齐。一个容易忽略的问题时钟 buffer 不是普通逻辑器件它的射频性能直接影响 PCIe 链路。不要为了省几毛钱选一只相位噪声很差的通用时钟 buffer否则后续测试眼图就会付出更大代价。3.3 原理图连接细节每个引脚都不能错以常见的 4 输出差分时钟 buffer 为例原理图连接需要关注以下内容输入端IN_P / IN_N 接 100MHz 差分时钟源。如果时钟源是单端振荡器需要确认 buffer 是否支持单端输入或者通过巴伦转换成差分信号。输入端是否需要加耦合电容要看 buffer 的输入接口标准。HCSL 输入通常可以直接 DC 耦合但部分接口需要 AC 耦合具体以 datasheet 为准。输出端每一路 OUT_P / OUT_N 分别连接到 RK3588 或其他 PCIe 设备的参考时钟引脚。如果 buffer 输出为 HCSL接收端通常有内部端接但需要确认是从引脚到地的 50Ω 终端还是差分对之间直接端接。PCIe 规范对 HCSL 接收端有明确要求画图前必须把端接方式对清楚。如果 buffer 的输出是 LVDS 或 LVPECL端接方式完全不同不能直接套 HCSL 的接法。电源去耦时钟 buffer 一般建议单独使用低噪声 LDO 供电或者用磁珠把数字电源和时钟电源分开。每个电源引脚附近放 0.1µF 高频去耦电容同时保留 1µF~10µF 的大电容做低频储能。时钟 buffer 的地最好和 PCB 上的模拟地/时钟地做统一规划避免参考时钟回路被其他数字信号污染。这里给一个最简化的网络连接示意方便原理图绘制时参考U1 100MHz OSC CLK_OUT_P ---- U2 BUFFER.IN_P CLK_OUT_N ---- U2 BUFFER.IN_N U2 CLOCK BUFFER VDD ---- 1.8V/3.3V 经磁珠/LDO GND ---- GND OUT1_P/N ---- RK3588 PCIE20_REFCLK_P/N示例 OUT2_P/N ---- PCIe Switch REFCLK_P/N OUT3_P/N ---- NVMe Slot REFCLK_P/N OUT4_P/N ---- 预留测试点实际 RK3588 引脚命名以官方芯片手册和参考原理图为准上面只是示意不要直接照抄。3.4 ERC 检查与网表导出原理图画完以后一定要跑 ERC电气规则检查。重点检查未连接的网络。电源引脚是否全部正确连接。差分对的正负极性是否一致。时钟 buffer 的电源电压是否在规格范围内。很多低级错误都是在这里提前暴露的比如某一输出通道漏画端接电阻或者把差分对正负接反。ERC 检查通过后再导出网表进入 PCB Layout 阶段。4. RK3588 PCIe3.0 时钟 buffer PCB 布局与布线要点原理图画完之后PCB Layout 才是最容易拉开差距的地方。时钟链路属于模拟/射频敏感电路布线时不能当普通数字信号处理。4.1 差分阻抗与叠层选择PCIe 数据链路的差分阻抗通常要求 85Ω 或 100Ω具体以 RK3588 芯片手册和 PCIe 规范为准。参考时钟差分对的阻抗要求和数据链路应该保持一致避免阻抗突变造成反射。画图前先确认 PCB 叠层。常见做法时钟差分对走在表层或内层参考平面必须是完整的地平面不能跨分割。如果时钟走线下方有电源平面被割裂或者走线经过 PCB 上的窄桥区域信号完整性就会明显下降。4.2 等长控制与长度限制同源时钟的关键是保证多路输出到各 PCIe 设备的时钟延迟尽量一致。SI 仿真和实际调试中等长偏差过大会让链路预算恶化。等长控制的优先级低于阻抗连续性但也不能忽略。建议首版约束如下约束项建议值差分对内等长尽量控制在 ±5 mil 以内输出通道之间等长根据仿真结果确定首版可控制在 ±25 mil 内走线换层次数尽量不超过 2 次换层处加回流地孔过孔数量每对差分线尽量保持相同过孔数量这些数值本质上是设计经验值最终要以 RK3588 官方手册和信号完整性仿真结论为准。如果你的板子链路易降速可以先检查时钟等长是否差距过大。4.3 布局分区与隔离时钟 buffer 周围不要摆高频数字信号线尤其不要和 DDR、USB3.0、HDMI、以太网等高速信号并行走线。时钟 buffer 的输出走线尽量短避免长距离平行耦合。电源滤波电路要紧贴时钟 buffer 摆放。磁珠、去耦电容离电源引脚越近滤波效果越好。如果条件允许时钟电路下方铺完整地铜皮不要在其正下方走其他信号线。4.4 仿真确认板子投板前建议用 HyperLynx、SIwave、ADS 或其他 SI 仿真工具对参考时钟链路做一次快速仿真。重点看差分信号波形、眼图、抖动。仿真不用做到芯片级完全精确但能提前暴露过孔 stub、阻抗不连续、等长偏差过大等问题。如果项目没有专职仿真工程师至少要保证时钟 buffer 输出的每一路都保持基本一致的走线长度和过孔数量不要出现某一路特别长、其他路特别短的情况。5. 设计验证与功能测试板子回来以后先不要急着跑 PCIe 大数据传输按以下顺序验证。5.1 电源与时钟输出检查上电前先用万用表检查时钟 buffer 的电源对地阻抗排除短路。上电后先量电源电压是否在规格范围内再用示波器量时钟 buffer 输出波形。测量项目测量项预期结果时钟频率100 MHz ± 300 ppm 左右带 SSC 时会有向下扩展差分摆幅符合 buffer 输出标准和 RK3588 输入要求共模电压是否符合 HCSL/LP-HCSL 共模范围有无明显过冲/振铃无明显振铃边沿单调输出通道间相位差尽量小满足 PCIe Gen3 预算如果示波器带宽不够至少能看到 100MHz 波形是否稳定、幅值是否正常。注意普通 100MHz 示波器带宽过低推荐使用带宽至少 500MHz 以上的示波器观察时钟边沿。5.2 频谱仪观察 SSC如果时钟源开启了 SSC用频谱仪观察 100MHz 时钟频谱可以看到频谱围绕中心频率向下扩展。若无明显扩展说明 SSC 可能没开启或者 buffer 不支持 SSC 透传。很多 RK3588 PCIe 链路不稳定的问题都出在 SSC 没有正确开启或者各设备 SSC 不同源。用频谱仪确认这一点能少走很多弯路。5.3 Linux 下链路速率验证RK3588 平台一般运行 Linux 系统。硬件验证的最直接手段就是看 PCIe 设备能否被正确枚举以及当前链路速度和宽度。登录 RK3588 系统后执行# 查看 PCIe 设备列表 lspci -nn # 查看指定设备的链路能力与当前状态 lspci -vvv | grep -E LnkCap:|LnkSta:如果设备被枚举为01:00.0执行lspci -vvv -s 01:00.0 | grep -E LnkCap:|LnkSta:正常情况会看到类似下面的信息LnkCap: Port #1, Speed 8GT/s, Width x4 LnkSta: Speed 8GT/s, Width x48GT/s对应 PCIe Gen3。如果看到Speed 5GT/s说明降到 Gen22.5GT/s说明降到 Gen1。速率降级说明链路训练不理想优先排查时钟质量、差分阻抗、等长。如果想批量巡检多台设备可以写一个简单的 shell 脚本直接输出所有 PCIe 链路状态#!/bin/bash # 批量查看 RK3588 平台 PCIe 设备链路速率 for dev in $(lspci | awk {print $1}); do echo Device $dev lspci -vvv -s $dev | grep -E WorkState:|LnkCap:|LnkSta: || true done这个脚本只做最基础的巡检生产环境建议把输出重定向到日志文件再配合链路压力测试一起使用。5.4 链路压力测试枚举成功不代表链路稳定。建议用 PCIe 设备做持续读写测试例如 NVMe SSD 循环跑fio同时观察dmesg中是否有 PCIe AER 错误或链路降速日志。# 使用 fio 对 NVMe 设备做简单读写压力测试参数按实际设备调整 fio --namepcie_test --rwrandread --bs4k --size1G --numjobs4 --runtime60s --group_reporting测试过程中如果dmesg出现pcieport 0000:00:01.0: AER: Corrected error received pcieport 0000:00:01.0: AER: Multiple Corrected error received说明链路已经有纠错发生稳定性需要排查。6. 接口 API 与批量任务的适用性说明从硬件设计角度时钟 buffer 电路本身不涉及 API 调用也不涉及批量任务。但 RK3588 平台软件侧可以通过lspci、dmesg、fio等命令做批量链路巡检这部分可以视为“批量验证任务”。如果你有多个 RK3588 板卡需要做产线验证建议把上面第 5.3 节的脚本扩展成批量巡检工具统一收集每块板子的 PCIe 枚举结果、链路速率、温度信息和压力测试日志。这样能在产线阶段快速筛选出时钟链路设计不良的板卡。这里再给一个简单的 Python 示例用于扫描lspci -vvv输出并提取链路速度import re import subprocess def get_pcie_link_speed(device_id): result subprocess.run( [lspci, -vvv, -s, device_id], capture_outputTrue, textTrue ) text result.stdout lnksta re.search(rLnkSta:.*Speed\s([\d.]GT/s), text) return lnksta.group(1) if lnksta else unknown # 示例检查 01:00.0 的当前链路速率 print(get_pcie_link_speed(01:00.0))这个脚本可以直接在 RK3588 Linux 系统中运行用来做产线快速巡检。7. 信号质量与性能观察方法RK3588 PCIe3.0 同源时钟设计是否合格最终体现在几个可观测指标上参考时钟抖动、SSC 调制、链路速率、眼图裕量。7.1 时钟抖动PCIe Gen3 对参考时钟的抖动要求很严格。如果时钟 buffer 选型不当、电源噪声过大、走线阻抗不连续抖动都会变差。抖动测量需要使用高带宽示波器在重复模式下观察时钟边沿的时间偏差。如果项目预算有限没有专用测试设备可以通过链路速率降级和压测日志反向判断时钟质量。链路稳定不降速说明时钟质量大概率在可接受范围内。7.2 温度影响时钟 buffer 的相位噪声和抖动会随温度变化。建议做高低温测试时同时观察 PCIe 链路速率和工作状态。高温下链路降速或设备丢失往往是时钟器件性能和散热设计共同导致的。7.3 电源纹波影响时钟 buffer 的电源纹波会直接调制到输出时钟上产生相位噪声。观察方法很简单用示波器量时钟 buffer 电源引脚的纹波再用频谱仪或示波器观察时钟相噪。如果电源纹波明显增大时钟边沿也会变得不稳定。从工程经验看时钟 buffer 电源独立 LDO 磁珠隔离是最稳妥的做法。8. RK3588 PCIe3.0 同源时钟 buffer 常见问题与排查方法问题现象可能原因排查方式解决方案PCIe 设备完全枚举不到参考时钟无输出、FPGA/设备上下电时序不对示波器量 buffer 输出量设备电源查dmesg检查 buffer. 使能引脚、电源、时钟源若使能被复位拉死改上拉控制链路只到 Gen1/Gen2参考时钟质量差、SSC 未开启、数据链路等长或阻抗问题lspci -vvv查看 LnkSta示波器/频谱仪测时钟检查参考时钟的 SSC 是否开启确认 buffer 输出到设备的走线阻抗和端接PCIe 链路掉卡、重启后不稳定时钟 buffer 电源纹波大、端接错误示波器测电源纹波检查端接电阻独立 LDO 磁珠滤波按 datasheet 端接系统有 PCIe 设备但工作一段时间后丢失高温下时钟器件抖动劣化高低温测试 观察 dmesg AER 日志优化散热更换更低抖动 buffer检查电源热稳定性多路时钟输出相位不一致等长偏差过大、走线长度差异明显核对 PCB 等长报告重新约束等长换层处优化过孔数量buffer 输出无信号但输入正常使能脚未拉对、芯片焊接问题量使能脚电平检查虚焊正确配置使能引脚补焊或更换芯片示波器看到明显振铃和过冲端接不匹配、走线过长检查 HCSL 端接检查接收端内部终端按规格书加对地 50Ω 终端或差分终端缩短走线链路偶尔报 AER 错误链路裕量不足/var/log/kern.log或dmesg查 AER检查时钟质量、数据眼图调整 PCB 设计这张表不是万能排查手册但覆盖了 RK3588 PCIe3.0 同源时钟设计里最常见的一批问题。遇到问题先按“时钟有没有、时钟好不好、链路训练状态”三步骤排查不要一开始就改软件。9. 最佳实践与设计合规建议RK3588 PCIe3.0 同源时钟 buffer 电路图绘制不是“画通就行”的活下面的检查项建议直接复制进你的项目评审 checklist先确认 RK3588 的 PCIe 工作模式是 Common Clock 还是独立参考时钟再决定要不要 buffer。时钟源、buffer、RK3588、下游设备的电平标准必须匹配不能混用。HCSL 端接必须严格按规格书和 PCIe 规范处理不要凭经验随意加电阻。时钟 buffer 电源单独用 LDO 或磁珠隔离去耦电容靠近电源引脚。差分对阻抗、等长、过孔数量要提前写进 PCB 设计约束。时钟电路尽量远离 DDR、USB3.0、HDMI 等高速信号。原理图画完必须跑 ERCPCB 投板前建议做一次 SI 仿真。板子回来后先量时钟频率、幅值、SSC再跑链路测试。批量测试脚本要保留日志方便生产追溯。涉及 PCB 设计文件、参考原理图时要确保使用合法授权物料和工具链条不直接复制其他商业板卡的图纸资料。合规方面需要强调的是PCIe 设计涉及高速数字电路最终无线电骚扰、ESD、防静电等指标需要按照行业标准进行测试。时钟 buffer 选型和 PCB 布局要在设计阶段就考虑 EMC/EMI否则后期整改成本很高。另外如果你正在做 RK3588 相关的商业产品物料选型、参考设计授权、软件驱动合规都要提前确认。10. 总结与后续方向RK3588 PCIe3.0 同源时钟 buffer 电路图绘制核心就是三件事确认同源时钟拓扑、正确连接时钟 buffer 的外围电路、把 PCB 上的时钟链路当成敏感模拟信号来布局布线。最先应该验证的是时钟 buffer 输入输出是否正常以及 RK3588 在 Linux 下能否把 PCIe 设备枚举到 Gen3 速率。最容易踩的坑则是 HCSL 端接错误和 SSC 未开启这两类问题在示波器和lspci输出里都会明显暴露。如果这一版板子已经稳定后续可以继续扩展的工作包括增加 PCIe 链路余量测试、眼图测试做完整的高低温测试以及把产线 PCIe 巡检脚本固化到测试工位中。如果自己画板子没有把握等 RK3588 的 PCIe 时钟链路稳定后再逐步增加 PCIe Switch、M.2 转接卡等更复杂的拓扑。但不管怎么扩展同源时钟这条主线不要丢。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门