SoC设计入门 - 建立时间与保持时间
扫描二维码
随时随地手机看文章
SOC设计人员除了做好自己的设计工作外,还需要和DC等后端(中端)同事进行工作上的交互。
我们需要提供给他们具体的时钟结构图,重点是clk_i,div_clk等信息,帮助他们完成sdc的timing 约束,以及检查上的约束放松信息,例如false path和multi-cycle。
然后他们会给我们反馈综合报告,我们需要能看懂综合报告,并且能分析时序违例原因。
我们需要掌握的最基本的知识就是什么是时序违例?他们和建立保持时间的关系。
1、建立时间与保持时间概述
建立时间(Tsu):在时钟采样沿之前,数据必须保持稳定的时间,该时间量称为建立时间。
保持时间(Th):在时钟采样沿之后,数据必须保持稳定的最短时间。
理想最优的建立时间和保持时间出现在数据中间采样的位置,如下所示,实质就是使触发器在采样沿得到稳定的数据,如果数据在时钟上升沿的建立保持时间内{latch edge-setup,latch edge+hold time}发生跳变,则会产生亚稳态输出,即输出值在短时间内处于不确定态,有可能是1,有可能是0,也可能什么都不是,处于中间态。
建立保持时间模型
在出现沿打沿的现象时会出现建立时间最大值或者保持时间最大值。
理想建立时间最大值:
理想建立时间
理想保持时间最大值:
理想保持时间
2、寄存器之间数据传输概念图
寄存器数据传输的模型:数据从在Reg1到Reg2,理想情况下采样沿到达Reg2时,数据的中间位置到达Reg2的数据端,这样出现最优的建立时间和保持时间,此时采样的数据也是最稳定的,如果时钟早到或者数据早到,严重的情况下就会产生时序违例。
数据传输模型
3、时序图分析
时序图
逐步分析这个时序图,在第一个clk上升沿的时候,将D1的数据传递到了Q1,触发器的延迟为Tco,接下来经过组合逻辑Tcomb,Q1变为了D2,随后在第二个clk上升沿,将D2的数据传递到了Q2。
回到最上面的定义,建立时间和保持时间的区别就在于处在时钟事件的前后,红色虚线就代表着时钟事件。
建立时间分析
极限情况就是Tco+Tcomb+Tsu=Tclk,当然我们设计时往往时留有余量的
Tco+Tcomb+Tsu
如果发生了建立时间违例是什么情况呢?那就是下面的表达式
Tco+Tcomb+Tsu>Tclk
我们高中时对这个是最敏感的,毕竟选做题,所以大家肯定都知道怎么把这个表达式的大于号变成小于号。
方法如下:
1.降频,使时钟周期变大。
2.使用Tsu要求更低的cell。
3.优化组合逻辑。
4.优化前级cell的输出驱动能力。
1和3是我们设计人员需要重点掌握的,2和4是后端人员的事情,timing eco的方式。
使用方法1的情况一般是项目快要tape out了,时序实在收敛不下来,并且降频也能满足设计的基本功能时。
使用方法3的做法一般是打散组合逻辑,加一级pipe,需要的设计充分了解。
保持时间分析
极限情况就是Th=Tco + Tcomb,含义是什么呢?就是前一级寄存器针对D1的第二次采样不能太快,不然就会让D2变化的太早,引起亚稳态。同样的,我们设计是有余量的,一般情况
Tco+Tcomb>Th
如果发生了保持时间违例是什么情况呢?那就是下面的表达式
Tco+Tcomb
前一级寄存器的数据变化太快了,导致后级寄存器来不及采样。那么怎么规避呢?
方法如下:
1.使用Th要求更低的cell。
2.增加组合逻辑延迟。
3.降低前级cell的输出驱动能力。
这些其实都是后端需要处理的,重点介绍方法2,就是在data path上插buffer。
总结
上面介绍了建立保持时间的含义,以及常用的解决时序违例的方法。我们设计人员能做的就是养成良好的设计习惯,
·组合逻辑太过复杂的就考虑使用pipeline结构
·尽量避免使用if嵌套结构,进行使用case
还有一点你会发现,后端处理set up违例和hold违例的方法常常时相悖的,也就是你修好了set up violation,又产生了hold violation。这就要求后端的实力足够强大,敢于尝试timing ECO来手动调整clk tree和data path,当然我们也一定要绘制详细的时钟结构图帮助他们进行这些尝试。降频只能是无奈时采样的方法。