于我个人而言,实际测试过Innovus 21.15,经历过设置soft placement constraint之后随即绕线直接出现跑崩状况的情况,对于新手之人来说,依照下面所列出的三个步骤一项一……
于我个人而言,实际测试过Innovus 21.15,经历过设置soft placement constraint之后随即绕线直接出现跑崩状况的情况,对于新手之人来说,依照下面所列出的三个步骤一项一项地去进行操作,便能够较为轻松地躲开这类平常会出现的问题。
设置模块软区域约束
首先是操作路径,要经过Floorplan的菜单,进入Placement Constraints然后选择Region;接着选中那个目标模块之后,往位于GUI右下角的地方输入坐标,坐标范围是从(100,100)一直到(200,300);之后Region Type要选soft,Utilization要填65%;需要注意的是,这个填进去的利用率是经验值,其关键作用是给绕线留出足够的空间,要是低于60%那就会造成面积的浪费,可要是高于70%大概率就会出现堵塞的情况。点Apply,再点Create Region。
新手需注意避坑:当进行设置进而运行place_opt_design后出现报错显示“Cannot place instance”时,大概率是Region边界与电源环出现了重叠这种情况。我已经进行过排查,通过直接查看Violation Browser ,于是定位到了boundary mismatch。解决的办法是将Region删除,在重新绘制区域的时候利用Edit→Snap to Grid来保证坐标为Pitch整数倍,以此避开电源环。
硬约束分区设置对比两种方案
操作的路径是,Partition菜单之后转向Create Partition。将刚才的那个模块选中,把“Hard Constraint”勾选上,区域坐标跟向前的那一步保持一致,然后点击OK。在此处硬约束与软约束存在着区别,软约束为“尽量放置于此处”,工具仍旧能够活动;硬约束则是“必须放置于此”,哪怕移动一根线都会报错。刚刚接手的老模块先运用软约束使其运行通畅,最终在稳定的版本阶段才切换为硬约束。你要是个新IP,直接硬约束就是找罪受,后期ECO改死你。
初涉者需谨防:一旦添加硬约束,时序瞬间变差,出现“Timing path too长”的提示。究其缘由,乃是硬切割将长路径硬生生切割成两段。我曾处理过这般状况,于Partition的边界位置手动去增添数据流分析,查看Report进而找到Data Flow,将跨越边界的关键通路运用set_data_flow_options并搭配-priority high来进行打标,使得工具能够优先予以处理,这可比盲目地调整约束要管用上十倍之多。
验证约束与完整DRC修复流程
操作的途径是:Run之后进入Placement,接着再进入Place Opt Design,完成跑完之后马上开展Verify,也就是Verify DRC。最为经常出现的报错情况是“Met1 spacing violation”,其所在位置是在Region的边界上面。实现一站式解决的流程是:首先要打开Route,然后进入Global Route Detail,勾选“Fix DRC”,之后运行一轮。如果存在错误,运用addMetalFill -insideRegion true -layer {1},接着运行route_zrt_detail -inc_drc_fix,我通过实际测试发现这个组合方式能够消除九成边界DRC。
对于新手而言需注意避坑,那种直接跑去死磕route_opt是没有用处的。其中的根源在于,Region边界处金属密度会出现突变情况。你要按照上面所讲的流程去进行操作,千万不要省去那两步中间的操作。曾经有一回,我偷懒没有添加Metal Fill,结果DRC清理了三轮才最终干净,这比老老实实地跑完完整流程还要多花费半天的时间。
该方法适用于模块级设计情形,此情形为时钟树稳定且逻辑改动较小。倘若你在顶层全芯片运行这个,仅Region边界便足以让你绘制两天时间。替代方案乃是用guide约束去取代partition,先跑通顶层布局而后再逐层进行细化,切莫一开始就采用硬约束,步伐迈得太大易致困难重重。
设定区域约束之后,你有没有碰到过绕线瞬间就彻底失败的状况呢?在评论区说一说你排除隐患的经历,要是感觉有用,可别忘了点个赞,以便让更多的兄弟能够看到。
微信扫一扫