基础知识:
建立时间:触发器(DFF)时钟上升沿到来之前,数据需要保持稳定的最小时间间隙就是建立时间。简而言之,时钟边沿触发前,要求数据必须存在一段时间, 这就是器件需要的建立时间。如不满足建立时间,这个数据就不能被这一时钟打入触发器。
保持时间:触发器(DFF)时钟上升沿到来之后,数据需要保持稳定的最小时间间隙就是保持时间。简而言之,时钟边沿触发后,数据也必须保持一段时间,以便能够稳定读取, 这就是器件需要的建立时间。如果hold time 不够,数据同样不能被打入触发器。
Tskew: 时钟偏斜 时钟从源端口出发,到达目的寄存器和源寄存器 时钟端口的时间差值。Tclk2 - Tclk1
1 基于TimeQuest软件查看时序报告
2 分析时序路径
3 回顾基于RTL的逻辑时序优化的基本思路
4 在关键路径上插入寄存器来优化时序
hold time violation: 保持时间违规
分析电路中是否存在hold time violation?如果有,在不影响电路功能的基础上提出可能的解决方法?
建立时间余量slack:可以通过slack = 数据需求时间 - 数据到达时间大于等于0,求出时钟周期或者建立时间范围。
保持时间通过:Thold <= Tco+Tdata -Tskew;
Tco为源寄存器时钟端到输出端Q端口的时间。
Tdata为数据信号经过组合逻辑的延时。
Tskew:为时钟偏斜,为TCLK2-TCLK1;TCLK2为时钟信号从时钟源端口出发,到达目的寄存器时钟端口的时间。TCLK1为时钟信号从时钟源端口出发,到达源寄存器时钟端口的时间。
加强理解
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) :相对于理想时钟信号,实际时钟信号存在时而超前、时而之后的偏移。
静态时序分析
setup check & hold check
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 锁存。
launch 和 capture 的周期不同,且 launch 周期小于 capture 周期
这就是典型的快时钟域到慢时钟域,此时如果有多个上升沿发出的数据可能被同一个capture上升沿采集。
首先,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 的周期
这是慢时钟域到快时钟域
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。
对于异步时序来说,由于无法确定launch 和 capture 的最小共同周期,各个时钟边沿之间也没有固定的时间差,所以是无法做时序分析的。