芯片跨时钟传输:握手吞吐还是FIFO容量
跨时钟域故障往往只在频率比和相位碰到特定组合时出现。芯片设计要先判断事件能否用握手可靠保持,再判断连续数据是否需要异步FIFO;前者受往返延迟限制,后者受指针同步和容量边界限制。
源域一个时钟周期的脉冲,可能短于目的域采样周期,两个采样沿都落在脉冲之外时,双触发器同步器不会捕获任何高电平。简单拉宽脉冲只在已知频率比和最大暂停时间下有效,若目的时钟可门控或降频,所需宽度没有固定上界。事件必须转成能够持续到对端确认的状态。
请求确认握手让源域保持请求,目的域同步后执行并返回确认,源域见到确认才撤销请求。它能保证单个事件不丢,却包含两次跨域同步,最大吞吐受往返周期限制;源域在上一次完成前又产生事件时,需要排队或计数,否则仍会合并。切换位同步适合稀疏事件,但若连续切换快于目的域观察,同样会偶数次抵消。
多位数据不能把每一位独立同步后直接重汇合,因为各位可能在不同目的周期稳定,组合成源域从未产生的字。常见做法是先在源域锁存数据,再用握手只跨控制信号,并保证数据在整个采样窗口保持不变。静态时序约束需识别这条数据路径的稳定假设,不能误把它完全切掉后不再验证保持时间。
当事件可连续到达,异步FIFO用双口存储解耦两域。写指针在写域推进,读指针在读域推进,各自把编码后的指针同步到另一侧,用于判断满和空。格雷码相邻计数只变化一位,降低多位同时翻转带来的采样歧义,但这个数学性质只有在各位到达同步触发器的偏斜受控时才成立。
若格雷指针各位物理路径差异超过一个快时钟周期,接收端仍可能同时看到跨越多个源状态的变化。约束应限制指针总线最大延迟或位间偏斜,并确保源寄存器直接驱动同步器。综合优化若在编码后插入不同组合逻辑,也会破坏一次一位变化的前提。形式检查可以验证逻辑序列,物理实现后仍需静态时序确认布线。
满空标志通常是保守的:远端指针经过两级同步后才可见,写侧可能暂时认为更满,读侧可能暂时认为更空,这会损失少量吞吐但保持安全。错误地用预测指针提前释放空间,会在极端相位下覆盖未读数据。FIFO深度必须覆盖生产与消费速率差、同步延迟和最长停顿,而不是只按平均频率比选择。
同步器可靠性还取决于亚稳态解析时间。增加级数能提高平均无故障时间,却增加握手延迟和FIFO状态保守量;目的频率、异步翻转率及工艺参数共同决定需求。实现工具若把同步寄存器分散放置,会缩短可用解析时间,因此应标注同步器属性并检查物理距离。可靠性计算必须使用目标工艺提供的参数,不能照搬其他节点的经验级数。
跨域复位也会制造假事件。两侧指针若在不同时间释放,某侧可能把远端旧状态解释为新数据;握手请求复位不一致则会凭空产生确认。复位释放应在各自时钟域同步,并定义一侧停钟时另一侧如何等待。
验证要随机化频率、相位、门控和复位释放顺序,并用断言检查不丢、不重、不乱序。还应让源域在确认返回前连续产生事件,确认设计确实执行背压或排队,而非静默合并。





