ICC2这几年更新速度飞快,各种新的feature出现,目的是使用户更轻松,更快速的达到极致的PPA。而其中大多数的feature都是on by default。可能你用上了,但你还不知道。
今天分享两个feature,GRO和GRE,对频率提升效果很好:
GRO:
GRO已经有了好几年了,是Global Route Optimization的缩写。
是啥意思呢?就是基于global route做优化。貌似还是不懂?
我们先回忆一下传统的流程:
1 place_opt
2 build_clock_tree & route_clock_tree
3 post-cts optimization
4 route_auto(route_global+route_track+route_detail)
5 route_opt
其中第三步,是时钟树之后的timing优化(同时也做area,power,ldrc等优化)。此时,除了clock nets,signal nets还没有绕线。所以,optimization是基于virtual route来做优化的。所谓“基于virtual route”,是指用virtual route的RC来计算timing然后优化。
问题来了,对于7nm以下的先进工艺,virtual route和实际绕线(detail route)的RC是有区别的。那基于vitual route的优化不那么精确的话,那怎么办?
办法一:
做完时钟树后,直接绕signal nets(route_auto),此时有了实际绕线了,直接做route_opt来优化。还省了很多时间
听起来不错,但实际效果很差。为啥?
因为一旦绕线了,优化的空间和策略,相比绕线前,相当有限。
略举数例:
- route_opt插buffer时,只会在route shape的下面(或者附件一个较小的范围)插buffer,而绕线前的优化范围则很大。
- 绕线后,route shape的layer比较难改变,只能通过size cell/insert buffer等来改进时序。而绕线前还可以做layer promotioin/demotion等优化策略。
- 绕线前做buffer tree的rebuffering比较容易,绕线后则很困难。
- 另外,post-cts optimization还会做incremental的placement来改进timing和congestion。
……
总之:post-cts optimization这一步非常重要,万万省不得。
办法二:
基于global route做优化。这个流程如下:
1 place_opt
2 build_clock_tree & route_clock_tree
3 post-cts optimization
4 route_global + optimization
5 route_track+route_detail
6 route_opt
和传统流程的区别是,做完global route后再做一次优化!这样做有何益处呢?
好处是,它能很好的结合pre-route optimization和post-route optimization的优点!
为啥?
一:刚讲了,post-route的优点是,RC是最精确的。而global route的RC和detail route的RC又是非常接近的,比virtual route要准确很多。基于global route的优化,和post-route optimization在RC比较接近了。
二:除了RC用global route的,算法本身还是pre-route optimization的算法,所以优化策略非常的灵活。
用法:
很简单,就是把原来的route_auto拆一下。
传统的route_auto flow:
route_auto 或者
route_global+route_track +route_detail
GRO的flow:
set_app_options -list {clock_opt.flow.enable_global_route_opt true}
clock_opt -from global_route_opt
route_track
route_detail
GRE:
在PPA的追求上,现代人是永无止境的。所以GRE又诞生了。什么是GRE呢?它是Global Route Everywhere的缩写。
什么意思呢?就是到处都有global route。
还是不懂
上文提到,GRO是利用Global Route的RC来做优化。
注意,注意,问题来了:既然已经做了global route,但GRO只利用了它的RC!Global route信息丰富,已经有了完整的走线路径,via信息,还有在每一层具体走多长线等信息。所以,GRE更上一层楼,不仅利用了GR的RC,还利用了GR的routing topology来优化。
那如何利用routing topology来优化?有啥好处呢?
略举数例:
一:若发现critical net的走线不在高层(高层R小),会做layer promotion到高层。
二:若发现critical net的GR路线不合理,可以调整GR路线,得到更好的timing
三:可以按照global route来做rebuffering,得到更好的面积和时序。
四:优化时可以看到congestion,不会恶化congestion。
……
故optimizer利用上routing topology后,如虎添翼,好处颇多。
用法:
由于GRE是GRO的升级,所以用法和GRO一模一样。只不过要用2019.03-SP4及其以后的版本才可以。2019.03-SP4之前的版本是GRO。