DSMA工具修setup hold的方法

DSMA :distributed multi-scenario analysis

在修时序的过程中,dsma的flow中最重要的指令是fix_eco_timing,下面讲讲如何使用这个指令修时序 。

在开始修setup的时候用:

fix_eco_timing -type setup -method size_cell -cell_type {combinational sequential} \

-slack_lesser_than 0.0 -setup_margin 0.0 -hold_margin 0.0  -verbose

这里是进行正常的修setup,setup在工具中一般是通过size_cell来修的。

修hold:

fix_eco_timing -type hold -methods {insert_buffer size_cell} -cell_type {combinational sequential}  -buffer_list {BUFX2 DLYX2} -slack_lesser_than 0 -setup_margin 0.0 -hold_margin 0.0 -verbose

修hold一般使用插buffer的方式多一点,后期可以把size_cell选项删掉。

每次修完用report_global_timing报时序,并查看详细的setup hold时序报告。

如果修不动,有哪些情况:

1.可能就是setup_margin或者 hold_margin太紧了,可以适当调松,调成负值是调松,再在工具里多修几轮setup和hold。

2.修hold的时候用的delay cell用的阈值比较高,它对setup太敏感了,如果后期使用,尽量用LVT的delay cell。其他的cell同理尽可能用低阈值的cell。

3.用-crosstalk报cell的串扰,串扰会使setup和hold一同变差,可以把串扰的位置抓出来单独处理。(size_cell,跳层,ndr,插buffer修trans)

4.有的寄存器用的HVT的cell,他对setup的影响很大,换成LVT会好很多(后期修不动的情况)

5.垫树,看前后级是否可以借,如果launch没用cdb的cell,那么说明树已经是最短,只能垫长来运用skew修时序,垫长也要看report_timing -from $end/CK 看end点d setup是否有margin,有就可以垫长。

5.在后期setup hold互卡的时候,如果不管hold,只修setup,而又都是最高驱动低阈值,可以使用-methods {remove_buffer}这个选项修setup,删去多余的buffer。

6.如果要指定只修reg2reg上面的可以选则-path_selection_options {-delay_type max -group reg2reg -max_path 10000 -nworst 500 }

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用.NET语言计算股票技术指标KDJ的代码: ``` public static void CalculateKDJ(List<double> closePrices, List<double> highPrices, List<double> lowPrices, int n, int m1, int m2, out List<double> kValues, out List<double> dValues, out List<double> jValues) { kValues = new List<double>(); dValues = new List<double>(); jValues = new List<double>(); double[] rsvValues = new double[closePrices.Count]; for (int i = 0; i < closePrices.Count; i++) { double c = closePrices[i]; double h = highPrices[i]; double l = lowPrices[i]; double rsv = (c - l) / (h - l) * 100; if (double.IsNaN(rsv)) { rsv = 0; } rsvValues[i] = rsv; } double[] kSmaValues = new double[closePrices.Count]; double[] dSmaValues = new double[closePrices.Count]; for (int i = 0; i < closePrices.Count; i++) { double kSma = 0; double dSma = 0; if (i == 0) { kSma = 50; dSma = 50; } else { int startIndex = Math.Max(0, i - n + 1); int endIndex = i; double[] rsvValuesSubset = new double[endIndex - startIndex + 1]; Array.Copy(rsvValues, startIndex, rsvValuesSubset, 0, endIndex - startIndex + 1); double maxRsv = rsvValuesSubset.Max(); double minRsv = rsvValuesSubset.Min(); double kPrev = kSmaValues[i - 1]; double dPrev = dSmaValues[i - 1]; kSma = (kPrev * (m1 - 1) / m1) + (maxRsv * 1 / m1); dSma = (dPrev * (m2 - 1) / m2) + (kSma * 1 / m2); } kSmaValues[i] = kSma; dSmaValues[i] = dSma; } for (int i = 0; i < closePrices.Count; i++) { double k = kSmaValues[i]; double d = dSmaValues[i]; double j = 3 * k - 2 * d; kValues.Add(k); dValues.Add(d); jValues.Add(j); } } ``` 其中,closePrices、highPrices和lowPrices分别代表收盘价、最高价和最低价的列表,n、m1和m2分别代表KDJ指标中的参数,kValues、dValues和jValues分别代表计算出的K、D、J值的列表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值