源同步接口:随路时钟、中心对齐与边沿对齐采样
更新时间:2026-09-19。前置:DDR PHY 训练、DLL 延迟锁相环、SRAM 接口时序、片上信号完整性。数字芯片大量并行接口(DDR、并行摄像头/显示、并行 NOR、MIPI DBI)都采用源同步(source-synchronous):发送方把数据和一个「随路时钟」一起发,接收方用这个时钟采数据。
一、系统同步 vs 源同步
- 系统同步(system synchronous):收发双方用同一个全局/外部时钟,数据在跨越走线延迟后还要满足对端相对同一时钟的 setup/hold。时钟频率升高后,走线/封装延迟已和时钟周期同量级,固定相位无法给所有位留足裕量,时序预算极紧。
- 源同步:发送端用它发送数据的同一个时钟产生一个数据选通/随路时钟(strobe,如 DQS),和数据并行送出;接收端用这个随路时钟去采和它一起到达的数据。数据和时钟走过近似的路径、跟踪相同的 PVT 和抖动,对全局时钟偏斜不敏感,可以跑到高得多的速率。
二、两种时钟-数据相位关系
1. 边沿对齐(edge-aligned / simultaneous switching)
发送端时钟和数据同时翻转(同相)。接收端若直接用该时钟沿采样,时钟沿正落在数据正在变化的位置(眼图边缘),建立/保持裕量为零甚至为负:
- 因此接收端必须把时钟**相移 90°(移半个 bit/UI)**再采样,让采样点落在数据眼中央——通常用 DLL/相位插值器/IO PLL 产生相移时钟(见 DLL)。
- 部分接口发送端直接给边沿对齐、由接收方做 90° 移位。
2. 中心对齐(center-aligned)
发送端(或经移位后)时钟沿落在数据位中央(时钟相对数据移了 90°/半个周期),接收端可以直接用该沿采样,落在眼图中心,setup/hold 裕量最大:
bash
数据: ──D0──┐ ┌──D1──┐ ┌──D2──
└──┘ └──┘
中心对齐时钟: ↑ ↑ ↑ (沿在每位中心)
边沿对齐时钟: ↑ ↑ ↑ (沿在数据跳变处)- DDR SDRAM 的写操作由控制器发出 DQS 相对 DQ 的相位,目标让 SDRAM 在 DQS 沿中心采样到 DQ;读方向 SDRAM 发回边沿对齐的 DQS/DQ,控制器内部再移相(write/read leveling,见 DDR PHY 训练)。
- 设计关键是无论哪种对齐,最终采样触发器的时钟沿要在接收数据眼中央,并同时满足 setup(数据在沿前稳定)和 hold(沿后保持)。
三、接收端如何生成采样时钟
- DLL/PLL + 相位插值(PI):对随路时钟延迟/相移所需量,产生内部采样时钟(甚至 4 相 0/90/180/270 过采样找眼,见 SerDes CDR 的眼扫描思想)。
- IO 延迟单元(IDELAY/ODELAY):逐位/逐字节微调延迟,补偿走线和 bit skew。
- 写方向同样要调数据/时钟输出相位,使对端眼图居中(输出延迟、DQS 相移)。
- 高速时做训练:发已知 pattern 扫描延迟,找每个 byte/nibble 通过窗口中心(详见 DDR read/write/Vref 训练)。源同步是「需要训练」的根源——数据眼相对随路时钟会因板级 skew/PVT 偏移。
四、时序预算与多位 skew
接收端有效采样窗口:
bash
T_sampling_window = UI − (数据相关抖动+时钟抖动+占空比失真+
bit间 skew+走线不等长+ISI/串扰...)
setup 裕量 = 采样点到数据结束前的时间 − Tsu
hold 裕量 = 采样点后数据保持时间 − Th- bit-to-bit skew:同一总线上多位到达时间不同(走线不等长、负载不同、SSN 同时开关噪声把边沿推前/推后),最迟到和最早到之间的差吃掉窗口;PCB 要按字节/组等长、片内做 per-bit 延迟校准。
- 时钟占空比失真(DCD):DDR 双沿使用高低电平时间不等,两个沿的裕量不对称,需要占空比校正(见 DLL DCC)。
- 时钟抖动:随路时钟自身的相位抖动直接缩小窗口(周期抖动+周期-周期抖动)。
- ISI/串扰/SSN:并行多位同时翻转通过电源/地弹和耦合产生数据相关抖动(见 SI);最坏码型(全翻转 vs 不翻转)都要在训练 pattern 里覆盖。
- 源同步不消除频率漂移:收发晶振若长期有 ppm 差,在没有弹性缓冲/同源约束的接口会累积;多数源同步并行接口是同源的(随路时钟即数据速率来源),但跨时钟域入芯片后仍要 CDC/FIFO(见 CDC)。
五、典型接口对照
- DDR/DDR2/3/4、LPDDR、QDR SRAM:DQ + DQS(差分或单端选通),读写双向源同步,需 leveling/训练(见 DDR 初始化)。
- 并行 CMOS 摄像头/显示(DVP、MIPI DBI、并口 TFT):PCLK 随像素数据,接收在 PCLK 锁存;高分辨率转向 MIPI DSI/CSI(带 PHY,见 DSI/CSI-2)。
- 并行 NOR/异步 SRAM:严格说多为系统同步/异步(地址+OE/WE 握手,见 SRAM 时序),同步 SRAM 则用随路/回显时钟。
- SerDes:极端的源同步演化成数据内嵌时钟(CDR 恢复,不再单独发时钟,见 SerDes CDR)。
六、常见的坑
- 边沿对齐直接采样:时钟沿落在跳变处,setup/hold 全崩;要移 90° 或用中心对齐。
- 只调一位/一字节:bit/byte 间 skew 不同,需 per-bit/per-byte 延迟和独立训练。
- 走线不等长:并行数据和随路时钟长度差超窗口预算;等长匹配 + 训练。
- 占空比失真:双沿只用单沿裕量、另一沿违例;做 DCC。
- 不做训练用经验相位:温度电压变化后眼漂移导致现场误码(见 PHY 重训)。
- 忽略 SSN/最坏码型:全位同时翻转时电源弹/串扰改变到达时间,训练 pattern 要覆盖。
- 时钟和数据电源/地不隔离:同步翻转噪声调制随路时钟,抖动变大。
- 采样后当同一时钟域:随路时钟域到系统时钟域必须正确 CDC/FIFO(见 CDC)。
- 读写方向相位混用:读(对端发回)与写(本端发)相位相反,要分别校准。
- Vref/电压裕量忽略:高速并行接口除了时间居中还要垂直居中(见 DDR Vref 训练)。
- 拓扑反射:多负载/分支不当产生反射使眼闭合,需 ODT/端接(见 SI)。
- 时钟停振处理:随路时钟停止(无数据/低功耗)时接收端逻辑不能误采样/死等,要有时钟丢失检测。
相关与延伸
完整训练流程见 DDR/LPDDR PHY 训练;相移部件见 DLL;内嵌时钟的极端见 SerDes CDR;异步并口对照见 SRAM 接口时序;时钟域交接见 CDC。
总结
源同步让发送方把数据和同源产生的随路选通时钟(DQS/PCLK)一起送出、接收端用它采数据,由于二者走线和 PVT 跟踪一致,摆脱了系统同步中固定全局时钟难以覆盖走线延迟的限制;时钟相对数据要么边沿对齐(沿落在跳变处,接收端必须用 DLL/PI 移 90° 才能采到眼中央)要么中心对齐(沿天然落在位中央、setup/hold 裕量最大),高速下还要对每位/每字节用可编程延迟做读写 leveling 和训练,以补偿走线不等长、bit skew、占空比失真、随路时钟抖动和 SSN/ISI——边沿对齐直接采样、不做逐位训练、走线不等长和忽略双沿占空比,是源同步接口最常见的四类时序失败。