1. 同步时钟/异步时钟

在目前芯片或IP设计中,只有一个时钟的可能性很小,通常有好几个时钟,比如接口上有一个时钟控制数据进出,Core如ARM也存在CPU时钟,DDR控制部分也存在较高频率的给DDR芯片的时钟。

因此,芯片或IP中解决跨时钟域(Clock Domain Crossing,CDC)问题是非常重要的。

1.1 同步时钟

时钟在频率、高/低电平持续时间、相位以及时钟输入的latency有明确关系定义的多个时钟属于同步时钟。其中相位也就是时钟第一个上升沿的时间,输入latency是时钟从晶振到芯片或FPGA内部之前的延时。

简单来说,同步时钟就是指时钟频率、相位等具有一定关系的时钟。并非一定只有频率和相位相同的时钟才是同步时钟。

同步时钟是在综合工具的角度去看的,只要告诉工具这些时钟上述的明确关系,工具就能分析出从一个时钟到另一个时钟路径上的Timing是否满足寄存器的Setup/Hold需求。

1.1.1 同源时钟

同源时钟,通常由一个PLL或MMCM产生,相位不需要相同,只要求相位固定。因此,由一个PLL或MMCM产生的两个同源时钟,属于同步时钟。

1.1.2 同相位时钟

同相位时钟可以频率不同,但是时钟跳变沿是对齐的。如下图,clk0为慢时钟,clk1为快时钟,两个时钟第一个上升沿的时间相同,时钟跳变沿也对齐,相位相同。

因此,两个同源时钟可能是同步时钟,可能是异步时钟的说法是错误的。

1.2 异步时钟

异步时钟就是无法明确定义多个时钟上述时钟关系的时钟源。简单来说,异步时钟域的时钟没有任何关系。

假设有两个PLL,两个PLL输出的时钟分别为clk0和clk1,那么这两个时钟是异步时钟,因为是两个PLL,可能无法确定这两个时钟之间的相位关系,工具也因此就无法分析clk0到clk1路径上的Timing。

2. 亚稳态

首先看一下正常情况下满足DFF Setup/Hold需求时,经过一个CK到Q的延时,DFF将D端的数据抓到Q端。

当不满足DFF的Setup/Hold需求时,如下图,D端信号在上升沿到来之前没有保持一定的时间,导致Setup时间未能满足需求。DFF就会产生亚稳态(Metastable)效应。

产生亚稳态效应后,Q端最终还是会输出一个稳定的电平(不是说就不输出了),而是在稳定之前,它会经过一段时间的不确定电平的状态,如下图,有可能它中间经过不确定状态后稳定输出低电平,这时可认为DFF抓到了D的低电平;也有可能它中间经过不确定状态后稳定输出高电平,这时可认为DFF抓到了D的高电平。因此,亚稳态最终会输出一个稳定的电平,但是最终输出的这个稳定的电平是0还是1无法确定。

第二个需要注意的是亚稳态后DFF的CK到Q延时会增大,不是正常的DFF Setup/Hold需求满足时的CK到Q延时。

所以,亚稳态主要会出现两个问题,第一是DFF输出不确定(不是不稳定),可能是1或0;第二是DFF的CK到Q延时更长。

在0.13um工艺下,最大的Metastable延时通常在1ns左右,也就是Metastable时在时钟上升沿1ns后DFF就会输出稳定的状态。如果想要准确的最大Metastable延时,就需要去咨询做这个Cell library的厂家。

出现亚稳态后需要通过跨时钟域同步电路解决亚稳态问题。

参考资料

[1].https://mp.weixin.qq.com/s/66PXcHVdTcS1zG8xVsuYNQ
[2].https://blog.csdn.net/yh13572438258/article/details/123580666
[3].https://mp.weixin.qq.com/s/3F90JzXbQJOizHYrQw8fuQ