Set-up和 Hold的修法
Posted wt-seu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Set-up和 Hold的修法相关的知识,希望对你有一定的参考价值。
Set-up修法
理论公式
T - Tclk-q - Tcomb + Tskew > Tset-up
从公式可以看到,修set-up可以从以下几个方面入手:
(1)增加T,也就是降频,会损害性能,一般不推荐;
(2)增加skew,也就是在时钟网络中引入有用的skew;
(3)减小Tcomb,也就是优化寄存器间的组合逻辑延时;
(4)减小Tclk-q和Tset-up,也就是更换更快的标准单元库,HVT->LVT
具体措施
RTL阶段
(1)插入寄存器(pipeline)
(2)并行化设计:例如将两个8bit数的乘法分解成4个4bit的2输入乘法和1个8bit 3输入加法,乘法和加法之间再插寄存器
(3)逻辑展平:优化if……else……等优先级逻辑,展平成case语句
(4)均衡设计:合理分配不同寄存器间组合逻辑的延时
(5)优化路径或路径重组:通过优化数据流的路径来缩短 Critical Path ,提升系统性能。重新布局和 Critical Path 在一起的路径,从而 Critical Path上的逻辑门可以更靠近目标寄存器。如
module randomlogic(
output reg [7:0] Out,
input [7:0] A,B,C,
input clk,
input Cond1,Cond2);
always @(posedge clk)
if(Cond1)
Out <= A;
else if(Cond2&&(C<8))
Out <= B;
else
Out <= C;
endmodule
//改进后
module randomlogic(
output reg [7:0] Out,
input [7:0] A,B,C,
input clk,
input Cond1,Cond2);
wire CondB = (Cond2 &!Cond1);
always @(posedge clk)
if(CondB&& (C<8))
Out <= b;
else if(Cond1)
Out <= A;
else
Out <= C;
endmodule
综合阶段
(1)利用auto-ungroup和boundary timing优化修复,打散design中的层次;
(2)细分group_path,将某些重要的逻辑挑出来设为一个group_path并且赋予相对高的weight;
(3)基于DCT的flow,用物理信息做指导;
(4)在不影响功能的前提下选用delay小驱动大的cell;
(5)对delay比较大的组合路径加set_max_delay;
(6)设置DRC,合理化扇出;
(7)选用低阈值库。
布局布线阶段
(1)修改floorplan;
(2)CTS时 确保holdtime时,增加时钟路径延时(useful_skew);
(3)Route时是否因为detour造成较大线延时
Hold 修法
理论公式
Tclk-q + Tcomb - Tskew > Thold
从公式可以看到,修hold可以从以下几个方面入手:
(1)减小skew,也就是在做好时钟树的balance;
(2)增加Tcomb,也就是增加寄存器间的组合逻辑延时。
具体措施
RTL阶段
好像做不了什么
综合阶段
好像也做不了什么
布局布线阶段
(1)CTS时减小skew;
(2)在数据路径上插buffer,增大延时。
以上是关于Set-up和 Hold的修法的主要内容,如果未能解决你的问题,请参考以下文章
批量下载所有LYNDA课程的方法 (how to download full Lynda.com course in just one set-up)