本文重点参考了文章 《Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog》
多周期路径法
前面看过一些同一个大佬的文章,翻译链接如下。
Clifford论文系列--多异步时钟设计的综合及脚本技术(1)
Clifford论文系列--多异步时钟设计的综合及脚本技术(2)
今天主要是看到了多周期路径的方法,它主要是用于多比特数据传输,在此单独做个笔记。
下图中显示了在时钟域之间传递的两个编码控制信号。如果这两个编码信号在采样时有偏移,则在接收时钟域中的一个时钟周期内可能会产生错误的解码输出。
这个问题可以使用“多周期路径法(MCP)”来解决。
MCP方法是指将不同步的数据发送到与同步控制信号配对的目标时钟域。也就是说,不对数据进行同步,但是会发送同步控制信号。数据和控制信号同时发送,允许数据在目标寄存器的输入端进行设置,同时控制信号在到达目标寄存器的负载输入端之前做同步。
该方法的优点:
(1)不需要在发送时钟域计算适当的脉冲宽度
(2)发送时钟域只需要将使能信号发送到接收时钟域,表示数据已经被传递并已经准备好被加载。使能信号不需要返回到初始逻辑电平。
通过握手保证控制信号能够正确传输,然后在目标时钟域通过控制信号来采样数据。
因为在采样之前,非同步数据被传递并在多个时钟周期内保持稳定,所以采样值不会出现亚稳态的危险。
最常见的通过一个同步时钟域之间的方法是使用一个同步脉冲发生器。如图所示这种同步使能脉冲产生的一个关键特征是输入信号的极性无关紧要。在图18中,d输入在周期1和周期4高信号已经传播通过三个同步触发器。在周期3,q2和q3触发器的输出具有不同的极性,导致同步使能脉冲在相同周期的异门或门的输出上形成。类似地,d输入在周期7时切换为低电平,到周期10时,一个高信号通过三个同步触发器传播。同样,在第9周期,q2和q3触发器的输出具有不同的极性,导致同步的使能脉冲在异或门的输出上形成。
由于所有MCP都使用同步使能脉冲产生电路,因此创建和使用更小的等效符号来表示同步使能脉冲产生电路被认为是有用的。等效符号如图所示:
除了产生任何d输入极性的脉冲外,同步使能脉冲产生电路也有一个q输出,跟随d输入延迟三个时钟周期。q输出通常用作反馈信号,并通过发送时钟域的另一个同步使能脉冲产生电路作为确认信号。
图显示了一个典型的发送-接收切换-脉冲产生设计。使用这种技术,它要求接收时钟域有逻辑检测到脉冲时就要在适当的地方捕捉数据,因为脉冲将只对一个接收时钟周期中的每个多周期数据有效。
使用MCP公式时的一项重要技术是将使能信号作为确认信号传回发送时钟域,如图所示。
对于图中的示例,应答反馈信号(b_ack)产生一个应答脉冲(aack),该脉冲被用作一个小的ready-busy、1状态的FSM块的输入,该块生成一个ready信号(ready),以表明现在再次更改数据输入(adatain)值是安全的。一旦ready信号升高,发送方就可以自由地伴随asend控制信号发送新的数据(adatainain)。
未完待续...