zoukankan      html  css  js  c++  java
  • 数字IC前后端设计中的时序收敛(三)--Hold违反的修复方法

     本文转自:自己的微信公众号《数字集成电路设计及EDA教程》(二维码见博文底部)

    里面主要讲解数字IC前端、后端、DFT、低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程。

    考虑到微信公众平台上面发布的很多推文百度搜索不到,所以以后的推文也会在这里进行转载。

     

    数字IC设计,只有CTS之后开始考虑修复hold,下面按照从前到后的流程逐一讲解每个阶段如果出现Hold违反该如何解决。下面用到的命令,主要针对的是Synopsys公司的布局布线工具ICC。还有需要注意的是,hold的修复不用做到每一个阶段都是Clean的,比如说,CTS之后有0.1左右的违反还是可以接受的,毕竟后边还有布线的操作,线延迟也是有益于hold的;布线之后存在非常少量,且量级在0.01左右的违反也是可以接受的,可以通过focal_opt来解决。

     

    1、CTS之后,布线之前:

    >psynopt -only_hold_time

     

    2、布线阶段:

    2.1 可以用CCD来修复:

    >set_concurrent_clock_and_data_strategy

    >route_opt -concurrent_clock_and_data

     

    2.2 通过指定布线优化选项来修复:

    >route_opt -incr -only_hold_time

     

    3、chipfinish阶段:

    3.1 可以用CCD来修复:

    >focal_opt -concurrent_clock_and_data -hold_endpoints all

     

    3.2可以让软件自动对所有hold endpoints来修复:

    >focal_opt -hold_endpoints all -effort high

    其实可以指定某些hold endpoints来单独对它们进行优化,但是自己尝试发现没有什么用,没有PT效果那么好。

     

    3.3 指定REG2REG路径进行修复

    如果违规都集中在REG2REG的路径上,那么用下面的命令更好:

    >focal_opt -hold_endpoints all -register_to_register

     

    3.4 手工ECO修复

    如果上述方法都不行的话,就需要手动插入buffer或者delay cell来解决了,即采用ECO的方法来手工解决。在插入之前要确保没有插入Core filler,或者有Filler的话要remove,需要注意的是不用全部remove,在放置eco cell的命令的后边会有移除部分filler的选项哟,这个非常棒。

    ICC中插入buffer或者delay cell的命令举例:

    >insert_buffer [get_pins coeff_in_block*/C] [get_lib_cells */BUFHSV2] -no_of_cells 2

    插入的Burffer是随便放置的,可能和其他Cell重合了,或者没有放置在Row上面,需要将其摆放在合理的位置上:

    >legalize_placement -cells {xxx aaa} -remove_filler_references “$FILLER_CELL”

    或者用:

    >place_eco_cells -eco_changed_cells -leaglize_only -remove_filler_references “$FILLER_CELL”

    插入的buffer是没有连线的,需要用ECO来对其连线:

    >route_zrt_eco -reroute modified_nets_first_then_others

    这个做完之后要检查是否有违反,如果都解决了的话可以重新插入Filler了

     

    3.5 用PT进行ECO修复

    当然这些也是可以不用手工ECO的方法,而将整个设计的网表、spef导入PT,让PT自己修复,然后导出ECO的脚本,然后将脚本导入ICC进行修复,不过感觉这个过程挺麻烦的,还不如手工来的方便,具体方法可以参见ICCECO流程那一部分。

     

     

  • 相关阅读:
    安装vue-cli最新版后,无法使用console方法的解决办法
    使用yarn 安装 vue.js devtools(2020.1.6)
    在路由切换后 将滚动条置顶
    标签页 elementUI 激活时的颜色 怎样改 很坑爹!
    页面滚动鼠标产生动画 wow.js 在vue中
    CSS多行文本溢出隐藏,显示省略号
    ... 扩展运算符
    this的指向的一些问题
    用for循环和用for-in循环遍历数组最大的区别
    数组的indexOf、forEach、map、filter、方法的理解
  • 原文地址:https://www.cnblogs.com/ASIC-Horizon/p/7940586.html
Copyright © 2011-2022 走看看