1. 差分与单端时钟的基础概念
在数字电路设计中,时钟信号的质量直接决定了系统的稳定性和性能上限。差分时钟和单端时钟是两种最常见的传输方式,它们在硬件实现细节和抗干扰能力上有着显著差异。
单端时钟采用单根信号线传输,参考地平面作为返回路径。这种方式简单直接,但容易受到地电平差异和环境噪声的影响。我在实际项目中遇到过这样的情况:当单端时钟线附近有大电流切换时,时钟信号会出现明显的抖动,导致系统时序紊乱。
差分时钟则采用一对相位相反的信号线(P 端和 N 端)传输。接收端通过比较两个信号的差值来还原时钟信息。这种方式具有天然的共模噪声抑制能力,我在多个高速项目中实测发现,差分时钟在复杂电磁环境下的稳定性明显优于单端时钟。
Xilinx FPGA 的时钟输入引脚分为差分时钟专用引脚(Differential Clock Capable Pin)和单端时钟专用引脚(Single Ended Clock Capable Pin)。以 K7 系列为例,差分时钟引脚通常成对出现,如 CLK_P 和 CLK_N,而单端时钟引脚则是独立的。
2. Xilinx FPGA 中的硬件实现
2.1 差分时钟的硬件连接
在 Xilinx FPGA 中连接差分时钟时,需要将外部晶振的 P 端和 N 端分别连接到对应的差分引脚对。例如,对于 200MHz 的 LVDS 差分时钟:
// 差分时钟输入引脚定义
input clk_in_p; // 差分正端
input clk_in_n; // 差分负端
实际布线时,我建议保持差分对长度匹配,误差控制在±5mil 以内。在 PCB 设计阶段,差分阻抗通常设置为 100Ω(对于 LVDS 标准)。有个实用的技巧:在差分对周围布置地孔阵列,可以有效减少串扰。
2.2 单端时钟的硬件连接
单端时钟连接相对简单,只需将时钟信号连接到指定的单端时钟引脚即可:
input clk_in; // 单端时钟输入
但需要注意,单端时钟对 PCB 布局要求更高。我的经验是:单端时钟线要尽量短,远离高速数字信号线,并在时钟线旁布置完整的参考地平面。曾经有个项目因为单端时钟线过长(超过 2 英寸),导致上升沿退化严重,最后不得不重新设计 PCB。
2.3 时钟缓冲器的使用
Xilinx 提供了多种时钟缓冲器原语,正确使用它们对系统稳定性至关重要:
- IBUFG/IBUFGDS:全局时钟输入缓冲器
- BUFG:全局时钟缓冲器
- IBUF:普通输入缓冲器
对于差分时钟,通常使用 IBUFGDS:
IBUFGDS #( .DIFF_TERM("TRUE") // 启用差分终端电阻 )
clk_buf (
.I(clk_in_p),
.IB(clk_in_n),
.O(clk_core)
);
而单端时钟可以使用 IBUFG:
IBUFG #( .INIT(1'b0) )
clk_buf (
.I(clk_in),
.O(clk_core)
);
完成实例化后,记得在约束文件中检查时钟路径是否被正确映射到全局缓冲网络,确保时钟树综合工具能识别这些关键路径。

