布线方法和装置的制作方法

文档序号:6906028阅读:539来源:国知局
专利名称:布线方法和装置的制作方法
技术领域
本发明致力于布线方法和装置。
背景技术
集成电路(“IC”)是一种包含很多的电子元件(例如,晶体管、电阻、二极管等等)的器件。这些元件通常被相互连接以在该IC上形成多个电路元件(例如,电子开关、电池、存储单元、运算单元、控制器、解码器等等)。IC的电子和电路元件在下面被共同地称为“元件”。
一个IC也包含相互连接其电子和电路元件的多层线路(“线路层”)。例如,很多的IC目前由相互连接其电子和电路元件的金属或者多晶硅线路层(在下面总起来说被称为“金属层”)制造。一种通常的制造模式使用五个金属层。理论上,在金属层上的线路可以是所有角度的线路(即,该线路可以是以任何适宜的方向)。上述的所有角度线路通常被称为欧几里得线路(Euclidean wiring)。但是,实际上,每个金属层典型地具有一个优选的线路方向,并且该优选的方向在相继的金属层之间交替。很多的IC使用该曼哈顿线路(Manhattan wiring)模式,其规定优选方向水平和垂直布线的优选交互层。在这个线路模式中,大多数线路只能进行90°转向。但是,在该优选的水平和垂直层上偶尔对角线结合往往也是允许的。
设计工程师通过转换IC的线路描述为几何描述(称作线路图)设计IC。为了生成线路图,设计工程师典型地使用电子设计自动化(“EDA”)应用软件。这些应用软件提供基于计算机的工具组,用于生成、编辑以及分析IC设计线路图。
EDA应用软件通过使用在IC上表示不同的材料和器件的几何形状生成线路图。例如,EDA工具通常使用长方形轮廓线去表示相互连接该IC元件的线。这些工具也以具有变化的形状和尺寸的几何物体的方式表示电子和电路IC元件。为了简化该论述起见,在这个文献中这些几何形物体被显示为矩形方块。
此外,在这个文献中,该短语“电路模块”指的是由一个EDA应用软件合成的电子或电路IC的几何表示。EDA应用软件典型地举例说明在其侧面上带有引脚的电路模块。这些引脚与该相互连接线连接。
一个网络被典型地解释为需要被电连接的引脚集合。在一个线路图中该网络的全部或者一些的列被称为一个网络列表。换句话说,一个网络列表规定了一组网络,其随后规定在一组引脚之间的相互连接。


图1举例说明一个IC布置100的例子。这个布置图包括带有引脚130-160的五个电路模块105、110、115、120以及125。四个相互连接线165-180经由其引脚连接这些模块。此外,三个网指定在该引脚之间的相互连接。具体地说,引脚135、145和160界定一个三个引脚的网络,同时引脚130和155,以及引脚140和150分别界定两个二引脚的网。如图1所示,一个电路模块(诸如105)可以在多个网上具有多个引脚。
该IC设计过程必然伴有各种各样的操作。EDA应用软件通常执行以获得该IC布置图的一些物理设计操作是(1)电路分割,如果该电路对于单个芯片太大,其分割一个电路;(2)基底规划,其找到该电路模块的排列和相对方位;(3)布置,其更精确地地确定该电路模块的位置;(4)布线,其完成在该电路模块之间的相互连接;(5)压缩,其压缩该布置图以降低总的IC面积;和(6)验证,其查验该布置图以确保满足设计和功能要求。
布线是一种在结构设计周期中的关键操作。其通常划分为两个阶段总体布线和详细的布线。对于每个网络,总体布线产生一个“松散的”路线(也称作路径或者布线区),其用于连接该网络引脚的相互连接线。整体路线的该“松散”取决于使用的特定的整体布线程序。在已经生成整体的路线之后,该详细的布线生成用于每个网络特殊的专用布线选择路径。
虽然一些商用的通用布线程序现在可能允许一个临时的对角线接合,当它们指定该相互连接线的布线几何形状的时候,这些布线程序通常不能不断地探测对角布线选择路径。反过来,这增加了在该布置图中需要连接该网总的布线长度(即,相互连接线的总长度)。因此,存在一种对考虑对角的布线选择路径的布线方法和装置的需要。
发明概述本发明致力于布线方法和装置。一些实施例提供了一种使用对角路线的布线方法。这个方法在一个电路布线区域内布置若干网络的路线。在该区域中每个网络包括一组引脚。该方法最初分割该区域为若干个子区域。对于在该区域中每个特定的网络,该方法然后标识一个连接该子区域的路线,该子区域包含一个来自该特定网络的引脚组的引脚。一些标识的路线具有至少部分是对角边。
附图的简要说明本发明新颖的特点在所附的权利要求中阐明。但是,为了解释的目的,在下面的附图中阐明了本发明若干的实施例。
图1举例说明一个IC布置的例子。
图2举例说明一个利用水平、垂直和45°对角相互连接线的IC布置。
图3举例说明一种实现一个八边形的布线模式的方式。
图4给出由本发明的一些实施例实施的递归布线过程概念上的说明。
图5举例说明一个已经分解为16个子区域的IC布置的结构区域。
图6-8举例说明用于在图5举例说明的网络的3个斯坦纳(Steiner)树。
图9举例说明两个稠密网格。
图10举例说明由图9的稠密网格界定的边。
图11示出稍微较小的图10对角边。
图12举例说明越过图10的边的配线路径。
图13举例说明一个由一些实施例使用的分割网格。
图14举例说明越过由图13的网格产生的边界定的曼哈顿和对角路径。
图15举例说明分解图13的网格的每个稠密网格槽为4槽的一长度网格,同时图16举例说明分解这些子槽的每一个为16槽的一长度网格。
图17举例说明在每个稠密曲线图子槽中分割图15生成用于在该生成的4个槽之间布线的6个路径,同时图18举例说明分割图16生成用于在每个稠密曲线图子槽的生成的16个槽之间布线的42个路径。
图19举例说明一个用于适应性地选择布线模式和该稠密和/或分割网格的过程。
图20和21举例说明如何计算一个连接两个树的节点的相互连接线的长度的一些实施例。
图22举例说明一个相对于分割网格对于每个可能的网络配置构成一个或多个最佳斯坦纳树的过程,并且存储该树和其属性。
图23用插图举例说明对于通过4乘4个分割网格生成的16个槽的16个树节点。
图24举例说明一个用于标识可能的斯坦纳节点的过程。
图25A和25B举例说明一个用于构成一个或多个最小生成树(MST)并且计算具有两个或更多节点的节点配置的每个MST的长度的过程。
图26举例说明一个计算布线路径信息和路径使用概率的过程。
图27和28分别举例说明对于图6-8的斯坦纳树的路径使用计数和路径使用概率的例子。
图29举例说明一种用于存储适用于网络配置组。的斯坦纳树路线的压缩技术。
图30和31举例说明一种用于分组节点配置的方法。
图32举例说明一种用于分类存储的树的二进制搜索树(“BST”)。
图33举例说明一个用于横贯该BST去确定是否一个树是先前存储在该存储器结构中的过程。
图34举例说明一个用于多个布线模式的预制路线和路线属性的过程。
图35A和图35B举例说明关闭和开放节点配置的例子。
图36举例说明一个预制最小化关闭树的过程。
图37举例说明一个对于开放节点配置预制相关的不具有天线节点的关闭节点配置的过程。
图38举例说明当该路线和关闭节点配置被按照图36和37的过程预制的时候,标识用于网络一个或多个斯坦纳树路线的过程。
图39举例说明本发明一些实施例的布线程序的软件结构。
图40举例说明一个被递归地划分为16个子区域组的设计区域。
图41举例说明一个网络列表的数据结构。
图42举例说明一个dbNet数据结构。
图43举例说明一个简单的引脚数据结构。
图44举例说明一个路径数据结构。
图45举例说明一个槽-网络数据结构。
图46给出一个图表,其概念地举例说明由布线程序界定的槽的分层结构。
图47给出一个槽数据结构。
图48举例说明一个电路模块数据结构。
图49-51举例说明一个由图39的布线程序初始化程序执行的过程。
图52举例说明一个由图39的布线程序的槽管理器执行的过程。
图53举例说明一个由图39的布线程序的求解程序执行的过程。
图54和55举例说明一种用于推算该路径稠密的方式。
图56举例说明用于标识每个网络配置路线以及通过给该网络配置增加伪引脚产生改道几率的过程。
图57和58提供如何通过增加一个或者两个伪引脚配置产生次最佳改道路线的例子。
图59举例说明另一个用于标识网络配置附加路线的方法。
图60举例说明一个标识网络配置附加路线的过程。
图61举例说明用于在当前槽的子槽之间的水平或者垂直路径向下传播(propagate)该子槽的槽的过程。
图62和63举例说明用于模拟45°对角路径传播进入下层子槽的两种不同的方式。
图64举例说明一个依据三个元件成本用于计算每个路线成本的过程。
图65举例说明一个路径传播概率的例子。
图66和67给出两个例子,其概念地举例说明一种计数路径数目的方式。
图68-70举例说明其合作去计算在一个路线中路径数目的三个过程。
图71和72举例说明在该Gcell层上对共享限制条件的需要。
图73举例说明一个对角线对限制条件。
图74举例说明一个混合的三重的限制条件。
图75举例说明一个对角三重的限制条件。
图76举例说明一个在一些实施例中ILP传播程序执行的过程。
图77和78举例说明一种估算传播有效性的方式。
图79和80举例说明一种计算传播和计算该传播成本的方式。
图81举例说明一个当该当前槽低于上层槽但是高于叶层槽(leaflevel)的时候,用于执行当前槽随后的传播的过程。
图82举例说明一个从传送的随后路径目录的路径。
图83举例说明一个在一些实施例中使用的顺序传播过程。
图84给出一个用于实施本发明一些实施例的计算机系统。
本发明的详细说明本发明致力于布线方法和装置。在下面的描述中,为了解释的目的阐明了许多的细节。但是,本领域的普通的技术人员将认识到,无需使用这些细节可以实践本发明。在其它的例子中,为了不会以不必要的细节模糊本发明的描述,公知的构成和器件被以方框图形式示出。
下面描述了本发明的布线方法和装置的若干实施例。但是,在论述这些实施例之前,在部分I中描述了若干可以这些实施例使用的对角布线(diagonal wiring)结构。
I.对角布线结构本发明的不同的实施例可以以不同的线路模式使用。例如,一些实施例利用包括对角、水平和垂直相互连接线的线路模式使用。在下面的论述中,互连线也被称为互连或者相互连接线。此外,如在这个文献中使用的,如果相对于该布置边除零或者九十度以外其形成一个角度,相互连接线是“对角的”。另一方面,如果其相对于该布局图的一侧形成0°或者90°的角度(例如,相对于该布局图的宽形成一个0°或者90°的角度),一个相互连接线是“水平的”或者“垂直的”。
图2举例说明一个利用水平线、垂直线和45°对角相互连接线的IC布置200。在这个图中,水平线205是平行(即,是处于0°)于X轴的线,其被规定为平行于该布置的宽210。该垂直线215平行于Y轴,其规定为平行于该布置的高度220。换句话说,该垂直相互连接线215垂直(即,是处于90°)于该IC布置的宽度。此外,一组对角线225相对于该IC布置的宽度为+45°,同时另一组对角线230相对于该IC布置的宽度为-45°。在这个文献中,该措词“八边形布线模式”用于指示包括水平线、垂直线和45°对角相互连接线的布线模式。
图3举例说明一种实现该八边形的布线模式的方式。在这个图中举例说明的该布线模式使用每层具有一个优选的布线方向的概念。具体地说,图3举例说明了五个布线层,并且每个层具有其自己优选的方向。前三层305-315是曼哈顿(Manhattan)层。换句话说,在这些层中相互连接线优选的方向或者是水平方向或者是垂直方向。在这三个层中优选的布线方向通常交替改变,使得没有两个连续的层具有相同的优选布线方向。但是,在某种情况下,在连续层中该布线是在相同的方向上。
接下来的两个层320和325是对角线层。在该对角线层中对于相互连接线优选的方向是±45°。此外,如在最前三层中的方式,在第四和第五层中的布线方向通常是垂直的(即,一层是+45°并且另一层是-45°),虽然它们不必是这样。
参考在图3举例说明的八边形的布线模式在下面描述若干实施例。但是,一个本领域普通技术人员将理解,本发明可以任何一种布线模式使用。例如,本发明可以以具有精确的对角线(即,不具有水平线和垂直方向布线的布线结构)的布线结构使用。
此外,一些实施例以非45°对角布线使用。例如,一些实施例被以利用水平线、垂直线和±120°对角相互连接线的布线模式使用。此外,一些实施例使用对于一些或者全部的布线层没有规定优选方向的布线模式。例如,一些实施例使用一个八边形的布线模式,其允许存在于所有布线层之中的水平线、垂直线和45线。
II.概念上的流程图4给出通过本发明的一些实施例执行的递归布线(recursiverouting)过程概念上的说明。这个布线过程按层规定在一个IC布置的设计区域(也称作一个槽)内用于网络的路线。这个区域可以是整个IC布置,或者这个布置的一部分。同样地,该IC布置可以是一个用于整个集成电路芯片或者芯片的布置,或者其可以是一块集成电路芯片(即,一部分)的布置。
该过程最初界定(在405)一个分割网格,其划分该IC区域为若干子区域。在下面的论述中,该分割的区域也被称为当前槽,并且由该分割产生的该子区域也被称为当前槽的子槽。
在一些实施例中,该分割网格是通过交叉切割线形成的。在这些实施例的一些中,该交叉分割线是N个水平线和M个垂直线,其划分该IC区域为(N+1)(M+1)个子区域,这里N和M可以等于任何整数。例如,这些水平线和垂直线划分该接收的IC区域为(1)当N和M等于1的时候,四个子槽;(2)当N和M等于2的时候,九个子槽;(3)当N和M等于3的时候,十六个子槽;(4)当N或者M等于4以及另一个等于5的时候,二十个子槽。
图5举例说明一个设计区域500,其通过设置三个水平和垂直分割线组已经划分为十六个子区域(即,为子槽0-15)。这个图也示出一个包括五个电路模块510、515、520、525和530的网络505,该五个电路模块落入该十六个子区域的四个中。这四个子区域是槽0、1、7和8。
在该分割的区域内(即,在该当前槽内)的每个网络在由该分割网格界定的子区域中具有一个或多个真实的或者虚拟的引脚。一个网络的真实引脚是在该设计区域中电路模块的引脚,但是该网络的虚拟引脚是人造引脚,其被设置说明高层路线传播到下层子槽之内的传播,如在下面进一步描述的。对于每个网络,包含网络真实或者虚拟引脚的子区域组表示相对于分割网格的该网络的配置。
对于在该分割区域内的每个特定的网络,该过程400使用(在410)网络配置以标识的该网络一个或多个路线(也称作布线图或者连接图)。网络的每个路线提供一组连接子槽(即,子区域)的相互连接线,该子槽包含网络的引脚。
为了模拟相对于网格的每个网络配置,包含一个或多个网络引脚的每个子槽被当做该布线图的节点(也称作顶点或者点)。然后该图的节点由边(也称作线)连接。按照一些实施例,该布线图可以具有完全或者部分对角的边。
不同的实施例使用不同类型的图形去界定该相互连接路线。在下面描述的实施例中,树(例如,斯坦纳树)被用作连接包含相关网络引脚的子槽的该布线图形。图6-8举例说明适合于在图5中的网络505的三个最佳的斯坦纳树605、705和805。这些斯坦纳树全部都具有相同的长度。这些树(605)的一个具有一个斯坦纳节点(620)。此外,这些树的每一个至少具有一个部分对角边。在这些例子中,该布线程序使用八边形的布线模式,因此该对角边相对于该布局图边是45度。
在开始过程400之前,一些实施例预先计算和在一个数据存储器中存储适合于子槽不同的结构的路线。在运行时间,在这些实施例中该布线程序通过(1)相对于分割网格标识每个网络的结构标识(在410)用于网络的一些或者所有的路线,以及(2)从该数据存储器取回(retrieving)用于标识的结构的路线。这样的一种方法使该布线程序避免必须实时构成用于每个网络配置的路线。在下面的部分V中描述了这样一种方法。
另一方面,其它的实施例在运行时间使用网络配置去产生路线。其它的实施例还使用网络配置去取回和产生路线。例如,一些实施例在产生用于其他网络的路线时使用网络配置去取回对于一些网络的预制路线。这样的一种方法在下面的部分V中进行描述。
在一些实施例中,该预制或者产生的路线是最佳布线。这些实施例的一些也使布线程序标识在该布局中每个网络配置的次最佳布线,以便增加每个网络可能的解决方案的数目。在下面的部分VI中描述了这样的一种方法。
对于每个网络,该过程400选择(在415)为该网络标识的路线中的一个,作为在当前的递归层上该网络的路线。该过程选择优化一些目标(诸如降低布线长度和稠密)的路线。当当前槽的子槽被分割以界定更小的子槽的时候,然后该过程400确定(在420)进入更小子槽之内的选择路线的传播。在这个阶段,该过程还可能增加虚拟引脚给一些网络以说明这样的传播。
最后,当在405界定的子槽不是由上一次递归操作产生的槽的时候,该过程400对在405界定的每个子槽递归地重复。通过对于每个界定的子槽递归地重复,该过程400会界定当前区域中网络的越来越详细的路线。换句话说,这个递归过程400以分层的方式界定路线,其中当递归分层的级别增加时该过程界定更详细的路线。
在递归过程中一些实施例使用不同层的不同形状的分割网格。但是,在下面描述的实施例对于所有的递归层使用相同形状的分割网格。在每个递归层上,这些实施例仅仅调节该分割网格的坐标以和在其递归层上的IC区域的坐标匹配。对于所有的递归层使用相同形状的分割网格具有若干优点。例如,该过程可以再次使用对于递归过程各级的同一组的预制信息。
III.多个网格一些实施例除了该分割网格之外还使用一个或多个网格。
A.多个稠密网格一些实施例使用多个稠密网格作为用于量化分割网格界定的子区域之间布线路径的能力和测量该稠密的概念性模式,该子区域是通过。图9举例说明两个这样的稠密网格。下面描述的一些实施例使用了结合在图3举例说明的八边形的布线模式的这两个网格。
在图9中,该两个网格是(1)网格905,其由3个水平线和3个垂直线形成,和(2)网格910,其由7个+45°对角线和7个-45°对角线形成。网格905用于规定水平和垂直布线选择路径的能力和测量其稠密,同时网格910用于规定对角布线选择路径的能力和测量稠密。
具体地说,如图10所示,该网格905界定12个垂直边(E0-E11)和12个水平边(E12-E23),同时网格910界定9个-45°边(E24,E26,E28,E30,E32,E34,E36,E38,E40)和9个+45°边((E25,E27,E29,E31,E33,E35,E37,E39,E41)。在图10中,示出的对角边具有端点,以便当它们彼此邻接时简化这些边的标志。
如图10所示,每个对角边穿过在两个子区域的中心之间的距离,两个子区域由第一个网格界定,而且彼此为相对对角相邻位置。换句话说,每个对角边连接对角对齐的两个子区域的中心,以使得它们仅在其它们角落的一个上邻接。图11示出稍微更小的对角边,以便简化这些边的外部特征。
在一些实施例中,网格905和910也用于界定在分割区域的子槽之间的布线选择路径。具体地说,与网格905和910界定的每个边相互垂直的布线选择路径是一个可以由布线树使用以连接邻接的槽(即,邻接的子区域)。例如,图12举例说明越过图10的42个边的42个布线路径。水平路径P0-P11被界定为越过垂直边E0-E11,垂直路径P12-P23被界定为越过将与垂直布线路径垂直交叉的水平边E12-E23,+45°路径P24、P26、P28、P30、P32、P34、P36、P38、P40被界定为越过-45°边E24、E26、E28、E30、E32、E34、E36、E38、E40,以及-45°路径P25、P27、P29、P31、P33、P35、P37、P39、P41被界定为越过+45°边E25、E27、E29、E31、E33、E35、E37、E39、E41。
当这两组容量相纠缠时,可根据边容量或者路径容量表示和分析稠密问题。下面的过程根据路径容量分析容量议题。但是,一个普通的技术人员将了解类似过程可用于依据边容量分析容量议题。
如在下面进一步描述的,一些实施例从路径交叉的边的长度导出每个路径容量。例如,一些实施例通过将相应的垂直边(即,垂直于特定的路径的边的长度)的长度除以对应于特定的路径的金属层的间距,计算每个特定的路径的容量。一些实施例将线至金属层的间距界定为线路至通路(via)的间距。一些实施例将线路至通路的间距作为在那个金属层上的互连线路之间所需的最小化距离,加上该线路的1/2宽度,加上包括该金属交叠的通路的1/2宽度。
在一些实施例中,该对角路径的容量不同于该曼哈顿路径的容量。这可能是由于垂直于对角和曼哈顿路径的边不同长度。还可能是由于对角线路的间距不同于该曼哈顿线路的间距。进一步可能是由于一个层的间距不同于另一个层的间距。例如,在一些实施例中,当该-45°金属层的间距不同于该45°金属层的间距的时候,-45°对角路径的容量不同于该45°对角路径的容量。
在图9中,该网格905是与在图5举例说明的分割网格相同的。但是,一个普通的技术人员将理解,两个稠密网格可能不同于该分割网格。此外,尽管图9举例说明用于一些实施例的两个稠密网格905和910,一个普通的技术人员将理解,其它的多网格方案可以由其它的实施例使用。
一些实施例通常基于用于设计该设计布置和/或该IC的布线模式的布线方向的数目和布线层,以界定稠密网格的数量和结构。例如,一些实施例使用一个允许在水平、垂直、+120°对角以及-120°对角方向布线的布线模式。对于上述的一个布线模式,可以使用两个稠密网格。象网格905一样,第一网格可以通过交叉水平和垂直线形成以便界定垂直与水平布线选择路径的容量并且测量垂直与水平布线选择路径的稠密。第二网格可用于界定±120°对角布线选择路径的容量并且测量±120°对角布线选择路径的稠密。除了该第二网格的轴线相对于第一网格的轴线旋转120°之外,该第二网格可以与第一网格类似。换句话说,这个第二网格可以通过一定数量相交的±30°线路形成。
B.稠密和长度网格一些实施例使用(1)第一网格去分割一个IC区域并且测量在这个区域中的稠密,以及(2)一个第二网格去测量在该区域中的成本的线长度。图13-18举例说明若干上述的实施例。这些实施例使用包括水平、垂直和±45°互连线的布线模式。一个普通的技术人员将理解,其它的实施例使用其它的布线模式(诸如一种使用±120°线路)。
图13举例说明第一网格1305,一些实施例使用其去分割一个IC区域为16个子区域。这个网格还界定24个边E0-E23,用于测量在该区域中曼哈顿和非曼哈顿互连线的稠密。如图14所示,24个曼哈顿路径P0-P23和48个对角路径P24-P71被界定为跨越这些24个边E0-E23。每个路径表示跨越该路径相应边的该路径的方向中一个或多个布线的轨迹。
垂直边E0-E11用于测量在水平路径P0-P11的方向和±45°对角路径P24-P29,P38-P43,P52-P57以及P66-P71跨越这些垂直边的布线稠密(即,互连线的)。类似地,水平边E12-E23用于测量沿着垂直路径P12-P23和±45°对角路径P30-P37,P44-P51,以及P58-P65的方向跨越这些水平边布线稠密。
一些实施例依据该路径P0-P71界定每个路径。路径P0-P71还用于测量在该IC区域中的稠密。在一些实施例中,沿着对角路径P24-P71的容量小于沿着曼哈顿路径P0-P23的容量。例如,一些实施例规定(1)每个曼哈顿路径表示在最低层子槽(即,在Gcell层上)的8个布线轨迹,以及(2)当该对角和曼哈顿层具有相同的间距的时候,每个对角路径表示在该Gcell层的5个布线轨迹。当对角路径层的间距大于曼哈顿路径层的间距的时候,一些实施例规定用于小于在该Gcell层的对角路径的5个轨迹。
如上所述,一些实施例使用第二网格去测量在该区域中布线成本的线长度。这个长度网格分解每个稠密网格子槽为更小的槽。例如,图15举例说明一个长度网格,其分解网格1305的16个稠密网格子槽的每个为4个槽,同时图16举例说明一个长度网格,其分解网格1305的16个稠密网格子槽的每个为16个槽。其它的实施例使用其它的类型的网格(例如,一个3×5网格)以分解该稠密网格子槽。
图17举例说明图15的2×2分割界定在每个稠密图形子槽中生成的4个槽之间布线的6个路径,同时图18举例说明图16的4×4分割界定在每个稠密图形子槽生成的16个槽之间布线的42个路径。此外,每个类型的分割界定在相邻稠密网格子槽的长度网格槽之间的若干路径。这些路径将进一步在下面进行描述。
通过标识一个或多个横贯该长度网格路径以连接所有网络引脚的线段,该长度网格可用于估算成本的每个网络布线的接线长度成本。换句话说,对于网络布线,估算的接线长度成本是一组长度网格路径的长度,该长度网格路径(1)连接包含该网络引脚的长度网格槽,(2)在与由该网络布线使用的该稠密图形路径相同的方向上横跃相同的稠密图形边。一组长度网格路径的接线长度成本包括连接含有网络引脚的长度网格槽的内部路径(即,在稠密网格槽内的长度网格路径)成本,加上横贯外来稠密图形边的外围长度网格路径成本。
在一些实施例中,传播一个稠密网格路径到外围长度网格路径(即,一个在稠密网格槽之间的长度网格路径)可能需要在相对于长度网格的该网络引脚配置中设置虚拟引脚。因此,该内部长度网格路径连接包含该网络真实的或者虚拟引脚的该长度网格槽。同样,如上所述,该外围长度网格路径(即,跨越稠密图形边的该长度网格路径)在与网络路径使用的该稠密图形路径同一方向上跨越该稠密图形边。
图17和18举例说明在对角相邻的稠密网格子槽的长度网格槽之间的对角长度网格路径。在这些图中,上述的对角长度网格路径以虚线环绕。一些实施例界定上述的对角长度网格路径,同时其它的不界定。
此外,一些在对角相邻的稠密网格子槽之间具有对角长度网格路径的实施例使用特定协定以使这些对角长度网格路径与对角稠密图形路径相关联。在一些实施例中,上述的-45°长度网格路径或者连接至其相应的底端和左稠密图形路径,或者连接至其相应的顶端和右稠密图形路径。例如,当在稠密图形子槽9和12之间使用-45°长度网格路径的时候,一些实施例使路径53和59的路径使用增加1,同时其它的实施例使路径61和67的路径使用增加1。(路径53、59、61和67在图14中举例说明)。
类似地,一些实施例将+45°长度网格路径或者连接至其相应的底端和右稠密图形路径,或者连接至其相应的顶端和左稠密图形路径。例如,当在稠密图形子槽8和13之间使用一个+45°长度网格路径的时候,一些实施例将路径58和66的路径使用增加1,同时其它的实施例将路径52和60的路径使用增加1。(路径52、58、60和66在图14中举例说明)。
或者,一些实施例将对角相邻的稠密网格子槽之间的对角长度网格路径连接至四个周围稠密图形路径的唯一一个,并且分配一个附加的轨迹给这个稠密图形路径的容量。一些实施例连接一个-45°长度网格路径至其相应的左稠密图形路径,并且连接+45°长度网格路径至其相应的右稠密图形路径。在这个方法之下,一些实施例将在稠密图形子槽9和12之间的-45°长度网格路径与路径59相关联,并且分配容量6给Gcell层的路径59,同时分配一个容量5给路径53。
然而其它的实施例并不将在稠密图形子槽之间的对角长度网格路径与对角稠密图形路径P0-P71相关联。代之以,这些实施例界定18对对角相邻的稠密图形槽之间的18个附加的对角稠密图形路径。这18个附加的稠密路径的每一个对应于一个特定的长度网格路径。同样,在该Gcell层,一些实施例界定这18个附加的路径的每一个为1轨迹宽。
不同的实施例使用不同的稠密和长度网格。例如,一些实施例基于相对于该稠密网格1305的网络配置标识布线,以及然后使用长度和稠密网格以计算该标识布线的接线长度和稠密成本。其它的实施例经由长度网格连续地展开网络布线。对于每个展开或者可能的展开而言,这些实施例使用长度网格去消耗该展开或者可能的展开。如果该展开或者可能的展开横贯稠密网格边的一个,这些实施例把用于稠密网格的稠密成本化为因子。同样,如上所述,一些实施例最终依据跨越稠密网格界定的路径P0-P71界定每个的路径,而其它实施例并非如此。
IV.布线模式的适应性选择一些实施例基于该设计区域(即,被设计的区域)的宽高比(高度对于宽度的比值)适应性地选择其布线模式。图19举例说明一个用于进行这样一个适应性选择的过程1900。通常该过程在过程400的405界定该分割网格之前实施。在一些实施例中,设计者手动地实施这个过程的一些或者所有的操作,而在其它的实施例中,布线程序以自动方式实施这个过程的一些或者所有的操作。
这个过程最初标识(在1905上)设计区域的宽高比。为了标识该宽高比,该过程基于设计区域的尺寸可计算这个比值,或者其可以取回对于该设计模块预先作成列表的宽高比。该过程然后基于该标识的宽高比选择(在1910上)一个布线模式。在一些实施例中,然后过程1900适应性地选择(在1915)分割和/或稠密网格。在一些实施例中,基于该布线模式,该过程适应性地选择分割和/或稠密网格。
适应性地选择布线模式允许为实现一些设计目标(例如,将接线长度和稠密减到最小)而布线设计区域。例如,当设计一具有比较大宽高比(即,一个高和小的电路模块)的电路模块的时候,一些实施例适应性地选择一个布线模式,其允许在水平、垂直、±120°对角方向上布线,因为这样的布线模式使用于布线上述的电路模块的接线长度和稠密得以降低。对于这样的布线模式,一些实施例使用如上所述的由相交的水平和垂直线形成的第一稠密网格(类似图9的网格905)和由相交±30°线路形成的第二稠密网格。
同样,对于这样的布线模式和IC区域,一些实施例使用一个将IC区域划分为具有很大宽高比的较小区域的分割网格。在一些这样的实施例中,对角相邻的分割区域使它们的中心彼此偏移120°,以便它们的中心可以由120°对角线连接。
很多其它的布线模式可以用于具有大宽高比的设计模块。例如,另一布线模式允许在水平、垂直、±45°对角和±120°对角方向布线。对于这样的一种布线模式,一些实施例可以使用以下三个稠密网格(1)用于水平和垂直路径并且由相交水平和垂直线形成(类似图9的网格905)的第一网格;(2)用于±120°路径而且由相交的±30°线路形成的第二网格;和(3)用于±45°路径而且由相交±45°对角线路形成的的第三网格。
类似地,很多的布线模式可用于一具有小宽高比(即,一个短和宽的模块)的设计模块。例如,一些实施例可适应性地为这样的模块选择允许在水平、垂直、±30°对角方向上布线的布线模式。对于这样的一种布线模式,一些实施例可以使用以下两个稠密网格(1)用于水平和垂直路径而且是通过相交水平和垂直线形成的(类似图9的网格905)的第一网格;(2)用于±30°对角路径而且是由相交±120°线路形成的第二网格。
对于这样的布线模式和稠密网格,一些实施例使用一个将IC区域划分为具有小宽高比的较小区域的分割网格。在一些这样的实施例中,对角相邻的分割区域使它们的中心彼此偏移30°,以使它们的中心可通过30°对角线路连接。
另一种用于这样的模块的布线模式允许在水平、垂直、±45°对角和±30°对角方向布线。对于这样的一种布线模式,一些实施例使用以下三个稠密网格(1)用于水平和垂直路径而且是通过相交的水平和垂直线形成的(类似图9的网格905)的第一网格;(2)用于±30°对角路径而且是由相交的±120°线路形成的第二网格;和(3)用于±45°对角路径而且是由相交的±45°线路形成的(类似图9的网格910)第三网格。
当该设计模块是正方形的时候,一些实施例可以选择非常对称的布线模式,如上述参考图3讨论到的五层八边形的布线模式。但是,在这种情况下,其它的实施例可以选择更复杂的布线模式。例如,一些实施例可以选择九层布线模式,其包括在图3举例说明的最初五层加上类似在图3举例说明的2-5层的另四层。用于这样的布线模式的一组稠密网格可以包括用于2-5层的上述网格905和910,以及另外两个类似于用于6-9层的网格905和910网格。
一些实施例可使用的另一复杂的对称布线模式类似于如上所述的9层模式,除了在最后四层(即,6-9层)中的优选方向已经在相同的方向变化22.5°之外。这生成的布线模式将从任何给定点提供16个布线方向,其中每个布线路径方向离其邻近的布线路径方向22.5°。用于这样的布线模式的一组稠密网格可以包括上述用于1-5层的网格905和910,以及另外的两个网格,其为用于6-9层的网格905和910的22.5°变化版。
V.预先制表布线选择信息如上所述,一些实施例预先计算用于不同结构的的子槽的布线并且将其存储在一个存储器结构。在运行时间,在这些实施例中布线程序通过以下标识用于网络的一些或者所有的路线,(1)相对于分割网格标识每个网络的结构,和(2)从该存储器结构取回用于标识的结构的布线。通过参考图20-34下面描述了一种预先制表斯坦纳树布线的方式。
另一方面,其它的实施例使用网络配置以实时产生布线。其它的实施例还使用网络配置去取回和产生布线。例如,一些实施例使用网络配置去取回用于一些网络预先制表的布线,并且产生用于其它的网络的布线。这样的一种方法通过参考图35-38描述如下。
A.预先制表斯坦纳树路径图20-34举例说明一种预先制表斯坦纳树的方式,其相对于分割网格模拟可能的网络配置。此外在下面进行描述这些树的预先制表的属性。如上所述,布线程序在布线过程期间可以使用这样的预先制表布线和/或属性。
其它的EDA应用软件也可以使用这些布线和/或属性。例如,如在2000年12月6日申请的美国专利申请并且序列号为09/732,181,名称为“递归分隔布局方法和装置”中公开的,布局者可以使用预先制表的接线长度、路径计数值,和/或路径概率值去测量布局成本。
1.计算连接两个树的节点的互连线的长度图20和21举例说明一些实施例如何计算一连接两个树的节点的互连线的长度。这些实施例通过把该两个节点视为边界框相对角来执行这些操作,该边界框具有一长边(L)和一短边(S)。
图20呈现一个用于两个节点2035和2040的边界框2005的例子。如这个图所示,对于利用水平、垂直和对角互连线的布局而言,线条2010穿过节点2035和2040之间的最短距离。这个线路是部分对角的。具体地说,在这个例子中,这个线路的线段2020是对角线,而其它的线段2015是水平线。
下面的方程式(A)提供线路2010穿越的距离(即,在节点2035和2040之间的最短距离)。
距离=[L-{S(cosA/s inA)}]+S/sinA (A)在这个方程式中,“L”是该方框的长边,在这个例子中其是沿着X轴的该方框的宽度2025,而“S”是该方框的短边,在这个例子中其是沿着Y轴的其高度2030。此外,在这个方程式中,“A”是对角线线段2020相对于该边界框的长边生成的角度。在一些实施例中,这个角度A对应于布局图中一些对角互连线的方向。例如,在一些实施例中,当该布局图使用在图3举例说明的八边形的布线模式的时候,角度A等于45°。
下面的方程式(B)-(D)举例说明如何推导出方程式(A)。线2010的长度等于其两个线段2015和2020长度的总和。方程式(B)提供水平线段2015的长度,而方程式(C)提供对角线段2020的长度。
2015的长度=L-(2020的长度)*(cosA) (B)2020的长度=S/sinA(C)下面方程式(B)和(C)可以被合并以获得方程式(D),其简化时提供上述的方程式(A)。
距离=2015的长度+2020的长度=L-S/sinA*(cosA)+S/sinA (D)当该角度A等于45°的时候,方程式(A)简化为下面的方程式(E)。
距离=L+S*(sqrt(2)-1) (E)当该边界框没有宽度或者高度的时候,那么该边界框仅仅是一条线,并且在这条线的相对角之间的最短距离由该方框的长边(唯一的)提供,其将是一个水平线或者垂直线。当该边界框具有相等尺寸的高度和宽度(即,当其是一个正方形时)的时候,该角度A是45°,一个完全对角的线规定在该方框的两个对立新来者之间的最短距离。
图21举例说明过程2100,其标识用于两个树的节点的边界框,并且基于该边界框的尺寸和方程式(A)计算一个连接两个节点的互连线的长度。这个过程最初(在2105)确定第一节点的X坐标(X1)是否大于第两个节点的X坐标(X2)。如果是这样的话,该过程规定(在2110)第一节点的X坐标(X1)作为最大X坐标(XMax),并且规定第二节点的X坐标(X2)作为最小X坐标(XMin)。否则,该过程规定(在2115)第二节点的X坐标(X2)作为最大X坐标(XMax),并且第一节点的X坐标(X1)作为最小X坐标(XMin)。
接着,该过程确定(在2120)第一节点的Y坐标(Y1)是否大于第二节点的Y坐标(Y2)。如果是这样的话,该过程规定(在2125)第一节点的Y坐标(Y1)作为最大Y坐标(YMax),并且第二节点的Y坐标(Y2)作为最小Y坐标(YMin)。否则,该过程规定(在2130)第二节点的Y坐标(Y2)作为最大Y坐标(YMax),并且第一节点的Y坐标(Y1)作为最小Y坐标(YMin)。
然后该过程规定(在2135)该边界框的四个坐标,为(XMin,YMin),(XMin,YMax),(XMax,YMin),以及(XMax,YMax)。接着,该过程确定(在2140)该边界框的宽度和高度。该过程(1)通过测量在该方框的最大和最小X坐标之间的差值确定该宽度;和(2)通过测量在该方框的最大和最小Y坐标之间的差值确定该高度。然后该过程确定(在2145)计算的宽度是否大于计算的高度。如果是,该过程规定(2150)该宽度作为长边,并且该高度作为短边。否则,该过程规定(在2155)该宽度作为短边,并且该高度作为长边。
在2150或者2155之后,然后该过程使用(在2160)上述的方程式(A)计算连接两个节点最短的互连线的长度。然后该过程结束。
2.构建用于所有可能的网络配置的斯坦纳树和预先制表每个树的长度以及布线路径信息。
图22举例说明一个过程2200,(1)相对于一个分割网格构成用于每一可能网络配置的一个或多个最佳斯坦纳树;(2)在一个诸如查询表(“LUT”)的存储器结构中存储每个构建的斯坦纳树的长度;(3)使用该网格中的每个布线路径计算和存储树的概率;和(4)通过在该存储器结构中存储每个树的布线路径存储每个树的特性。
在布线程序开始其工作之前执行这个过程2200,使得该布线程序没有必要实时构成每个网络配置的斯坦纳树。代之以,因为过程2200,布线程序仅需要(1)相对于分割网格以标识每个网络配置;和(2)取回存储的用于标识的结构的属性。
如图22所示,过程2200最初通过为由特定的分割网格界定的每个子区域(也称作槽)规定一个树节点开始(在2205)。图23用图例举例说明用于由4乘4分割网格生成的十六个槽的十六个树节点2305。这些节点代表模拟所有网络配置的互连拓扑结构的所有可能的树节点。在图23中,该标识的节点放置在每个槽的中心。在其它的实施例中,该节点可以统一地界定在该槽中的其它的位置上(例如,可以统一地放置在该槽的一角上)。
接着,过程2200规定(在2210)可能的节点配置组N。当分割网格规定Y个(例如,四个、九个、十六个、二十个等等)子区域的时候,组N包括2Y个节点配置。在规定可能的节点配置组N之后,过程2200从这个组中选择(在2215)一个可能的节点配置。
然后,该过程对于在2215选择的该节点配置构成(在2220)一个或多个最小生成树(“MST”),并且计算每个构成的树的长度(MST_Cost)。如在下面进一步进行描述的,每个构成的MST可以具有完全或者部分对角的边。小于两个节点的节点配置不具有MST,并且相应地其MST_Cost是零。此外,图25A举例说明过程2500,该过程构成一个或多个MST并且计算具有两个或更多节点的节点配置的各MST的长度。下面将进一步描述这个过程2500。
在2220之后,过程2200标识(在2225)可能的斯坦纳节点,然后规定(在2230)所有可能的斯坦纳节点组。通过参考图24下面将解释一种标识可能的斯坦纳节点的方式。在2230规定的每个斯坦纳节点组包括一个或多个在2225标识的斯坦纳节点。同样,每个规定的斯坦纳节点组具有一个最大尺寸,其较在选择的节点配置中的节点数目少两个节点。
对于在2230标识的每一斯坦纳节点组,然后过程(在2240)(1)构建选择的节点配置和选择的斯坦纳节点组中的节点的一个或多个MST;和(2)计算和存储每个MST的长度(MST_Cost)。每个构成的MST可以使用完全的或者部分的对角边。如上所述,小于两个节点的节点配置不具有MST,并且相应地MST_Cost是零。此外,图25A举例说明过程2500,其构成一个或多个MST并且计算具有两个或更多节点的节点配置的各MST长度。下面将进一步描述这个过程2500。
接着,过程2200选择(在2240)在2220或者2235产生的最短的MST组作为当前节点配置的最佳斯坦纳树。在其它的实施例中,这个过程使用其它的标准去选择其斯坦纳树组。在2240,该过程也在存储器结构(诸如一个LUT)中存储该斯坦纳树或者在2240标识的树的长度(MST_Cost)。
在2240选择当前节点配置的一个或多个斯坦纳树之后,过程2200调用(在2245)一个过程2600,以计算由该选择的斯坦纳树产生的布线路径信息和路径使用概率。这个过程将通过参考图26在下面进行描述。
过程2200接下来确定(在2250)其是否已经检查了在2210规定的组N中的所有节点配置。若不是,该过程返回到2215以从这个组中选择未经检查的节点配置,并且然后对于新选择的节点配置重复操作2220-45。否则,该过程结束。
图24举例说明用于标识可能的斯坦纳节点的过程2400。图24的过程2400只需对于具有三个或更多节点的节点配置执行,因为在2220规定的每一斯坦纳节点组具有一最大尺寸,该最大尺寸较在选择的节点配置中的节点数目(即,因为没有在2220对于具有两个或者更少的节点的节点配置规定斯坦纳节点组)少两个节点。
通过初始化一组与所有在2205规定的节点(其不是在2215选择的节点配置的一部分)相同的可能的斯坦纳节点组P,过程2400开始(在2405)。然后这个过程选择(在2410)可能的斯坦纳节点的一个。接着,过程2400确定(在2415)在2410选择的该节点(Q)是否是在该选择的节点配置中的任何两个节点之间的最短路径上。为了进行这个确定,该过程确定在节点配置中任何的两个节点(B和C)是否退出,以便两个节点(B和C)之间的距离等于下面的和,(1)在第一节点(B)和选择的节点(Q)之间的距离,和(2)在第二节点(C)和选择的节点(Q)之间的距离。在一些实施例中,该过程使用上所述的过程2100和方程式(A)计算在任何一对节点之间的距离。
如果该过程确定在2410选择的节点Q位于节点配置中的任何两个节点间的最短路径上,该过程保持(在2420)该选择的节点在可能的斯坦纳节点的组P中,标识这个节点作为其已经检查的节点,并且转变至将在下面进行描述的2430。另一方面,如果该选择的节点(Q)不在选择的节点配置中的任何两个节点之的最短路径上,该过程从可能的斯坦纳节点组P中删除选择的节点,并且转变至2430。
在2430,该过程确定其是否已经检查了在可能的斯坦纳节点组中所有节点。若不是,该过程返回到2410以在这个组中选择另一个节点,以便其可以在2415确定这个节点是否是在该选择的节点配置中任何两个节点间的最短路径上。当该过程确定(在2430)其已经检查了可能的斯坦纳节点组中的所有节点时,过程结束。
图25A举例说明过程2500,图22的过程2200在2220和2235使用其以构成最小生成树。节点配置的最小生成树是一个具有N-1边的树,该些边(即,跨越)连接通过最短路径的结构的N个节点,最小生成树仅在该节点分叉(即,开始或者结束)。
在本发明的一些实施例中,MST的边可以是水平线、垂直线或者对角线线。对角边可以是完全或者部分的对角。此外,当布局使用对角互连线(例如,±45°互连线)的时候,MST的对角边可以是在与该布局中的一些对角互连线相同的方向(例如,可以是±45°方向)。例如,当该布局图使用一个八边形的布线模式(即,使用水平、垂直和45°对角线)的时候,一些实施例构建具有水平、垂直和45°对角边的MST。
通过把MST的每个边的两个节点视为一个边界框的两个对立角,可以通过使用以上所述的过程2100和方程式(A)获得,每个边的长度。
距离=[L-{S(cosA/sinA)}]+S/sinA (A)如上所述,在这个方程式中,“L”是方框的长边,“S”是方框的短边,以及“A”是该边的对角线段相对于该边界框的长边的角度。
每当过程2200调用过程2500(在2220或者2235),该过程2500开始,(1)以为节点组M构成一个或多个MST;和(2)计算每个构成的MST的长度。这个过程起初(在2505)将MST长度(MST_Cost)设置为零。接着,该过程(在2510)(1)从接收的节点组M中选择一个节点作为该生成树的第一节点,和2)从这个节点组M中除去这个节点。
然后该过程2500调用(在2515)一个在图25B说明的过程2550,以便标识一个或多个链接的代表一个或多个完整的MST的节点组。过程2550是一个递归过程,当其被调用时,其接收(1)一组代表不完全MST的节点,和(2)一组还没有增加到该接收的不完全MST的节点配置的节点的节点M。当过程2500调用过程2550的时候,其为过程2550提供在2510选择的第一节点,和剩余节点M的修正组。作为响应,如下所述,递归过程2550返回代表一个或多个MST的一个或多个链接节点组。过程2550可返回超过一个相同的链接节点组的副本。相应地,在过程2500从过程2550接收一个或多个链接节点组之后,过程2500删除(在2520)相同接收的链接节点组的所有的复制副本,以便只存在每个接收节点组的一个副本。在2520之后,过程2500返回构成的MST和其长度,然后结束。
如图25B所示,过程2550界定(在2525)一个与当过程被调用时其接收的节点组M相同的剩余节点组R。在2530,过程2550从该剩余节点组R中选择一个节点,并且从该剩余的节点组中除去该选择的节点。然后该过程计算和存储(在2535)在2530选择的节点和接收的不完全的MST的每个当前节点之间的距离。在该选择的节点和每个节点之间的距离可以通过一个完全或者部分对角的边穿越。因此,在一些实施例中,过程2550使用上述的过程2100和方程式(A)计算在该选择的节点和每个节点之间的最小距离。
接下来,该过程确定(在2540)在组R中是否有任何节点。如果是,该过程返回到2530以从这个组中选择另一个节点,以便其可以计算(在2535)在这个节点和该生成树的当前节点之间的距离。否则,该过程(在2545)标识记录在2535的最小的距离,并且标识生成该距离的节点对或对组(其中,在每个对中一个节点来自于接收的M组以及一个节点来自于接收的MST)。
然后过程2550(在2555)将该标识的最小的距离增加到MST长度(MST_Cost)。接下来,该过程确定(在2560)其是否标识超过一对最接近节点。若不是(即,如果标识的最小距离是在M组中的唯一一个节点和在该MST中的位移一个节点之间),该过程(在2565)(1)对应于在2545标识的组M节点界定一个树节点;(2)从组M中除去该标识的节点;和(3)链接该界定的树节点到在2545标识的MST节点。在2565,当除去标识的节点之后,组M为空时,过程2550也递归地调用它自己并且提供修正的MST和修正的组M。另一方面,当该正的组M是空时,过程2550从2565过渡到2575,这里其返回一组表示一个通过在2565链接完成的完整的MST的节点。在2575之后,该过程2550终止。
如果过程2550确定(在2560)其标识(在2545)超过一个“最接近的”节点对,其基于每个标识的最接近的节点对顺序地和递归地尝试获得一个完整的MST。换句话说,这个过程最初选择一个标识的节点对,然后(1)从组M中除去选择成对的组M节点,(2)链接该除去的节点到该成对的MST节点;和(3)对于修正的MST和修正的组M递归地重复。一旦过程2550接收该递归的结果(即,当这个过程对于该选择的节点对接收到完整的MST的时候),然后其选择下一个标识的节点对,并且执行该相同的三个操作,以便基于这个节点对获得完整的MST。该过程以此方式继续,直到其基于每个标识的“最接近的”节点对产生MST为止。在连续地处理了每个标识的节点对之后,该过程返回(在2575)该MST,然后结束。
图26举例说明过程2600,其计算由在2250选择的斯坦纳树产生的布线信息和路径使用概率。每当过程2200在2245调用过程2600时起动这个过程2600,并且为其提供一组斯坦纳树。
通过初始化(在2605)一个为每一路径存储计数值的全局计数变量,开始过程2600。对于每个接收的树,该过程初始化(在2610)一个位串以用于存储该树的布线选择路径信息。然后该过程选择(在2615)一个接收的斯坦纳树,并且在该树中选择(在2620)一边(即,在该树中选择一对连接的节点,其中这些节点在过程2550的2565或者2570被连接)。接下来,该过程确定(在2625)是否存在超过一组路径以布线该选择的树边(即,去连接该选择的一对节点)。在一些实施例中,该过程从一个存储器结构(例如,一个LUT)中取回用于该选择树边的路径值,该存储器结构存储用于任意组合的树形槽节点(tree slot node)的路径使用值。换句话说,这个存储器结构将网格内每个可能的树边的端点映射为一组路径使用值。
当该树边的端点不相邻(即,当在2620选择的一对节点是不相邻的时候)时,在该端点(即,在该节点对之间)之间可能存在超过一个最佳布线。因此,在该LUT中的路径使用值可以指定用于多个最佳布线的值。
可以代表在图6-8示出的三个斯坦纳树的两组节点连接是(l)由用于图6中的斯坦纳树605的节点610-节点615-斯坦纳节点620-节点625-节点630形成的节点组;和(2)由用于图7或者8的斯坦纳树的节点625-节点610-节点615-节点635形成的节点组。
在代表图6的斯坦纳树605的第一节点组中,只有一个路径存在于任意两个连接的节点对之间。因此,用于来自这个组的任何一对,映射LUT将返回42个值,除用于在选择的节点对之间的路径值之外所有的值等于0。该非零的值将是1,以表示在该选择的节点对之间仅存在一个路径。
另一方面,对于代表或者斯坦纳树705或者805的第二节点组而言,在节点615和630之间存在两个路径。斯坦纳树705使用这些路径中的一个,同时斯坦纳树805使用另一个。对于在这该节点组中的这个节点对(即,对于节点615和630),映射LUT将返回两个42位的信息串,其中一个用于斯坦纳树705以及一个用于斯坦纳树805。用于树805的位串具有用于路径1的值并且将28位设置为1以及剩余值设置为0,而用于树705的位串具有用于路径5的值并且26位设置为1以及剩余值设置为。
如果该过程在2625取回位串不超过一个,其过渡到如下所述的2635。否则,当该过程取回用于布线选择的树边(即,用于连接选择的一对节点)的N条路径的N个位串(这里,N是一个等于或者大于2的整数)的时候,该过程生成当前位串或者当前树的信息串的N-1份的副本,并且在该树的复制之中嵌入不同的路径。
换句话说,该过程进行(在2630)位串或者当前树的信息串N-1份副本;用于当前树的位串在2610被初始化,以及如果其位串先前在2630被复制,该当前树将具有多个位串。从2630过程转到2635。
在2635,该过程利用用于选择的树边的位串或者信息串(在2625取回的),修正用于当前树的的位串或者信息串。接着,该过程确定(在2640)其是否已经查验当前树的最后边(即,其是否已经查验当前树中最后链接的节点对)。否则,该过程转回到2620以选择下一个树边(即,下一个链接的节点对)。
当该过程确定(在2640)其已经查验最后的树边时,其然后确定(2645)是否已经查验由过程2200提供的最后树。否则,该过程返回2615以选择另一个树,以及然后确定对于这个树的路径使用。否则,该过程转到2650。
当过程2600到达2650时,其已经产生代表一个或多个树的位串。每个树的位串代表是一42位的信息串。如上所述,当该树的节点组具有一对或多对的不相邻的链接节点,并且非相邻的链接对之间存在一或多组路径时,树的节点代表可能产生多个位串代表。
此外,在2215选择的节点配置可能导致产生相同MST位表示(bitrepresentation)(即,产生相同的位表示的MST)的不同的MST节点表示(即,不同的节点表示的MST)。相应地,在2650,该过程查验所有的位串表示的树,并且删除相同位串表示的树的所有副本。
当在2215选择的节点配置导致大量的位串表示的树时,过程2600可以使用一个二分查找树(“BST”)去迅速地分类和搜索该树,并且从而迅速地识别和删除该相同树的副本。上述的BST参考图32和33描述如下。
在2650之后剩余的所有位表示的树是唯一的。因此,在删除相同树的副本之后,过程2600在一个存储器结构(诸如LUT)中存储(在2655)剩余所有的位串表示树。如在下面例子中描述的,每个位串规定用于当前节点配置的布线树的路径。具体地说,如在下面的例子中描述的,每个存储的位串规定用于当前节点配置的布线树穿过的布线路径。在2655,该过程以每个位串表示树的相应路径值增加全局计数变量的每个路径值,以便产生用于每个路径的总计数值。然后该过程记录这个用于每个路径的使用计数。此外,对于每个特殊路径,该过程(在2650)(1)用在2650之后剩余的树的数目除计数,以便获得特定路径的使用概率值,然后(2)存储这个产生的概率值。然后该过程结束。
对于在图6-8示出的斯坦纳树,过程2600将标识三个42位的信息串,其指定用于三个树605、705、805的布线路径信息。用于树605、705和805的这三个位串分别是000000000010000000000000000010000000110001;000000000000000100000000010001000000100001;000000000000010000000000010001000000000011。
(在这个文献中,位串的最低有效位(“LSB”)是最右边的位,并且该位串的最高有效位(“MSB”)是最左边的位)。图27和28分别举例说明用于图6-8的斯坦纳树605、705和805的路径使用计数和路径使用概率的例子。在下面的论述中,路径使用概率值被称为“概率斯坦纳树值”。
3.取回(retrieve)斯坦纳树当斯坦纳树路径按照过程2200预先制成表的时,布线程序在运行时间对于网络以下面的方式标识一个或多个斯坦纳树属性(例如,路径)。该布线程序首先相对于分割网格标识网络配置。然后其使用标识配置去取回存储在存储器结构中用于该标识的配置的一个或多个属性(例如,路径)。
在一些实施例中,该存储器结构是一个浮点数的查询表(“LUT”)。在一些实施例中,LUT由一个配置码索引。换句话说,为了取回特定网络配置的特殊属性,标识网络配置的配置码,并且这个配置码用于标识在存储需要属性的LUT中登录。
一些实施例使用图3举例说明的八角形的布线模式,并且利用在图12举例说明的42个对角和曼哈顿布线路径指定每个网络的布线路径。在一些实施例中,LUT对于每个路径存储42位,其中每个位代表42条路径中的一个。此外,每个网络的配置码是一个16位数字,这里每个位代表一个由该4×4分割网格界定的子区域。当该相关网络在由该配置代码位代表的子区域中具有一引脚时,设置每个配置代码位(例如,等于1),并且当相关网络在这个子区域中不具有一个引脚的时候,不被设置(例如,等于0)。此外,在这些实施例中,存在216个配置码,其代表216个可能的网络配置。
例如,当网络在槽0和9具有引脚的时候,网络配置码是000001000000001。对于上述的配置,一些实施例预先制表两个树,一个使用路径P17和P24,以及另一个使用路径P12和P30。这些树的每一个可以由一连串的42位指定。第一树的位串是,000000000000000001000000100000000000000000,而用于第二树的该位串是,000000000001000000000000000001000000000000。
一些实施例在LUT中存储这两个位串,并且通过使用网络配置的16位配置码0000001000000001取回这两个位串。
4.以一种压缩的形式存储斯坦纳树可采用各种压缩技术以存储和使用用于网络配置组的斯坦纳树布线。上述的方法在图29中举例说明。除了过程2900具有两个附加的操作2905和2910并且具有略微不同的操作2215和2250之外,这个图的过程2900与如上所述的过程2200相似。过程2900的操作2205、2210和2220-2245与过程2200的同样编号的操作2205、2210和2220-2245相同的。因此,为了不使本发明的说明由于多余的详述而难以理解,这些操作2205、2210和2220-2245在下面将不进一步说明。
过程2900执行附加的操作2905和2910以降低预先制表的信息量。第一操作2905降低过程2900预先制表布线可能的网络配置的数目,而第二操作2910确保过程2900仅存储每个斯坦纳树布线一次。
这两个操作在下面进一步进行描述。但是,一个普通的技术人员将认识到一些实施例不使用这两个操作。例如,一些实施例可仅执行2910以确保每个斯坦纳树路径仅存储一次。
a.对称的网络配置操作2905将在2210标识的可能的网络配置分组为对称的网络配置组。从2215-2250开始,然后过程2900产生和存储用于各对称配置组的一个指定的网络配置的一组斯坦纳树。这个流程由2215和2250控制。在2215,过程2900选择一个先前没有检查的指定节点配置。在2250,该过程确定其是否已经检查用于各对称节点配置组的指定节点配置。在运行时间,每组的指定配置直接使用用于其组的预先制表路径,而每组的非指定配置从其分组的预先制表路径产生它们的路径。
图30和31举例说明一种用于执行这个分组的方法。这个方法用于执行图5的4×4分割网格。在这个网格中,每个网络配置相对于七个其它的网络配置是对称的。这七个对称配置可以通过下列标识(1)转动该网络配置90°;(2)转动其180°;(3)转动其270°;(4)围绕X轴翻转该网络配置;(5)转动该网络配置90°,并且围绕X轴翻转该结果;(6)转动其180°,并且围绕X轴翻转该结果;(7)转动其270°,并且围绕X轴翻转该结果。
在下面描述的实施例中,旋转和翻转操作是相对于笛卡儿坐标系统界定的,其具有(1)平行于4×4分割网格(即,该布局图的宽度)宽度的X轴;(2)平行于该网格高度的Y轴;和(3)一个在网格槽5、6、9和10的交点上的原点,其如图5中所示。具体地说,旋转是依据围绕原点顺时针方向旋转界定的。配置的翻转涉及改变每个配置槽的y座标的符号。表1在下面举例说明一个关于基于上述平衡关系的八个网络配置的例子。
表1
图31举例说明一个按照上述对称性用于分组网络配置的过程3100。图30举例说明过程3100为每个配置存储的四个数据字段。第一字段3000存储配置的16位引脚分布(即,其网络/节点配置)。第二字段3005规定过程3100是否已经将配置和其它的配置分组。
第三字段3010是一个对于树列表(treelist)3020的参考(例如,一个指针),其包括用于配置组的一个或多个斯坦纳树布线3025的一个或多个参考。组中的每个配置指的是相同的树列表3020。例如,图30举例说明三个涉及相同树列表的分组配置3030、3035和3040。第四字段3015存储对称关系的标识符。这个标识符规定如何从存储用于分组的树中获得用于网络配置的树。换句话说,每个配置的标识符规定如何将预先制表用于配置分组一个或多个树转变为用于该配置的一个或多个树。
在过程2900界定(在2210)所有可能的节点配置组之后,过程2900在2905执行过程3100。如图31所示,过程3100最初选择(在3105)已在2210界定的节点配置的一个。然后其在其配置字段3005中标记(在3110)这个配置已分组。
接着,该过程在这个配置的关系标识符字段3015中记录(在3115)“无”。这个标记表示用于这个配置(即,由这个配置的树列表3020涉及的树)规定的预先制表的树不需要为选择的节点配置以任何的方式转换。在每个配置组中,已经记录在其关系标识符字段中记录“无”的配置是用于分组指定的配置(即,其是可以直接使用生成用于分组的斯坦纳树的配置)。
在3120,然后该过程生成一个用于这个配置分组的树列表3020,并且链接这个配置的参考字段3010到这个树列表。过程2900将(在2910)指示用于这个配置分组的树的参考增加这个树列表。
然后过程3100选择(在3125)上述七个对称关系中的一个。其接下来使用(在3130)该选择的对称关系去标识相对于在3105选择的配置为对称的七个配置中的一个。一些实施例具有七个LUT,一个用于个对称转换关系。每个LUT提供一对一的映射,其规定用于指定节点配置的每个可能节点的对称节点。例如,在下面的表2标识用于对称配置的相应节点,其可以通过转动指定节点配置90°获得。
表2
在3135,然后该过程将在3130标识的配置在配置的字段3005中标记为已分组。其接下来在配置的关系标识符字段3015中记录(在3140)在3125(例如,转动90°)选择的相互关系的身份。这个操作在运行时间可用以将预先制表用于配置分组的一个或多个树转换为用于运行时间可用以将预先制表用于配置分组的一个或多个树转换为用于在3130标识的配置的一个或多个树。
然后该过程将(在3145)该标识配置的参考字段3010链接到用于这个配置分组的树列表3020。在3150,然后该过程确定其是否已经产生与在3105选择的一个配置对称相关的所有七个配置。如果不是,该过程选择(在3125)另一个对称关系,并且然后执行3130-3145以标识相关配置并且占据其分组字段。
当该过程确定(在3150)其已经产生与在3105选择的配置相关的所有七个配置的时候,其确定(在3155)其是否已经检查该过程2900在2210(即,是否其已经作为“分组”标记的所有产生的节点配置)产生的所有节点配置。如果不是,该过程转到3105以选择一个还没有标记为“分组”的节点配置,并且对于新选择的配置和其对称相关的配置重复上述的操作。当该过程确定(在3155)其已检查了所有的节点配置的时候,其结束。
b.存储每个树仅一次对于任何使用这样一个布线的节点配置,在2910,该过程确保过程2900存储每个斯坦纳树布线仅一次。类似于图22的过程2200,过程2900调用(在2245)过程2600以计算用于过程2900标识的用于节点配置的斯坦纳树的布线路径信息。过程2600标识一个或者更多的位串以表示由过程2900标识的每个斯坦纳树。过程2600也(1)删除(在2650)任何其产生用于相同节点配置的位表示树的副本,并且随后(2)存储(在2655)每个剩余位表示的树。
然而,当过程2600连同过程2900一起工作时,其不能永久地存储(在2655)每个所产生的位串。相反,它返回所产生的位串到过程2900。过程2900随后检查(在2910)其是否已经将每个所返回的位串(即,每个返回的斯坦纳树)预先存储到用于节点配置(即,用于预先在2215选择的节点配置)的存储结构中。如果是,该过程不重新存储这个位串,而是连接节点配置的树列表3020中的一个参考到预先存储的位串。如果不是,该过程存储这个位串到图30的存储结构中,并且将节点配置的树列表3020的其中一个参考链接到新存储的位串。
各种不同的技术可以用于检查(在2910)过程2900是否预先存储一个位串到存储结构3050中。以下所描述的实施方式使用一个二进制取回(binary search)树来执行这个检查操作。
图32表示一个这样的二元取回树(“BST”)。这个树3200有许多节点3220,每个节点有零或者两个子节点。树上的每个节点包括两个参考3205和3210以用于指示节点左和右子节点。每个节点也有参考3215以指示一个与该节点对应的42位斯坦纳树。
BST有42个层,每层相当于用于表示斯坦纳树的42位信息串中的一位。BST层与位串中的位有相同的顺序,因此,BST的第0层相当于信息串的第0位(即相当于路径0的位),BST的第1层相当于串的第1位(即相当于路径1的位),BST的第2层相当于串的第2位(即相当于路径2的位),等等。每层中,对应于该层位串的值决定分支。
图33表示过程3300,其是过程2900使用其(在2910)贯穿BST3200以确定斯坦纳树是否已经预先存储在存储结构中。如图33所示,过程3300(在3305)最初设置变量L为0。这个变量规定过程3300当前正在检查的BST层。在3310该过程确定位串的第L位是否为0。如果不是,该过程(在3315)将变量L加1,并且将当前节点的左子节点定义为当前节点。如果是,该过程在3320将变量L加1,并且将当前节点的右子节点定义为当前节点。
从3315或3320,这个过程转到3325。这里,该过程确定其是否已经检查了位串中的所有位,并且如果没有,是否所有剩余的未检查位(即,位串的第L位到第41位)是0。如果所有位都没有检查,并且一个或者多个检查的位的值为1,该过程回到3310以检查当前的节点。
另一方面,如果已经检查了所有位,或者所有未检查的位是0,该过程已经发现应该存储在位串中的节点。因此,过程确定(在3300)当前节点的树参考3215是否指的是一个所存储的树(即一个所存储的位串)。如果不是,该过程存储(在3335)位串到存储结构3050中,并且将当前节点的树参考3215链接到这个结构。该过程也连接(在3335)节点配置的树列表3020中的一个参考到新存储的位串。如果该过程确定(在3330)当前节点的树参考3215指的是一个预先存储的位串,该过程仅将(在3340)节点配置树列表3020中的一个参考链接到预先存储的位串。在3335或者3340之后该过程结束。
c.从压缩的预先制表的表中标识布线当按照过程2900预先制表斯坦纳树布线时,布线程序在运行期间按照以下方式标识用于网络的一个或者多个斯坦纳树布线。布线程序预先标识与分割网格有关的网络配置。从存储结构3050,其随后取回由标识配置的树列表3020所指定的一个或者多个布线3025。
该过程随后标识在标识的网络配置和指定用于其分组的配置之间的对称关系。接下来,该过程使用这个关系以从取回的布线中标识一个或者多个用于标识的网络配置的布线。为了做到这一点,一些实施方式使用7个LUT,每个对称转换关系使用一个。每个LUT提供一对一的映射,该一对一的映射规定与指定的节点配置的布线能够使用的每一可能的路径对称的路径,该可能的路径是一个所。
例如,网络配置可以是0001010000000000,其表明在槽10和12具有引脚的网络。这个结构与表示在槽0和9有引脚的网络配置0000001000000001对称相关。特别地,配置0001010000000000是当配置0000001000000001旋转90°时获得的。
当网络配置0000001000000001是指定的配置时,一些实施方式预先把两个树制成表格,一个使用路径P17和P24,并且另一个使用路径P12和P30。通过将这些树旋转90°,布线程序可标识用于配置0001010000000000的两个布线。为使每个树旋转90°,布线程序(1)标识树所使用的每个路径(即,在规定该树的42位信息串中标识每个设置位),以及(2)从90°旋转的LUT,标识与已标识的路径对称相关的路径以用于用于分割网格90°旋转。
因此,从90°旋转LUT,布线程序将路径P37标识为与通过90°旋转的路径P24相关的路径,并且将路径P7标识为与通过90°旋转的路径P17相关的路径。从90°旋转LUT,布线程序将路径P9标识为与通过90°旋转的路径P12相关的路径,并且将路径P30标识为与通过90°旋转的路径P39相关的路径。以这样的形式,布线程序标识两个用于配置0001010000000000树。一个树使用路径7和37,以及另一个使用路径9和39。
一名本领域的普通技术人员将认识到,其它的实施方式不通过使用LUT标识用于对称节点配置的树。例如,一些实施方式可以算术方式标识用于对称节点配置的树。对于每个对称关系,这些实施方式可以使用不同的数学公式以将预先制表的树映射到对称相关树的路径。
5.用于不同布线模式的预先制表的斯坦纳树本发明的一些实施方式预先制表用于几个不同布线模式的几个斯坦纳树组。例如,图34表示过程3400,其对于具有水平,垂直,和±45°线的布线模式,执行过程2200或过程2900(1)一次(在3405)(2)对于具有水平,垂直,和±120°线的布线模式执行过程2200或过程2900(1)一次(在3410),和(3)对于具有水平,垂直线的布线模式,执行过程2200或过程2900(1)一次(在3415)。
为了模拟一个使用水平,垂直,和±45°线的布线模式的所有可能网络配置,这个过程计算(在3405)潜在45°对角边的斯坦纳树的长度,布线路径,以及路径使用值。换句话说,在3405,过程3400使用45°作为在公式(A)中的角度A,该公式由过程2200或2900的过程2400和2500使用。
为了模拟使用水平,垂直,和±120°线的布线模式所有可能的网络配置,这个过程计算(在3410)具有潜在120°对角边的斯坦纳树的长度,布线路径,以及路径使用值。换句话说,在3410,过程3400使用120°作为在公式(A)中的角度A,该公式由过程2200或2900的过程2400和2500使用。
为了模拟使用水平,垂直线的布线模式所有可能的网络配置,实施例计算(在3415)曼哈顿斯坦纳树的长度,布线路径,以及路径使用值。换句话说,在3415,过程3400使用90°作为在公式(A)中的角度A,该公式由过程2200或2900的过程2400和2500使用。
B.预制成表和产生树一些实施方式使用网络配置来取回和产生布线。例如,当产生用于其他网络的布线时,一些实施方式使用网络配置来取回用于某一网络的预先制表的布线。现在参照图35-38说明几个这样的实施方式。
这些实施方式将用于闭合的节点配置的布线预先制表,以下称为“最小闭合树”或者MCT,。MCT是用于闭合节点配置的MST。换句话说,MCT是一个最小的树,该树有N-1个通过最短布线横越配置N个节点的N-1个边,其仅在节点产生分支(即开始或者结束)。对于开放的节点配置,这些实施方式将某一相关的闭合节点配置预制成表格。术语——闭合节点配置和开放节点配置将通过参照图35A和35B进行说明。
图35A示出闭合节点配置3505的例子(包括节点3515,3520,3530,3535和3540),而图35B示出一个开放节点配置3510的例子(包括节点3515,3530,3535和3540)。由于在这个配置中的所有节点至少与在这个配置中的其他一个节点相邻接,因此节点配置3505是一个闭合配置。由于节点3515与配置中的另一节点不相邻接,因此节点配置3510是一个开放配置;在这个配置中,节点3515在其和下一个最近节点3530之间有节点3545。
节点配置3510有几个相关的闭合节点配置。没有导致具有“天线”节点的MCT的两个这样的配置是,(1)第一配置包括3515,3545,3530,3535和3540,以及(2)第二配置包括3515,3550,3530,3535和3540。第一配置是通过添加节点3545到配置3510获得,而第二配置是通过添加节点3550到3510获得。
通过添加节点3555以及节点3545或者3550到配置3510所获得的配置是一个相关的闭合配置,其将总是导致具有一作为一个天线节点的节点3555的MCT。通过添加一组节点到一开放节点配置中所获得的闭合节点配置的MCT中的天线节点,是这样一个节点,该节点是所添加组的一部分,并且仅有一个与其相关的MCT边。正像在以下进一步描述,最初两节点配置(配置3515,3545,3530,3535和3540,以及配置3515,3550,3530,3535和3540)是能预先制表以用于开放节点配置3515,3530,3535和3540的相关闭合节点配置。另一方面,由于它导致一天线节点,第三配置(3515,3530,3535,3540和3555)不应预先制表以用于这个开放配置。
1、预先制成表的MCT图36示出过程3600,其在一特定分割网格内,诸如图5的4*4网格,对于所有节点配置将MCT预先制成表格。如图36中所示,过程3600最初标识(3605)所有可能的节点配置。
其随后选择(在3610)一个配置。如果选择配置是个闭合的配置,该过程接下来标识(在3615)用于所选择配置的所有MCT。正像前面所提到的,如果配置中的每一节点与配置中至少一个其他节点相邻接,节点配置是一闭合配置。一名普通技术人员将意识到过程3600直接基于在所选择的闭合节点配置的节点之间存在的多组路径(例如,图12中示出的42个路径)标识用于所选择配置的每一MCT。每一MCT是一个N-1个这样的路径唯一的组合,这些路径通过最短的布线连接闭合节点配置中所有的N个节点。通过一个探索闭合配置的节点之间所有最短的路径的递归操作,标识这样的MCT;在一些实施方式中,除其直接基于互连路径指定每一MCT之外,这样一个递归操作将与上面参考图25A和25B所说明的操作类似。
在3615,该过程也计算在3615标识的每一MCT的成本。在一些实施方式中,该过程通过以下计算每一MCT的成本(1)将成本分配给连接分割网格的相邻槽的曼哈顿和对角路径,(2)标识MCT所使用的路径,以及(3)将路径成本相加。一至少有两个节点的节点配置没有一个MCT,并且由此其MCT成本是零。
在3615以后,该过程确定(在3620)其是否已经检查了所有的配置。如果没有,该过程返回到3610,选择另一个配置。否则,该过程结束。
2.将相关的闭合节点配置预先制成表格图37示出用于一个开放节点配置的过程3700,其将某一相关的闭合节点配置预先制成表格。这个过程最初标识(在3705)连接节点的候选组。每个候选组不包括开放节点配置的任何节点。同时,候选组包括可获得不具有开放节点配置的节点的所有可能的节点配置,。
接下来,该过程选择(在3710)一个连接节点的候选组。该过程随后确定(在3715)组合的配置是否有一个或者多个预制成表的MCT,该组合配置是从所选择的候选组的补充以及开放节点配置产生的。如果没有,该过程转到将在下面描述的3745。
如果组合的配置有一个或者多个预制成表的MCT,该过程随后执行3720-3740以确定组合的节点配置是否导致至少一个没有天线节点的MCT。如果所有的MCT有一天线节点,随后针对在3710选择的候选连接节点获得的组合的配置不会作为开放节点配置的相关闭合配置被存储。
特别地,在3720,该过程选择组合配置的MCT的其中一个。随后其标识(在3725)这个MCT具有层1的所有节点(即,仅具有一个进入到其的MCT路径的所有节点)。接下来,该过程确定(在3730)所有标识的节点是否是开放节点配置的一部分。如果是,该过程接受在3710以选择的候选组获得的组合配置,并且存储(在3740)组合配置(通过将在3710选择的候选组与开放节点配置组合获得的)作为一个用于开放节点配置的相关闭合节点配置。从3740,该过程转到将在下面进行描述的3745。
另一方面,如果该过程确定(在3730)在3725标识的节点的至少其中一个不是开放节点配置的一部分,该过程确定其是否已经检查了所有的用于组合节点配置的MCT。如果不是,该过程转到3745以选择另一MCT。否则过程转到3745。在3745,该过程确定是否已经检查了所有连接节点的候选组。如果没有,该过程转回到3710以选择和检查另一候选组。否则,该过程结束。
3.在运行期间产生MCT当路径和闭合节点配置按照过程3600和3700预先制成表格时,在运行期间的布线程序按照图38的过程3800标识一个或者多个用于网络的布线。正像这个图所示出的,该过程首先标识(在3805)关于分割网格的网络配置。
布线程序随后确定(在3810)存储结构是否存储一个或者多个用于标识配置的MCT。如果是,该过程取回(在3815)所存储的用于配置的MCT,并且将它们存储到网络的布线列表中。在3815之后,该过程随后结束。
另一方面,如果该过程确定(在3810)存储结构没有存储任何用于标识配置的MCT,该过程取回(在3820)用于标识配置的相关闭合节点配置。其随后选择(在3825)所取回的闭合配置的其中之一。
接下来,该过程取回(在3830)用于选择的闭合配置的MCT。随后其确定(在3835)是否存储所取回的用于标识节点配置的MCT。在一些实施方式中,该过程纯粹基于MCT的接线长度成本来进行这个确定。换句话说,在这些实施方式中,只有当他们是过程迄今为止已经检查到的用于标识的节点配置的最短的MCT时,该过程存储MCT。然而,在其它的实施方式中,该过程基于其它的因素,诸如估计的布线路径的稠密,估计的通路数目,迄今为止选择的MCT数,等等,确定是否存储MCT。同时,在一些实施方式中,过程3700可以以一特定顺序对开放节点配置的闭合节点配置进行分类。例如,过程3700可以首先对产生更短MCT的闭合配置进行分类。在这些实施方式中,过程3800按照存储顺序检查闭合节点配置,并且一旦其标识R个布线,过程3800终止。
如果该过程决定不存储所取回的MCT,该过程转到将在下面描述的3845。然而,如果过程决定(在3830)存储所取回的MCT,其将这些MCT存储到用于网络配置的布线列表中。该过程随后确定(在3840)是否已经检查了所有用于标识网络配置的相关的闭合节点配置。如果没有,过程返回到3820以选择另一个闭合配置;在一些实施方式中,如果过程已经标识某一数量的MCT,过程可以不返回3820选择另一个闭合配置。当该过程确定已经检查了所有相关的节点配置,过程结束。
VI.递归4*4分割布线程序A.软件结构图39示出本发明的一些实施方式的布线程序3900的软件结构。这个布线程序能和各种不同的布线结构一起操作。它也可以和不同的分割、稠密和路径界定网格一起操作。然而,在以下描述的实施方式中,布线程序主要被描述和以下的一起工作(1)图3示出的八边形布线模式,(2)图5示出的分割网格,以及(3)图9-12示出的稠密网格和他们相关的42个路径。
图39的软件结构包括几个软件模块3905和几个数据结构3910。软件模块包括一个初始化程序3915,一个槽管理程序3925,一个求解程序3930,一个传播程序3935,一个保存程序3940,一个线性规划求解程序3945,一个整数线性规划(“ILP”)转换程序3950,而数据结构3910包括LUT3965,电路模块3970,网络列表3972,网络3972,槽3976,槽-网络3978,路径3980,和引脚3982。
布线程序3900界定分割网格,分割网格递归地将设计区域(即,IC布置或者IC布置区域)划分为越来越小的子区域。在以下描述的一些实施方式中,布线程序使用3个均匀间隔的水平线和三个均匀间隔的垂直线以递归划分设计区域为16个相同尺寸的子区域(即,16个相同尺寸的槽)。图40示出一个设计区域4005,其被递归地划分为16个子区域组。特别地,设计区域最初被划分为16个子区域,这些子区域的每一个被更进一步地划分为16个更小的子区域,并且该更小的子区域4010之一被进一步划分为16个子区域。在每个递归层,布线程序仅调整分割网格的坐标以与在那个递归层的IC区域坐标匹配。在其它的实施方式中,布线程序能使用不同形状的分割网格以用于所有或者一些递归层。
布线程序3900以一分层、自上向下的形式为在设计区域中的每个网络界定布线路径值。布线程序的初始化程序3915最初确定递归层数,以及由这个递归层数所产生的槽数。初始化程序也产生用于这些槽的数据结构。此外,对于每个槽,初始化程序在槽内生成用于每个槽的槽-网络数据结构,并且这个槽-网络数据结构在那个槽内存储网络配置。对于每个槽,初始化程序也标识与这个槽相交的所有电路模块。
在一些实施方式中,初始化程序也界定每个槽内布线路径的容量,并且存储这些容量到槽的数据结构中。然而,在以下描述的实施方式中,当槽管理程序引导每个槽的布线时,其定义这些容量。
对于被划分为更小子槽的每一槽,槽管理程序命令求解程序3930选择用于在槽中有实际或者虚引脚的每一网络的布线。求解程序使用每一网络配置(1)标识一个或者多个用于每一网络的最佳布线,并且有时(2)产生伪引脚来标识一个或者多个用于每一网络的次最佳布线。求解程序基于在前面部分V描述的方法的其中任何一个,标识一个或者多个用于一特定配置的布线。
求解程序随后用公式表示一LP问题,并且将这些解决提供给LP求解程序3945,LP求解程序3945依序返回多个实数解。这些实数解随后通过ILP求解程序3950转换为整数解。这些整数解指定用于每一网络的布线,并且求解程序将每一网络的布线信息存储到用于当前槽的网络的槽-网络数据结构中。
在求解程序为每一在当前槽中有实际或者虚引脚的网络规定布线后,如果当前槽不是一叶槽,槽管理程序3925调用传播程序3935。叶槽是一个有子槽的槽,但是其子槽没有任何的子槽(即,其槽没有被分割)。叶层槽的子槽被称为Gcell。
当传播程序被槽管理程序调用时,其确定由用于当前布线层的求解程序指定的布线路径如何向下传播到当前槽的子槽。对于在最高层槽之后和在叶层之前的槽,传播程序也执行一个随动传播操作,随动传播操作将由在先前布线层的传播程序指定的布线路径向下传播一层。
对于在当前槽中的每一网络,传播程序必须确定在所有的受网络布线路径影响的子槽中网络引脚分布。传播过程经常需要在当前槽的孙槽(即,当前槽的子槽的子槽)中添加虚引脚。换句话说,传播程序可以在当前槽的子槽中修改网络的配置。
本发明的不同实施方式使用不同的传播程序。下面将描述两个不同的传播程序。第一传播程序列举几个用于每个网络布线的传播解,并且随后使用LP求解程序3945和ILP转换程序3950来选择用于每一网络的传播解。另一方面,第二传播程序是一个顺序传播程序,其使用一个贪婪算法来选择和嵌入一个用于每一网络布线的传播到当前槽中。在以下所描述的具体实施方式
中,当可以应用时,这两个传播使用一个顺序传播程序来执行随动传播。
所标识的用于每一网络布线的传播在受影响的子槽中指定一用于网络的特定配置,并且传播程序存储网络配置到用于受影响子槽的网络的槽-网络数据结构中。以下所描述的实施方式通过16位的信息串来指定每一网络的配置,其中每一位与槽的子槽相对应。
在求解程序已经为叶槽中的每一网络规定布线之后,槽管理程序调用保存程序3940以将每一网络布线的路径结构链接到他们各自的网络主数据结构。该保存程序传播程序为一叶层槽的一父槽(即,用于一个Gcell的祖父槽)指定的传播路径的路径数据结构链接到主网络数据结构。这些传播路径包括传播程序标识的以下路径(1)用于求解程序标识的布线路径,以及(2)用于在先前的布线层传播程序指定的布线路径。
以这种形式,链接到网络的主数据结构的路径数据结构共同表示用于布线程序指定网络的最终布线。在一些实施方式中,这样的布线是用于网络的通用布线。图49-83进一步描述软件模块3905。然而,在描述这些软件模块之前,数据结构3910将通过参考图41-48描述如下。
B.数据结构1.LUTLUT3965存储有关连接包含网络电路模块的子区域的布线信息(诸如布线路径,长度,路径使用等)。这些布线的其中一些具有完全或者部分对角的边。在以下描述的实施方式中,LUT存储用于所有可能网络配置的布线的长度,布线路径和路径使用概率值。几个用于选择布线和将他们的长度,布线路径和路径使用概率值预先制成表格的过程已经在以上的部分V中讨论了。一名普通的技术人员将明白,其它的实施方式也存储树的其它属性。在利用图38的布线生成过程3800的实施方式中,LUT为每一开放节点配置存储一个或者多个相关闭合节点配置。
在一些实施方式中,布线程序3900能用不同的布线结构进行操作。在这些实施方式中,可利用不同的LUT以存储用于不同布线模式的布线属性。例如,LUT能存储布线信息,用于(1)使用曼哈顿和±45°对角线的第一布线模式, (2)使用曼哈顿和±120°对角线的第二布线模式, (3)仅使用曼哈顿线的第三布线模式等。一旦选择了布线模式,用于每一网络配置的布线信息能从适合用于选择布线模式的LUT中恢复。
在布线程序可以用不同布线模式操作的实施方式中,布线程序通常在设计过程开始时选择布线模式。例如,在一些实施方式中,过程400在其选择分割网格之前,在405选择布线模式。而且,一些实施方式可以从一布线模式转换到用于不同设计过程的不同部分或者在设计层次更低层的另一模式。
在以下所描述的实施方式中,布线程序在布线过程期间使用在图3示出的八边形布线模式。布线程序使用一个的LUT,LUT存储用于图9-12中稠密网格的和他们相关的42个路径的选择路径信息(即,布线,长度,路径使用值,用于闭合组槽的树,节点组,等等)。
2.网络列表,db网络,槽-网络;引脚,以及路径结构图41示出用于一网络列表4100的数据结构。这个列表包括一个或者多个字段4105,每个字段指示(例如,指向)db网络数据结构4110。每一网络有一db网络数据结构,其作为用于网络的主数据结构。图42示出db网络数据结构。这个数据结构包括一索引字段4205,其包括软件模块(例如,传播程序)中的一些用以标识网络的值。这个数据结构也包括多个指示(例如,指向)引脚数据结构的字段4210。
图43示出一个简单引脚数据结构4300,其包括指定引脚位置的位置字段。在一些实施方式中,引脚位置以不仅指定它的x和y位置,而且指定其层的三维位置提供。然而,其它实施例存储管脚层作为引脚宏的部分。这个引脚宏能够作为电路宏的一部分被存储,该电路宏参照下述的槽数据结构。
db网络数据结构也包括一个或者多个字段4220,每个字段指示(例如,指向)如在图44示出的路径数据结构4400。在一些实施方式中,保存程序通过参考字段4220将为每个网络指定最终最低层布线路径的路径数据结构链接到他们各自网络的db网络。
路径数据结构包括一个字段,其规定路径类型为水平(H),垂直(V),第一对角方向(E),或者第二对角方向(W)。这个结构也包括字段4410以存储路径标识(id),该标识是一个从1到41的数字,其用以将数据结构路径标识为在两个网格中界定的42个路径的其中之一。另外,这个数据结构包括字段4415,将指示(例如,指向)与路径相关的db网络。最后,这个数据结构具有两个字段4420,其指向是与两个槽相关的(incident upon)的路径的数据结构。这两个字段在确认过程期间可使用以确保布线程序3900指定的布线的连贯性。
对于每一槽,布线程序3900为具有实际或者虚引脚的网络界定一个用于每一网络的槽-网络数据结构,并且这个槽-网络数据结构存储网络配置到那个槽中。图45示出这个槽-网络数据结构。这个结构包括指示(例如,指向)其网络的db网络的字段4505。它也包括一个字段4510,其存储一指定槽中网络引脚分布的位串。正像在以下进一步所讨论的,初始化程序最初基于槽中所有网络的实际引脚设置这个字段。在递归过程期间,传播程序可以修改在这个字段4510的位串以说明虚拟引脚。槽-网络数据结构也包括一个字段,其存储42位选择布线的信息串。求解程序在其选择槽中网络的布线之后设置这个位串。
3.槽布线程序3900递归地将设计区域分隔成16个子区域组或者槽组。图46呈现了概念上说明由布线程序界定的槽(即子区域)的分层结构图。这个图4600说明递归过程的两层4610和4615。在这个图中,每个节点代表递归过程中特定阶段的IC区域。并且,在这个图中,根节点代表整个设计区域,而每个非根节点代表设计区域的一部分。
在一个槽分层结构中,每个节点有0个子节点或者16个子节点。当布线程序将该节点区域分割成16个子区域时节点有16个子节点。相反,当节点相应的区域没被分割时节点没有子节点。
在一些实施方式中,布线程序3900界定槽数据结构以用于表示在槽分层结构中的每个节点。图47呈现了这样一个用于槽的数据结构4700。这个数据结构指定了槽的坐标4710。它也包括一个到槽中电路模块列表4740的参考(reference)(例如,指示器)4720。列表4740包括一个或者多个到槽中一个或者多个电路模块的参考(例如,一个或者多个指示器)4745。
槽数据结构4700也包括到槽的槽-网络的列表4730的参考。这个列表包括涉及槽-网络数据结构4500的参考4735。在以下描述的具体实施方式
中,槽数据结构不含有对其子槽的参考。这些具体实施方式
的其中一些在列表中按照预定的次序对这些槽排序,并且基于该次序,这些具体实施方式
标识相应的子槽和母槽。槽数据结构4700也包括指定槽的唯一标识符的字段4725。
4.电路模块图48示出一个电路模块的数据结构4800。这个数据结构存储电路模块的方向(4805)和位置(4810)。它也包括一个对电路宏(circuitmacro)的参考4815,电路宏包括对于电路模块的说明。例如,电路宏指的是在电路模块中对于障碍的数据结构4825。障碍数据结构指定有关障碍的信息,诸如障碍的层(4830)和形状(4835)。
C.初始化程序图49示出一个由初始化程序在布线操作开始时执行的过程4900。在这个过程开始之前,通常布线程序已经接收了布置的网络列表,技术界定(包括层数,优选的,每层优选的布线方向,每层的布线间距(routingpitch),等等),以及对于最低层槽(即,对于Gcell)的轨迹(track)数。
该过程从用于最低层槽的轨迹数据,每个轨迹的间距,和设计尺寸初始地计算(在4905)递归数。为了做这些,该过程初始地用每个轨迹的间距乘以轨迹数据,获得最低层槽的大小。结果值大于所计算的大小时,其随后重复地将设计尺寸除4。随着每次划分,层数计数器增加1。一旦结果值小于所计算的大小,该过程停止相处和计数。
基于层数,过程随后计算(在4910)槽数。每层有16个子(child)。因此,槽的总数是16**n的总数,其中n在0到层数之间变化。在此阶段,这个过程也产生一所有槽的列表。
接下来,这个过程示例(在4915)对于在所有递归层上的槽的槽数据结构。该过程随后(在4920)(1)对于每个网络,标识网络贯穿的所有槽,以及(2)对于每一标识的槽,示例槽-网络数据结构以将网络配置存储在该槽中。
图50示出过程5000,一些具体实施方式
使用其来执行4920。特别地,这个过程是一个在最高层槽开始的递归过程,并且对于每个网络执行。每次当这个过程被调用的时候,它取回槽和网络。正像在图50中所示出的,这个过程5000最初计算(在5005)接收的槽的边界框。
它随后确定(在5010)接收网络的任一引脚是否包含在接收槽的边界框中。如果没有,这个过程结束。如果是,过程产生(在5015)一个槽-网络记录,其包括用于当前槽的网络的引脚分布。另外,这个过程递归地调用(在5020)其本身以用于所接收的网络和当前槽的每一子槽。过程5000随后结束。
在过程4900之后,用具体例子说明槽-网络数据结构以在槽中存储网络配置,过程4900(在4925)将每一电路模块添加到其相交的槽的模块表格中,随后结束。图51示出过程5100,一些具体实施方式
使用其执行4925。特别地,这个过程是一个在最高层槽开始递归过程并且对于每个电路模块执行。每次当这个过程被调用的时候,它接收槽和电路模块。正像在图51中所示出的,这个过程初始地计算(在5105)接收槽的边界框。
过程5100随后计算(在5110)接收的电路模块的边界框。它随后确定(在5115)两个边界框是否相交。如果没有,这个过程结束。如果是,过程(在5120)将电路模块添加到与当前槽相关的电路模块的列表中。另外,这个过程递归地调用(在5125)它本身以用于所接收的模块和当前槽的每一子槽。这个过程5100随后结束。
D.槽管理程序图52示出一个由槽管理程序3925在初始化程序3915完成它的操作之后执行的过程5200。最初,过程5200设置(在5205)当前层为最高层槽。接下来,过程界定在当前层槽内的布线路径的容量。在一些具体实施方式
中,这个过程接收或者能从存储结构中取回用于第一层的布线路径容量,并且由此基于子槽和母槽间已知的几何关系用数学方法计算布线路径容量。在其它的实施方式中,过程实时计算用于所有层的布线路径容量。然而,这些具体实施方式
的一些仍然从那些其他层计算一些递归层的布线路径容量。
正像前面所提到的,一些具体实施方式
从正交于路径的尺寸计算在一特定递归层的每个路径的容量。例如,一些具体实施方式
通过将相应的直角边的尺寸(即与特定路径正交的边的尺寸)除以对应的特定路径的金属层的间距以计算每个特定路径的容量。一些实施方式将金属层的间距界定为线到通路的间距。一些具体实施方式
将线到通路(line-to-via)的间距解释为那个金属层上的互连线间的最小所需距离,加上线路宽度的1/2,加上包括金属重叠通路(via)的宽度的1/2。
正像上面所描述的,在一些具体实施方式
中,对角路径的容量不同于曼哈顿(Manhattan)路径容量。通过对角路径和曼哈顿路径正交边的不同的尺寸,这可以模式化。通过间距取决于互连线的类型(例如,使对角间距不同于曼哈顿线间距),其也可以模式化。这也可通过使间距取决于层,进一步模式化。例如,在一些具体实施方式
中,在-45°金属层的间距不同于在45°金属层的间距。
在5215,过程将当前槽设置为当前层的第一槽。正像在以下进一步所描述的,过程5200顺次检查当前层的槽。然而,一名普通技术人员将认识到其它的具体实施方式
可以以另一种顺序检查槽。例如,一些具体实施方式
中可以首先检查最稠密的槽。
随后过程指示(在5220)求解程序以选择用于当前层的当前槽中的所有网络的布线。一旦求解程序选择布线路径并且存储这些路径在槽-网络数据结构字段4515中,槽管理程序确定当前层是否是最后的递归层。
如果不是,过程指示(在5230)传播程序界定所选择的布线传播到下一更低的递归层的子槽(即,传播到当前槽的子槽的子槽)。对于在最高级槽以后的槽,传播程序也可以执行一个随动传播操作,该随动传播操作将先前布线层规定的路径向下传播一层。在界定传播到下一个更低的递归层时,传播程序可以通过在当前子槽的子槽中增加虚引脚来修改当前子槽中的网络配置。
如果过程确定当前槽在最后递归层(即,当前槽是一个叶槽),它指示(在5235)保存程序将当前叶槽的每个网络布线的路径结构与他们各自网络的主数据结构相连。正像上面所描述的,保存程序也将传播程序指定的用于叶层槽的父槽(即,用于一个Gcell的祖父槽)的传播路径的路径数据结构与主网络数据结构相连。这些传播路径包括传播程序标识的用于以下的路径(1)用于由保存程序指定的布线路径和(2)用于先前布线层的传播程序规定的布线路径。以这种方式,连接到网络主数据结构的路径数据结构共同代表用于布线程序指定的网络的最终布线。在一些具体实施方式
中,这样一个布线是用于网络的通用布线。
从5230和5235,过程转移到5240,其中其确定是否已经检查了在当前层的最后槽。如果没有,过程选择(在5245)当前层的另一个槽,并且返回到5220以调用求解程序用于这个槽。否则,过程确定(在5250)它是否在最后一个递归层。如果不是,该过程选择下一个递归层,并且返回到5210以指定在下一个更低递归层的用于网络的更详细路径。。当该过程确定(在5250)它在最后的递归层时,过程结束。
E.求解程序正像上面所论述的,求解程序3930负责(1)列举一个或者多个用于每个网络的布线,(2)指示LP/ILP求解程序以选择用于每个网络的布线,并且(3)存储选择的结果到一个当前槽的槽-网络数据结构中。图53示出由求解程序所执行的过程5300。在一些具体的实施方式中,当槽管理程序调用求解程序并且为其提供槽来进行布线时,这个过程开始。
过程5300最初预测(在5305)用于槽中每个路径资源的稠密。一种用于预测路径稠密的方式将参考图54和55描述如下。过程接下来标识(在5310)在所提供的槽中的一个或者多个用于每个网络的布线。一种用于对当前槽中的网络标识布线的方式参考图57-60描述如下。
在标识用于当前槽中每个网络的一个或者多个布线之后(即,用于有与当前槽数据结构相连的槽-网络配置的每个网络),过程5300通过将传播分解为下面更低的递归层来分配(在5315)接线长度成本到每一取回的树。在一些具体的实施方式中,过程使用贪婪技术来说明这个传播。用于为每个恢复的树分配成本的方式参考图64描述如下。
一旦求解程序分配接线长度成本到列举的可能布线,求解程序用公式表示(在5320)用于LP求解程序3945的问题,并且LP求解程序解决(在5325)LP问题。用公式表示和求解LP问题的方法将在以下的分部VI.E.4中进行描述。
在5325之后,过程5300将LP求解转换为整数LP(“ILP”)求解。一些具体实施方式
使用随机舍入法以实现这个转换。随机舍入法一种公知的技术,并且这种技术的众多的例子可以在文献中找到,例如,一个这样的参考文献在由RajeevMotwani和PrabhakarRaghavan编写的剑桥大学出版社出版(1995,1997)的《随机算法》中公开了。
随机舍入过程的一个例子如下。首先,该过程将从LP求解程序返回的记分(score)映射到0到1之间的概率。例如,当LP求解程序返回一个在0到1之间的实数解时,在返回的解和在0和1之间的概率之间存在一对一的映射。第二,舍入过程产生一个用于每个网络的0和1之间的随机数。第三,舍入过程选择网络求解,该求解映射到产生的用于网络的随机数。第四,舍入过程基于某个或者一些目标函数(诸如,LP求解程序使用的那些函数)测量用于网络的选择布线组的质量。第五,舍入过程迭代地重复第二到第四操作直到解空间充分探察。第六,该过程选择生成最高质量记分的布线组。
基于在5330选择的布线组,过程在当前槽的每个槽-网络数据结构中存储(在5335)一个42位选择的布线信息串。这个42位的信息串指定当前槽中所选择的网络布线采取的路径。这个过程随后结束。
1.预测剩余的路径容量正像前面所描述的,过程5300预测(在5305)在当前槽中路径资源的稠密。在一些具体实施方式
中,过程通过估计槽中每个路径的剩余容量来指定路径稠密。例如,在一些具体实施方式
中,过程通过最初(1)估计每个路径的非稠密容量(unblocked capacity),(2)估计每个路径的使用,和(3)从其非稠密容量估计中减去每个路径的使用估计,来计算路径容量。用于估计非稠密路径容量的一种方式将参考图54来描述如下,而用于估计路径使用的方式将通过参考图55来描述如下。
a.估计每个路径的非稠密容量图54示出一个用于估计当前槽中每个路径的非稠密容量的过程5400。最初,这个过程(在5402)数据结构分配浮点数的42字段。每个字段是用于存储42个路径其中之一的非稠密容量。在5402,过程也初始化数据结构中的每一个路径字段为默认的用于路径的容量。
在5404,过程在电路模块的当前槽列表中选择一个电路模块。该过程随后取回(在5406)用于选择电路模块的电路宏。其随后选择(在5408)电路宏上的障碍,并且通过使用电路模块的位置计算(在5410)所选择的障碍的边界框。
接下来,过程(在5412)选择当前槽的42个路径的其中一个。随后确定(在5414)在5412选择的路径和在5408选择的障碍是否是在同一层。如果所选择的路径层与所选择的障碍层相匹配,过程计算(在5422)所选择路径的边界框。不同的具体实施方式
所界定的路径边界框不同。例如,一些具体实施方式
将曼哈顿和非曼哈顿路径的边界框界定为路径周围的矩形晕圈(halos)。在这样的一种方法下,对角路径周围的矩形晕圈相对于x-y坐标轴被对角地定位。其它具体实施方式
可以不同地界定对角路径的边界框。例如,一些具体实施方式
可以根据四个直角晕圈(四个边界框)来界定这个边界框,该四个直角晕圈包围四个曼哈顿边(例如,对角路径的边界框26可以包括四个边界,包围边E1,E4,E13和E14)在对角路径周围。
过程随后计算(在5424)路径边界框的面积。过程接下来标识(在5426)选择路径的边界框与选择电路模块的边界框的交集(intersection),并且计算(在5428)这个交集的面积。
它随后通过用计算的路径面积除以计算的交集面积来计算(在5430)一个阻碍因子。该过程随后(在5432)将阻碍因子与默认路径容量相乘以产生一个由该障碍物阻断的路径轨迹数目的估计值。过程随后从路径当前未稠密容量中减去这个相乘的结果,路径当前未稠密容量存储在42个字段数据结构中的路径。该过程接下来转到下面描述的5416。
当所选择的路径层与所选择的障碍层不同时,过程也从5414转到5416。在5416,过程确定是否其已经检查了当前槽中的所有路径。如果没有,过程返回到5412以选择当前槽的另一个路径。
然而,如果所选择的路径是当前槽的最后路径,该过程确定(在5418)是否已经检查了在5404选择的电路模块的所有障碍。如果没有,过程转到5408以选择所选择电路模块的另一个障碍。否则,该过程确定(在5420)其是否已经检查了当前槽中的所有电路模块。如果没有,该过程转到5404以选择在当前槽的另一个电路模块。
过程5400在当其已经检查了在当前槽的所有电路模块时结束。在此阶段,42个字段的数据结构规定当前槽中的42个路径的非稠密容量。特别地,在此阶段,42个字段的每一个指定42个路径的其中一个的非稠密容量。
b.路径使用估计图55示出用于估计槽中的每个路径的使用的过程5500。这个过程是一个递归过程,其根据三个使用分量计算当前槽中的每个路径的使用。一个路径使用分量表示由于当前槽的子槽之间的布线的路径使用。另一个分量表示由于在当前槽的子槽中的布线的路径稠密。第三个分量说明路径稠密上的路径(vias)的影响。每个普通技术人员将明白其他具体实施方式
计算的路径使用不同。例如,对于每个在叶槽的仅一个子槽中的网络,一些具体实施方式
也包括一个象征的路径使用值,该值用于与包含网络的子槽上相关的每个路径。
过程5500在每次接收到当前槽时开始。如图55所示出的,过程5500最初确定(在5502)当前槽是否是叶槽。如果是,该过程转到将在下面进行描述的5512。如果不是,过程执行5504到5510以计算由于在当前槽的子槽中的布线的使用值。特别地,在5504,过程选择当前槽中的其中一个子槽。过程随后估计(在5506)当前槽的每个子槽的每个路径的使用。在一些具体实施方式
中,过程通过递归调用其本身用于每个子槽来实现路径使用估计。
过程随后确定(在5508)在5504所选择的子槽是否是最后一个子槽。如果不是,过程选择(在5504)另一个子槽,并且估计(在5506)在新选择的子槽中的路径使用。否则,该过程转到5510以计算由于在当前槽的子槽中的稠密的路径使用分量。
在一些
具体实施例方式
中,该过程将在5510计算的路径使用值存储到一个具有42个字段的用于将当前槽的42个路径的使用值的数据结构中。在一些具体实施方式
中,过程将这个数据结构和当前槽一起接收,而在其它的具体实施方式
中,过程5500不接收这样的一个数据结构,而是在过程开始时初始化数据结构。
在5510,过程计算由于子槽中稠密(congestion)的路径使用分量。例如,该过程能通过公式根据在子槽1和2内的稠密来界定在子槽1和2之间的路径1的分量使用值,该公式是这样的路径_1_使用(path_1_use)=[(0.75)+(0.25)*(1/(递归层数—当前层))]*(1/2)*(1/2*(路径[1][2]+路径[1][5]+路径[1][8]+路径[1][11])+1/3*(路径[1][1]+路径[1][4]+路径[1][7]+路径[1][10])+1/6*(路径[1]
+路径[1][3]+路径[1][6]+路径[1][9])+1/2*(路径[2]
+路径[2][3]+路径[2][6]+路径[2][9])+1/3*(路径[2][1]+路径[2][4]+路径[2][7]+路径[2][10])+1/6*(路径[2][2]+路径[2][5]+路径[2][8]+路径[2][11])),其中,路径[i][j]指的是子槽i的路径j的使用。相似的公式可以用于类似地界定当前槽中的其他41个路径的分量使用值。
上面的公式仅在子槽中检查与路径1在一条直线上的水平路径线。特别地,它根据子槽1和2的所有水平路径(即,路径0-11)检查路径1的分量使用值。子槽1和2的使用值的总和乘以1/2,以用于反映当前槽中的路径1的容量同样被受到子槽1和2中的路径的容量影响。
由于以下的原因,乘数1/2,1/3和1/6用于子槽1和2的总和。其目标是推测有多少线能够通过路径。这样一些线将在越过路径之后立即终止,而一些将越过与路径关联的槽的整个宽度。假定使用路径的线的“端点”为均匀分布,以至对于路径1的传播0而言,1/4将终止在子槽2的槽0,1/4将终止在子槽2的槽1,1/4终止在子槽2的槽2内,1/4将终止在子槽2的槽3内以及之外。这意味着使用路径1的线的3/4也将使用子槽2内的路径0,2/4将使用子槽2内的路径1,并且1/4将使用子槽2中的路径3,这样在传播路径的估计使用上给出这3个路径使用的相对影响的比率3∶2∶1(或3/6,2/6,1/6)。
而且,在子槽1和2中的使用值的总和乘以[(0.75)+(0.25)*(1/(递归层—当前层))]。这个相乘是基于大部分网络布线包括一连接两个实际引脚的单独路径的假设。如果假设在一个孙槽中的引脚均匀分布,随后,使用给定路径的3/4的布线将从整个包含在每个子槽中的网络看到稠密(congestion)。当布线程序移动到下一层时,更大比例的布线横越整个孙槽,并且由此更多的网络将看到孙槽中的整个稠密,从而证明应该将乘法器增加至1。
从5502或5510,该过程转到5512。该过程执行操作5512到5528,计算由于在当前槽的子槽之间的布线引起分量使用值。该过程按照上面描述的概率斯坦纳树基值(contribution)计算这些分量值。
在5512,过程选择网络。过程随后(在5514)取回在当前槽中选择网络的引脚配置。接下来,标识(在5516)用于所恢复引脚配置的概率斯坦纳树值。正像上面所描述的,图28示出用于在图5示出的网络505的引脚配置的概率斯坦纳树值。正像上面参考图26所描述的,一些具体实施方式
预计算该概率斯坦纳树值。然而,其它的实施方式在路径使用估计过程5500期间产生这些值。
该过程随后(在5520)将每个路径的概率值增加到42个字段的数据结构中的路径使用值中。接下来,该过程执行5522-5530以计算象征性的使用值,以对于在路径稠密上的网络说明通路(vias)的影响。当网络在当前槽的子槽中有一个或者多个引脚时,这些引脚通常在更低的金属层。因此,需要增加通路,以连接这样一些引脚到网络的指定路径。每个通路的增加将依次增加路径稠密。
在5522,过程选择子槽,该子槽包括在5512选择的网络引脚的其中一个。这个网络有一个或者多个布线,每个布线使用一个或者多个路径。因此,在5524,过程选择与在5522选择的子槽关联的布线路径的其中一个。随后(在5526)将所选择的路径使用值加上一个标记值。在一些具体实施方式
中,标记值是0.5/(递归层数—当前递归层)。
过程随后确定(在5528)是否已经检查了与选择子槽相关的所有路径(选择网络的所有树的)。如果没有,过程选择(在5524)与所选择的子槽相关的另一个路径,并且随后(在5526)将所选择的路径的使用值加上一个标记值。
另一方面,如果过程确定(在5528)已经检查了与所选择的子槽相关的最后路径,该过程(在5530)确定是否其已经检查了用于所选择网络的引脚的最后一个子槽。如果没有,过程返回到5522以选择另一个用于所选择网络的引脚的子槽。否则,过程确定(在5532)是否已经检查了当前槽中的最后一个网络。如果没有,该过程转回到5512,以选择另一个网络,并且执行对于这个网络的后步操作。当确定在5532已经检查了最后一个网络时过程结束。
2.在当前槽标识用于每个网络的布线在估计(在5305)当前槽中的每个路径的剩余容量之后,该过程标识(在5310)当前槽中的每个网络的一个或者多个布线。以下描述的具体实施方式
最初使用与当前槽有关的每个网络配置,以标识每个网络的一个或者多个布线。
这些
具体实施例方式
随后产生用于一些或者所有网络的伪配置,并且基于所产生的伪配置标识网络另外的布线。一些具体实施方式
使用两种不同的方法产生用于网络的伪配置。一种方法将伪引脚添加到一个网络配置。这个方法将通过参考图56-58在下面进行描述。第二种方法将网络配置分成两个或者更多个配置,并且将伪引脚添加到新配置。这个方法将通过参考图60和59在下面进行描述。
a.通过增加伪引脚到网络配置以标识每个网络配置的布线并且产生转向可能图56示出过程5600,其通过增加伪引脚到网络配置来标识用于每个网络配置的布线,并且产生转向(detour)可能。正像这个图所示出的,过程5600最初选择(在5602)当前槽中的网络。在5604,过程(1)使用在当前槽中的网络配置来标识所选择的网络布线,并且(2)存储用于选择的网络的标识布线到求解程序的变量中。过程5600基于在上面的部分V.所描述的其中一个方法来标识用于特定网络配置的树。
在基于选择的网络配置标识和存储布线之后,过程执行5606到5668中的一些或者所有操作以确定其是否需要产生用于选择网络的转向布线,并且如果是,通过添加一个或者两个伪引脚来产生这些转向布线。
过程5600为选择的网络产生转向布线,其中所有在5604标识的用于网络的最佳布线使用一个或者多个“处于危险中”的路径。如果估计的稠密(路径使用加稠密)接近或者超过路径的容量,路径是“处于危险中”。一些具体实施方式
通过确定路径剩余容量(其在5305被计算)是否小于一阈值来确定路径是否是“处于危险中的”。通过调整路径被界定为“处于危险中的”的阈值,可产生用于可变数量的网络的次最佳的布线。
图57和58提供了如何通过增加一个或者两个伪引脚配置来产生次最佳转向布线的说明性举例。特别地,图57示出在子槽8和11中有两个引脚5710和5715的网络的次最佳布线5725。这个次最佳布线是通过添加伪引脚5705来产生的。次最佳布线5725避免由于障碍5720被稠密的水平路径P7(在子槽9和10之间)。添加虚引脚5705到网络的引脚分布导致新的引脚配置。用于这个新的引脚配置的最佳布线为有引脚5710和5715的原始网络提供次最佳布线。这个次最佳布线不使用“处于危险中”的路径7。
图58示出一个举例,其中两个伪引脚5805和5810已经被添加到有引脚5815和5820的网络中。这两个伪引脚产生一个避免由于障碍5825而被稠密和稠密的路径7和33的次最佳布线5830。
图56的过程5600通过(1)添加一个或者然后两个伪引脚到网络配置中,以及(2)标识用于生成的引脚配置的最佳布线,来产生转向布线。即使这个过程至多添加两个伪引脚到网络配置中,一个普通技术人员将认识到为标识用于一些或者所有网络的有用转向布线,其他具体实施方式
将添加更多的伪引脚到网络配置中。
在5606,该过程选择在5604标识的布线的其中一个。随后标识(在5608)在5606选择的布线路径的其中一个。在5610,过程确定在5608选择的路径的剩余容量是否低于阈值。路径的剩余容量在5305计算。
如果过程确定(在5610)路径剩余的容量低于其阈值,过程标记(在5612)在5606选择的布线为不可用,并且随后转到将在以下进行描述的5616。如果没有,过程确定(在5614)是否已经检查了选择布线的所有路径。如果没有检查所有路径,它转回到5608以选择所选择布线的另一个路径。否则,该过程转到5616。
在5616,过程确定是否已经检查了在5604标识的所有布线。如果没有,该过程转回到5606以选择另一个标识的用于所选择的网络布线。否则,过程确定(在5618)其是否标记了用于所选择网络的所有标识的布线为不可用的。如果没有,网络有一个或者多个没有使用任何“处于危险中”的路径的布线,并且因此,该过程不产生用于这个网络的伪配置。该过程随后确定(在5620)是否已经检查了在当前槽的所有网络。如果已经检查了所有网络,过程结束。否则,该过程从5620转到5602,以选择在当前槽内的另一个网络。
如果过程确定(在5618)用于所选择网络的所有标识的布线是不可用的,该过程选择(在5622)当前槽的子槽。对于所选择的网络,过程随后产生(在5624)伪引脚配置,该伪引脚配置指示网络在5622所选择的子槽中有引脚。在一些具体实施方式
中,通过复制当前槽中所选择的网络的实际引脚配置来产生这个伪引脚配置,并且确保所复制的引脚配置指示用于在5622选择的子槽的引脚。在图57示出的举例中,过程通过添加用于第6子槽的“1”到原始配置0000100100000000中,产生一个伪配置0000100101000000。
过程随后标识(在5626)用于在5624产生的伪引脚配置的布线。通过使用在上面的部分V所讨论的方法的任何一个,过程能标识这些用于引脚配置的布线。接下来,过程选择(在5628)在5626标识的布线的其中一个。过程随后确定(在5630)所选择的布线是否是不可用的。过程通过执行与前面所述的5608-5616类似的可用性检查操作来产生这个确定。如果过程确定(在5630)在5628选择的布线是不可用的,过程转到将在下面进行描述的5634。如果选择的布线是可用的,过程为所产生的伪配置记录(在5632)选择布线的成本,并且随后转到5634。
在5634,过程确定是否已经检查了用于所产生的伪配置的所有在5626标识的布线。如果没有,该过程转回到5628,以选择另一个标识的布线。否则,该过程确定(在5636)是否已经为当前槽的所有子槽产生了伪引脚配置。如果没有,该过程返回到5622以选择另一个子槽。
否则,过程标识(在5638)伪引脚配置,如果有,将导致具有在5632记录的最佳成本的可用布线。如果配置在5638被标识,过程随后标识(在5640)用于在5638标识的引脚配置的所有可用布线,并且添加这些布线到用于当前网络的可能布线求解组中。
接下来,过程执行5642-5668,以产生用于包括至多两个伪引脚的伪配置的布线。特别地,在5642,该过程选择一个当前槽的子槽。过程复制(在5644)当前槽中的所选择的网络的实际引脚配置。随后确保(在5646)所复制的引脚配置指示用于在5642选择的子槽的引脚。在图58所示出的举例中,过程通过添加用于第6子槽的“1”到原始配置0000100100000000中,产生一个初始伪配置0000100101000000。
在5648,过程随后选择在5642选择的子槽之外的子槽。随后产生(在5650)一个伪引脚配置,该伪引脚配置指示网络在5648选择的槽中有引脚。在一些具体实施方式
中,过程通过复制在5646标识的引脚配置,并且确保复制的引脚配置指示用于在5648选择的子槽的引脚,来产生这个伪引脚配置。在图58所示出的举例中,过程通过添加用于第5子槽的“1”到最初伪配置0000100101000000中,产生最终的伪配置0000100101100000。
该过程随后标识(在5652)用于在5650产生的伪引脚配置的布线。正如在5604和5626,过程通过使用在上面的部分V所讨论的方法的任意一个能够标识用于所产生的引脚配置的这些布线。
接下来,过程选择(在5654)在5652所标识的布线的其中一个。过程随后确定(在5656)所选择布线是否可用。该过程通过执行与前面所述的5608-5616类似的可用性检查操作来产生这个确定。如果在5654选择的布线是不可用的,过程转到将在下面进行描述的5660。如果所选择的布线是可用的,该过程为所产生的伪配置记录(在5658)所选择的布线成本,并且随后转到5660。
在5660,过程确定是否已经检查了为在5650产生的伪配置的所有在5652标识的布线。如果没有,该过程转回到5654,以选择另一个标识的布线。否则,过程确定(在5662)其是否已经为所有不同于在5642选择的子槽的子槽生成了伪引脚配置。如果没有,过程返回到5648,以选择另一个不同于在5642所选择的子槽的子槽。
否则,过程确定(在5664)是否已经检查了所有作为可能第一伪引脚的子槽。如果没有,过程返回到5642,以选择另一个子槽。当过程确定(在5664)已经检查了所有作为可能的第一伪引脚的子槽,如果有,过程标识(在5666)导致在5658记录有最佳成本的可用布线的伪引脚配置。如果配置在5666被标识,过程随后标识(在5668)用于在5666标识的引脚配置的所有可用布线,并且添加这些布线到用于当前网络的可能布线求解组中。
从5668,过程转到5620。在5620,过程确定其是否已经检查了当前槽中的所有网路。如果它已经检查了所有网路,该过程结束。否则,过程从5620转到5602,以选择在当前槽内的另一个网络。
c.将网络配置分成更小的引脚配置并且添加伪引脚到更小的引脚配置中在一些举例中,简单地将伪引脚添加到网络配置中并不能产生最好的次最佳布线。有时可以通过(1)从一个网络引脚配置中产生两个或者多个引脚配置,(2)为产生的引脚配置标识伪配置,(3)标识用于该配置的布线,和(4)结合该生成的布线以找到一个或者多个次最佳布线来产生这样的布线。这样的方法在稠密路径是在2个相邻的“实”引脚之间的情况下特别有用。
图59示出这样的方法的举例。在这个例子中,网络有两个引脚5905和5910。如果伪引脚5915被添加到原始网络配置中,用于生成的网络配置的布线将使用路径P6和P21。然而,这样一个布线不是可用的,这是因为障碍5920完全稠密了路径P6。使用路径21和36的更理想的布线可以通过(1)将引脚配置一分为二,一个包括引脚5905,一个包括引脚5910,以及(2)添加伪引脚5915到两个生成的引脚配置来获得。
图60示出过程6000,其标识用于网络配置的额外布线。这个过程从网络的引脚配置中生成两个引脚配置,标识用于所产生的两个引脚配置的伪配置,标识用于伪配置的布线,并且合并所生成的布线。一些具体实施方式
为当前槽中的每个网络执行这个过程,而其它的实施方式仅为一些网络执行这个过程,诸如对于那些过程不能找到可用的布线的网络。
正像在图60中所示出的,过程6000通过为在当前槽的网络标识(在6002)一个或者多个布线来开始。过程能通过使用在前面的部分V所讨论的方法的任意一种基于网络的引脚配置来标识这些布线。过程随后标识(在6004)子槽,该子槽具有与其相关的标识路径的最多数目的路径。过程随后界定(在6006)两个位组,bset1和bset2。在一些具体实施方式
中,每个位组有16位,其中所有位最初都被界定为0。
接下来,在6008,过程设置1到对应在6004标识的子槽的第一位组的位。在6008,该过程也将对应于包含当前网路引脚的剩余子槽的第二位组的一个或者多个位设置为1。在6010,该过程初始化两个变量,其中变量Best_Length用于测量多个求解的最佳长度,以及Best_Detour用于标识生成最佳长度的求解。Best_Length变量被初始为一大的值,而Best_Detour被初始化为零。
在6012,过程选择当前槽的子槽的其中之一。随后确定(在6014)当前网络的引脚配置是否将所选择的子槽的相应位设置为1(即,当前网络在所选择的子槽中是否有引脚)。如果是,过程确定(在6016)是否已经试着生成用于当前槽的每个子槽的伪配置。如果没有检查所有当前槽的子槽,该过程返回到6012,以选择另一个子槽。如果已经检查了,该过程转到将在下面进行描述的6040。
如果过程确定(在6014)对应于所选子槽的位在当前的网络的引脚配置中没有被设置为1,该过程从两个位组,bitset1和bitset2中产生(在6018)两个复制的位组,biset1c和bitset2c。在每个复制的位组中,过程随后将(在6020)对应于所选子槽的位设置为1。
接下来,过程标识(在6022)为每个复制,修改的位组标识一个或者多个布线。通过使用在前面的部分V所讨论的任意一种方法,过程可标识这些用于复制,修改的位组的布线。过程随后选择(在6024)用于第一复制,修改位组(即用于bitset1c)的其中一个布线,以及选择(在6026)用于第二复制,修改位组(即用于bitset2c)的其中一个布线。在6028,过程随后确定两个所选布线是否重叠(即,两个解是否共享子槽中一个或者多个布线路径)。如果是,过程转到将在下面进行描述的6036。
如果不是,过程计算(在6030)通过组合在6024和6026所选的两个布线得出的布线长度。在一些具体实施方式
中,过程通过将在6026和6026所选择的两个布线的长度相加来计算这个长度。在6032,过程确定在6030所计算的长度是否小于当前的Best_Length。如果不是,过程转到将在下面进行描述的6036。
当在6030所计算的长度小于当前的Best_Length,在6024和6026所选的两个布线表示过程6000迄今得到的最佳解。相应地,在6034,过程界定Best_Length等于在6030所计算的长度。在6034,过程也产生一个新的布线作为在6024和6026所选的两个布线的合并,并且将Best_Detour定义为所产生的新布线。从6034,过程转到6036。
在6036,过程确定是否已经检查了用于第二复制,修改位组(bitset2c)的所标识的所有布线(在6022)和用于第一复制,修改位组(bitset1c)的在6024所选择的布线。如果没有,过程返回到6026,以选择用于第二bitset2c的另一个布线。否则,在6038,过程确定是否已经检查了所有用于第一复制,修改位组(bitset1c)的标识的布线(在6022)。如果没有,过程返回到6024,以选择用于第一bitset1c的另一个布线来检查。
当过程确定(在6038)已经检查了所有用于第一复制,修改位组(bitset1c)的标识的布线,其确定(在6016)是否已经试着产生用于当前槽的每个子槽的伪配置。如果已经产生,过程(在6040)将该过程标识的作为Best_Detour的解(如果有的话)添加到当前网络的求解方案库中,并且随后结束。在另一方面,如果过程没有产生用于每个子槽的伪配置,过程返回到6012,以选择另一个子槽。
3.为可能的布线分配成本在标识(在5310)用于当前槽中的每个网络的一个或者多个布线后,过程5300通过分解(factoring)传播到下一个更低的递归层,分配(在5315)接线长度成本给每个取回树。在一些具体实施方式
中,每个布线成本包括以下的三个分量成本(1)连接当前槽的子槽的一个或者多个布线路径的接线长度成本,(2)进入到子槽中的布线路径的路径传播成本,和(3)在选择路径传播后在每个子槽中的成本。
图64示出用于根据这三个分量成本来计算每个布线成本的过程。在解释这个过程之前,这个过程使用的概念性结构将参考图61-63进行解释。这些图示出一些具体实施方式
怎样模拟较高层布线到较低子槽的传播。特别地,图61示出在当前槽的子槽之间的任何水平或者垂直路径能沿着10个传播路径的其中一个向下传播到子槽的槽。
图62和63示出两个不同的方式,其用于模拟45°对角路径传播到更低层子槽的传播。图62示出的模式提供用于45°对角路径的7种传播可能。另一方面,在图63示出的模式为两个对角位置的子槽6305和6310之间的45°对角路径提供19种传播可能。这是因为在图63示出的模式仅指定沿着子槽6305和6310的边的路径传播,其从而允许沿着其中之一的子槽的边的路径传播与沿着另一子槽的相应的边的三种路径传播的任意一个成对。例如,正像在图63示出的,沿着边6320的传播6315能与沿着边6340的传播6325,6330和6335中的任意一个成对。依据这个方法,在槽6305和6310之间对角路径可具有19种传播,其中(1)传播中的9个通过将沿着边6320的三种路径传播与沿着边6340的三种路径传播配对来界定,(2)传播的9种通过将沿着边6345的三种路径传播与沿着边6350的三种路径传播配对来界定,以及(3)传播6355之一被界定在槽6310左上角与槽6305的右下角之间。
正像图64所示出的,过程6400最初选择(在6402)网络。随后选择(在6404)标识(在5310)用于所选网络的布线的其中之一。过程接着将所选求解的Total_Cost初始化(在6406)为0。随后需要标识在6404所选布线的路径成本。在一些实施方式中,LUT3965的其中一个存储用于每个网络配置的预先制表的接线长度成本。在这些具体实施方式
中,当树添加到网络的求解方案组中时,所选树的预先制表的接线长度成本可从LUT中取回。二者择一地,过程6400能使用生成用于当前网络所选树的标识的引脚配置来从LUT中取回树的预先制表接线长度成本。
然而在以下所描述的具体实施方式
中,过程6400通过执行6408-6412计算所选布线的路径成本。特别地,在6408,过程选择所选布线的一个路径。随后以在6408所选路径的成本,增量(在6410)所选求解的Total_Cost。一些具体实施方式
仅仅基于相较于其他路径的路径的相对长度界定路径成本。例如,一些具体实施方式
分配1的路径成本给槽间的水平或者垂直路径(例如,给在图12中的各路径P0-P23)以及将1.4的路径成本分配给槽间的各对角路径(例如,给各路径P024-P041)。其它具体实施方式
分配5的路径成本给槽间的每一水平或者垂直路径(例如,给图12中的各路径P0-P23),以及将7的路径成本分配给槽间的各对角路径(例如,给图12中的各路径P024-P041)。
其它的
具体实施例方式
可以不仅仅基于相对路径长度界定路径成本。为了达到某一目的(例如,鼓励更低层布线的使用或者避免通路(vias)的使用),一些具体实施方式
可以相较于更低层布线使花费在横越更高层路径的其相对长度成本更昂贵。例如,一些具体实施方式
可以分配1的路径成本给槽间的每一水平或者垂直的路径,以及分配高于1.4的路径成本给每个槽间的对角路径。
在6412,过程确定是否已经检查了所有所选的布线路径。如果没有,过程返回到6408,以选择另一个用于成本的路径。当过程确定(在6412)已经检查了所有选择的布线路径,其确定(在6414)当前槽是否是叶层槽。如果是,过程转到将在下面进行描述的6428。
如果过程确定当前槽不是叶层槽,该过程说明子槽中的接线长度成本。过程使用贪婪技术,以将所选布线的传播分解到子槽内。特别地,过程通过该路径的锚点数量排序(order)每个所选树的路径。一些具体实施方式
界定锚点作为子槽中的一个引脚,子槽与路径相关。在这些具体实施方式
中,路径至多有两个锚点。其它的实施方式可以界定锚点为在子槽的槽中的引脚数目;依照这样一种方法,当路径在每个子槽的16个槽中有16个引脚时,路径最多有32个锚点。在一些实施方式中,过程按照锚点数目的递减的顺序来对路径进行分类(即,将有最多数量锚点的路径放在分类表的第一的位置)。
接下来,在6418,过程根据分类的顺序选择路径(即,按照从上到下的顺序选择分类表中的路径)。对于这个选择的路径,过程选择(在6420)传播可能的其中之一。换句话说,在此阶段,过程选择在两个与路径相关的槽之间所选路径能传播的路线的其中之一。
正像前面参考图61所描述的,一些实施方式使用一个为在当前槽的子槽之间的水平或者垂直路径提供10个可能传播的传播模式。同时,一些实施方式使用为如图62所示出的45°路径提供7个可能传播的传播模式,而其它的实施方式使用为如图63所示出的45°路径提供19个可能传播的传播模式。
在一些实施方式中,过程选择(在6420)用于所选路径的最佳传播。为了选择最佳传播,过程检查每个传播可能,当必要时增加虚引脚,估计每种传播可能的成本,并且选择引起最低成本传播和布线的传播可能。正像以下参考图65所描述的,每个传播可能规定一个或者两个横越两个或者三个子槽的传播路径。相应地,每个传播可能的成本包括传播路径成本加在两个或者三个传播可能横越的子槽内的引脚配置布线成本。
图65示出路径的传播可能性的举例。这个图示出在槽0和9中有实际引脚6525的网络。用于这个网络的所选布线使用横越子槽5以连接子槽0和9的路径P17和P24。图65示出路径P24沿着路径6510和6515传播到三个子槽(即,子槽0,1和5),而路径P17沿着路径6520传播到两个子槽5和9。传播路径6510在当前槽的子槽0的子槽7和当前槽的子槽1的子槽8之间。传播路径6515在当前槽的子槽1的子槽13和当前槽的子槽5的子槽2之间。传播路径6520在当前槽的子槽5的子槽14和当前槽的子槽9的子槽2之间。图65示出已经被添加到子槽1,5和9的槽的五个虚引脚6502。
在6420,过程也(1)计算在6420标识的传播可能的路径的成本和在6418所选路径的成本之间的增量成本。并且随后(2)Total_Cost增加这个增量。例如,在一些实施方式中,当所选路径是5的成本的曼哈顿路径,并且所标识的传播是7的成本的对角路径时,增量成本是2。同时,在一些实施方式中,当所选路径是7的成本的对角路径时,并且所标识的传播包括两个对角路径,每个具有7的成本时,增量成本为7。在一些实施方式中,当所选路径和其标识的传播都是曼哈顿路径时,增量为0。
对于在6420所选择的传播,如果必要,过程临时将虚引脚存储(在6422)到相关子槽(即与在6430所标识的传播相关的子槽)的引脚配置记录中。过程使用这些临时存储的虚引脚来计算所选布线的其他路径(如果有的话)的传播成本。
过程接下来确定(在6424)是否已经检查了所选布线的最后路径。如果没有,过程返回6418,以选择在分类路径列表上的下一个路径。其随后为新选择的路径标识(在6420)最佳传播,并且临时设置(在6422)任何必要的虚拟引脚。
当过程确定(在6424)已经检查了所选布线的所有路径时,过程将在具有用于网络的引脚设置的每个子槽中的布线成本加到所选树的Total_Cost中。在6426,过程也存储所选择的Total_Cost。求解过程5300使用每个树的Total_Cost来用公式表示其LP问题。
在6428,过程确定是否已经检查了用于在6402选择的网络的所有布线。如果没有,过程转到6404,以估计这个网络的下一布线的成本。当过程确定(在6428)已经检查了用于在6402所选网络的所有布线,过程确定(在6430)是否已经检查了在当前槽中的所有网络。如果没有,过程转回到6402,以选择在当前槽的另一个网络,并且执行随后的操作以估计这个网络布线的成本。当过程确定(在6430)已经检查了在当前槽的所有网络,估算成本过程6400结束。
一名普通的技术人员将认识到有别于过程6400的计算布线的接线长度成本的其它实施方式。例如,通过计算当前递归层和其以下层的接线长度成本过程6400计算这个成本。在另一方面,其它的实施方式可以通过计算从当前递归层一直到叶层槽的接线长度成本来计算这个成本。为了做到这一点,一些具体实施方式
使用一递归过程,该递归过程计算当前递归层的路径成本,并且随后递归调用成本-计算过程来计算用于非Gcell(即,用于不是叶层槽的子槽的每个子槽)的每个子槽的接线长度成本。
4.LP问题公式和求解程序在求解程序分配接线长度成本到在当前槽中的网络布线后,求解程序用公式表示(在5320)用于LP求解程序3945的LP问题,该LP求解程序3945随后求解(在5325)这个LP问题。在LP问题公式中的基本变量是用于当前槽中网络的布线。每个树以下面的格式表示“xN_C”,其中,“x”是字符常数,“N”是网络数,“_”是字符常数,以及“C”是标识在网络的数的列表中标识的树的数目。例如,X26_14表示网络26的第14个树。
在一些
具体实施例方式
中,每个由LP求解程序所检查的LP解包括一个用于每个树变量XN_C的实数值。LP求解程序的任务是标识LP解,该LP解在满足一些限制时最小化一个或者多个目标函数。特别地,解只有当满足特定LP问题的一个或者多个限制时,其是可行LP解。LP求解程序的任务是标识最小化目标函数的可行LP解(即,满足特定限制的解)。换句话说,从一组解中,LP求解程序标识产生最佳目标函数值的可行LP解。
一些实施方式使用“SoPlex”求解程序作为LP求解程序,“SoPlex”求解程序已经由RolandWunderling完成,其为名为“ParallelerundObjektorientie-erSimplex-A1gorithmus”的Ph.D论文(以德文)的一部分。有关这个求解程序的信息在以下网址得到http//www.zib.de/Optimization/software/Soplex/。
a.目标函数不同的实施方式使用不同的目标函数。例如,一些实施方式可以使用这样的目标函数其(1)最小化总长度;(2)最大化通过所有42个路径的最小松弛部分(slack);(3)最大化总松弛部分(slack);以及(4)最小化任何单独路径的最大使用。然而,以下所描述的具体实施方式
试图找到最小化以下目标函数的LP解目标函数=A*Total_Wirelength(总接线长度)+B*Total_Via_number(总通路数)-C*Min_Slack(最小松弛)(F)在方程式(F)中,A,B和C是加权因数。同时,Total_Wirelength(总接线长度)是 并且总通路数是 最小松弛的概念用在LP公式的两种情况中。第一,变量Min_Slack(最小松弛)用做用于量化稠密的目标函数的分量(即,充当目标函数中的稠密的标记)。第二,常数minSlack(最小松弛)用于指定允许通过所有42个路径的最小松弛。
路径的松弛是在说明用于特定解的所有稠密(即稠密和接线流(wireflow))之后的路径的剩余容量。一个负松弛表示路径过于稠密。通过最小化目标函数使负最小松弛最小化,接下来,最大化最小松弛。一名普通技术人员将认识到其它的实施方式可使用目标函数中的其它稠密标记。
在一些实施方式中,设置用于Total_WireLength和Total_Via_Number的加权因数A和B彼此相等,并且这些因数都大于用于Min_S1ack的加权因数C。换句话说,这些实施方式为接线长度和通路(via)数加权目标函数,以便Min_Slack分量仅当接线长度和通路数分量不能区别两个LP求解时才有影响。这些实施方式在目标函数中使用接线长度和路径数来选择导致更小总接线长度和通路数的求解。
其它的实施方式加权目标函数是不同的。例如,在以下分部VI.E.4.c中所列出的LP公式,仅针对LP求解程序的第一尝试求解形成公式的LP问题,对接线长度和路径数参数加权目标函数。如果LP求解程序不能在其第一迭代中求解公式化的问题(即,如果不能找到符合限制的求解),LP问题被重新用公式表示,以便Min_Slack成为目标函数中的主分量。特别地,对于LP求解程序的第一次迭代,下面的公式将用于Total_WireLength和Total_Via_Number的加权因数A和B设置为彼此相等,并且这些因数都大于用于Min_Slack的加权因数C。如果LP求解程序在其第一次迭代中不能求解LP问题,改变加权因数A,B和/或C,使得目标函数的主参数是Min_Slack。
正像上面的公式(G)所示出的,通过在5315计算每个数的成本,计算Total_WireLength。同时,正像上面的公式(H)所示出的,Total_Via_Number是通过每个树的通路数计算的。通路是连接两相邻金属层上的布线的两部分所需的连接。
对于在图3示出的八边形布线模式,一对一的映射存在于层和布线方向之间。这个映射能用于简化计算用于每个布线的通路数。因此,可以通过横越布线,并且标识必要的通路数来计数通路数,这些必需适应(1)布线方向上的变化和(2)在引脚的层和子槽中的路径之间的不同(如果有的话)。
为了解释在子槽中的引脚和与子槽相关的路径之间的层差别,引脚的层需要标识。不同的实施方式以不同的方式标识实际引脚(即,非虚引脚)层。例如,一些实施方式假定所有实际引脚都在层2。其它的实施方式标识引脚的实际层;正像在前面所提到的,一些实施方式存储引脚层作为存储在引脚数据结构4300中的引脚位置的一部分,而其它的实施方式存储引脚层作为引脚宏的一部分,引脚宏和参照槽_数据结构的电路宏存储在一起。一些实施方式界定虚引脚(即被设置为解释布线传播到较低层子槽中的引脚)层以与设置虚引脚用于的传播路径层一致。
图66和67表示两个举例,其概念地示出一个对通路数量进行计数的方式。在这些举例中,布线模式如下层2是垂直的,层3是水平的,层4是+45°,而层5是-45°。图66和67示出用于连接子槽0和9的两个布线。在这两个图中,子槽0包括虚引脚6605,该引脚设置用于解释+45°路径到槽6600的的传播。相应地,虚引脚6605称之是在第四金属层(即,用于+45°布线的金属层)。同时,子槽9包括在层2上的实际引脚。
图66的布线6610需要两个通路。这个数可以通过在子槽0开始来计数。这个槽有在第四层的虚引脚。路径P24与这个槽相关,并且它通过第四层。因此,不需要通路说明在引脚6605的层和路径P24之间的不同。路径P24也与子槽5相关。子槽5没有引脚,但是有与之相关的路径P17。由于路径P24在第四层,路径P17在第二层,需要两个通路来说明槽5中路径方向的变化。路径P17也与子槽9相关。槽9没有与其相关的其他引脚,但是有在层2的实际引脚6615。假定路径P17和引脚6615都在层2,不需要通路来连接引脚6615和路径P17。
图67的布线6705需要六个通路。这个数可以通过在子槽0开始来计数。这个槽有在第四层的一个虚引脚。路径P12与这个槽相关,并且其通过第二层。因此,需要两个通路来说明在引脚6605的层和路径P12之间的不同。路径P12也与子槽4相关。子槽4没有引脚,但是有与之相关的路径P30。由于路径P30在第四层,路径P12在第二层,需要两个通路来说明槽4中路径方向的变化。路径P30也与子槽9相关。槽9没有与其相关的其他引脚,但是有一个在层2的实际引脚6615。因此,需要两个通路来说明引脚6615的层和路径30之间的不同。总之,需要六个通路用于布线6705。正像从图66和67示出的举例中所看到的,通路数提供有用的标记,以区别有相同长度的两个布线。
同时,一些实施方式在LP公式化5320期间计算用于每个布线路径数。一个这样的实施方式在子部分VI.E.4.c中由LP公式示出。然而,其它的实施方式在5320之前计算用于每个布线的通路数,正像他们在5320之前在5315计算布线的接线长度成本。二者择一地,一些实施方式可以在LP公式化5320期间计算每个布线的接线长度成本。
图68-70示出三个过程,它们一起工作来计算在布线中的通路数。图68的过程6800开始,只要它被调用用于计算用于树的通路数。该过程最初将所有(当前正在求解的槽的)槽初始化(在6805)为没有被访问的槽。
在6810,过程6800随后选择一个槽,其仅有一个与之相关的布线路径的槽,并且界定这个槽为Current_Slot。随后调用(在6815)图69的过程6900,并且向这个过程提供Current_Slot。由过程6900所返回的值是通路的总数。在调用过程6900之后,过程6800结束。
过程6900是一递归过程。它最初计算(在6905)Current_Slot中的路径数。在一些实施方式中,过程6900通过调用图70的过程7000来计算这个数。过程7000通过标识(在7005)所有与Current_Slot相关的布线路径开始。随后标识(在7010)所有Current_Slot的实际和虚引脚。
过程7000接下来标识(在7015)在7005标识的每个布线路径层和在7010标识的每个引脚。当使用图3的八边形布线模式时,每个路径层能被容易地确定,由于在路径的方向类型和它的层之间的有一对一的映射。例如,一些实施方式将垂直路径映射到层2,将水平路径映射到层3,映射+45°路径到层4,映射-45°路径到层5。同时,正像前面所描述的,一些实施方式假定所有实际引脚都在层2,而其它的实施方式标识存储的引脚的实际层。另外,一些实施方式界定虚引脚(即设置为说明布线传播到更低层子槽的引脚)的层以与设置虚引脚的传播路径层一致。
在标识引脚和路径层之后,过程7000随后确定(在7020)在7015标识的最大和最小层之间的区别。这个区别表示估计最小数目的通路,该通路为Current_Slot内所需。如果Current_Slot被分割成更小的槽,需要额外的通路来界定在更小槽中或者更小槽之间的用于当前布线的网络的更低层布线。一些实施方式(1)可以执行统计研究来估算界定在有一定数量的引脚和路径的槽中的布线所需的通路数,以及随后(2)可以使用这个统计研究的结果来获得Current_Slot所需通路数的更好估计。在7025,过程7000返回槽中的通路数,并且随后结束。
一旦过程7000返回槽中的通路数,过程6900标记(在6910)当前槽为已经访问过的槽。随后选择(在6915)与当前槽相关的当前布线路径的其中之一。接下来,在6920,过程标识与在6915所选路径相关的其他槽。在6925,过程确定是否已经检查了在6920标识的槽(即确定这个槽是否标记为访问过)。如果没有,过程6900在6930递归调用其本身。这个递归调用指定在6920所标识的槽为用于在6930递归启动的过程的当前槽。在6930,过程6900将递归调用过程返回的值加到通路数中。
从6930,过程6900转到6935。当其确定(在6925)在6920所标识的其它槽先前被访问了时,这个过程也转到6935。在6935,过程6900确定是否有任何与当前槽相关的其它路径。如果有,过程6900返回到6915,以选择另一个相关路径。如果没有,过程6900返回计算的通路数。
正像在前面的方程式(H)所指出的,目标函数的Total_Via_Number不仅取决于用于每个树的路径数,而且取决于测量以反映相对于接线长度的重要性通路数的转换因数。这个转化因数可以通过标准化接线长度和路径成本为轨迹数来获得,正像以下的方程式(I)所指出的X=50*5N---(I)]]>在这个方程式中,X表示转换因数,5表示曼哈顿路径的成本,N表示在当前递归层的每个曼哈顿路径的轨迹数,以及50是与使用路径有关的损失。这个损失是按照布线程序更喜欢转向而不是使用通路的轨迹数来测量。在一些实施方式中,设计者可以修正这个损失成本。同时,在一些实施方式中,每个曼哈顿路径表示在Gcell层的8个轨迹(即N在Gcell层等于8)。而且,由于对于每层N是不同的,转换因数x对于每个分层的布线层是不同的。
b.限制不同的实施方式界定不同的限制。使用以下描述的LP公式的实施方式界定三个限制。第一,对于每个网络N,LP求解程序必须仅从网络N的选择组中选择1树。这表示为用于网络的树变量的值的总和(即,这些值的和必须等于1)的限制,正像在以下的方程式中所指出的netNxN_A+xN_B+…+xN_Q=1.
LP求解程序将分配一个0和1之间的值给每个布线变量。“1”表示树的明确选择,而“0”表示树的明确拒绝。0和1之间的值意味着通过随机舍入求解程序指定的需要求解的选择组。一些实施方式不会表示仅需要选择一个用于网络的树作为限制,而是表示成为每个网络产生候选LP求解的关系。
第二限制与当前槽内的路径的稠密相关。在一些实施方式中,最小松弛大于特定的数量。正像前面所提到的,Min_Slack是通过所有路径最小的可容许松弛。在每个路径中的松弛等于路径的容量减去通过路径的线流(wireflow)和稠密。对于LP求解程序的第一次迭代,一些实施方式指定Min_Slack不得不为零或者更大。如果LP求解程序不能在它的第一次迭代中计算公式化的问题,为了消除将最小松弛作为限制,一些实施方式重新用公式表示LP问题,以便Min_Slack为一个更大的负值。然而,在一些实施方式中,正像上面所描述的,这个重新公式化使得目标函数的Min_Slack成为这个函数的主要分量。
第三,某些区域的容量需要在能横越这些区域的路径之间适当地分享。例如,给定图61,62和63所示出的模式,对角和曼哈顿路径必须适当分享重叠对角区域的容量。这是因为当求解程序是产生通用布线结果的通用布线程序的一部分,其通用布线输出需要转换为可由详细布线程序使用的边界引脚分配。
图71和72示出用于在Gcell层的这个共用限制的需要。在Gcell层,一些实施方式界定横跨Gcell之间的曼哈顿路径的容量为8轨迹宽。图71示出8个这样通过边E11的轨迹。而且,一些实施方式假定对角层上的间距与在曼哈顿层上的间距相同,并且由此假定对角路径的容量仅仅是两倍曼哈顿路径容量的平方根。在这样的假想下,穿过上述的Gcell的对角路径的容量是11轨迹。图71示出路径P32的11轨迹宽的容量。
垂直或者水平相邻的对角路径有重叠布线区域。例如,图72示出两个垂直相邻的对角路径P32和P26分享共用对角区域7205的容量(即,5个对角轨迹)。因为,按照图61的模式,曼哈顿路径不仅横越在曼哈顿方向之间的两个槽而且穿越在对角方向之间的两个槽,因此对角区域7205的五个对角轨迹被穿过这个区域的曼哈顿路径P4共享。
为了说明对角区域的共享容量,以下的LP公式界定三组限制,每组有两个限制,其中一个用于+45°路径以及一个用于-45°路径。这三组限制是(1)对角对限制,(2)混合三重限制,和(3)对角三重线限制。在以下的讨论中,+45°路径指的是东路径,而-45°路径指的是西路径。
图73示出第一种类型的限制,即对角对限制。这个图示出八个受限的对角对,该对角对已界定在路径P27和P36周围。这些受限对角对的其中两个是包括水平相邻东路径P36和P38的7305,以及包括垂直相邻的西路径P27和P33的7310。
根据该对的其中一个对角路径是否是当前槽的外围,可将对角对限制分类为内部和外围限制。特别地,对7305和7310是内部对角对。内部对角对包括水平或者垂直相邻地两个对角路径,并且对角路径不是来自东路径组P24,P26,P28,P30,P32,P34,P36,P38和P40,就是来自西路径组P25,P27,P29,P31,P33,P35,P53,P39和P41。在图73示出的三个其它的内部受限对角对是(1)对7315,其包括路径P36和P30,(2)对7320,其包括路径P27和P25,以及(3)对7325,其包括路径P27和P29。
图73也示出三个受限外围对角对。外围对角对包括两个水平或者垂直相邻的对角对,其中(1)都是东路径或者西路径,(2)其中一个路径是内部路径P24-P41的其中之一,以及另一个路径在槽的外围边上。图73示出的受限外围对是(1)对7330,包括路径P36和7335,(2)对7340,包括路径P36和7345,以及(3)对7350,包括路径P27和7355。
每个受限对角对中的两个路径共享几个轨迹(即,由一个路径表示的几个轨迹与另一个路径表示的几个轨迹相同)。相应地,一些实施方式限制与每个受限对角对有关的稠密来说明这个共享。
例如,当对中的两个路径共享大约一半轨迹时,一些实施方式将与内部对角对有关的稠密限制为对中的任一路径容量的1.5倍。作为举例,当两个内部对角路径P36和P38为每个11轨迹宽,并且彼此共享5轨迹时,一些实施方式规定限制为有关这些路径的稠密最多占据16轨迹(即,特定通过P36的线流加通过P38的线流,再加任何的稠密最多占据16轨迹)。
当对中的两个路径共享大约一半轨迹时,一些实施方式也限制与外围对角对有关的稠密为内部对角路径容量的1.5倍。例如,在一些实施方式中,外围对角对7330在Gcell层的路径均为11轨迹宽。在该层,这些路径彼此共享5个轨迹,相应地,对于Gcell层,一些实施方式规定限制为有关这些路径的稠密最多为16轨迹(即,规定通过P36的线流加通过7335的线流,再加任何稠密最多占据16轨迹)。
和内部对角对限制(该限制需要LP求解程序计算与对中的两个对角路径相关的稠密)不同,一个外围对角对限制仅需要LP求解程序计算用于LP解的关于外围对的内部对角路径稠密。这是因为有关外围对角对的外围路径在先于当前求解操作的传播操作期间被计算。
例如,当与槽7360有关的曼哈顿或者对角路径或者与相邻槽7360的槽有关的对角路径向下传播到槽7360的子槽7365时,已经可以计算有关用于外围对角对7330的外围路径7335的稠密。一些实施方式记录在第一父槽的子槽和与第一父槽相邻的第二父槽的子槽之间的传播路径的容量。一些实施方式通过以下的操作保持这样一个记录(1)产生用于相邻的父槽的相邻子槽的槽对记录,(2)存储两个相邻子槽的标识在槽对记录中,(3)初始化表示在两个子槽之间的传播外围路径的容量的容量字段,和(4)减少这个容量以用于使用和稠密。这些实施方式随后通过取回存储这个容量的槽对记录来标识每个外围路径的容量。一些实施方式通过使用与外围路径相关的两个子槽(即,当前槽的子槽,以及相邻槽的子槽)的标识来取回槽对记录。
图74示出第二种类型的限制,即混合三重线限制。除了混合三重线限制限制与相邻共直线对角路径对加上在对角对之间的曼哈顿路径的稠密之外,这个限制与第一种限制,即对角限制类似。
图74表示8个受限混合三重线,四个包括路径P36,四个包括路径P27。类似与对角对限制,混合三重线限制可根据三个中的一个对角路径是否是在当前槽外围,可分类为内部和外围限制。
图74中路径P36周围的四个受限混合三重线是(1)内部混合三重线7405,包括路径P9,P36和P38,(2)外围三重线7410,包括路径P9,P36和7445,(3)外围三重线7415,包括路径P20,P36和7445,以及(4)内部混合三重线7420,包括路径P6,P36和P30。
在图74中的有关路径P27的四个受限混合三重线是(1)内部混合三重线7425,包括路径P14,P27和P29,(2)内部三重线7430,包括路径P4,P27和7433,(3)内部三重线7435,包括路径P13,P27和P25,以及(4)内部混合三重线7440,包括路径P1,P27和7450。
在每个受限混合三重线中的三个路径共享几个轨迹。例如,对于在图62和63的对调布线模式表示,由对角路径的其中之一表示的几个路径与几个由其他对角路径表示的轨迹是相同的。而且,对于图61的曼哈顿布线模式表示,曼哈顿路径可以通过几个对角路径传播到更低层的子槽内,这些对角路径竞争与曼哈顿路径相邻的对角路径相同的轨迹。相应地,一些实施方式限制有关每个受限混合三重线的稠密来说明这个共享。
例如,当对中的两个对角路径分享轨迹的大约一半时,一些实施方式限制有关内部混合三重线的稠密为在三重线中的对角路径的其中之一的容量的1.5倍加仅在曼哈顿方向的曼哈顿路径的容量。例如,在Gcell层,两个内部对角路径P36和P38每个都有11轨迹宽,并且彼此共享5轨迹,而曼哈顿路径P21在曼哈顿方向是8轨迹宽,在向东方向是5轨迹宽(即,路径P21可以在布线的垂直层使用8轨迹,在东层布线使用5轨迹)。相应地,在Gcell层,这些实施方式的其中一些指定三重限制,该限制为有关路径P21,P36和P38的稠密(即,线流加稠密)必须最多占据24轨迹(即,16个可用的东边轨迹加8个可用的垂直轨迹)。
当在对中的两个对角路径分享轨迹的大约一半时,其它的实施方式可以限制内部混合三重线的稠密为在三重线中对角路径的其中之一的容量的1.5倍加在曼哈顿方向和相反的对角方向的曼哈顿路径的容量。这样,对于上述的举例(其中,在叶槽层,两个内部对角路径P36和P38每个都有11轨迹宽,并且彼此共享5轨迹,而曼哈顿路径P21在曼哈顿方向是8轨迹宽,在向东方向是5轨迹宽,在西方向是5轨迹宽),这些实施方式的其中一些指定一三重限制,该限制为有关路径P21,P36和P38的稠密(即,线流加稠密)必须最多为29轨迹(即,16个可用的东边轨迹加8个可用的垂直轨迹以及5个可用的西边轨迹)。
另外,正像外围对角对限制,除了计算在先前的传播操作期间三重线的有关外围路径的稠密之外,外围混合三重线限制在一些实施方式中一样分析内部限制。换句话说,内部混合三重限制需要LP求解程序计算有关三重线对角路径和曼哈顿路径的稠密以得到LP解。外围混合三重线限制只需要LP求解程序计算与三重线的内部对角有关的路径和曼哈顿路径的稠密,以得到LP解。LP求解程序能从用于外围路径横越的两个子槽的槽对记录中取回外围路径的稠密。
图75示出第三种类型的限制,即,对角三重线限制。这个限制与第一种类型的限制——对角对限制类似,除了对角三重线限制限制三个同线的对对角路径的稠密,而不是两个。图75示出四个受限的对角三重线,两个包括路径P36,两个包括路径P27。
如对角限制,根据三重线的其中一个对角路径是否是在当前槽的外围,对角三重线限制可以被分类为内部和外围限制。图75中四个受限的对角三重线是 (1)外围对角三重线7505,包括路径P36,P38和7530,(2)外围对角三重线7510,包括路径P30,P36和7525,(3)内部对角三重线7515,包括路径P25,P27和P29,以及(4)外围对角三重线7520,包括路径P27,P33和7535。
对于图62和63的对角布线模式表示,在三重线中的中间路径和其他两个对角路径分享几个轨迹。相应地,一些实施方式限制每个受限的对角三重线的稠密来说明这个分享。
当在三重线中的中间对角路径和另外对角路径的其中之一分享其轨迹的大约一半并且和另一个对角路径分享另一半轨迹时,一些实施方式限制对角三重线的稠密为在三重线中的对角路径的其中之一的容量的2.0倍。例如,在Gcell层的一些实施方式中,每个对角路径是11轨迹宽,并且与每个相邻的共直线的对角路径共享5轨迹。相应地,对于Gcell层,一些实施方式规定三重线限制为在有关三重线中的三个对角路径(即有关P25,P27和P29)的稠密(即,线流加稠密)至多为22轨迹。
另外,类似于外围对角对和混合三重限制,除了计算在先前的传播操作期间三重线的有关外围路径的稠密之外,在一些实施方式中如内部限制一样分析外围对角三重线限制。特别地,内部混合三重限制需要LP求解程序计算三重线所有对角路径的稠密。另一方面,外围对角三重线限制只需要LP求解程序计算有关三重线的内部对角路径的稠密。LP求解程序能从用于外围路径横越的两个槽的槽对记录中取回外围对角路径的稠密。
一名普通技术人员将认识到其它的实施方式可界定其它的限制。例如,一些实施方式可以界定混合五重线限制,其限制与曼哈顿路径和两对相邻共直线对角路径相关的稠密。一个这样的五重线将包括垂直路径P13,-45°对角路径P25和P27,以及+45°对角路径P24和P26。
在每个五重线中的曼哈顿路径将和五重线的对角路径分享几个轨迹。另外,在每个平行对角对的路径共享几个轨迹。因此,当在每个对中的两个对角路径共享轨迹的一半时,一些实施方式限制混合五重线的稠密为在五重线中的对角路径的其中之一的容量的3倍加仅在曼哈顿方向的曼哈顿路径的容量。例如,在Gcell层的一些实施方式中,每个对角路径是11轨迹宽,并且与每个相邻的共直线对角路径共享5轨迹,而每个曼哈顿路径在曼哈顿方向上是8轨迹宽。因此,在Gcell层,这样的实施方式其中一些根据每个平行对角对的容量是缩短的或者不是,规定五重线限制为有关五重线的稠密必须至多为40或者41轨迹。
c.公式在一些实施方式中,基于上述的目标函数和限制,求解程序3930用公式表示LP问题。在这些实施方式的其中一些里,LP问题的公式如下[准备求解程序ILP(槽)]—初始化变量MinSlack(最小松弛)为0//路径不允许过度限制—初始化1enAndViaWeight为100//最初长度和路径数有超过最小化松弛的优先权—初始化变量minSlackWeight(最小松弛权重)为-1—当(!完成时)—声明和初始化LP求解程序—声明目标行,以及称其为“目标”—对于变量中用于网络的每一经过识别的树组(此变量存储有用于当前槽中的所有网络的经过识别的所有组)—如果组为空(即,组包括用于在当前槽的一个网络的树选择组)—从组中的第一树记录取回网络索引,N—声明一个限制,“rN”,以限制求解程序,从而仅选择1树用于这个网络—对于在槽中的每一路径N,—声明限制,“usageN(使用N)”,以界定将这个路径的总使用值相加的变量—声明限制,“eSlackN”,以界定超过所有路径的最大松弛值—声明限制,“mxuseN”,以界定超过所有路径的最大使用值—如果路径N是曼哈顿路径—声明限制,eMtplN,以限制曼哈顿路径N以及相邻对的“东”路径的使用的总和//这个限制是用于包含路径N和与之相邻的2个对角东路径的混合三重线—声明限制,wMtplN,以限制曼哈顿路径N以及相邻对“西”路径的使用的总和//这个限制是用于包含路径N和与之相邻的2个对角西路径的混合三重线—声明限制,epairN,以限制两个与路径N相邻的“东”路径的使用的总和//这个限制是用于包含与路径N相邻的2个对角东路径的对角对—声明限制,wpairN,以限制两个与路径N相邻的“西”路径的使用的总和//这个限制是用于包含与路径N相邻的2个对角西路径的对角对—声明限制,eDtplN,以限制两个与路径N相邻的“东”路径加最底部/最左边相邻东路径之下/或左侧的第三东路径的使用的总和//这个限制是用于包括两个与路径N相邻的对角东路径加最底部/最左边相邻东路径以下或者左边的第三东路径的对角三重线—声明限制,wDtplN,以限制两个与路径N相邻的“西”路径加最底层/最左侧相邻西路径以下或者左边的第三西路径的使用的总和//这个限制是用于包括两个与路径N相邻的对角西路径加最底部/最左侧相邻西路径以下或者左侧的第三西路径的对角三重线—界定限制,“Min_Slack(最小松弛)”,以限制通过所有路径的最小松弛值—界定限制,“tLen”,以界定将所有所选树的长度成本相加的变量—界定一限制,“tVias”,以界定将所有路径的通路成本相加的变量//在这个点,声明所有LP的“行”。现在,我们通过填充所有的列继续(即,显示变量)—对于每一组的树,树组,用于网络中的变量m_sols存储用当前槽中所有网络的多组树—标识这组树属于的网络—对于在树组中的每一个树—产生用于表示这个树的变量,“xN_T”,其中,N是网络索引,并且T是树的序数,—声明xN_T,将因数1.0提交到限制“rowN”—标识树xN_T的布线长度成本//由上述的过程6400计算—计算嵌入这个树所需通路数,“nVias”,//使用上述的过程6800-7000—声明xN_T,将因数estLen提交到限制“tLen”—声明xN_T,将因数nVias乘以X提交到限制“tVias”//其中,X是在以上已经参考公式(I)进行描述的转换因数。
—对于在槽中的每一路径E,—如果这个树使用路径E—声明xN_T,以将因数-1.0提交到限制usageE—对于在这个槽中的每一路径E,—产生变量,“uE”,其中E是路径的整数标示符—声明uE,以将因数1.0提交到限制“usageE”—声明uE,以将因数-1.0提交到限制“mxuseE”—声明uE,以将因数1.0提交到限制“eslackE”—如果路径E是一个曼哈顿路径—声明uE,以将因数1.0提交到限制“eMtplE”—声明uE,以将因数1.0提交到限制“wMtplE”—取回两对与路径E相邻的对角路径—对于在对中的每一路径A—如果路径A的方向是“东”—声明uA,以将因数1.0提交到限制“eMtplE”—声明uA,以将因数1.0提交到限制“epairE”—如果路径A的方向是“西”—声明uA,以将因数1.0提交到限制“wMtplE”—声明uA,以将因数1.0提交到限制“wpairE”—取回与路径E相邻的对角路径的三重线—对于在对中的每一路径B—如果路径B的方向是“东”—声明uB,以将因数1.0提交到限制“eDtplE”—如果路径B的方向是“西”—显示uB,以将因数1.0提交到限制“wDtplE”—产生变量,“slack(松弛)”—声明slack,将因素1.0提交到限制“Min_Slack”
—声明slack,以将因数“minSlackWeight”提交到目标函数—对于在这个槽中的每一路径E,—声明slack,以将由因数1.0的限制提交到限制“eslackE”—如果路径E是曼哈顿路径—声明slack,将因数1.0提交到限制“epairE”—声明slack,将因数1.0提交到限制“wpairE”—声明slack,将因数1.0提交到限制“eMtplE”—声明slack,将因数1.0提交到限制“wMtplE”—声明slack,将因数1.0提交到限制“eDtplE”—声明slack,将因数1.0提交到限制“wDtplE”—产生变量,“tV”—声明tV,将因数1.0提交到限制“tVias”—声明tc,将因数“lenAndViaWeight”提交到目标函数—产生变量“tL”—声明tl,以提交因数1.0到限制“tLen”—声明tl,以提交因数“lenAndViaWeight”提交到目标函数//直到这里,我们已经显示限制,并且填充到公式的左手边。现在,我们将设置右手边—对于用于变量m_sols中的网络的每一树的组,树组,m_sols存储用于当前槽中的所有网络的多组树,—如果组不是空的(组包括用于在这个槽的网络的树选择组)—从组中的第一树记录取回网络索引N—将限制的RHS,“rN”,设置等于1.0—对于在这个槽中的每一路径E,—设置限制“usageE“的rhs等于0.0—设置限制“mxuseE“的rhs等于0.0—取回容量估计cap(E),该估计通过从估计未稠密值(由过程5400计算的)中减去估计的路径使用(由过程5500计算)产生
—设置限制“eslackE“的rhs为cap(E)—如果路径E是曼哈顿路径—计算用于分享限制eMtplE的容量估计capeMtplE,以及将限制eMtplE的rhs设置为这个容量—计算用于分享限制wMtplE的容量估计capwMtplE,以及将限制wMtplE的rhs设置为这个容量—计算用于分享限制epairE的容量估计capepairE,以及设置限制epairE的rhs为这个容量—计算用于分享限制wpairE的容量估计capwpairE,以及设置限制wpairE的rhs为这个容量—计算用于分享限制eDtplE的容量估计capeDtplE,以及设置限制eDtplE的rhs为这个容量—计算用于分享限制wDtplE的容量估计capwDtplE,以及设置限制wDtplE的rhs为这个容量—设置限制“tVias”的rhs等于0.0—设置限制“tLen”的rhs等于0.0—设置限制“Min_Slack”的rhs等于变量minSlack—求解LP—如果不存在解//删除在最小松弛上的硬限制,重新设置加权,以便松弛有超过长度和通路数的优先权—设置变量minSlackWeight=-500—设置变量minSlack=-1000—设置变量1enAndViaWeight=1—如果求解被发现—退出当型循环正像前面所指出的,公式的第三到最后语句告诉(在5325)LP求解程序求解问题。LP求解程序随后试着求解这个问题。如果LP求解程序在第一次迭代中通过上面所描述的当型循环求解这个问题失败,上述的公式改变某个常量的值,使得最小松弛不再有许多的限制,而是充当目标函数的主(primary)分量。特别地,常量minSlackWeight,minSlack以及LenAndViaWeight的变化有效地使得容量限制(仅是引起第一次尝试失败的限制)变为无效。LP求解程序随后试着再次求解问题。常量minSlackWeight,minSlack以及LenAndViaWeight的变化确保第二次尝试将产生一个求解。一名普通技术人将明白,其它的实施方式可以更增量地改变这些变量值,找到具有不同特性的解。然而,这样的增量变化将减小求解程序的速度。
LP求解程序返回的解是一个符合所有限制的求解并产生最低的目标函数输出。所返回的求解可以包括用于每个树变量xN_C的实数。例如,如果求解程序提交三个布线到LP求解程序,LP求解程序可以返回值0.8用于一个布线,0.1用于另一个布线,以及0.1用于最后一个布线。
正像上面所提到的,过程5300转换(在5330)这个LP求解为ILP求解。即,一个指定0或1作为每个树变量xN_C的值的求解。并且,正像上面所提到的,一些实施方式使用随机舍入来实现这个转换。基于在5330所选择的一组布线,求解程序3930在当前槽的每个槽-网络数据结构中存储(在5335)一个42位的所选布线的字符串。这42位字符串指定在所选网络布线占据的当前槽中的路径。
一名普通技术人员将明白,不管程序求解程序上面的描述,其它的实施方式可以使用不同的方法求解在布线分层的特定层的布线问题。例如,一些实施方式可以不同于那些前面描述的方式界定目标函数和限制。例如,一些实施方式可以使用布线成本作为限制,并且有目标函数简单地最小化稠密。同时,其它的实施方式使用ILP求解程序产生ILP求解,而不是使用LP求解程序来生成求解并转换LP求解为ILP解。另外,其它的实施方式使用一个顺序排列来为当前槽的每个网络嵌入布线。
F.传播程序在求解程序指定用于当前槽的每个槽-网络的布线后,在当前槽不是叶槽时,槽管理程序3925调用传播程序3935。传播程序随后确定由求解程序指定的用于当前槽的布线路径怎样向下传播到当前槽的子槽。对于在最高层槽之后但在叶层槽之前的槽,传播程序也执行随动传播操作,该随动传播操作将由传播程序在先前的布线层指定的路径向下进一步传播一层。对于在当前槽中的每个网络,传播程序必需修改在每个子槽中的网络的引脚分布,以用于解释其标识的传播。
下面将描述两个不同的传播程序。第一传播程序列举几个用于每个网络布线的传播求解,并且随后使用LP计算程序3945和ILP转换器3950来选择用于每个网络的传播求解。另一方面,第二传播程序是顺序的传播程序,其使用贪婪方法来选择和嵌入用于在当前槽中的每个网络的布线的传播。在以下所描述的实施方式中,这些传播程序当可用时,都使用顺序传播程序来执行随动传播。
一些实施方式当使用图62用于对角路径的七排列传播模式时,使用第一传播程序,并且当使用图63用于对角路径的十九排列传播模式时,使用第二传播程序。这些实施方式的其中一些与这些模式的其中之一,使用图61用于曼哈顿路径的十排列传播模式。
1. ILP传播程序与求解程序类似,ILP传播程序列举几个用于每个网络布线的到受了影响的子槽的传播求解并且计算其成本。传播程序随后用公式表示LP问题,并将这些求解提供给LP求解程序3945,这些求解依序返回许多实数解。这些实数解随后由ILP求解程序3950转换为整数解。这些整数求解指定在每个受影响的子槽中每个网络的特定配置,并且传播程序将每个网络的配置存储到用于受影响槽的网络的槽-网络数据结构。
图76示出在一些实施方式中ILP传播程序执行的过程7600。在一些实施方式中,当槽管理程序调用传播程序,并向它提供当前槽时,这个过程开始。过程7600最初估计(在7605)每个路径的每个传播可能的可用性。估计传播可用性的方式将在以下参考图77和78进行描述。
在估计每个布线的每个传播可能的可用性之后,过程7600列举所有的用于当前槽中的每个槽-网络的传播排列并计算(在7610)其成本。一种列举传播并计算其成本的方式将在以下参考图79和80进行描述。
在列举和计算可能传播排列的成本之后,LP传播程序用公式表示用于LP求解程序3945的LP问题。一种公式化LP传播问题的方式将在以下的部分VI.F.1.d中描述。过程7600随后转换(在7625)由LP求解程序返回的LP求解为ILP求解。在一些实施方式中,该过程执行随机舍入来进行这个转换。一种执行随机舍入成整数的方式在上面的部分VI.E中已经描述了。
基于在7625指定的传播,该过程随后在必要时修改(在7630)当前槽的子槽中的槽-网络的16位引脚分布。如果在此阶段没有槽-网络数据结构被修改用于特定网络,传播程序将用举例说明一个,并且在其中记录16位引脚分布。
在当前槽层是在叶层之上至少两层时,过程7600添加(在7635)其在7625所标识的传播路径到用于更低递归层的随动传播列表中。在当前槽的层在最高级之后但在叶层之前时,传播程序随后执行(在7640)随动传播操作。这个操作传播将传播程序在先前的布线层指定的布线路径向下进一步传播一层。一种执行随动传播的形式将在以下操考图65和81进行详述。
在当前槽的层是直接在叶层之前的层(即,在当前槽是Gcell的祖父)时,过程7600接下来调用(在7645)保存程序以将在7625指定的传播路径的路径数据结构,并且当可用时,将在7640指定的传播路径的路径数据结构链接到dBNet4110。该过程随后结束。
a.估计传播的稠密正像前面所提到的,过程7600估计(在7605)当前槽的每个路径用于每个传播可能的剩余可用性。在一些实施方式中,过程7600通过以下来计算这个估计(1)估计每个路径的每个传播的稠密容量,(2)估计每个路径的每个传播的使用,以及(3)将每个传播的稠密容量和使用相加。每个传播的稠密容量的估计将在以下参考图77进行描述,而每个传播的使用估计将在以下参考图78进行描述。
(1)每个路径所估计的稠密容量图77示出用于估计在当前槽中的每个路径的每个传播的稠密容量的过程7700。传播过程7600在7605执行过程7700。最初,这个过程分配(在7702)由至少具有一个字段的数据结构(即,矩阵),以用于存储在当前槽中的每个路径的每个传播的稠密容量。在7702,该过程也初始化数据结构中的每个字段为0。
在7704,过程选择在电路模块的当前槽列表中的电路模块。过程随后取回(在7706)用于所选电路模块的电路宏。随后选择(在7708)电路宏的障碍,并且计算(在7710)所选障碍的边界框。
接下来,过程(在7712)选择当前槽的42个路径的其中之一。随后选择(在7714)在7712所选路径的传播的其中之一。过程接下来确定(在7716)在7712所选路径是否与在7708所选择的障碍在同一层。
如果所选路径的层与所选障碍的层相匹配,该过程计算(在7726)所选择的传播的边界框。在7726,该过程也计算传播的边界框的面积。过程接下来标识(在7728)所选传播的边界框和所选电路模块的边界框的交叉处,并且计算(在7730)该交叉处的面积。该过程通过将他们计算的传播面积除他们计算的交叉处面积,来计算(在7732)阻碍因子。该过程接下来(在7734)将默认的传播容量乘以阻碍因子,并随后将(在7736)相乘的结果与存储在7702所分配的数据结构中的传播的稠密容量相加。该过程随后转到将在以下进行描述的7718。
如果过程在7716确定所选路径的层与所选障碍的层不相同,过程转到7718。在7718,该过程确定是否已经检查了用于在7712选择的路径的所有传播。如果没有,过程返回到7714,以选择用于所选路径的另一个传播。另一方面,如果该过程确定(在7718)已经检查了用于在7712所选的路径的所有传播,过程确定(在7720)是否已经检查了当前槽的所有路径。如果没有,该过程返回到7712,以选择当前槽的另一路径。
或者,如果所选路径是当前槽的最后路径,该过程确定(在7722)是否已经检查了在7704选择的电路模块的所有障碍。如果没有,该过程转到7708,选择另一所选的电路模块的障碍。否则,过程确定(在7724)是否已经检查了当前槽中的所有电路模块。如果没有,过程转到7704,以选择在当前槽的另一个电路模块。然而,如果该过程检查了当前槽的所有电路模块,该过程结束。
b.所估计的每个路径传播的使用图78示出用于估计当前槽中每个路径的每个传播的使用的过程7800。这个过程在每次传播程序在7605调用其时开始。在一些实施方式中,过程7800从传播程序接收用于存储每个传播的估计使用的浮点变量的数据结构(即一个矩阵)。在另一些实施方式中,过程7800不接收这样的数据结构,而是当过程开始时产生这个结构。在一些实施方式中,所接收或者产生的数据结构具有用于每个传播可能性的项(entry)。
正像在图78所示出的,过程7800最初选择(在7805)当前槽的子槽的其中之一。随后调用(在7810)图55用于所选择的子槽的路径使用估计过程5500。路径使用估计过程5500计算和返回用于所选子槽的每个路径的估计使用值。由于估计过程5500在前面已经描述了,为避免不必要的详述模糊本发明的描述,这里将不再描述该过程。
在7810之后,过程7800确定(在7815)其是否已经计算了用于当前槽的所有子槽的路径使用值。如果没有,返回到7805,以选择另一子槽,并计算(在7810)新选子槽的路径使用值。当过程确定(在7815)已经检查了当前槽的所有子槽,其选择(在7820)在当前槽中的42个路径的其中之一。
在7825,该过程选择所选路径的其中一个传播。随后根据相邻子槽路径的路径使用值计算(在7830)所选路径传播的使用估计。例如,在本发明的一些实施方式中,该过程使用以下的公式计算路径1的传播0的使用值传播_0-路径_1_使用(prop_O_path_1_use)=(1/2)*(1/2*路径[1][2]+1/3*路径[1][1]+1/6*路径[1]
+1/2*路径[2]
+1/3*路径[2][1]+1/6*路径[2][2]其中,路径[i][j]指的是使用子槽i的路径j。类似的公式可以用来近似地界定用于其他传播可能性的传播使用值。
上面的等式依据在子槽1和2中的稠密界定了子槽1和2之间的路径1的传播0的传播使用值。这个等式仅检查在子槽中与路径1的传播0成一直线的水平路径。特别地,它根据子槽1和2的水平路径0,1和2来检查路径1的传播0的分量使用值。槽1和2的使用值之和乘以1/2,反映在当前槽中的路径1的传播0的容量同样受子槽1和2中子路径的容量影响。
由于以下的原因,乘数1/2,1/3和1/6用于下列原因的子槽1和2的求和。目标是估算有多少线能通过传播路径。一些这样线将在越过传播路径之后立即终止,而一些将越过与路径关联的槽的整个宽度。假定使用该路径的线的“终端”的均匀分布,这样对于路径1的传播0,1/4将在子槽2的槽0中终止,1/4将在子槽2的槽1中终止,1/4在子槽2的槽2,1/4在子槽2的槽3和在其之外。这意味着使用路径1的线的3/4将也使用子槽2的路径0,2/4将使用子槽2的路径1,并且1/4将使用子槽2中的路径3,这样通过传播路径的估计使用,给出这3个路径的使用的相对影响的比率3∶2∶1(或3/6,2/6,1/6)。
在7835,该过程确定是否已经检查了在7820所选择路径的所有可能的传播。如果没有,该过程转回到7825,以选择另一个用于所选择路径的传播,并且计算(在7830)一个新选传播的使用估计。
当过程确定(在7835)已经检查了在7820所选路径的所有传播,过程确定(在7840)是否已经检查了当前槽的所有路径。如果没有检查所有的路径,该过程转回到7820,以选择在当前槽的另一个路径,随后执行操作7825-7835,以计算新选路径的传播可能的使用。当该过程确定(在7840)已经检查了在当前槽的所有路径,该过程结束。
c.列举和分配每个传播的成本在估计每个路径的每个传播可能的可用性之后,过程7600列举用于在当前槽中的每个槽-网络的所有传播排列和并估算(在7610)其成本。图79示出一个列举和估算传播成本的一种形式。
正像在图79所示出的,过程7900通过选择(在7905)当前槽的槽-网络开始。该过程然后初始化(在7910)16个空表,一个用于存储与一特定子槽相关的路径。该过程接下来取回(在7915)用于在7905所选槽-网络的布线。
在7920,该过程选择所取回的布线路径的其中之一。随后标识对应于所选择路径的末端的两个子槽。该过程将所选择的路径添加到在7925所标识的每个子槽的路径列表中。在7935,该过程确定是否已经检查了在7915所取回的布线的所有路径。如果没有,该过程返回到7920,选择布线的另一个路径。
当该过程确定已经将所有的布线路径添加到他们相应的子槽列表中,过程选择(在7940)当前槽的子槽的其中之一,并且取回所选择的子槽的路径列表。为了列举所选择的子槽中的所选择的槽-网络的所有可能的传播排列并计算其成本,该过程在7940选择子槽。在7945,该过程取回在所选子槽中的所选槽-网络的引脚分布。
在7950,该过程初始化一个空列表,以存储在7940所选子槽的所有可能的路径传播配置。在7955,该过程确定所选择的子槽列表是否是空的(即是否槽-网络的布线有任何横越子槽的路径)。当槽-网络的布线没有横越所选择的子槽时,该过程不需要通过所选择的槽标识用于网络的布线的传播配置。相应地,该过程转到7985,确定是否已经检查了当前槽的所有子槽。从7985至过程7900的流程将在以下进行描述。
如果过程确定(在7955)槽-网络的布线横越所选择的子槽,由此需要标识用于所选子槽中的槽-网络布线的传播配置,过程7900执行7960-7980来进行列举,估算成本,和存储在所选子槽中的所选槽-网络的所有可能的传播排列。
在一些实施方式中,过程7900使用一个递归函数来执行7955-7980。这个函数通过以下的动作来标识每个路径传播排列(1)在所选子槽的路径列表中选择一个可能的传播。(2)设置一个虚引脚来解释所选传播,(3)当存在这样的路径时,递归重复最初两个操作以用于路径列表中的随后路径。对于每个标识的传播排列,过程7900随后执行7970-7975来估算成本和保存每个排列,并且将每个排列添加到传播配置的列表中。
更特别地,在7960,过程7900在所选子槽列表中标识路径传播的排列。当槽-网络的布线只有一个与所选子槽相关的路径时,所标识的传播排列是用于与所选子槽相关的路径的传播可能的其中之一。另一方面,当槽-网络的布线有超过一个与所选子槽相关的路径时,每个标识的排列是用于与所选子槽相关的每个路径的传播的唯一组合。
正像在图61所示出的,在本发明的一些实施方式中水平垂直路径有10个传播可能。另一方面,正像在图62所示出的,在一些实施方式中对角路径有7个传播可能,而在图63所示出的其他实施方式中,对角路径有十九个传播可能。一名普通技术人员将明白其它的实施方式使用其它用于水平,垂直或对角路径的传播模式。
在标识在所选子槽中的路径传播排列之后,该过程标识(在7965)引脚配置,其用于解释在7960所标识的排列的路径传播。除了可以包括一个或者多个虚引脚来解释标识的排列的路径传播,这样的一个引脚配置与所选槽中的槽-网络的引脚分布相同。
过程随后计算(在7970)在7965所标识的引脚配置的成本。在一些实施方式中,这个成本是连接由标识的引脚配置指定的所选子槽引脚所必需的布线接线长度成本。正像前面,一些实施方式从指定每个引脚配置的最佳斯泰纳布线的成本的预制成表的表中取回这个成本,而其它的实施方式基于布线路径的成本来实时计算这个成本。
在7970,该过程存储所标识的传播排列(即所标识的路径传播)和其成本到配置记录中。用于这样一个记录的数据结构在图80示出。传播程序产生这个数据结构的列表,并且使用这个列表以跟踪传播程序生成的所有配置的轨迹。这个数据结构包括对网络dbNet数据结构的参考。它也包括子槽标识器,其用于传播程序识别用于配置的子槽的标识。这个结构也包括从路径传播推导的名字。它还存储接线长度成本和路径列表。
在7970之后,该过程添加(在7975)在7970所生成的配置记录到用于所选子槽的配置列表。该过程随后确定(在7980)是否已经检查了在所选子槽中的所有路径传播排列。正像前面提到的,一些实施方式将这个确定作为标识所有路径传播排列的递归函数的一部分来执行。
如果该过程确定(在7980)没有检查所有的路径传播排列,它标识(在7960)另一个排列,并随后估算成本和存储(在7965-7975)这个排列。当该过程已经检查了所有的路径传播排列,它确定(在7985)是否已经检查了所有子槽。如果没有,该过程返回导7940,以选择另一个子槽。
当过程确定(在7985)已经检查了所有子槽,该过程确定(在7990)是否已经生成了用于当前槽中的所有槽-网络的传播排列。如果没有,该过程返回导7905,选择另一个槽-网络,并且随后执行后续操作,以列举用于新选槽-网络的传播排列和估算其成本。当已经检查了当前槽中的所有槽-网络时,该过程结束。
d.LP问题公式和求解通过向LP求解程序提供一个或者多个目标函数,多个求解和几个限制,以用公式表示LP问题。LP求解程序随后需要根据限制使用目标函数选择最佳的求解。
在LP传播公式中的基本变量是配置记录,nXtYeApB…,其中,小写的字母是关键字(n=网络;t=子槽;e=路径;p=传播),而大写的字母表示数字(从0到在设计中的网络数用于“n”;0-15用于“t”,0-41用于“e”,以及0-9用于“p”)。
这个LP求解程序返回一LP求解,该解包括用于每个配置变量的实数值。正像前面所提到的,过程7600随后转换这个LP求解为ILP求解,即指定0或1作为每个配置变量值的求解。其它的实施方式使用ILP求解程序来产生ILP求解,而不是使用LP求解程序产生LP求解,并转换LP求解为一ILP求解。
正像前面所提到的,一些实施方式使用“SoPlex”求解程序作为LP求解程序,其已经由Roland Wunderling完成,作为名为“ParallelerundObjektorientierter Simplex-Algorithmus”的Ph.D论文(以德文)的一部分。有关这个计算机的信息在以下网址可以得到http//www.zib.de/Optimization/software/Soplex/。
同时,正像前面所描述的,LP求解程序的任务是标识一LP求解,该解最小化一个或者多个目标函数而满足多个限制。以下所描述的实施方式指定以下的用于LP传播的目标函数。
最小化L1nXtYeApB+…+LLnQtWeDpCeApD+…这个目标函数最小化总长度。特别地,在这个公式中的每一项表示一个配置(即,用于子槽中网络的路径传播的正确选择),并且其乘以该配置估计的长度(L1,LL)。
同时,以下所描述的实施方式指定三个限制。第一限制需要LP求解程序对每个槽-网络仅选出一个配置,正像以下所指出的nXtYeApB..eQpZ+nxtYeApC..eQpR+…=1;定义一个这样的限制是用于通过最近求解的槽的16个子槽的每个槽-网络。这个限制负责限制所选择配置的数量为每个槽-网络为1。
第二限制是传播一致性限制,其用以确保在子槽之间的连贯性(例如,如果在子槽Y中传播B被选择用于路径A,随后相同的选择必须在与路径A相关的其他子槽进行)。这个限制可以被指定,如下nXeYpZnXtOeYpZeQp1+nXtOeYpZeQp2+nXtOeYpZeQp7...
-nXtleYpZeSp1-nXt1eYpZeSp2-nXtleYpZeSp3=0注意到,当具有指定网络X的子槽Y中用于路径A的传播B的配置时,将有很多正项,并且当具有指定网络X的子槽W中的用于路径A的传播B的配置时,将有很多负项。
第三限制是容量限制。一些实施方式将子槽中的槽-网络配置映射到孙槽之间使用路径(即,将子槽中的每个传播映射到孙槽之间路径的使用)。这些实施方式随后确保考虑孙槽间的路径的容量。
在这些实施方式的其中一些中,LP传播问题的公式如下[准备求解程序ILP(槽)]—初始化slack=0—当我们没有一个求解时—初始化一个新的LP求解—声明目标函数“objective”—对于槽的每一路径—对于路径的每一传播—取回包括传播的所有路径—对于传播的每一路径—取回(子槽,孙槽)对,该对作为路径的端点(子槽,孙槽对可以发生在多于一的传播中)—如果这个(子槽,孙槽)仍没有被处理—生成一个限制“tAsBtCsD“,其中A是一个子槽,B是子槽A的孙槽,C是子槽,D是子槽C的孙槽。这个限制将限制孙槽之间的路径使用。
—声明限制“totlen”,以界定一个总长度变量—对于每一槽-网络X—对于在用于这个槽-网络的布线中的每一路径Y—对于该路径的每一传播Z—声明限制“nXeYpZ”,以迫使LP求解程序选择相同的传播用于两个其相关子槽中的相同路径—对于与当前槽-网络的布线相关的每一子槽—声明限制“nXtY”,其中,Y是子槽数。这注定在每一子槽中的每个槽-网络为一配置//完成限制,现在转向变量—对于每一槽-网络—对于每一与当前槽-网络的布线相关的每一槽-网络—标识子槽中所有槽-网络的配置//按照过程7900执行—对于每一产生的配置—生成变量“nAtBeCpD”,其中,A,B,C,D是分别标识配置网络,槽,路径和传播的整数—对于在配置中的每一路径—如果用于路径的传播是“不可用的”,添加损失到配置成本//其中,基于从过程7700和7800产生的估计获得的稠密估计所确定的不可用性—声明nAtBeCpD,如果B是少于与这个路径相关的2个子槽的索引-1.0,因数1.0被提交到限制“nAeCpD”,否则—对于在路径的传播中的每一子路径
—取回担当子路径的端点的这两(子槽,孙槽)对—声明nAtBeCpD,因数0.5提交到对应于该(子槽,孙槽)对的限制中—声明nAtBeCpD,因数1.0提交到限制“nAtB”—声明nAtBeCpD,以等于存储在配置的数据结构中的配置成本加任何损失的和的因数提交到限制“totLen”中—产生变量“tl”,以表示所选择配置的总长度—声明tl,以将因数-1.0提交到限制“totLen”—显示tl,以将因数1.0提交到目标函数—设置限制“totLen”的rhs=0.0—对于槽的每一路径—对于路径的每一传播—取回包括传播的所有路径—对于传播的每一路径—取回(子槽,孙槽)对,该对担当路径的端点(子槽,孙槽对可以发生在超过一种的传播内)—如果这(子槽,孙槽)对有,但是没有被处理—生成限制“tAsBtCsD”,其中A是子槽,B是子槽A的孙槽,C是子槽,并且D是子槽C的孙槽。这个限制将限制在孙槽之间的路径的使用—设置限制“tAsBtCsD”的rhs为传播路径的默认容量加局部变量“slack“值减去传播的估计路径使用,以及传播路径的稠密容量的总和//其中,所估计的路径使用由过程7800计算,以及稠密容量由过程7700计算—对于每一槽-网络A—对在槽-网络的布线中的每一路径B—对于那个路径的每一传播—设置限制“nAeBpC“为0.0—对于用于这个槽-网络相关的布线的每一槽-网络B
—设置限制“nAtB“等于1.0—求解LP—如果发现解,结束当型循环;否则,设置slack=slack+1,并且重新开始正像前面所指出的,公式的第二到最后一行命令(在7620)LP求解程序求解问题。LP求解程序随后试着求解这个问题。每次LP求解程序求解这个问题失败,上述的公式增量松弛值直到LP求解程序能求解这个问题。
LP求解程序返回一实数最佳求解。过程7600随后转换这个LP求解为整数LP(“ILP“)求解。正像前面所描述的,一些实施方式使用随机舍入来实现这个转换。一名普通技术人员将明白其它的实施方式使用ILP求解程序产生ILP求解,而不是使用LP求解程序来生成求解并转换LP求解为ILP解。另外,其它的实施方式使用用于传播的ILP求解程序以生成ILP解。
e.随动传播在当前槽的层是在叶层之上至少两层时,过程7600添加在7625标识的传播路径到用于下一更低递归层的随动传播列表中。图65示出一个能加到随动传播列表中的传播路径的举例。正像前面所描述的,这个图示出在槽0和0中有实际引脚6265的网络。用于这个网络所选布线使用穿过子槽5来连接子槽0和9的路径P17和P24。
图65示出路径P24通过路径6510和6515传播到子槽0和5,而路径P17通过路径6520传播到子槽5和9。传播路径6510在当前槽的子槽0的子槽7和当前槽的子槽1的子槽8之间。传播路径6515是在当前槽的子槽1的子槽13和当前槽的子槽5的子槽2之间。传播路径6520在当前槽的子槽5的子槽14和当前槽的子槽9的子槽2之间。图65示出五个虚引脚6502,已经被添加到子槽1,5和9的槽。
当前槽的层至少高于叶层两个层时,过程7600添加传播路径6510,6515和6520到随动传播列表中以用于下个更低的回归层。当执行用于当前槽的子槽的随动传播时,传播程序随后将使用这个列表。这个传播操作传播在随动列表上的路径到一个更低层。
图81示出当在前槽在最高层槽之下但在叶层槽之上时,用于当前槽的随动传播的过程8100。通过界定,这样一个当前槽是先前父槽的子槽。正像在图81所示出的,过程8100最初(在8105)或者确定(1)是否随动传播列表包括有至少一个锚点的任何路径,或者确定(2)当前槽是否是当前层的最后槽,并且随动列表仍包括一个或者多个路径。
如果该过程在8105标识没有路径,过程结束。否则,过程8100选择(在8110)所标识的路径的其中之一,并且将该路径从随动传播列表中删除。接下来,该过程估算(在8115)所选择的路径的每个传播排列的成本。每个传播排列的成本包括其传播路径的成本加上在传播排列穿过的两个或者三个子槽中引脚配置的布线成本。
接下来,该过程选择(在8120)最低成本的传播排列。所选择的传播排列包括一个传播路径或者在一些情况下有两个传播路径。例如,在图65所示出的举例中,路径P24的传播导致两个传播路径6510和6515,而路径P17的传播导致传播路径6520。
对于每个传播路径,一些实施方式保持槽对记录,其存储路径连接的子槽的标识和路径的剩余容量。因此,在8125,该过程确定槽对数据结构是否存在以用于形成在8120所选择的传播排列的每个传播路径。当不存在这样一个用于所选择的传播排列的个传播路径的结构时,该过程(在8125)生成用于路径的槽对结构,将路径穿过的子槽的标识存储在结构中,并初始化结构的容量字段。用于传播路径的初始化后的容量是路径的默认容量减去在路径上的任何稠密的差。当用于所选择的传播排列的传播路径的槽对结构已经存在,该过程从这个结构中标识(在8125)路径的剩余容量。
在8130,该过程确定是否所选传播排列能嵌入当前槽的子槽中。换句话说,该过程确定一个或者多个形成所选择的传播排列的传播路径是否有一个大于阈值的剩余容量。在一些实施方式中,阈值是0。在这些实施方式中,当形成所选传播排列的所有路径具有大于零的剩余容量时,可嵌入该排列。
如果该过程确定所选择的传播排列不能嵌入,它确定(在8135)是否有用于在8120所选择的路径的额外的传播排列。如果有,该过程选择(在8140)下一个最便宜的传播排列,并且随后转到8125。
当该过程确定(在8135)没有额外的传播排列可检查时,该过程嵌入(在8160)在8310所检查的最好的传播排列。这个嵌入可能需要在受影响的子槽的引脚分布中的设置虚引脚(即,在所选择的传播排列的一个或者多个路径横越的当前槽的孙槽中设置虚引脚)。设置这样的虚引脚的一个举例在图82中示出。这个图示出(1)从随动路径列表的路径6510中通过路径8205传播到子槽7的槽11,和(2)虚引脚,其在槽11中已经被设置,以用于解释这个传播。该图也使出路径6510沿路径8215传播到子槽4的槽12以及与当前槽8220相邻的槽的子槽8的槽1。这个图也示出已经设置到相邻的槽的子槽4和8的槽12和1中的两个虚引脚。
在8160,该过程也更新一个或多个由嵌入的传播排列使用的传播路径的可用容量。正像前面所描述的,传播路径的可用容量能计算作为路径的默认容量减去其稠密容量和其路径使用估计,其中,稠密和使用值可以按照过程7700和7800进行计算。一些实施方式能将通过使用过程7800所计算的路径使用估计作为在每个传播路径的可用容量中的因子。
在当前槽的层至少高于叶层两层时,该过程(在8160)也将所嵌入的传播路径添加到随动传播列表中以用于下一个更低的递归层。从8160,该过程转到将在以下进行描述的8150。
当该过程确定(在8130)可以嵌入所选传播排列时,它嵌入(在8145)在8120或8140所选择的传播排列。这个嵌入可以需要在受影响的子槽的引脚分布中设置虚引脚(即,在所选择的传播排列的一个或者多个路径横越的当前槽的孙槽中设置虚引脚)。在8145,该过程也更新一个或者多个由嵌入的传播排列使用的传播路径的可用容量。在当前槽的层至少高于叶层两层时,该过程(在8145)也将所嵌入的传播路径添加到用于下一个更低的递归层的随动传播列表中。从8145,该过程转到8150。
在8150,该过程确定是否已经检查了所有的在8105所标识的路径。如果没有,该过程返回到8110,选择另一个在8105所标识的没有检查的路径。如果已经检查了所有在8105标识的路径,该过程结束。
2.顺序传播程序本发明的一些实施方式使用顺序传播方法来标识怎样传播有求解程序所指定的布线到当前槽的子槽。当这些实施方式的其中一些使用图63的对角传播模式时,他们使用这样的方法。
图83示出一些实施方式所使用的顺序传播过程。正像在这个图中所示出的,这个过程通过计算(在8305)在当前槽的子槽的子槽之间的每个传播的可用容量开始。每个传播路径的可用容量等于路径的默认容量减去其稠密容量加其路径使用估计。正像前面所提到的,过程7700和7800能用于计算稠密和路径使用值。一些实施方式能将通过使用过程7800计算的路径使用估计作为在每个传播路径的可用容量中的因子。
在计算可用传播容量之后,该过程选择(在8310)在当前槽中的槽-网络。随后取回(在8315)所选择的槽-网络的布线。在8325,该过程随后选择具有最多数量锚点的路径。正像前面所提到的,一些实施方式将锚点界定为在与该路径相关的任一子槽中的引脚。其它的实施方式可以将锚点界定为在子槽的槽中的引脚数;在这样的方法下,当其在每个子槽的16个槽中16个引脚时,路径可以最多有32个锚点。
接下来,该过程计算(在8330)所选择路径的每个传播排列的成本。每个传播排列的成本包括排列的传播路径成本加在传播排列横越的两或三个子槽中的引脚配置的布线成本。
接下来,该过程选择(在8335)最低成本的传播排列。所选传播排列包括一个传播路径,并且在一些情况下是两个传播路径。例如,在图65所示出的举例中,路径P24的传播导致两个传播路径6510和6515,而路径P17的传播导致一个传播路径6520。
在8340,该过程确定所选择的传播排列是否能嵌入到当前槽的子槽中。换句话说,该过程确定嵌入所选择的传播排列是否将引起用于这个传播的任何传播路径将过度稠密。
如果该过程确定所选择的传播排列不能嵌入,它确定(在8345)是否有用于在8325所选择的路径的额外传播排列。如果是,该过程选择(在8350)下一个最便宜的传播排列,并返回到8340,以确定新选择的排列可以嵌入。
当该过程确定(在8345)没有额外的传播排列可检查,该过程嵌入(在8365)在8340所遇到的最好的传播排列。这个嵌入可以需要在受影响的子槽的引脚分布中设置虚引脚(即,在所选择的传播排列的一个或者多个路径横越的当前槽的孙槽中设置虚引脚)。在当前槽的层至少高于叶层两层时,这个嵌入也需要添加由所选择的传播排列使用的传播路径到随动传播列表中以用于下一个更低的递归层。在8365,该过程也更新嵌入的传播排列的传播路径的可用容量。从8365,该过程转到将在以下进行描述的8360。
当该过程确定(在8340)一个所选择的传播排列能嵌入,它嵌入(在8355)所选择的传播排列。这个嵌入可以需要在受影响的子槽的引脚分布中设置虚引脚(即,在所选择的传播排列的一个或者多个路径横越的当前槽的孙槽中设置虚引脚)。在当前槽的层至少高于叶层两层时,这个嵌入可以需要添加由所选择的传播排列使用的传播路径到随动传播列表中以用于下一个更低的递归层。在8355,该过程也更新嵌入的传播排列的传播路径的可用容量。从8355,该过程转到8360。
在8360,过程确定是否已经检查了所选择的槽-网络的布线的所有路径。如果没有,该过程返回到8325,以选择这个布线的另一个路径。如果是,该过程确定(在8370)是否已经检查了在当前槽中的所有槽-网络。
如果过程没有检查在当前槽中的所有槽-网络,该过程返回到8310,以选择另一个槽-网络。否则,该过程转到8375。在当前槽的层在最高层之后但在叶层之前时,顺序传播程序随后执行(在8375)随动传播操作。这个操作将由传播程序在先前的布线层指定的布线路径向下传播一层。在当前槽的层是叶层之前的层时(即,当前槽是Gcell的祖父时),顺序传播程序调用(在8380)保存程序来将在8355,8365和8375嵌入的任何传播路径的路径数据结构链接到dBNet。这个过程随后结束。
VII.计算机系统图84表示执行本发明的一具体实施方式
的计算机系统。计算机系统8400包括总线8405,处理器8410,系统存储器8415,只读存储器8420,永久存储装置8425,输入装置8430和输出装置8435。
总线8405集体的代表通信连接计算机系统8400许多的内部装置的所有系统,外围,和芯片组的总线。例如,总线8405通信连接处理器8410和只读存储器8420,系统存储器8415和永久存储器8425。
为了执行本发明的过程,处理器8410从这些不同的存储单元取回用于执行的指令和用于处理的数据。只读存储器(ROM)8420存储处理器8410和计算机系统的其他模块所需的统计数据和指令。另一方面,永久存储器装置8425是读写存储装置。这个装置是非易失存储单元,其即使当计算机系统8400关闭时也存储指令和数据。本发明的一些实施方式使用大容量存储器(诸如,磁性或者光盘以及其相应的磁盘驱动器)作为一个永久存储装置8425。其它的实施方式使用一个可移动存储装置(诸如,一个硬盘或者Zip盘,以及其相应的磁盘驱动器)作为永久存储装置。
类似于永久存储装置8425,系统存储器8415是读写存储装置。然而,不像存储装置8425,系统存储器是易失读写存储器,如随机接入存储器。系统存储器存储一些处理器运行期间所需要的指令和数据。在一些实施方式中,发明的处理被存储在系统存储器8415,永久存储装置8425,和/或只读存储器8420中。
总线105也连接到输入和输出装置8430和8435。输入装置使得用户与计算机系统传递信息和选择指令。输入装置8430包括字母数字键盘和光标控制器。
输出装置8435显示由计算机系统产生的图像。例如,这些装置显示IC设计线路图。输出装置包括打印机和显示装置,如阴极射线管(CRT)或液晶显示屏(LCD)。
最后,正像图84所示出的,总线8405也通过网络适配器(未示出)连接计算程序8400到网络8465。在这种方式中,计算机能作为计算机网络(如,局域网络(LAN)、广域网络(WAN)、或者企业内部互联网)或是网络中的网络(诸如互联网)的一部分。
可以结合本发明使用任何或者所有的计算机系统8400的组件。然而,本领域的一名普通技术人员将意识到可使用结合本发明的任何其它的系统结构。
当本发明已经参考许多特定的细节进行了描述时,本领域的一名技术人员将认识到本发明可以不脱离本发明的精神以其它的形式实现。例如,几个实施方式参考分层布线程序在以上进行描述,一名普通技术人员将认识到采用其它的布线程序类型实现本发明的其他实施方式,诸如,迷宫布线程序。
同时,即使几个实施方式是参考LP问题公式进行描述的,一名普通技术人员将认识到这些实施方式可以由不利用LP求解程序的应用实现。上述的轨迹共享限制提供了一个这样的例子。任何类型的布线程序可以说明这些分享限制用于确定是否嵌入布线。
另外,其它的实施方式可以使用不同组的分割线来划电路布置。例如,一些实施方式可以使用界定不同形状和/或不同尺寸的子区域的分割网格,而不用图5示出的4×4网格界定的子区域。这样,一名本领域的普通的技术人员将明白,本发明不限于前述的说明详述,而是由后附权利要求所界定。
权利要求
1.一种在集成电路布局的特定的区域内布线网络的方法,所述网络具有一组引脚,所述方法包括a)分割所述特定的集成电路区域为多个子区域,其中所述子区域具有相同的形状;和b)标识连接一组包含所述网络引脚的子区域的布线,其中所述布线具有至少部分是对角的布线边。
2.根据权利要求1的方法,其中标识所述布线包括标识包含所述网络引脚的子区域组。
3.根据权利要求2的方法,其中标识所述布线进一步包括使用所述标识的子区域组以从存储器结构中取回所述布线。
4.根据权利要求1的方法,其中所有子区域具有相同尺寸。
5.根据权利要求1的方法,其中每个子区域是四个边的子区域。
6.根据权利要求1的方法,其中所述集成电路区域是整个集成电路的布局。
7.根据权利要求1的方法,其中所述集成电路区域是整个集成电路的布局的一部分。
8.根据权利要求1的方法,其中所述方法在集成电路区域内布线附加网络,其中每个附加网络在所述区域中包括一组引脚,所述方法包括对于在所述区域中每个附加网络,标识连接一组包含所述组网络引脚的子区域的布线;其中一些标识的布线具有至少部分是对角的布线边。
9.根据权利要求8的方法,其中在所述子区域之间存在多个路径,并且所述多个路径是对角路径;其中每个布线穿过一组路径,其中所述布线的至少一个穿过所述对角路径中的至少一个。
10.根据权利要求9的方法,其中标识每个布线包括标识由所述布线横越的所述组路径。
11.根据权利要求9的方法,其中多个路径是曼哈顿路径,其中所述布线的至少一个横越所述曼哈顿路径的至少一个。
12.根据权利要求8的方法,其中在所述子区域之间存在多个区间边,并且多个区间边是对角的;其中每个布线与一组区间边相交;其中至少一个布线与所述对角区间边的至少一个相交。
13.根据权利要求12的方法,其中标识每个布线包括标识由所述布线相交的所述组区间边。
14.根据权利要求12的方法,其中在所述子区域之间的多个区间边是曼哈顿边,其中至少一个布线与至少一个曼哈顿边相交。
15.根据权利要求8的方法,进一步包括对于在所述区域中的每个网络,标识一组连接包含所述网络引脚的所述组子区域的布线;计算用于所述标识的布线的成本;基于所述计算的成本选择用于每个网络的一个标识的布线;将用于每个网络的所述选择的路径嵌入在所述区域中。
16.根据权利要求15的方法,其中选择用于每个网络的一个标识的路径包括以所述标识的布线作为用于一个线性规划问题的变量以将所述问题公式化。
17.根据权利要求8的方法,其中分割所述集成电路区域包括使用第一组线条去分割所述集成电路区域为多个子区域,所述方法进一步包括使用第二组线去测量用于所述网络的布线稠密,其中至少在所述第二组中的一些线与在所述第一组中的线不同。
18.根据权利要求17的方法,其中所述第一组线形成第一网格,并且所述第二组线形成第二网格。
19.根据权利要求17的方法,其中所述第二组线包括形成对角网格的交叉对角线。
20.根据权利要求19的方法,其中所述第一组线包括形成第一直线网格的相交水平和垂直线。
21.根据权利要求20的方法,其中所述第二组线进一步包括形成第二直线网格的相交水平和垂直线。
22.根据权利要求21的方法,进一步包括使用所述第二直线网格去测量路径在曼哈顿方向的布线稠密;使用所述对角网格去测量在对角方向的布线稠密。
23.根据权利要求21的方法,其中所述第二直线网格与所述第一直线网格相同。
24.根据权利要求20的方法,其中所述对角线在由所述第一组线条生成的子区域的中心相交。
25.根据权利要求8的方法,其中分割所述集成电路区域包括使用第一组线去分割所述集成电路区域为多个子区域,其中在所述子区域之间存在多个对角布线路径,所述方法进一步包括基于第二组线标识对角布线路径的容量,其中在所述第二组中的至少一些线条与在所述第一组中的线条不同。
26.根据权利要求25的方法,其中所述第二组线包括对角线。
27.根据权利要求26的方法,其中所述对角线相对于所述集成电路区域的一个轴线为+A°或者-A°,其中A不是0或者90,其中所述方法使用所述对角线去标识在所述子区域之间±A°方向的布线路径的容量。
28.根据权利要求27的方法,其中A是45。
29.根据权利要求25的方法,其中所述对角线界定多个对角边,其中每个特定的布线路径与特定的对角边相交,其中标识所述对角布线路径的容量包括从由特定对角布线路径相交的所述特定对角边的长度推导出每个特定对角布线路径的容量。
30.根据权利要求29的方法,其中相对于特定接线层界定每个布线路径,并且每个层具有特定的间距,其中标识所述对角布线路径的容量进一步包括使用每个特定布线路径层的间距去推导出所述特定的布线路径的容量。
31.根据权利要求30的方法,进一步包括分层地分割所述区域为越来越小的子区域;规定用于所述层级结构的每一层上各网络的布线,其中在所述层级结构的最低层上的所述子区域是Gcell,其中在非Gcell层上标识所述对角布线路径的容量进一步包括从在Gcell层上沿着所述特定的布线路径方向上接线数目,推导出在非Gcell层上每个特定对角布线路径的容量。
32.根据权利要求1的方法,其中所述子区域是第一组子区域,所述方法进一步包括a)分割所述第一组子区域为第二组子区域;和b)扩展所述布线为所述第二组子区域。
33.根据权利要求32的方法,其中第一组路径存在于所述第一组子区域之间,并且第二组路径存在于所述第二组子区域之间,其中相对于是所述第一组路径的子组的第三组路径,界定所述第一布线。
34.根据权利要求33的方法,进一步包括标识第一第二组路径,第一第二组路径表示特定的第三组路径传播到第二组子区域。
35.根据权利要求34的方法,其中所述特定的第三组路径和所述第一第二组路径是对角的。
36.根据权利要求34的方法,其中所述特定的第三组路径是曼哈顿路径,并且所述第一第二组路径是对角路径。
37.根据权利要求34的方法,其中所述特定的第三组路径是对角路径。
38.根据权利要求34的方法,进一步包括标识第二第二组路径与所述第一第二组路径一起表示所述特定的第三组路径到所述第二组子区域的传播。
39.根据权利要求38的方法,其中所述特定的第三组路径是对角,并且所述第一和第二第二组路径是对角。
40.根据权利要求32的方法,其中在所述第一组子区域之间存在第一组区间边,并且在所述第二组子区域之间存在第二组区间边,其中所述相对于第三组区间边界定第一布线,所述第三组区间边是所述第一组区间边的子组。
41.根据权利要求40的方法,进一步包括标识第一第二组区间边,第一第二组区间边表示特定的第三组区间边到第二组子区域的传播。
42.根据权利要求41的方法,其中所述特定的第三组区间边和所述第一第二组区间边是对角的。
43.根据权利要求41的方法,其中所述特定的第三组区间边是曼哈顿区间边,并且所述第一第二组区间边是对角区间边。
44.根据权利要求41的方法,其中所述特定的第三组区间边是对角区间边,并且所述第一第二组区间边是曼哈顿区间边。
45.根据权利要求41的方法,进一步包括标识第二第二组区间边与所述第一第二组区间边一起,表示所述特定的第三组区间边到所述第二组子区域的传播。
46.根据权利要求45的方法,其中所述特定的第三组区间边是对角的,并且所述第一和第二第二组区间边是对角的。
47.根据权利要求1的方法,进一步包括a)分割所述标识的子区域为多个更小的子区域;和b)传播改布线为更小的子区域。
48.根据权利要求47的方法,其中传播所述布线包括标识至少一个对角传播路径,所述布线沿着对角传播路径传播所述更小的子区域。
49.根据权利要求48的方法,其中所述传播路径是对角传播路径。
50.根据权利要求49的方法,其中所述传播路径是水平或者垂直传播路径。
51.根据权利要求1的方法,进一步包括a)分割所述标识的子区域为多个更小的子区域;和b)标识一个沿着对角边传播为更小的子区域的传播路径。
52.根据权利要求51的方法,其中所述传播路径是一个对角路径。
53.根据权利要求1的方法,进一步包括a)分割每个子区域为多个更小的子区域;和b)对于所述网络,标识连接一组在特定子区域内包含所述网络引脚的更小的子区域的第二路径,其中所述第二路径具有至少部分是对角的布线边。
54.根据权利要求53的布线方法,其中所述集成电路区域是较大集成电路区域一部分的第一集成电路区域,所述较大的集成电路区域包括其它集成电路区域。
55.根据权利要求54的布线方法,其中所述网络包括在较大集成电路区域的其它集成电路区域中其它的引脚,其中更高层的布线连接所述较大集成电路区域的所述集成电路区域,所述较大集成电路区域包含所述网络的所述引脚。
56.根据权利要求55的布线方法,其中所述组引脚包括说明所述更高布线到所述第一集成电路区域的传播的虚拟引脚。
57.一种执行布线的方法,包括a)接收集成电路布局的特定区域;b)分割所述区域为多个子区域,其中多个对角和非对角布线路径存在于所述子区域之间,其中所述相对于第一组线界定对角布线路径,并且相对于第二组线界定所述非对角布线的路径。
58.根据权利要求57的方法,其中每个布线路径具有特定的容量,所述方法进一步包括a)计算每个特定的对角布线路径的容量;和b)计算每个特定的非对角布线路径的容量;其中所述对角布线路径的容量不同于所述非对角布线路径的容量。
59.根据权利要求58的方法,其中所述第一网格包括多个对角边,并且所述第二网格包括多个非对角边,其中每个特定的对角布线路径与特定的对角边相交,并且每个特定的非对角布线的路径与特定的非对角边相交,其中计算每个特定的对角布线路径的容量包括从所述路径相应的对角边的长度中推导出所述特定的对角布线路径的容量,其中计算每个特定的非对角布线的路径的容量包括从所述路径相应的对角边的长度中推导出所述特定的非对角布线路径的容量。
60.根据权利要求59的方法,其中所述对角和非对角边的长度是不同的。
61.根据权利要求59的方法,其中每个特定的对角边连接特定的一对相邻子区域的中心,所述相邻的子区域是彼此相对以对角地成直线。
62.根据权利要求59的方法,其中所述集成电路布局包括多个相互连接线层,每层具有特定的间距值;其中每个特定的布线路径是在所述层的特定一层上;其中计算每个特定的对角布线路径的容量包括由所述特定的对角布线路径相交的所述对角边的长度除以所述路径层的间距值;其中计算每个特定的非对角布线路径的容量包括由所述特定的非对角布线路径相交的非对角边的长度除以所述路径层的间距值。
63.根据权利要求57的方法,其中所述子区域是四边子区域,其中所述布线路径包括±45°路径和曼哈顿路径,其中相对于形成第一直线网格的第一组线条界定所述曼哈顿布线路径,并且相对于形成第二直线网格的第二组线界定所述±45°对角布线路径,所述第二直线网格相对于所述第一网格为45°。
64.一种对电路布局区域中的网络界定布线的方法,所述方法包括a)使用第一组线去测量布线的长度;b)使用第二组线条去测量布线的稠密;其中在第一组中的至少一些线不在所述第二组中。
65.根据权利要求64的方法,其中所述第二组线界定多个稠密边,其中使用所述第二组线包括测量路径越过所述稠密边的稠密。
66.根据权利要求65的方法,其中所述布线具有与所述稠密边相交对角边,其中测量越过稠密边的布线的稠密包括测量越过所述稠密边的所述对角布线的稠密。
67.根据权利要求66的方法,其中所述路径进一步具有横穿所述稠密边的等级或者垂直边,其中测量所述路径越过所述稠密边的稠密进一步包括测量所述等级或者垂直路径边越过所述稠密边的稠密。
68.根据权利要求64的方法,其中每个网络具有一组引脚,所述方法进一步包括a)使用第三组线去分割所述区域为第一组子区域;b)对于每个网络,标识一个穿越一组包含所述网络引脚组的第一组子区域的布线。
69.根据权利要求68的方法,其中所述第二和第三组线是相同的。
70.根据权利要求64的方法,其中每个网络具有一组引脚,其中所述第一组线条界定第一组子区域,所述方法进一步包括对于每个网络,标识一个穿越一组包含所述网络引脚组的第一组子区域的布线;其中每个路径具有一组布线线段,并且每个路径线段穿过所述第一组子区域中的两个子区域。
71.根据权利要求70的方法,进一步包括通过对在所述布线线段的布线组中的每一布线线段求和来测量每个布线的长度。
72.根据权利要求71的方法,其中使用所述第二组线包括测量越过所述第二组线的布线的稠密。
73.根据权利要求72的方法,其中所述第二组线界定多个稠密边,其中测量所述布线的稠密包括测量越过所述稠密边的布线的稠密。
74.根据权利要求73的方法,进一步包括一旦完成布线,仅相对于经过所述稠密边的布线线段指定每个布线。
75.根据权利要求70的方法,其中标识用于每个网络的布线包括在包含所述网络引脚的第一组子区域开始,连续地指定布线线段,所述布线线段使所述布线扩展新的第一组子区域直到所述布线穿过包含所述网络引脚的所有子区域组。
76.根据权利要求75的方法,进一步包括在每个布线线段的扩展上计算长度成本;对于越过第二组线的布线线段的每个扩展,基于所述第二组线条的稠密计算稠密成本。
77.根据权利要求75的方法,其中指定第一布线线段包括查验多个有可能布线线段扩展;其中对于每个有可能布线线段扩展计算长度成本;其中如果所述可能布线线段扩展与第二组线相交,基于所述第二组线的稠密计算稠密成本。
全文摘要
本发明致力于布线方法和装置。一些实施例提供了一种使用对角布线的布线方法。这个方法在电路布局内对若干网络布线。在该区域中每个网络包括一组引脚。该方法最初分割该区域为若干子区域。对于在该区域中每个特定网络,该方法然后标识连接该子区域的布线,该子区域包含来自该特定的网络引脚组的引脚。一些标识的布线具有至少部分是对角的边。
文档编号H01L21/82GK1520565SQ01822234
公开日2004年8月11日 申请日期2001年12月6日 优先权日2000年12月7日
发明者S·德格, O·伯塞特, A·卡尔德威, E·嘉克, J·A·法兰高, 赵寒义, S 德格, 峦, 法兰高 申请人:凯登斯设计系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1