跨时钟域电路设计——单bit信号

前面提到了简单的双电平锁存器,下面是一些单bit同步电路。

一、慢时钟域向快时钟域

边沿检测同步器

将慢时钟域的脉冲搬移并缩小为快时钟域的脉冲。

跨时钟域电路设计——单bit信号

既可以检测上升沿,也可以检测下降沿。

跨时钟域电路设计——单bit信号

如上图,慢时钟下一个有效脉冲的最短周期为慢时钟的一个周期,站在快时钟的角度下,这个慢时钟域的信号会在快时钟域下持续很多个周期。实际上,这个脉冲在慢时钟域只发生了一次,所以如果用快时钟去检查有效脉冲的翻转边沿是最准确的。边沿上升与下降也只有一次。

适用条件:data_width>clk_fast+T_hold,最安全的就是两个同步周期长度。这样才能保证慢时钟域的脉冲足够保持到被快时钟的同步器采样到。

其verilog代码如下:

跨时钟域电路设计——单bit信号

二、快时钟域向慢时钟域

脉冲同步器

从快时钟域的取出一个单时钟宽度脉冲,在慢时钟域建立新的单时钟宽度脉冲

 

跨时钟域电路设计——单bit信号

图中阴影部分为快时钟域下的翻转电路。

跨时钟域电路设计——单bit信号

由于在慢时钟域下直接采样快时钟域的信号,很大概率会采样失败。因此,我们采用翻转电路对有效脉冲进行标定。

适用条件:输入脉冲间隔>=2*clk_slow。输入脉冲相隔过近,则慢时钟域的新脉冲也紧密相邻,结果是输出脉冲比一个时钟周期宽;如果太近,则无法检测到每一个脉冲。

其verilog代码如下:

跨时钟域电路设计——单bit信号

三、对比

跨时钟域电路设计——单bit信号