顶层Top Hierarchy Flow中的IO时序优化(高端IC后端训练营即将开营啦?)
项目马上要Tapeout流片了,遇到下面这些问题,我们应该如何高效解决?
1)遗漏clock tree
在项目最后Timing Review阶段,我们经常会发现如下所示这种从Mux输出端到IO的这段clock tree漏做的情况。这条路径上工具已经插上普通buffer和inverter来解Timing DRV,而这条clock path的时钟质量要求比又较高!
如果直接把这条路径上的普通buffer和inverter替换成clock inverter,我们会发现会存在max transition问题(flow中这段transition是按照data transition来做的)。
所以,我们最好是把原来的buffer和inverter删掉,在当前设计数据中重新做一条clock inverter出来,比如每隔100um添加一颗clock inverter。但是这样做完之后,我们会发现ecoRoute后每段clock net会出现比较严重的routing detour,导致存在max transition violation!
所以这时候就得用我们之前分享的对clock net做ECO时避免routing detour的解决方案。
2)长线long net
在项目流片后期我们除了要把timing和physical signoff的所有事项都清干净,我们还会做一些额外的检查。这些检查大都是我们通过一系列的脚本来自动化检查,并输出对应的report。
然后后端工程师就需要根据这些report来进行修复。
这些比较常见的检查有以下几个:
设计中长线net(比如超过350um的net)
设计中core区域,memory和IP的PG Density(多少um内必须能找到孔,电阻上的考虑)
这两项检查其实在我们训练营项目中也是推荐大家去做的。在项目后期其实就是在做一些修修补补,修复设计实现中的弱点和锦上添花的一些优化。
下面以咱们训练营项目a7core项目为例来查看下长线long net问题,并给出自动化解决方案。
我们这里设置的线长阈值为380um,具体脚本如下所示。大家可以根据自己的项目需求来做修改。
执行结束后会输出一个longnet.rpt文件,内容如下图所示。如果这个文件是空内容,代表设计中不存在超过380um的长线。
比如这里报出来这么多长线net,我们是不是需要一条条去手修呢?
我们说过后端设计实现阶段,能自动化解决的,我们都尽量让工具自动帮我们修复。
下面分享通过AddRepeaterByRule来自动化解决report中的所有长线问题(第一个案例手工补clock tree也可以使用这种方法)。
为了对比效果,我们先来选中report中的一条长线net,高亮如下图所示,这条net线长约400um。
在使用addRepeaterByRule前,我们需要提前设置好rule文件和net list文件。
###设置rule文件
set clock_rule clock_rule.tcl
SetBufferMaxNetLength BUFFD8BWP40P140 240.0
如果是clock net,我们需要指定clock buffer或clock inverter!
###指定net list
set clock_nets 0602net.list
###移除cell dont use属性 (如果是要加clock buffer或clock inverter的话)
set_dont_use CKND16BWP7T40P140 false
set_dont_use CKBD16BWP7T40P140 false
addRepeaterByRule -copyNetAttribute -alongRoute -rule $clock_rule -selNet $clock_nets
执行上面addRepeaterByRule后,log中会显示如下信息。
执行完毕后,我们再来高亮最上面高亮的net,我们发现原来的long net已经被工具一分为二,效果图如下图所示。
3)流片前为了赶项目周期,已经把base layer提前release给foundary,但是检查发现还有Timing问题和Physical DRC问题
这种提前Release GDS的情况,需要确保当前没有base layer drc violation。后续修Timing我们完全可以当做post-Mask的Function ECO来做,即利用设计中的spare cell或ECO Filler来插buffer或inverter。需要注意的是这个阶段不允许做upsize或downsize操作。
对于Physica DRC Violation,只要没有base layer drc问题,所有metal layer都可以随意更改的。
这种提前release base layer gds的做法,大概可以把项目流片时间提前2周左右,已经被很多中大型公司广泛使用。
4)Timing Signoff Review时发现Signoff sdc有问题导致把若干条timing path变成false path,而实际上是需要做同步检查的
5)设计中需要新增一个clamp信号,用来控制power off domain输出的isolation cell的iso信号
实际项目中经常会遇到这类功能ECO需求。需要在当前设计中添加一个port并和另外一个port或者cell的输入pin进行逻辑连接。
方法和步骤如下:
创建需要新增的IO port
addModulePort - eco_add_io_port input (注意中间的中杆字符)
语法格式: addModulePort
由于我们是在当前设计的顶层添加io port,所以module name写成 “-”。
把这个IO port 连接到需要连接的pin或port上
attachModulePort - $original_output_port eco_add_io_port
摆放这个新增进来的io port
摆放io port的命令和floorplan阶段摆放方法一致,都是使用editPin来摆放即可。
如果选用GUI图形界面来摆放,可以选择gui中的Unassigned pin,工具就会自动列出当前没有摆放的port list。
物理连线ecoRoute
有了逻辑连接后就开始做物理连线ecoRoute即可。
6)测试模式下发现若干ns的hold violation
Lockup latch的用法,看这个就够了!
合理的时钟结构能够加速Timing收敛(时钟树综合中级篇)