4. SRIS架构:独立参考时钟与扩频时钟概念

SRIS这词儿,全称是Separate Reference Clock with Independent Spread。说白了就是:每个设备用自己的参考时钟,各过各的,互不干涉。跟我前几章讲的Common Refclock完全两个路子。

我做第一个SRIS项目的时候,心里还挺打鼓的。以前习惯了共同时钟架构,总觉得没了同源时钟,收发器肯定会失锁。后来才发现,只要掌握了扩频时钟和独立参考时钟的配合技巧,SRIS在很多场景下反而更灵活。

4.1 独立参考时钟:为什么要分开?

传统Common Refclock架构里,所有设备共享一个时钟源。好处是简单,坏处也明显——只要时钟路径上有一丁点噪声,整个系统都遭殃。PCIe Gen4/Gen5的高速链路上,哪怕是几十皮秒的抖动,都可能让你误码率高到怀疑人生。

SRIS的思路很直接:每个设备独立生成自己的参考时钟。比如CPU用本地晶振,SSD控制器用自己的PLL,中间不需要长距离时钟走线。这样一来,每个设备都能独立优化时钟质量,也不怕单点故障。

对比维度 Common Refclock SRIS
时钟源数量 1个主时钟源,扇出给所有设备 每个设备独立时钟源
时钟走线长度 必须等长,需精确匹配 无需等长,各走各路
抖动容限 对走线噪声敏感 本地时钟,抗干扰能力强
板级设计复杂度 中等,需处理时钟树 较低,省了长走线

关键点:SRIS不是不要时钟,而是把时钟分布变成了时钟本地化。每个设备内部都有自己的PLL和本地晶振,接收端只靠CDR从数据流里恢复时钟。

4.2 扩频时钟:为什么要有意地“干扰”时钟?

扩频时钟(SSC,Spread Spectrum Clocking)这个概念,我第一次接触是在做EMI整改的时候。当时产品辐射超标,怎么调都过不了FCC,后来老工程师让我试了试扩频——嘿,峰值降了将近6dB。

扩频的原理其实不复杂。正常时钟频率是固定的,能量集中在一个窄带范围内,像个尖峰。辐射测试一看,这就是EMI的罪魁祸首。扩频时钟会让频率有规律地周期性偏移,比如0.5%的向下扩频,把能量展宽到更宽的频带上,峰值自然就降低了。

为什么叫“扩频”?你想想看:

  • 窄带时钟:所有能量集中在f₀,就像水龙头只对着一小块瓷砖冲
  • 扩频时钟:频率在f₀-Δf到f₀之间循环变化,能量均匀洒在整个频带上

这里有个很重要的细节——扩频深度和调制率是有限的。PCIe规范里通常要求扩频中心频率偏移不超过5000ppm(0.5%),调制率在30-33kHz左右。扩太宽了,接收端CDR追不上,链路直接失锁。

个人经验:扩频时钟的调制波形也很关键。大部分规范用“三角波”调制,因为实现简单。但有些场景下“Hershey Kiss”波形(正弦波基波+三次谐波合成),能进一步降低低频段的毛刺。我试过一次,EMI余量多了3dB,代价是电路复杂度高一点。

4.3 SRIS里的扩频时钟:独立但要有规矩

现在我们把两个概念串起来:SRIS + 独立扩频。

在Common Refclock里,所有设备共用同一份扩频时钟,频率偏差同步变化。CDR恢复时钟时,天然就是同源的,没什么压力。

但SRIS里,每个设备各自独立扩频,频率偏差和相位都不一样了。比如CPU在用33kHz调制率做0.5%的向下扩频,SSD在做30kHz的扩频。两个时钟的瞬时频率可能差了几百ppm,这怎么办?

答案在接收端CDR的跟踪带宽里。PCIe SRIS规范要求收端CDR的环路带宽能跟踪大频率偏差。我自己实测过,只要SRIS的扩频参数在规范允许范围内,CDR都能锁得住。真正出问题的往往是扩频参数超了范围,或者CDR环路滤波器设计得太窄。

注意:SRIS架构下,发送端和接收端的参考时钟允许频率误差在±300ppm以内。加上扩频的5000ppm调制,总频率偏差高达5600ppm!如果CDR带宽设计不当,链路会频繁进入位错误状态。

4.4 一张图搞清SRIS时钟逻辑

我通常用下面这张图跟团队解释SRIS的时钟流:

SRIS架构时钟流示意图 SRIS架构:独立参考时钟与扩频时钟流 发送端设备(Tx) 本地晶振 + PLL 接收端设备(Rx) 本地晶振 + CDR Tx参考时钟 (独立扩频) Rx参考时钟 (独立扩频) 数据流(含嵌时钟) SRIS时钟关键关系 Tx/Rx参考时钟相互独立 允许频率误差 ≤ ±300ppm + 扩频调制 Rx的CDR必须跟踪总频率偏差(≤5600ppm) 独立时钟

看这张图,SRIS的逻辑就很清楚了:发送端用本地时钟发数据,接收端也用本地时钟恢复数据。唯一连接双方的,是那条带着嵌入式时钟的数据链路。扩频时钟是在各自本地时钟源上独立做的,互不约束。

4.5 SRIS的设计避坑指南

我曾经在一个PCIe Gen4的项目里吃过一次亏。当时SRIS正常训练没问题,链路也能跑,但高温环境下频繁出现CRC错误。排查了很久才发现是接收端CDR的环路滤波器参数没按SRIS规范调整。

这里列出几个我踩过的坑:

  • CDR带宽必须足够宽:SRIS链路上,CDR不仅要跟踪数据抖动,还要跟踪扩频带来的频率缓慢漂移。如果CDR环路带宽窄于扩频调制率(33kHz),相位误差会累积到失锁。
  • VCO频率范围要覆盖扩频范围:有些简化的PLL设计,VCO中心频率固定,不支持5000ppm的偏移。结果一开扩频,VCO压控电压饱和了。
  • 注意扩频同步序列:链路训练时,发送端初始阶段可能关闭扩频,稳定训练完再开启。如果接收端没处理好这个过渡,链路会重新训练。

实战建议:我个人的习惯是,在SRIS系统调试阶段,先用固定时钟(不扩频)验证链路基本能通,再逐步打开扩频功能。这样万一出问题,能快速定位是CDR跟踪能力不足,还是扩频参数配置错了。

4.6 扩频时钟的真实代价

很多人觉得扩频时钟是白送的EMI福利,其实不是没有代价的。

代价一:接收端CDR设计更复杂。跟踪大频率偏差需要更宽的环路带宽,这又会让CDR对高频抖动的抑制能力下降。设计上要小心平衡。

代价二:链路训练时间可能变长。有些协议(比如USB4、Thunderbolt)在SRIS模式下,训练序列里需要包含“频率同步协商”阶段,多了几十微秒的延迟。

代价三:扩频调制噪声可能耦合到其他电路。扩频时钟的三角波调制,在低频段会产生谐波分量。我遇到过SRIS开启后,射频电路底噪抬高了3dB,后来加了一个低通滤波器搞定。

这些代价并不是劝退SRIS,而是告诉你:选SRIS之前,先评估清楚你的系统是否真的需要独立时钟和扩频。如果板级空间允许做共同时钟树,而且EMI余量充足,Common Refclock也许反而是更省力的方案。