通过 ADI 微信下载 ADI 工程师精心编制的6本电子书,关注即送400信元!
返回列表 发帖

[求助] 请教一个用脚本修setup和hold的问题

[求助] 请教一个用脚本修setup和hold的问题

本人新手,请教各位老师。所谓后端PR用脚本修SEtUP和HOLD是什么意思呀。 是不是把手动修的过程写成脚本。但是每个错误要插的buffer和delay位置和大小都不同同,脚本要怎么处理呀。 本人比较小白,谢谢各位

有奖下载!《如何利用示波器及高级电源分析软件加速开关电源的设计》

buffer的位置根据插入目标pin的位置决定,简单来说直接放在目标pin旁边就好了,让工具自己去legalize。pin的位置可以由attribute/property取得,delay的话根据以往经验或者现design中的数值估算就好,注意不同corner间delay的变化就行。

可以关注我的知乎专栏:https://zhuanlan.zhihu.com/c_149714285
定期将有后端基础知识讲解。

TOP

回复 2# 阎浮提


    老师关注您专栏很久啦。 亲自解答很激动啊。。。

    因为我比较小白,您上面说的能举个具体例子吗,我还不是很理解。十分感谢

TOP

回复 3# jiajuntree
以ICC2为例,假设想要修一条hold,我们需要知道的信息至少2个:pin_name和slack。那么粗糙地实现起来就这样:
1. 事先定义以下两个变量:
    set buf_ref "xxx"     ;#要插入的buf/delay cell的ref_name
    set buf_delay "yyy" ;#要插入的buf/delay cell的估算delay值
2. 通过pin_name得到pin位置(左下坐标)
    set pin_location [lindex [get_attribute [get_pins $pin_name] bbox] 0]
3. 计算需要插入的buffer数量
    set buf_cnt [expr round($slack / $buf_delay)] ;四舍五入,也可直接舍弃小数部分或不足1的部分+1,看自己想怎么处理了
4. 插入cell

    set inserted_cells [add_buffer  -lib_cell $buf_ref  -no_of_cells $buf_cnt  $pin_name -new_net_names $preferred_net_prefix -new_cell_names $preferred_cell_prefix]
5. 放置插入的cell


    set_attribute -objects $inserted_cells
-name origin -value $pin_location

set_attribute -objects $inserted_cells
-name physical_status -value legalize_only
6. legalize
    place_eco_cells -legalize_only


对于有很多条hold,foreach就好了。这种方法需要有hold enpoint + slack的信息,至于这个怎么得到,办法比较多,楼主思考思考吧。
除此之外,上面的方法没有解决重复path的问题,也没有在修hold之前check setup的margin,更没有考虑margin不够的情况。不过整体思路就是这样,具体细节楼主努力完善吧。
# BTW,以上代码没有经过实际验证,因此可能有语法错误

TOP

回复 4# 阎浮提

非常不错,我来试试

TOP

返回列表

站长推荐 关闭


有奖下载!《如何利用示波器及高级电源分析软件加速开关电源的设计》

有奖下载!《如何利用示波器及高级电源分析软件加速开关电源的设计》


查看