zoukankan      html  css  js  c++  java
  • routing有关的命令route_auto route_opt route_eco route_group route_global route_track route_detail

    今天先问问题:

    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。

  • 相关阅读:
    LeetCode Power of Three
    LeetCode Nim Game
    LeetCode,ugly number
    LeetCode Binary Tree Paths
    LeetCode Word Pattern
    LeetCode Bulls and Cows
    LeeCode Odd Even Linked List
    LeetCode twoSum
    549. Binary Tree Longest Consecutive Sequence II
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/lelin/p/12586722.html
Copyright © 2011-2022 走看看