今天和同事讨论个问题,同源分数倍时钟比如200M和300M时钟需要做异步处理么? 能否按同步时钟处理。经过讨论和搜索,发现分数倍时钟之间相位关系复杂,最好还是做异步处理,然后设置为异步时钟更为合适。
同步时钟
数字设计中,一般认为,频率相同或频率比为整数倍、且相位相同或相位差固定的两个时钟为同步时钟。
◆同源同频同相位
此类时钟频率和相位均相同,是同步的。时钟间数据传输只要满足正常的建立时间和保持时间即可,不需要特殊的同步设计。
◆同源同频不同相位
两个时钟同频但不同相位时,只要相位差保持固定,也可以认为是同步的。
◆同源不同频但存在整数倍分频比
此类情况下,一个时钟往往是另一个时钟的分频,即便存在相位差也是固定的。
异步时钟
工作在异步时钟下的两个模块进行数据交互时,由于时钟相位关系不可控制,很容易导致建立时间和保持时间 violation。以下 3 种情况下的时钟可以认为是异步的。
◆不同源
由两个不同的时钟源产生的两个时钟是异步的,这是最常见的异步时钟。
◆同源但频率比不是整数倍
此时两个时钟间相位差也可能会有多个,例如同源的 7MHz 时钟和 3MHz 时钟,他们之间也会出现多个相位差,时序也难以控制。一般情况下也需要当异步时钟处理。
◆同源虽频率比为整数倍但不满足时序要求
前面介绍同步问题时有说明,当信号从快时钟域传递到慢时钟域时,只要慢时钟域能安全采集到从快时钟域传来的信号,就不存在异步问题。但如果信号在快时钟域翻转速率过快,慢时钟域可能不会安全的采集到从快时钟域传来的信号,这也可以认为是异步问题。
一般来说,慢时钟域时序约束较为宽松,快时钟域较为严格。
如下图,快时钟域信号在慢时钟域上升沿前翻转了 2 次。此时,慢时钟域会漏掉部分数据。而且,数据的快速变化也可能导致 timing violation。