时序分析再谈

448 阅读7分钟

基础知识:

建立时间:触发器(DFF)时钟上升沿到来之前,数据需要保持稳定的最小时间间隙就是建立时间。简而言之,时钟边沿触发前,要求数据必须存在一段时间, 这就是器件需要的建立时间。如不满足建立时间,这个数据就不能被这一时钟打入触发器。

保持时间:触发器(DFF)时钟上升沿到来之后,数据需要保持稳定的最小时间间隙就是保持时间。简而言之,时钟边沿触发后,数据也必须保持一段时间,以便能够稳定读取, 这就是器件需要的建立时间。如果hold time 不够,数据同样不能被打入触发器。

Tskew: 时钟偏斜 时钟从源端口出发,到达目的寄存器和源寄存器 时钟端口的时间差值。Tclk2 - Tclk1

1 基于TimeQuest软件查看时序报告

2 分析时序路径

3 回顾基于RTL的逻辑时序优化的基本思路

4 在关键路径上插入寄存器来优化时序

hold time violation: 保持时间违规

分析电路中是否存在hold time violation?如果有,在不影响电路功能的基础上提出可能的解决方法?

image.png

image.png

建立时间余量slack:可以通过slack = 数据需求时间 - 数据到达时间大于等于0,求出时钟周期或者建立时间范围。

保持时间通过:Thold <= Tco+Tdata -Tskew;

Tco为源寄存器时钟端到输出端Q端口的时间。

Tdata为数据信号经过组合逻辑的延时。

Tskew:为时钟偏斜,为TCLK2-TCLK1;TCLK2为时钟信号从时钟源端口出发,到达目的寄存器时钟端口的时间。TCLK1为时钟信号从时钟源端口出发,到达源寄存器时钟端口的时间。

image.png

加强理解

Tnet为走线延时

Tcomp为Tdata

Tclk > Tco+Tcomp+Tnet+Tsetup-Tskew (1)

Tco+Tcomp+Tnet > Thold+Tskew (2)

为了得到更加简单的理解,我们按照常规,忽略Tnet和Tskew。原因在于Tnet和Tskew通常太小。

Tclk > Tco+Tcomp+Tsetup (3)

Tco+Tcomp > Thold (4)

式3表明,数据从第一个触发器采样时刻到第二个触发器采样时刻,不能超过一个时钟周期。 假如数据传输超过了一个时钟周期,那么就会导致第二个触发器开始采样的时候,想要的数据还没有传过来。

由式4可得: Tco+Tcomp > Thold (4)

Tco+Tcomp+Tsetup > Thold+Tsetup    (5)

结合式3和式5可得到,

Thold+Tsetup < Tco+Tcomp+Tsetup < Tclk    (6)

Tco+Tcomp+Tsetup是指数据从第一级触发器采样瞬间开始,传输到第二级触发器并被采样的传输延时。 简称数据传输延时。

式6右侧表明,约定的数据传输延时不能太大,如果太大,超过一个时钟周期,那么第二级触发器采样的时刻数据还没到来。

式6左侧表明,约定的数据传输延时不能太小,Thold+Tsetup的时间宽度称为触发器的采样窗口,在窗口期内,D触发器对毛刺没有免疫力、。如果数据传输延时特别小,在第二级触发器开始采样的时候,第一级触发器的窗口期还没有结束。也就是说 此时输入数据端的数据有变化,那么第一级触发器处于亚稳态,第二级触发器也处于亚稳态。

综上,数据传输的延时,既不能大于超过一个时钟周期,也不能小于触发器采样的窗口宽度。

如果setup time violation或者hold timeviolation应该怎么办?

setup time violation: 需要增大Tclk

1 就是降低数字系统的工作频率,品质好的芯片,频率高,价格贵。

2 减少Tdata:

从数字电路逻辑功能设计的角度来看: 
    
    在组合电路之间插入寄存器,增加流水线。
    在不改变逻辑功能的前提下,对组合逻辑电路进行优化。

从数字版图实现的角度看

    更换速度更快的标准单元。

3 增大Tskew 在时钟路径上,插入buffer,增加时钟路径的延时,但不能影响hold time

hold time violation solution

增大Tdata:在组合电路的数据传输路径上,插入延迟单元buffer,增加组合逻辑延迟。但是当组合逻辑延时增加时,建立时间可能会出现违规。 这时候需要达到平衡。

减小Tskew: 时钟树调整,做好时钟树平衡,hold time 就很容易收敛。因为保持时间和时钟周期没有关系。

由许多缓冲单元平衡搭建的网状结构,可以优化时钟抖动和偏斜现象。

时钟抖动(Jitter) :相对于理想时钟信号,实际时钟信号存在时而超前、时而之后的偏移。

image.png

静态时序分析

setup check & hold check

image.png

setup check:所以 setup check 就要求数据传输不能太慢,否则会引起 setup violation。

时钟 clk1 的 launch edge 驱动 REG1 发出数据,经过组合逻辑运算后传输到 REG2 的 D 端,然后被 clk2 的 capture edge 锁存到 REG2 中,如果组合逻辑很复杂,导致数据传输路径太长,那么数据就可能侵入 REG2 的 setup time,导致数据无法准确锁存,所以 setup check 就要求数据传输不能太慢,否则会引起 setup violation。

hold time check:hold check 就要求数据传输不能太快,否则会引起 hold violation。

如果数据传输路径太长,可能导致setup violation,那么如果数据传输路径非常短,数据就会在很短时间内到达 REG2 的 D 端,此时 REG2 可能还正在锁存上一个数据,也就是数据侵入了 REG2 的 hold time,导致上一个数据无法准确锁存,所以 hold check 就要求数据传输不能太快,否则会引起 hold violation。

synchronous & asynchronous

静态时序分析中,同步和异步也很关键。如果launch clock和capture clock有固定的的相位差,那就是同步时序。

launch 和 capture 的周期相同: launch clock 发出的数据被一个周期后的capture clock 锁存。

image.png

launch 和 capture 的周期不同,且 launch 周期小于 capture 周期

这就是典型的快时钟域到慢时钟域,此时如果有多个上升沿发出的数据可能被同一个capture上升沿采集。

image.png

首先,launch 的周期是10ns,capture 的周期是 15ns,可以看出每隔30ns形成一个循环,所以只需要考虑30ns 以内的情况,后面的都是无限重复。

工具会从这 30ns 内找出最苛刻的时钟边沿来做时序分析,对于 setup 来说,从 10ns 到 15 ns 这组的时序是最严格的,所以工具会选择这组来做 setup check; 而对于 hold, 从 0ns 到 0ns 这组的时序最严格,所以选择这组做 hold check,保证从 0ns 发出的数据不会干扰到capture edge 在 0ns 采集上一组数据

launch 和 capture 的周期不同,且 launch 的周期大于 capture 的周期

这是慢时钟域到快时钟域

image.png

launch 的周期是 15, capture 的周期是10, 两者的最小共同周期就是 30ns, 而在 30ns 内,对于 setup 最严格的时序是从 15ns 到 20ns 这一组,所以工具会选择这组做 setup check,而对于hold, 最严格的依然是从 0ns 到 0ns, 所以选择这组做 hold check

总结

对于 launch 和 capture 周期不同的同步时序电路:

只要先找出两者的最小共同周期,然后在这个周期内找到最苛刻的那组时钟沿,就可以快速分析出用来做 setup check 和 hold check 的时钟沿。

比如下面这个例子,launch clock 的周期是6ns,capture 的周期是10ns,那么两者的最小周期就是 30ns,在这 30ns 内,最严格的 setup 是从 18ns 到 20ns,而最严格的 hold 依然是从 0ns 到 0ns。 image.png

对于异步时序来说,由于无法确定launch 和 capture 的最小共同周期,各个时钟边沿之间也没有固定的时间差,所以是无法做时序分析的。

对于跨时钟域的异步电路,需要在设计阶段就做好防护,采用多级 register、异步 FIFO 等方法确保数据的准确传输。