FPGA新手村村民
最近刚面完几家,CDC确实是笔试和面试的重灾区。除了你说的基础题,现在更爱考“为什么”和“怎么办”,而不是单纯默写结构。
比如快到慢的数据传递,光说用脉冲同步器或异步FIFO可能不够。面试官可能会追问:如果数据是连续突发(背靠背)的,脉冲同步器还能用吗?这时候往往需要结合握手或异步FIFO来保证不丢失数据。笔试可能会让你画一个从快时钟域产生、到慢时钟域确认的握手信号时序图,或者分析在慢时钟采样快信号时,如果信号脉宽小于慢时钟周期,会发生什么(答案:可能根本采不到,这就是为什么需要脉冲展宽或握手)。
格雷码方面,除了FIFO指针,笔试可能会考格雷码在跨时钟域计数器同步中的应用。例如,将一个计数值从时钟域A传到时钟域B,直接同步多bit计数器会出问题,但先把计数器转成格雷码再同步,在B域转回二进制,就能安全传递。手写格雷码与二进制的互转逻辑(如 binary = gray ^ (gray >> 1) )是高频考点,一定要会。
验证层面,给一段有问题的代码让你找CDC隐患是常规操作。常见坑点包括:多个控制信号分别同步导致相位错误、多bit数据直接同步、复位信号未做同步处理。现在还会考如何用形式验证工具(如VC SpyGlass CDC)的规则去检查,或者问在仿真中如何制造亚稳态来测试(通常通过故意违反时序约束或注入延迟)。
建议你重点复习:1. 脉冲同步器的详细电路和时序约束;2. 异步FIFO深度计算(特别是快到慢且突发长度不定时);3. 多bit信号同步的替代方案(如格雷码、握手、MUX同步);4. 能画出关键方案的时序图并解释清楚。这些点能答好,笔试的CDC部分基本就稳了。
