我正在「拾陆楼」和朋友们讨论有趣的话题,你?起来吧?
往期文章链接:
innovus: set_ccopt_property基本用法备忘录(上)
innovus:set_ccopt_property基本用法备忘录(中)
estimated route,也被称作Guided,为了快速迭代调整clock setting,使用estimate route代替NanoRoute,。
innovus> set_ccopt_property use_estimated_routes_during_final_implementation true
innovus> ccopt_design
基于造成真实route的方式也只需要把该property设置成false,在route clock nets即可,无需重新ccopt_design。
innovus> set_ccopt_property use_estimated_routes_final_implementation false
# 启动CTS真实绕线,这个命令会找到所有的Clock nets进行绕线
innovus> route_ccopt_clock_tree_nets
如果log中显示net length在Guide和route后有比较大差别,需要注意一下,尤其是超过100%的net。
工具可以在cts阶段clone icg以解决icg fanout问题,较之插buffer解决high fanout此法还不会增加级数,增加clock tree delay。开启方法如下:
# 使用clone icg来修复DRV
> set_ccopt_property clone_clock_gates true
# 使用clone icg来缩短delay
> set_ccopt_property clustering_clone_cells_to_reduce_balancing_conflicts true
clock root如果是一个instance pin,那这个instance的驱动我们是可以知道的,如果这个clock root是个port,模块设计时外部的具体情况我们是不得而知的,所以在root附近插一个buffer更保险一些,好处是common path比clock root直接推多个fanout更长些。方法如下:
# 在clock root附近插一个buffer
> set_ccopt_property add_driver_cell {BUF_X2B}
效果如下图:
?
?
?
?
?
?