1. 多时钟系统与CDC验证导论

在Lattice FPGA的实际工程中,单时钟域设计已经越来越少。只要板级存在晶振、外部接口、视频像素时钟、以太网PHY恢复时钟、ADC采样时钟或DDR控制器时钟中的任意两类,FPGA内部就几乎必然出现多个时钟域。多时钟系统本身不是错误,真正带来风险的是信号从一个时钟域进入另一个时钟域时,没有经过正确的同步处理,这就是CDC(Clock Domain Crossing,跨时钟域)问题。

本节先建立三个基本认识:Lattice FPGA中典型的多时钟场景长什么样;CDC失效在工程上会造成什么后果;以及本课程后续要完成的验证任务地图。理解这三点之后,后续章节中的同步器结构、约束写法、仿真激励和形式验证才有明确的落点。

一、Lattice FPGA中的典型多时钟场景

以常见的Lattice ECP5或iCE40系列为例,一个中等复杂度的系统通常包含以下时钟:

  • 系统时钟:由板载晶振经PLL/DLL倍频得到,例如25 MHz输入、100 MHz输出,作为主控逻辑时钟。
  • 接口恢复时钟:以太网RGMII/GMII的RX_CLK、视频输入的像素时钟,频率与系统时钟无固定整数比。
  • 低速外设时钟:I²C、SPI、UART等分频时钟,通常远低于系统时钟。
  • 采样/转换时钟:ADC或传感器接口时钟,可能与系统时钟同源但相位关系不确定。

这些时钟之间往往没有固定的相位关系,甚至频率比也不是整数。例如系统时钟100 MHz、像素时钟74.25 MHz,二者比值约为1.347,无法用简单分频对齐。当控制信号、状态标志、数据总线跨越这些时钟边界时,就构成了CDC路径。

Lattice FPGA 典型多时钟域与CDC路径 板载晶振 25MHz PLL → 100MHz 以太网PHY RX_CLK 125MHz 视频源 像素时钟 74.25MHz ADC / 传感器 采样时钟 50MHz 系统时钟域 100MHz 主控状态机 / 寄存器 数据缓冲 / FIFO写端 配置与控制逻辑 接口/外设时钟域 RX数据采样 像素/采样数据 FIFO读端 控制/状态 数据总线 标志/握手 两级同步器 单比特信号 异步FIFO 多比特数据 握手同步 req/ack 目标时钟域 同步后信号 稳定采样 无亚稳态传播 数据完整性 时序收敛 功能正确 红色箭头表示CDC路径:必须经过同步器、异步FIFO或握手协议,否则亚稳态会传播到目标域

二、CDC问题的工程危害

CDC失效最直接的物理机制是亚稳态。当源域信号在目标域时钟的建立/保持窗口内发生跳变时,目标触发器的输出可能在一段时间内既不是高电平也不是低电平,而是处于中间不确定状态。如果这个不确定值被后续逻辑采样,就会产生不可预测的行为。

亚稳态带来的工程危害通常表现为以下几类:

  • 随机性功能错误:状态机跳转到非法状态、计数器误加、FIFO读写指针错位。这类问题在实验室可能几天才出现一次,量产中却可能批量暴露。
  • 数据损坏:多比特总线跨域时,各比特到达目标域的时间不一致,采样到的是新旧数据的混合值。例如源域从0x0F变为0xF0,目标域可能采到0xFF或0x00。
  • 系统死锁:握手信号丢失或重复,导致请求方永远等待应答,或应答方重复响应。
  • 时序收敛假象:静态时序分析(STA)默认所有路径都有确定的时钟关系,CDC路径若未正确约束,STA可能报告时序满足,但实际硬件行为仍然错误。
亚稳态无法被完全消除,只能通过同步器将其发生概率降低到可接受水平。工程目标不是“消灭亚稳态”,而是“让亚稳态在传播到功能逻辑之前被衰减掉”。

三、验证目标与课程任务地图

CDC验证的核心目标可以归纳为三条:识别所有跨时钟域路径;确认每条路径都有正确的同步结构;证明同步结构在目标时钟域下功能正确且时序收敛。这三条对应不同的验证手段:

验证目标主要手段输出证据
识别CDC路径代码审查、CDC静态检查工具、综合报告CDC路径清单、跨域信号列表
确认同步结构结构检查、约束文件审查、形式验证同步器类型与位置、SDC约束
证明功能正确定向仿真、随机仿真、形式验证波形、断言通过、覆盖率报告

本课程后续将围绕这条主线展开:先讲清单比特同步器(两级触发器、脉冲同步器)和多比特同步方案(异步FIFO、握手、格雷码),再讲Lattice工具链中的CDC约束写法(set_false_path、set_max_delay、set_clock_groups),然后进入仿真验证方法(定向激励、随机激励、亚稳态注入建模),最后用形式验证和板级调试收尾。

学习本课程时,建议始终带着一个具体设计对象:例如一个“100MHz系统域向74.25MHz视频域传递一帧起始标志和像素数据”的模块。后续每讲一种同步结构或验证方法,都可以回到这个对象上推演它是否适用、约束怎么写、仿真怎么激励。

需要特别强调的是,CDC验证不是仿真通过就结束。仿真中如果不显式建模亚稳态,跨域路径可能“碰巧”正确;而实际硬件中,亚稳态发生的时刻与温度、电压、时钟相位都有关系。因此,CDC验证必须同时依赖结构正确性、约束完整性和仿真/形式验证三方面证据,缺一不可。