简介
在上个系列中,主要分析了单bit时钟信号是如何在多个时钟域中进行同步的。概括起来只有两点:一是通过同步器,二是将控制信号与数据信号合并成一组(数据+控制)总线,经过FIFO或RAM实现跨时钟域设计。那么在这节中,重点来分析跨时钟域这个概念。通过这节的分析,可以知道那些类型的时钟,在实际的处理过程中是需要同步器的,而哪些不需要经过同步器。一般来说,都可以使用同步器来进行处理,在使用同步器之前,一定要清楚两个时钟间的频率以及相位的关系。但是下面的介绍中,可以不使用同步器的,一方面可以节省逻辑资源,另一方面可以使设计变得简单。
跨时钟域
在讨论时钟域见传输数据的方法之前,先来分析跨时钟域问题的各种类型。如果多个时钟都起源于同一时钟(注:在《硬件架构的艺术》这本书上并没有明确地说是起源于同一外部晶振时钟还是内部RC时钟,或者是PLL或者DCM的时钟,根据作者经验来分析,一般MCU会有内部RC晶振,此处的“同一时钟”并不包含这种精度比较差的RC晶振,因为如果后续需要倍频处理数据的话,因为RC较差的精度,容易造成倍频前的时钟与倍频后的时钟信号在并不是RC此刻震荡的真实频率运算后的结果,造成数据传输的误差。但是这个需要继续实验数据证明,如果有读者发现这个情况并不存在,可以留言回复。总之,推荐比较准确,精度比较高的时钟信号),并且它们的相位和频率关系是一致的,那么这些时钟可以看成是跨同步时钟域的时钟,按照相位和频率的关系,可以将这些时钟分成以下类型:
- 同频率零相位差时钟
- 同频率恒定相位差时钟
- 非同频率可变相位差时钟
概括地来说,我们在讨论信号从一个时钟域到另外一个时钟域是否属于跨同步时钟域,我们仅仅考虑两个时钟信号本身的特性,而暂时不考虑两个时钟在传输过程中因为触发器等发生的时钟延迟造成的影响。
1 同频率零相位差时钟
在此种情况下,两个完全相同的时钟clk1和clk2具有同样的频率与相位差,clk1和clk2我们可以看成为完全相同的。并由同一个时钟源产生。那么,在clk1和clk2之间的传输&