hi,根据之前大家的反馈,这一章就来简单介绍一下cdc也就是跨时钟域可能存在的一些问题以及基本的跨时钟域处理方法。
跨时钟域的问题主要存在于异步时钟信号之间。首先同步时钟和异步时钟的主要区别在于同步时钟是同源的,有一个确定的相位关系,在综合约束的保证下同步时钟路径可以尽可能的去满足setup/hold的要求。同步时钟在cdc中属于同一个时钟域。
而异步时钟来自不同的晶振源,他们之间没有一个确定的相位关系,也就是说如果一个条路径的起点和终点寄存器由异步时钟驱动,没有任何办法来保证信号在何时会到达终点寄存器,这样可能引发一系列的问题,比如亚稳态。我们知道对于同步时钟信号,在综合工具以及后端工具中有时钟约束,可以解决同步时钟路径的setup/hold,而对于异步信号,在综合以及后端中都设为false path,也就是说没有办法从工具的角度进行解决。在这种情况下,就需要从设计层面来解决这个问题,避免这些路径的违例对电路功能造成影响。
synopsys提供的spyglass工具可以用于检测系统中存在的cdc路径,并且分析其可能产生的问题,在综合之前进行cdc的检测以及相关设计的修改,可以最大程度地避免这些问题。下面我们来看下几种cdc可能造成的问题以及相应的检测和简单的解决方案。
1.metastability
亚稳态是跨时钟域中最主要的一个问题,因为在一条时钟路径中我们无法预知信号会在何时到达终点寄存器,那么有可能信号就会造成setup/hold的违例
上图所示的例子是一个很典型的metastability 问题。由于a信号在f2寄存器的setup违例,造成的亚稳态会在f2的下接负载中进行传播。
对于亚稳态问题,针对具体信号的功能,一般有不同的处理。
对于多bit的data信号,我们可以使用使能技术,也就是通过一个使能信号来判断data信号是否已经稳定,当使能信号有效的时候说明data处于稳定状态,在这种情况下终点寄存器才对信号进行采样,可以保证没有setup/hold违例。而使能信号一般使用double ff的方法来进行同步。下面是一些简单的data同步电路的例子:
在该电路中cntrl信号通过两级寄存器同步,通过mux来控制data的采样,注意到这里使用的是recirculate的mux
当然也可以不适用recirculate的mux,mux的另一个输入同样来自终点时钟域。
此外还可以通过long-delay,也就是给信号长的延时来保证信号能在指定的时间到达。
如果是控制信号,我们可以直接使用double ff的方法,也就是多级寄存器同步的方法来进行同步。这是因为控制信号位数较少,不需要额外使用使能信号资源。
上图是个最基本的两级flop的同步器,原理很简单,我们默认亚稳态会在一个时钟周期之内解决,因此从第一级flop输入的亚稳态到第二级flop就稳定了。因为这是一个1-bit的信号,所以如果第一个时钟亚稳态稳定的值不是我们预估的值,比如1->0的跳变,亚稳态最后结果是1,那么0的稳定值也会在下一个周期到达第二级flop。
以上是一些最基本的信号同步器,根据具体design的不同,可以设置不同的同步逻辑,但同步逻辑的基本思路都类似,通过控制信号来保证来自时钟源a的信号在稳定的情况下才被来自时钟源b的终点寄存器采样,而控制信号因为多为单bit,一般都使用两级寄存器来采样。
2. fast-slow cdc
除了亚稳态之外,如果信号起始时钟源频率比终点时钟源高很多,那么可能就会导致信号的丢失。
在上图的例子中,虽然a信号到b信号之间使用了同步器,但是如果时钟域a的频率过高,很容易造成信号的丢失。对此,我们需要使用额外的结构来保证a信号不丢失。
常用的方法有两种,一是使用定制化的电路,使a->b之间有至少一个b周期的延时。
另一个是使用控制信号,控制信号的信息来自b时钟域的反馈信号,当b成功完成一次有效采样之后,才让a读取下一个信号。针对不同的具体电路有不同的设计方案,这里就不一一列出。
3. multi-bit data correlation
对于多bit的data信号,如果采用每个bit分别同步的方法,由于每个bit到达同步器的延时不同,可能造成采样时刻多bit的信号corelation有问题。
在上图所示例子中,由于每个bit到达2-ffs同步器的时间不同,如果这几位bit同时跳变,可能在第一拍采样的时候采到的不是我们想要的结果。
对此,我们可以使用格雷码,来确保对于多bit信号每次只有一位bit发生了跳变。另外可以使用使能信号,在所有bit的信号都稳定之后,才进行同步采样。
4. fifo
我们可以使用fifo来完成跨时钟域的信号转换,下图是一个简单的fifo例子
fifo会占用比较多的资源,但对于跨时钟域问题能够有很好的保证。对于fifo,我们可以使用designware中已经搭建好的标准单元,这是经过验证的可综合的fifo。在spyglass中,我们也可以对fifo的正确性进行验证。
5.reset synchronization
复位信号是一个系统中最重要的几种信号。复位信号的同步也是系统中很关键的一个环节。对于复位信号的同步,我们有一个经典的标准设计方案
从上图中我们可以看到,我们采用了异步复位同步释放地方法。这里并不是直接将复位信号进行两级同步。
以上就是cdc的一些基本问题和经典的解决方案,针对不同设计我们可以有不同的解决方法,而通过spyglass,我们可以在综合之前对cdc的问题进行一个完整的检测。希望以上对大家的设计有所帮助。
5G商用步伐加快,2020年开启万物互联全新时代
一文彻底搞懂YOLOv8【网络结构+代码+实操】
三星Galaxy S10和S10 +信息大爆料 或将有第四款具有5G功能的机型
英特尔死磕Nvidia,研发EyeQ5 SOC 芯片超对方效率2.4 倍
开关电源用于非高频电路的详细分析和结论
cdc路径方案帮您解决跨时钟域难题
揭秘未来低空出行场景! “飞行汽车”展区惊艳落地AWC 2023
真空压力表和压力表的区别
探秘“硬核英雄”的超级武器
重庆微浪生物科技发布了自主研发的机器人
UART和USART有区别
2019年全球半导体收入总计4183亿美元 同比下降11.9%
回归4S:双面玻璃+金属中框,努力吧,或许是你的iPhone8
iOS11beta3、iOS11Beta2公测版相继更新,iOS11描述文件奉上!iOS10.2越狱和iOS10.3越狱还没来iOS11降级教程
TI推出具有超低噪音与超低失真的JFET输入运算放大器产品系列
Cache和Write Buffer一般性介绍
一文让你了解RFID标签芯片厂家有哪些?
2022年动力电池回收行业研究报告
新展期|美格智能与您相约深圳国际物联网展 共话5G+AIoT新格局
如何找到AI技术与隐私安全的平衡点?