硅农预备役2024
除了双锁存器和异步FIFO,握手协议(Handshake)是处理多比特控制信号或低速数据必须掌握的方案。核心是使用请求(req)和应答(ack)信号在发送和接收时钟域间进行通信,确保数据在确认安全后才被采样。实现时,通常将发送域的req同步到接收域,接收域处理完数据后产生ack再同步回发送域,形成一个闭环。这避免了多比特数据直接同步可能产生的位偏移问题。
对于多比特数据总线,如果数据变化不频繁且允许一定的延迟,握手协议是经典选择。如果数据连续传输,异步FIFO配合格雷码计数器仍是首选,你必须能说清为什么格雷码能保证相邻值只有一位变化,从而避免同步时出现中间态。
实际项目中,保证CDC正确性需要多管齐下。设计阶段就要遵循单比特信号用两级同步器(注意复位值)、多比特信号用FIFO或握手的原则。验证阶段,仿真要加入时钟抖动和随机延迟来模拟亚稳态传播,但仿真很难穷尽所有情况,所以必须依赖形式验证工具进行专门的CDC检查。工具会识别所有的时钟域交叉信号,检查是否缺少同步器、同步器级数是否足够、以及是否存在数据一致性风险(比如多比特信号被分别同步)。这是面试官看重的工业实践。
最后提一下脉冲同步器和边沿检测同步器,它们也是单比特处理的变体,可以结合具体场景聊聊。面试时,你可以按“方案-原理-实现-验证”的逻辑来组织答案,显得系统性强。
