跨时钟域信号该如何处理呢?

1
跨时钟域是如何产生的呢?现在的芯片(比如soc,片上系统)集成度和复杂度越来越高,通常一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如soc芯片中的cpu通常会工作在一个频率上,总线信号(比如dram bus)会工作在另一个时钟频率下,而普通的信号又会工作在另外的时钟频率下。这3个不同时钟频率下工作的信号往往需要相互沟通和传递信号。
不同时钟域下的信号传递就涉及到跨时钟域信号处理,因为相互之间的频率、相位不一样,如果不做处理或者处理不当,如下图所示的时钟域clk_a的数据信号a可能无法满足时钟域clk_b的setup/hold时间,可能导致:
1.数据丢失,无法采到预期中的信号;
**2.**亚稳态的产生。
从而导致某个电路模块或者整颗ic无法工作。
2
那么,常见的跨时钟域信号处理方法都有哪些呢?有如下的三种:
两级dff同步器握手协议异步fifo最简单的单比特信号处理通常采用两级dff串联进行同步,如下图所示:
从时钟域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越长出错的概率越小。所以一级看上去不太稳,二级差不多够用了,至于三级可能会影响到系统的性能,而且增加面积,所以看上去没什么必要。
两级dff同步器听起来够简单的吧?这个方法虽然很简单,但是很多人用起来还是常常会犯错。
3
错误1 :时钟域a的组合逻辑信号直接敲两级dff同步到时钟域b
如下图(1)所示虽然时钟域a的逻辑信号c0 传输到时钟域b的时候,也用了两级dff 同步器,但我们知道组合逻辑电路各个输入信号的不一致性以及组合逻辑内部路径的延时时间不一样,运算后的信号存在毛刺如图(2),而我们又无法预先知道clkb 的上升沿何时会到来,clkb 采样到的信号就无法预知,这显然不是我们想要的结果。
因此,要想clkb 能采到稳定的信号,时钟域a的信号必须是经过clka 敲过,在一个时钟周期内是稳定的信号,如图(3)所示:
4
错误2 : clock-gating enable 信号没有经过异步处理
在下图中a_in 信号经过clka的dff敲过,再送到两级dff 同步器处理,完全没毛病。但是f2的使能信号en是从时钟域a来的,当en信号变化的时候,由于时钟域不一样,无法保证使能之后的clkb信号采样数据时满足setup/hold time 要求,这时f2输出信号也就变得无法预测了。
两级同步器处理单比特信号虽然比较简单,但还是要注意它的使用方法,不要犯上面的错误哦。

诺基亚WP8手机八大新功能揭秘
讯飞录音笔SR501开启零接触,复工、防疫两不误
pcb设计工作怎样变得更加智能
国内内存 / SSD 厂商嘉合劲威发布了内存条、SSD 涨价预警
智能门锁未来发展方向深度分析:智能门锁火了,可是它的真正卖点在哪里?
跨时钟域信号该如何处理呢?
5W充电器芯片U62113的工作原理
轻触开关的封装种类、尺寸及应用范围
安科瑞AcrelCloud-3200预付费水电云平台简介
ARM内核8位MCU市场发展平稳
智慧医疗的黑科技了解一下
大学毕业设计一席谈之四十一 压电信号的睡眠检测算法(11)完善程序
关于超软X射线面密度测量仪的介绍
绕开CPU和内存,你浏览的内容或来自SSD的推荐
电气计算:电阻、电压、导线面积、电缆载计算方法
泰尔终端实验室对多款5G终端进行了测试分析
探秘Agilex FPGA,看懂英特尔的技术创新力
谷歌广告营收高歌猛进,人工智能是推动力
高品质万兆园区网络带你领略无线网络体验升级:万兆无线,畅享无界,激发产业新活力
B2B电商的春天来了,元件分销要如何借到这股东风?