数字集成电路(10)时序逻辑电路设计

本人《数字集成电路设计》课程笔记,老师为王仁平。

本文主要讲述时序逻辑电路中的时序分析,包括建立时间、保持时间、最大延迟、污染延时、时间偏差和时间抖动等概念。并简述了时钟网络(在EDA中)分布技术和PLL技术。


第七章 时序逻辑电路设计

1. 时序基础概念

1. 时序分析的目的

对数字系统进行时序检查,判断电路是否可以正常工作(常面临建立时间和保持时间等问题),判断电路的性能等。

常常分析电压、温度、工艺(工艺角)等参数进行分析。

2. 时序分析的分类

1. 静态时序分析(STA)

  • 主要研究对象:建立时间、保持时间、传播延时

  • 常用于分析同步时序电路(源时钟和目的时钟相同)

  • 时序分析模型:

    • 同步时钟/异步时钟
    • D触发器分割组合逻辑

  • 一般不需要进行太复杂的仿真,仅需要计算就可以进行分析,运行速度快。

  • 不依赖于激励,根据穷尽信号路径上的器件就可以进行计算

  • 常用方法是使用查找表——①输入跳变时间②输出负载(电容)→①传播延时②输出跳变(下一级的输入跳变)

    具体方法如下:

    graph LR
        
        第n级输出跳变时间 --即第n+1级输入跳变时间--> 对应的n+1级器件的查找表
        subgraph 第n级
       	第n级输入跳变时间 --> 对应的n级器件的查找表
        第n级负载电容值 --> 对应的n级器件的查找表 
        对应的n级器件的查找表 --> 第n级传播延时
        对应的n级器件的查找表 --> 第n级输出跳变时间
        end
        subgraph 第n+1级
        第n+1级负载电容值 --> 对应的n+1级器件的查找表
        对应的n+1级器件的查找表 --> 第n+2级传播延时
        对应的n+1级器件的查找表 --> 第n+2级输出跳变时间
        end
    
    
    
    

2. 动态时序分析(DTA)

  • 门级仿真
  • 主要用于异步逻辑、多周期路径
  • 在FPGA中,将RTL代码综合利用综合工具综合成门级网络进行仿真,其中各种门级器件的逻辑是厂家提供的。

3. 【时钟】沿

  • 发送沿:发送数据的源时钟活动沿
  • 捕获沿:接收数据的目的时钟的活动沿
  • 源时钟:用于发送数据的时钟
  • 目的时钟:用于接受数据的时钟

小贴士:在同步电路中,源时钟和目的时钟是同一个

4. 时序约束参数

即:建立时间$t_{su}$、保持时间$t_{hold}$、传播延时$t_{c-q}$,同时我们引入污染时间$t_{cd}$

1. 建立时间:

对于捕获沿到来之前,数据需要保持稳定的时间

间接约束了组合逻辑的最大延时

2. 保持时间:

对于捕获沿到来之后,数据需要保持稳定的时间

间接约束了组合逻辑的最小延时

3. 传播时间(延时):

  • 最大延时时间

  • 捕获沿50%(数据输入沿50%【注意:数据输入沿其实就是捕获沿!!!】)到数据稳定输出(输出数据50%)的时间

  • 根据器件不同,可以分为组合逻辑传播延时$t_{logic}$​​和寄存器传播延时$t_{c-q}$​​​​,详细见后文。

4. 污染时间:

  • 可以理解为最短延时时间——理想状态下
  • 从输入“扰动”到输出“扰动”的时间,下文进行解释。
  • 根据器件不同,可以分为组合逻辑污染延时$t_{logic,cd}$和寄存器污染延时$t_{c-q,cd}$​​,详细见后文
  • 所谓理想状态,指的是数据没有跳变时间,即数据跳变是瞬间完成的,数据跳变的$90\%$、$50\%$、$10\%$​​是在同一个时间。
  • 根据以上理想状态的定义,可认为一有扰动,数据就跳变完成。

5. 计算污染时间和传播时间

image-20211020103111439

现对图中四个时间进行解释:

  • 组合逻辑:

    • 组合逻辑污染延时$t_{logic,cd}$​:图中①②之间的时间差$t_{12}$。

      解释:

      ​ 在①时刻,组合逻辑的输入端发生扰动,对于污染延时的计算,①时刻数据跳变完成,即输入信号的50%在①时刻;

      ​ 在②时刻,组合逻辑的输出端发生扰动,对于污染延时的计算,②时刻数据跳变完成,即输入信号的50%在②时刻;

      ​ 故对于组合逻辑,计算污染延时,是从输入“扰动”对输出“扰动”的时间,即

    • 组合逻辑传播延时$t_{logic}$​:图中③④之间的时间差$t_{34}$

      解释:

      ​ 在①时刻,输入数据开始发生扰动,但是此时数据并没有稳定。当③时刻,数据输入正式跳变到50%

      ​ 在②时刻,输出数据开始发生扰动,但是此时数据并没有稳定。当④时刻,数据输出正式跳变到50%

      ​ 故对于组合逻辑,其传播延时为

  • 时序逻辑:

    • 寄存器的污染延时$t_{c-q,cd}$,图中⑤⑥之间的时间差$t_{56}$​

      解释:

      ​ 当时钟的捕获沿到来时,即⑤时刻,$D$​端数据被捕获到寄存器中(锁存在寄存器的第一级锁存器中),并进行传输。

      故时钟的捕获沿即为数据输入数据沿,捕获沿50%即为数据输入沿50%

      ​ 当输出端$Q$​发生扰动,即⑥时刻。计算污染延时时,有扰动说明数据跳变完成,于是⑥时刻,为输出数据的50%

      ​ 故,寄存器的污染延时为

    • 寄存器的传播延时$t_{c-q,cd}$​,图中⑤⑦之间的时间差$t_{57}$​​

      解释:

      ​ 当时钟的捕获沿到来时,即⑤时刻,$D$​端数据被捕获到寄存器中(锁存在寄存器的第一级锁存器中),并进行传输。

      故时钟的捕获沿即为数据输入数据沿,捕获沿50%即为数据输入沿50%

      ​ 当输出端$Q$​​发生扰动,即⑥时刻,但是数据没有稳定。在⑦时刻,输出数据正式跳变到50%

      ​ 故,寄存器的传播延时为

5. 各种信号路径、时序路径

信号的路径主要分为三个

image-20211019210811041

  • 时钟路径

    • 源时钟路径

      graph LR
          模块输入端口的源时钟 --> 某个发送时序单元的时钟引脚
      

      如图所示,$Clk_{u1}→u1时钟引脚$​​

    • 目的时钟路径

      graph LR
          模块输入端口的目的时钟 --> 某个捕获时序单元的时钟引脚
      

      如图所示,$Clk_{u4}→u4时钟引脚$​

    image-20211019213546648

  • 数据路径

    graph LR
        路径起点 --> 路径终点
    
    • 数据起点

      1. 对于时序逻辑电路,为某时序单元的时钟引脚
      2. 对于组合逻辑电路,为某逻辑单元的数据输入端口
    • 数据终点

      ​ 对于组合逻辑电路、时序逻辑电路都一样,均为某单元的数据输出端口

  • 异步路径(如异步复位)

根据路径可将分析类型分为

  • 同步分析:时钟路径+数据路径
  • 异步分析:时钟路径+异步路径

6. 时钟参数两大条件

1. 周期条件

其中,

$t_{c-q}$​:本级寄存器的(最坏)传播延时

$t_{logic}$:两个寄存器之间组合逻辑的(最坏)传播延时

$t_{su}$​:下一级寄存器需要的建立时间

2. 保持时间条件

其中,

$t_{c-q,cd}$​​:本级寄存器的污染延时

$t_{logic,cd}$​:两个寄存器之间组合逻辑的延时

小贴士:如何理解这个不等式?

​ 前文提到,计算单元的污染时间,是”扰动“对”扰动“。于是,$t_{c-q,cd}+t_{logic,cd}$的意思就是从本级寄存器时钟有效沿到下一级寄存器的输入扰动的时间(下一级寄存器的输入扰动即为组合逻辑的输出扰动)。即当$t_{c-q,cd}+t_{logic,cd}$时间过后,下一级的数据输入端已经开始出现扰动,输入开始不稳定。而对于下一级寄存器,其保持时间要求的是下一级有效时钟沿到来之后,其数据输入端需要保持稳定的时间。于是,下一级寄存器的保持时间,只能小于其输入端扰动到来的时间,即有上式。

7. 【实验测量】建立时间与保持时间

image-20211020105507695

  1. 测量建立时间:

    让时钟去采集一个脉冲$D$,设定足够长的保持时间,然后使$D$上升沿不断向时钟沿压缩,如图所示。当输出$D$出现错误时,记下当前上升沿时间$t_1$​,则认为建立时间略大于$t_{clk}-t_1$

  2. 测量保持时间:

    同上,不断压缩$D$的下降沿,当输出$Q$​出现错误时,记下当前下降沿时刻$t_2$,则认为保持时间略大于$t_2-t_{clk}$​。

2. 时间偏差与抖动

理想时钟:

  1. 从时钟沿到各个单元的时钟端口的延时相等(即路径均匀);
  2. 同一个时刻,各个单元的时钟端的时钟相位相等。

实际时钟:

  1. 时钟偏差:各个时钟端口的时钟的周期没有改变,但是相位可能略有差别。
  2. 时钟抖动:时钟的周期存在一些差别,或长或短。

1. 时钟偏差(Clock Skew)

1. 定义与成因

指同一个时钟域之间,时钟信号到达各个寄存器的最大时间差

产生原因

  1. 时钟源到达各个端点的路径长度不同
  2. 各个端口的负载不同
  3. 时钟网络中插入的缓存器不等

2. 计算【全局偏差、局部偏差】:

image-20211025204529658

其中,

$\delta$:时钟偏差

$t_{r-max}$​​:从该时钟域的时钟输入端口到该时钟域内寄存器的最长时间,如图中②

$t_{r-max}$​​​​:从该时钟域的时钟输入端口到该时钟域内寄存器的最短时间,如图中①

1. 全局时钟偏差

image-20211025213413238

如图所示,蓝色阴影部分为全局电路。

可知,$t_{r-max}=0.38ns(T_3)$​​​;$t_{r-min}=0.36ns(T_2)$​​​,故时钟偏差$\delta=0.38-0.36=0.02ns$​​​

2. 局部时钟偏差

image-20211025204957015

如图所示,蓝色阴影部分和上面部分电路之间,不存在逻辑关系,因此阴影部分可以当成该时钟域下的一个局部电路

可知,对于阴影部分而言,$t_{r-max}=0.22ns(T_3)$​​​​;$t_{r-min}=0.21ns(T_2)$​​​​,故时钟偏差$\delta=0.22-0.21=0.01ns$

注意,非阴影部分电路不属于该局部电路,故而$t_{r-min}$取$T_2$,而不取$T_3$

2. 时钟偏差分类(正负)

1. 正偏差

正偏差,即时钟延迟方向与数据流方向一致,如图所示。

  • 建立时间:正偏差对于建立时间是有利的

    ​ 因为信号从$R_1$传播到$R_2$​的时间多了$\delta$,即$T+\delta$,如图所示。

    ​ 意味着,逻辑运算完,数据输出稳定之后,还能多出$\delta$​​​的时间$R_2$​​才接收,即整体时间冗余多了$\delta$​,即建立时间(裕量)多了$\delta$​​。

  • 保持时间:正偏差对于保持时间是不利的

    保持时间是针对同一个周期,上下两级寄存器而言的

    ​ 同一周期,$CLK2$​​落后$CLK1\ \delta$​​​​​时间​,意味着$t_{hold}+\delta<t_{c-q,cd}+t_{logic,cd}$​​​,意味着电路对于竞争(保持时间)更加敏感。

2. 负偏差

正偏差,即时钟延迟方向与数据流方向相反,如图所示。

image-20211025210013014

  • 建立时间:负偏差对于建立时间是不利的

    ​ 因为信号从$R_1$​传播到$R_2$​​的时间少了$\delta$​,即$T-\delta$​,如图所示。

    ​ 意味着,逻辑运算完,数据输出稳定之后,少了$\delta$​​​的时间$R_2$​​才接收,即整体时间冗余少了$\delta$​,即建立时间少了$\delta$​​​。

    ​ 如果要留有足够的建立时间裕量,只能减少逻辑运算时间,即实际逻辑运算时间较小

  • 保持时间:负偏差对于保持时间是有利的

  • 时钟周期:因为留给逻辑运算的时间减小,如果逻辑运算时间不能减小,建立时间裕量不能减少,只能将周期增加$\delta$​才能满足时序要求。周期的增加,意味着电路性能的降低。

3. 【重点】利用时间偏差修补建立时间

思想:增大或者缩小时钟路径上的buffer的尺寸来修正某些寄存器的建立时间

image-20211025220852654

由图可知,寄存器$R_3$​的建立时间裕量为$-0.15ns<0ns$,不满足建立时间要求。

但是,$R_2$​的建立时间裕量为$0.20ns>0$​,电路输出裕量$0.10ns>0$​。

可以在$R_2$、$R_3$的时钟路径上进行buffer尺寸(即时钟偏差)的调整。

解决方案:

image-20211025221606061

4. 【周期$T$​】时钟偏差对于周期的影响

前文提到,负偏差使得实际逻辑计算的时间减小,为了填补裕量,只能增加时间周期,而提高时间周期会使得电路的性能下降

  • 最坏情况:$R_2$比$R_1$早到达$\delta$

  • 该情况出现在:时钟负偏差

  • 负偏差下的最小时钟约束:

  • 为了减小时钟偏差对于周期的影响,通用的方法就是使得时钟网络中的$\delta$​尽可能小

  • 下文会总结

2. 时钟抖动(Clock Jitter)

1. 定义与计算

定义:芯片某一给定点上,时钟周期宽度发生变化,或缩短或变宽

计算:

  1. 绝对时钟抖动$t_{jitter}$:某一给定位置的一个时钟边沿相对理想时钟边沿最坏情况下的变化(绝对值)

    如图,

    image-20211025234107739

    时钟抖动

存在$-t_{jitter}$和$t_{jitter}$

  1. 周期至周期抖动$T_{jitter}$:第$j+1$级时钟沿和第$j$级时钟沿到达节点$n$的时间差。

    计算公式如下:

    其中,

    $t_{n,j+1}$:第$j+1$级时钟沿到达节点$n$的时刻

    $t_{n,j}$​:第$j$级时钟沿到达节点$n$​​的时刻

    $T_{clk}$:理想的时钟周期

    可知最坏情况下,周期至周期抖动为(即图中①-⑥或③-④),

2. 【周期$T$​​​】时钟抖动对于周期的影响

因为时钟抖动是难以预料的,在确定时钟周期的时候,我们应该考虑最坏的情况,即

即上图所示的③-④。因为这意味着周期$T$需要增加$2t_{jitter}$​,性能降低。​

3. 总结

1. 【周期$T$】影响

类型 时钟偏差 时钟抖动
对周期起影响 负偏差$-\delta$ 最坏情况:$-2t_{jitter}$

公式:

注意:$\delta$和$t_{jitter}$均为绝对值

2. 来源(了解)

  1. 时钟信号产生
  2. 静态时钟偏差:期间工艺的差别,如缓冲器buffer
  3. 互联偏差:使用金属密度填充
  4. 环境变化:
    • 温度:使用反馈电路进行温度补偿
    • 电源:时钟驱动器周围加入去耦电容
  5. 电容耦合

3. 时钟分布技术

1. 综述

目标:

  • 时钟偏差和时钟抖动尽可能小
  • 功耗尽可能小

需要考虑的问题:

  • 不同单元模块的时钟输入负载不同,需要考虑局部负载的问题
  • 不用太在意源到各个寄存器之间延时,应该考虑寄存器之间的相对偏差,即时钟偏差才是重要的

2. 时钟分布网络

常用的有H树时钟分布网络、网格型结构

1. H树时钟分布

image-20211026172252462

理想情况下,时钟偏差为0;但实际上,因为制造工艺和环境变化等原因,依然存在时钟的偏差和抖动。

2. 网格结构

image-20211026172848521

优点:

  • 延时相对较小

  • 设计后期容易改动,因为芯片上的各个点都可以容易的得到时钟

缺点:

  • 有许多”多余“的互连线,功耗增大;
  • 不适合做门控时钟,因为大多数寄存器都是直接从时钟网络见过来的。

3. 时钟网络指导原则(略)

4. 锁相环PLL

1. 框图

image-20211026195146291

  • 压控振荡器:根据输入的模拟信号$V_{cont}$​产生一个对应频率的系统时钟信号
  • 相位检测器:片外参考时钟和N分频的系统时钟进行比较,根据相位差产生$Up$的$Down$​的信号
  • 电荷泵:根据$Up$​和$Down$​信号改变$V_{cont}$​
  • 低通滤波器:滤掉$V_{cont}$​中的高频成分,减小抖动

2. 部分讲解

1. 压控振荡器

根据输入的模拟信号$V_{cont}$,产生一个对应的频率,该频率与$V_{cont}$​成线性关系。

公式略

2. 【重点】相位检测器

※相位检测器电路图

注意:

  • 相位检测器是一个三状态的状态机,状态转换图如下

    image-20211026201949713

  • 相位检测器拥有鉴频、鉴相的功能。

    鉴频

    | 频率 | $f_A=f_B$ | $f_A>f_B$ | $f_ADN,且DN的脉冲宽度极小 | 平均脉冲数:UP<DN,且UP的脉冲宽度极小 |

    鉴相

    | 相位 | A超前B | B超前A |
    | :—: | :———————————————————: | :————————————————————: |
    | | 脉冲宽度UP>DN,UP的脉冲宽度=AB的相位误差 | 脉冲宽度UP<DN,且DN的脉冲宽度=AB的相位误差 |

    image-20211127232430246