热度 4| |
What?Setup time is negative value!
“时光倒流 ! 难道,是失传已久的月光宝盒重现江湖?”
回想当时还是菜鸟的时候,感叹岁月蹉跎,现在已经是一名老菜鸟了。
当然,神话应该不会让我在工程设计中遇见。那么,这个负值,一定不是常规意义上的建立时间了(setup time)或保持时间 (hold time),了解静态时许分析(STA)的童鞋应该不陌生。下面就以setup time举例开始渐进式分析,一步一步揭开这个“倒流的时间”。
1.负值存在的合理性
从setup check的计算公式来分析:slack = RT - AT = ( T + Dclks - setup ) - AT ;其中的RT就是到达时许单元的需求时间,AT是数据实际所用的时间,T是时钟周期,Dclks是时钟的工作延时,setup就是我们讨论的建立时间。slack的值越大逻辑元件正常工作的状态越好(当然也不能无限制的大)。那么setup为负时:
slack = RT(变大)- AT
slack随着setup的负值变小而变大,对于slack是有利的,也就是说负值的存在是为了优化时许,这是它存在的合理性。
2.工作原理上存在的原因
以reg2reg为例(上升沿触发)(不会使用这个界面画图,尴尬)
数据从reg1的Q pin到达reg2的D pin,有一段建立时间,等待时钟上升沿到来。合理推测,当时钟上升沿到达CK pin之后数据并不是被立即触发,这里存在一段延迟时间Dd,
则RT = T + Dclks + Dd - setup =T+Dclks + (Dd - setup)
=T+Dclks - (-Dd + setup)
当Dd大于setup的时候 (-Dd + setup)就是负值了,说到这里,想必也明白了,setup的真实值不会是负值,这里的负值setup已经不再是原来意义上的setup了,括弧中的整理相当于这里的新的setup了。
同样的方法可以分析hold的负值。
3.从stdCell(reg)的结构上分析
以D触发起为例(暂时无图),setup和hold的值 与cell中某一点处data和clk的相对时间长度有关,公式分析和上面的方式相同。
RT- AT=T+Dck- setup - Ddata - Ddpin +Dckpin
=T+ Dclks - Ddata-(-Dckpin + Ddpin + setup)
括弧里的值就是setup在lib库文件中的二维表中的值。当Dckpin 大于 Ddpin+setup时Setup值取负,否则为正。hold可同理分析。
这样从结构上说明这种stdCell的结构不单单是一个reg,还包含里一些附加电路来增加某些延迟。这些可从layout中观察cell的结构得以印证。
总的来说,存在负值的setup和hold已经不是本来意义上的值了,而是换了概念的相对值,合理存在的值。还要注意的是,setup和hold不能同时为负值,而且二者之和必须为正。
黄钊: https://www.youtube.com/watch?v=Wys-Q2xVzaE&list=PLPmSCnkkX4qvMfSrFZ70uXzUxmSdjU84c
这个里有图,有公式,解释的蛮清楚的