我去年秋招刚经历过,CDC题目确实不限于基础了。一个常考的点是异步复位同步释放(Asynchronous Reset Synchronization),虽然算单bit同步,但细节多。
设计上,复位信号异步置位,但释放时要同步到目标时钟域,避免亚稳态导致系统状态不一致。笔试可能会让你画电路图或写代码,注意复位信号在同步链中的传播延迟。验证时,要检查复位释放后,系统是否在预期周期内进入正常状态,以及复位期间和释放后的亚稳态影响。
另一个复杂场景是时钟门控(Clock Gating)下的CDC。当源或目标时钟被门控时,同步器可能失效,因为时钟停止期间亚稳态无法被采样消除。设计上需要确保时钟门控不影响跨时钟域通信,比如在门控前完成同步。验证时,要加入时钟门控的随机开关,测试同步器在时钟暂停和恢复时的行为。
还有多时钟域交互的系统级CDC,比如多个时钟域之间的数据交换,可能涉及FIFO、握手和同步器的组合。笔试会给出一个场景,让你分析潜在问题,比如死锁、数据覆盖。设计时要注意协议的一致性,验证时用形式验证(Formal Verification)结合仿真,检查所有可能的交互时序。
建议复习时多看实际项目案例,笔试题目往往来自真实问题。验证方法上,现在强调使用CDC检查工具(如Spyglass CDC),但笔试可能考原理,比如如何构造测试用例覆盖亚稳态。