tag 标签: soc,跨时钟域

相关博文
  • 热度 14
    2016-1-25 21:35
    1457 次阅读|
    0 个评论
    4.1 )同步器前不能有组合逻辑电路 如上图,在前一个时钟域的 dff 输出和后一个时钟域输入之间不能有组合逻辑,原因是组合逻辑会造成毛刺现象,后一级时钟域的 dff 很可能敲到毛刺,进而引入错误。 4.2 )避免重收敛( reconvergence )和分叉( divergence ) 重收敛的含义是, A 时钟域的多根信号分别进行同步,同步到 B 时钟域,然后在 B 时钟域从新做逻辑汇聚成一根信号。这种同步的方式有一个很大的问题,你无法预期同步后的多根信号和之前还是一致的,例如,两根信号之前都是 1 ,但是在同步后可能变成很多的情况。所以再重新汇聚肯定会出问题。例如下图中的状态机,在 A 时钟域可能是 S1 状态,但是同步后可能就变成了 S2 状态了。其实重收敛的问题可以避免,就是采用格雷码编码,避免一个时刻多个数据跳变。 如下图的格雷码编码再解码,就可以解决上述的一些问题。 分叉的含义与之相反,在 A 时钟域的单根信号被分别同步到 B 时钟域的多根信号,这同样会面临同步不一致的情况,有的被同步成 1 ,有的被同步成 0 。 4.3 )避免将 cmd 和 data 分开进行同步,而要绑定到一块采用异步 fifo 实现 Cmd 和 data 经过异步 fifo 处理后的延迟可能会发生变化,所以应当避免将他们分开进行同步,而要绑定到一块进行同步 {cmd,data} 。 最后提一下异步复位同步释放电路,这种电路在 soc 中也广泛被使用。
  • 热度 18
    2016-1-23 12:12
    1195 次阅读|
    0 个评论
    3 、如何处理跨时钟域 上一节讲了系统中如果出现跨时钟域的数据信号交互如果不进行同步处理可能会出现一系列不可期的问题,那么如果要处理该如何处理呢。 1) 控制信号的处理,事实上控制信号处理也分很多种,如慢时钟域的信号如何同步到快时钟域的,快时钟域的如何同步到慢时钟域的。 1.1 )电平信号的同步 上图示意了慢时钟域的信号采用两级 dff 同步到快时钟域,此时要求 cdc_s 信号 stable 要维持足够长的时间,如上图右侧的公式,否则仍然可能出现不能正确同步的情况。这种电路一般用于同步电平信号或者 pusle 很宽的信号。使用限制:保险起见,输入信号的脉冲宽度至少是同步器同步时钟的 2 倍 1.2 )边沿检测电路及其同步 如上图,是在 1.1 的基础上实现的边沿检测电路(上升沿检测电路,大家可以想象一下下降沿检测电路该如何实现,右上角的 A(~B) 改成( ~A ) B, 如果将这两种都合并呢,其实就是抑或逻辑。),当它检测到 clk1 的时钟域有个上升沿的时候,会在 clk2 的时钟域产生一个 pulse 。这种电路在应用于控制信号中非常常见。使用限制:保险起见,输入信号的脉冲宽度至少是同步器同步时钟的 2 倍。如果不满足条件,则只能使用下面提到的脉冲检测电路。 下图是边沿检测电路,其实就是右上角的电路换成异或逻辑,下面提到的脉冲检测电路会利用这个电路的特性实现。 1.2 )脉冲检测电路及其同步 如上图是脉冲检测电路,可以将快时钟域的脉冲同步到慢时钟域中,这种电路有个使用注意点,就是快时钟域的脉冲之间要保留一定的时间间隔,否则第二个脉冲会检测不到,同步后的脉冲变成了一个,保险起见脉冲之间的间隔至少保留 2 个同步器同步时钟。那么有人会问如果真正的电路会出现间隔很小的脉冲那该如何进行同步处理。我提供的第一种方法是故意将彼此之间的间隔拉开,另一种方法就是采用下面提到的异步 fifo 处理了。 提示:右上角的电路其实就是 data^Q( 异或 ) 。   使用注意事项: