跨时钟域信号如何处理(一、单bit信号) 您所在的位置:网站首页 时钟信号有哪些 跨时钟域信号如何处理(一、单bit信号)

跨时钟域信号如何处理(一、单bit信号)

#跨时钟域信号如何处理(一、单bit信号)| 来源: 网络整理| 查看: 265

文章目录 背景两级DFF同步器脉冲展宽同步握手协议

背景

一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会工作在另一个时钟频率下,而普通的信号又会工作在另外的时钟频率下。这3个不同时钟(频率)下工作的信号往往需要相互沟通和传递信号。

不同时钟域下的信号传递就涉及到跨时钟域信号处理,因为相互之间的频率、相位不一样,如果不做处理或者处理不当,如下图所示的时钟域CLK_A的数据信号A可能无法满足时钟域CLK_B的setup/hold时间,可能导致: 1.数据丢失,无法采到预期中的信号; 2.亚稳态的产生。

各大FPGA厂家的FPGA编译工具(这是习惯性叫法)在逻辑综合以及实现之后都会出一个时序报告,里面就有跨时钟域的报告,在里面你可以看到你有哪些信号进行了跨时钟域。如下图为Vivado工具的报告位置: 在这里插入图片描述 对于这些跨时钟域的情况,一般我们要在逻辑设计的时候就解决,之后的时序约束中设置为false path,即让综合工具不要机关算尽般去布局布线让时序满足要求(这会拖慢编译时间,当然时序也不会成功),设置为false path或者时钟组之后,工具默认不对其进行时序分析(因为设计中已经解决了跨时钟域的问题,这也就是为什么输跨时钟域问题是设计解决的,而不是约束解决的)。

两级DFF同步器

参考资料 https://mp.weixin.qq.com/s/ld466c-zJQWev_Py3HE2Ew http://blog.sina.com.cn/s/blog_679686370102wn5f.html 场景:慢时钟域到快时钟域 图片

从时钟域A(CLKA)传过来的信号a_in, 直接用时钟域B CLKB采用很容易产生亚稳态,用两级DFF 敲过后再使用就可以把亚稳态概率降到一个合理的值。

很多人可能会问,为什么是两级DFF呢?一级或者三级DFF行不行呢?这里有一个平均失效间隔时间MTBF(Mean Time Between Failure)的考虑。MTBF时间越长,出现亚稳态的概率就越小,但是也不能完全避免亚稳态。注意采样时钟频率越高,MTBF可能会迅速减小。

有文献给出的数据:对于一个采样频率为200Mhz的系统,如果不做同步MTBF是2.5us,一级DFF同步的MTBF大概是23年,两级DFF同步的大约MTBF大概是640年,MTBF越长出错的概率越小。所以一级看上去不太稳,二级差不多够用了,至于三级可能会影响到系统的性能,而且增加面积,所以看上去没什么必要。

module sync_method_1( signal_in_clk1, signal_out_clk2, CLK2); input signal_in_clk1; //时钟域CLK1里的信号 output reg signal_out_clk2; //时钟域CLK2里的信号 input CLK2; //时钟CLK2 reg signal_r1; always @(posede CLK2)begin signal_r1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有