一. FPGA CDC(Clock Domain Crossing)跨时钟域深度讲解
在FPGA设计中(尤其是Xilinx/AMD 7系列GTX/GTH这类高速SerDes场景),CDC(Clock Domain Crossing,跨时钟域)是指信号从一个异步时钟域(Clock Domain)传递到另一个时钟域的过程。GTX的TXUSRCLK2 / RXUSRCLK2、TXOUTCLK / RXOUTCLK、用户逻辑时钟、CDR恢复时钟往往不同源或异步,因此CDC几乎无处不在。如果处理不当,会产生亚稳态(Metastability)、数据不一致(Incoherent Data)、采样丢失或重复等问题,导致链路BER暴增、状态机死锁或系统崩溃。
CDC的核心问题是:接收端时钟与发送端时钟异步,无法保证建立/保持时间(Setup/Hold)。FPGA内部触发器(FF)在违反时序时会进入亚稳态,输出可能在0/1之间震荡,传播到下游逻辑会造成不可预测的行为。
下面按单比特脉冲跨域和多比特数据流跨域两大类,系统讲解处理方法(基于Xilinx UG471/UG476、AMD UltraScale手册及业界最佳实践)。