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的修法的主要内容,如果未能解决你的问题,请参考以下文章

pr2020没有set-up.exe怎么回事

批量下载所有LYNDA课程的方法 (how to download full Lynda.com course in just one set-up)

漫谈架构师之路的修仙之法

猫先生的修图笔记

hold 与catch有啥区别

strecth out与 hold out有啥区别?