今天先问问题:
1. DRC有点多,想修DRC用哪个命令?
2. 手动挪了一个std cell,它的绕线断开了,想把它连好用哪个命令?
3. 只想绕一根线用哪个命令?
这些问题对ICC2老鸟来说,really easy。
但对freshman来讲,有必要做些基础知识普及,才会用的得心应手。
route相关的命令不多,主要有如下几个:
route_auto
route_opt
route_eco
route_group
route_global
route_track
route_detail
今天就简单介绍一下这几个命令的作用和区别。
route_auto
绕线。主要指信号线。
因为时钟树的net在CTS阶段已经绕线好了。当然,如果时钟树没有绕线,route_auto会把clock tree和signal net一起做绕线。route_auto在P&R流程中只用一次,一次就好。
route_auto为啥叫auto,它其实是由三个子命令组成,且是automatically完成的。
route_auto=route_global+route_track+route_detail
反过来,如果您不想auto,也可以手动跑route_global+route_track+route_detail,效果是相同的。
三个子命令具体的功能是:
route_global:快速连线,但不创建真实的金属(只创建了VIA)
route_track:根据route_global的结果,加上真实的金属,但没有考虑DRC
route_detail:修DRC
route_global
快速连线。
做完route_global后,所有的net都连上了。但是,没有放真实的金属,而是一根根没有宽度的细线。这些细线有layer信息,也有真实的孔。
比如你去看一个net,它是从一个buffer_X 的Z pin输出到下一个buffer_Y 的I pin。从buffer_X的Z pin出来,就有一个VIA12,然后连一段M2的细线,又通过VIA23走到M3,然后M3又通过VIA23,M2和VIA12连到了buffer_Y的A pin。如此,便是一条完整的global route。它有四个VIA和三段连线。
除了细线和孔,global route还有很多有用的信息,比如NDR。有些net有两倍的space需求,global route会遵守,有些net只能放在某一层,global route也能遵守。
可以说,对net的约束,基本全靠global route来完成。同时,global route的结果,很大程度上决定了最后的绕线质量。所以要用timing_driven,effort可以设成high,便可以得到更好的结果。
route_global用处非常非常大,可以说在P&R里无处不有。比如initial drc调用global route可以把buffer tree长的更好;placer调用route_global来评估congestion;optimizer调用route_global做pre-route的RC评估;CTS调用global route长时钟树,甚至route_eco也会调用global route来连断开的线。
要做好P&R,一定要善用route_global。以后可以有专门的文章介绍route_global。
route_track
根据global route的结果创建金属(shape),不考虑DRC。
route_track完成之后,细线消失了,变成了有宽度的金属。这个过程非常快,分分钟完成,因为它基本不考虑别的cost,但是,也有timing_driven和crosstalk_driven,记得要打开哦。
route_detail (-incr)
修DRC。
route_track后的shape肯定存在大量的DRC,越复杂的工艺DRC越多。修DRC全靠route_detail这个engine。默认是40轮,但也不一定要等40轮才结束,icc2如果发现DRC数目修不下来了,route_detail便会提前退出。
route_group
对指定的net进行绕线。
可以说route_group是一个快速版本的route_auto,它对指定的net进行绕线,它也含有route_global,route_track,和route_detail三步。因为只对指定的net绕线,所以速度很快。
比较常用的场景是,提前对一些timing critical的net绕线:
route_group -net $critical_nets
让这些net走直线。另外一种常见用法是给时钟树绕线:
route_group -all_clock_nets
它 = clock_opt -from route_clock -to route_clock
route_eco
把做eco(timing or function)后断开的net(或新增加的net)做绕线并修DRC。
这个命令在修timing阶段天天要用。做ECO后,绕线必然有断开,或有DRC,或有新增加的net需要绕线。不管什么情况,统一用route_eco来搞定。
route_eco实际上有做二个动作:
-
连接新的/断开的net (调用route_global + route_track)
-
修DRC (调用route_detail -incr)
第二步,可以只修ECO net的DRC,也可以修全部net的DRC,可以依自己的需求使用。
常用的错误用法是,用route_eco修DRC。虽然也不会有问题(route_eco的第一步没起作用,只是第二部起作用了),但毕竟不建议这么玩。用route_detail -incr会更好。
route_opt
优化时序(同时还优化面积,功耗,transition,hold等),并做eco routing。
其实route_opt可理解成三步:
-
post route optimization
优化setup,面积,功耗,transition,hold等(size_cell 和insert_buffer为主)
-
legalize_placement
经过第一步的折腾后,有很多的cell 有overlap,或不在site row上,需要legalizer把它们放在legal location上。
-
route_eco
经过第一,第二步的折腾后,绕线损失挺大,需要调用route_eco来收拾残局。工具默认是5轮,可以设成10或者更多。
route_opt也可以跑多轮,以便得到更好的PPA。
来源:https://www.cnblogs.com/lelin/p/12586722.html