CDC电路设计1 - single bit
引言:
跨时钟域问题一直是IC设计的核心关注问题之一,笔者利用闲暇时间再次从整体层面更深层次review CDC设计。
1.1 同步时钟,异步时钟
跨时钟域处理的主要对象是异步时钟,辨别何为同步时钟,异步时钟是至关重要的。
如下图,clk0 clk1是异步时钟还是同步时钟呢?可以是异步 Or 同步。
两个时钟区分同步时钟需要满足:
- 时钟频率
- 高低电平占空比
- 各个时钟相位
- clock latency …
当不能确定上述的一个或多个时候,那么就互为异步时钟。再回到上图clk0 clk1,当为同步时钟的情况下,假如clk1是clk0的二分频,在后端post-CTS后,这种同步关系的时钟还是比较常见的。
1.2 Meta stable
亚稳态主要影响DFF cell,上图描述的是DFF setup/hold window,当在T0-T1区间内,D端发生变化时,那么就存在meta-stable问题。
对于Meta-stable问题,主要影响两方面。
- Q端不能确定稳定后到底是0还是1;
- CK-Q的delay变大;(往往这点容易忽视);
1.3 CDC 电路的目标
我们已经知道什么是异步时钟,也知道对于异步时钟,存在亚稳态的问题,那么CDC电路,主要的目标是100%确保:
- 数据的值不能错!
- 数据的顺序不能错!
- 数据的个数不能错!
- 同步后不存在meta-stable问题!
1.4 典型的single-bit电路
典型的两级同步电路如上图所示,也称之为打两拍。
它的同步电路,波形可以如下所示:
d_async0如上图所示,由于不满足clk1的setup,hold要求。d_async0会产生亚稳态问题,最终会稳定在0 or 1;
那么,上述电路成立的条件包括什么:
- d_sync0的信号宽度需要确保能被clk1采到;
d_sync0的宽度需要大于setup + hold + Tclk1;
-
clk1的第一个DFF CK-Q变大,若clk1 freq过大,DFF2仍然亚稳态,STA会依据lib里面标准的CK-Q来算delay,因此对clk freq也存在要求。
-
clk1 第二个DFF同步会存在两种情况,晚1T与早1T的情况,上图例子是一个晚1T的波形。下图为早1T的波形,这正是由于亚稳态不能确定具体是0 or 1的原因。
1.5 错误的同步电路
错误的原因:
- 组合逻辑输出glitch,会影响后级;
- 需要DFF输出
错误的原因:
- CK-Q delay非STA 标准值,可能后级还会存在亚稳态;
- 可以通过set_max delay来约束;