routing有关的命令route_auto route_opt route_eco route_group route_global route_track route_detail

柔情痞子 提交于 2020-03-28 13:07:17

今天先问问题:

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实际上有做二个动作:

  1. 连接新的/断开的net (调用route_global + route_track)

  2. 修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可理解成三步:

  1. post route optimization

    优化setup,面积,功耗,transition,hold等(size_cell 和insert_buffer为主)

  2. legalize_placement

    经过第一步的折腾后,有很多的cell 有overlap,或不在site row上,需要legalizer把它们放在legal location上。

  3. route_eco

    经过第一,第二步的折腾后,绕线损失挺大,需要调用route_eco来收拾残局。工具默认是5轮,可以设成10或者更多。

route_opt也可以跑多轮,以便得到更好的PPA。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!