本系列将对sunburst design网站的2008最佳文章《Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog》进行翻译和基于自我理解的分析阐述,本文介绍多信号跨时钟域传输。
目录
多信号跨时钟域传输
多信号传输和多比特数据跨时钟域传输是不完全相同的,多信号通常指的是多个单比特控制或使能信号,跨时钟域后对某个寄存器或者触发器进行控制,当然本文介绍的传输方法也适用于多比特数据跨时钟域传输。
由于多个信号其中每一个信号都是单比特,所以很多人选择单比特信号打两拍处理来进行跨时钟域同步。但是由于原时钟域的多个信号彼此之间存在skew,也许很小的时钟偏斜在跨时钟域被采样时钟采集时,会导致信号的相位延迟,而带来错误的结果。
多比特 CDC策略
多bit控制信号跨时钟域传输时,可以将通用策略分为三类:
- 多比特信号融合,如果可以的话,在跨时钟域之前先将多信号进行融合,前提是这些信号作用相同,这样融合后再跨时钟域就相当于单比特跨时钟域了。
- 多周期路径规划,用1个同步后的加载信号,来安全地传输多比特CDC信号。
- 使用格雷码。
多比特信号融合
情况1——2个同步控制信号
下图展示了一种2个同步控制请求信号在跨时钟域传输时,由于时钟偏斜所导致的数据传输失败案例。
b_load和b_en信号是bclk的加载和使能信号,需要跨时钟域传输,但是由于存在时钟偏斜,尽管分别都进行了打两拍处理,但是从上图这种情况可以看出来,偏移了一个时钟,导致最终数据加载失败。
解决方法——融合
既然两个控制信号需求相同,同时拉高与拉低,那么可以将两个信号合并,作为一个信号再打两拍进行跨时钟域,其结果如下图所示:
情况2——2个含有相位差的控制信号
原时钟域输出2个控制信号,这两个控制信号存在相位差值,目的是在目标时钟域上可以延迟1拍,错开1个cycle实现对于2个寄存器的控制,但是可能在2个控制信号分别打拍时,出现亚稳态信号,延迟1拍输出有效信号,导致数据加载错误,如下图所示: