CN1604094A - 线长优化的绕障碍的直角布线树方法 - Google Patents

线长优化的绕障碍的直角布线树方法 Download PDF

Info

Publication number
CN1604094A
CN1604094A CN 200410090885 CN200410090885A CN1604094A CN 1604094 A CN1604094 A CN 1604094A CN 200410090885 CN200410090885 CN 200410090885 CN 200410090885 A CN200410090885 A CN 200410090885A CN 1604094 A CN1604094 A CN 1604094A
Authority
CN
China
Prior art keywords
node
limit
ant
obstacle
trajectory diagram
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 200410090885
Other languages
English (en)
Other versions
CN100336065C (zh
Inventor
经彤
洪先龙
胡昱
冯哲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CNB2004100908855A priority Critical patent/CN100336065C/zh
Publication of CN1604094A publication Critical patent/CN1604094A/zh
Application granted granted Critical
Publication of CN100336065C publication Critical patent/CN100336065C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

线长优化的绕障碍的直角布线树方法属于ICCAD技术领域,其特征在于:它先根据给定的线网端点和障碍构造轨迹图,然后依次先简化轨迹图上所有度数为2的非线网端点及其相关边;又根据与每个凸角顶点相连的两个凹角顶点的情况来简化凸角顶点及其相关边,再简化所有度数为1的线网端点及其相关边,完成轨迹图简化;再采用蚁群方法构造树,直到只存活一只蚂蚁时得到一个轨迹图上的完整解;接着按上述步骤重复迭代到最大次数为止,从得到的所有完整解中找出最优解并恢复所有度数为1的线网端点及其相关边,得到一个完整的直角布线树。它适合处理大于或等于两端点的线网,能处理复杂障碍的情况;端点数小于100时,线长结果及处理效率都好。

Description

线长优化的绕障碍的直角布线树方法
技术领域
集成电路计算机辅助设计即IC CAD技术领域,尤其超大规模集成电路布线设计领域。
背景技术
在集成电路(IC)设计中,物理设计是其中主要的一环,也是最耗时的一步。与物理设计相关的计算机辅助设计技术称为布图设计。在布图设计中,布线是一个极为重要的环节。
集成电路的设计规模目前正由超大规模(VLSI)、甚大规模(ULSI)向G规模(GSI)方向发展,并出现了系统级芯片(SOC)的设计概念。最小直角Steiner树(rectilinear Steinerminimal tree,RSMT)构造方法的研究是VLSI/ULSI/GSI/SOC布图设计、尤其是布线研究中的一个重要问题。而在实际布线过程中,由于宏模块、知识产权(IP)模块以及预布线等都将成为障碍,使得考虑障碍的RSMT方法成为一个非常值得研究的问题。然而到目前为止,人们的研究多集中于无障碍的情况,相比之下对于带障碍的RSMT方法的研究还相对空白,有必要进行深入的研究。针对布线的实际应用,考虑障碍情况进行Steiner树构造方法的研究是布线中的关键问题之一,具有很大的实际意义。
在已报导和所能查阅到的国内外相关研究中,关于“考虑障碍的直角Steiner树构造方法”的研究情况可列举、分析、总结如下:
对于线网仅含有两个端点这种比较简单的情况,人们做了不少研究,而且其中已经有一些比较成熟的方法。
Lee于1961年提出了迷宫方法([C.Y.Lee,An Algorithm for Connections and ItsApplications,IRE Trans.On Electronic Computers,1961,346-365.]),可用于求解障碍下的两端线网布线中两端点之间的最短路径。但由于该方法在整个搜索中总是对称的,这增加了搜索所需的时间和存储空间。1978年,Soukup提出了一个带有固定意义的非对称搜索方法([J.Soukup,Fast Maze Router,Proc.Of 15th Design Automation Conference,1978,100-102.]),提高了搜索效率。但该方法不能保证找到最优解。另一个改进的方法是Hadlock于1977年提出的,称为Hadlock最小迂回方法([Hadlock,A Shortest PathAlgorithm for Grid Graphs,Networks,1977.7,323-334.])。上述两种改进的迷宫方法的时间与空间复杂度均为O(h×w),其中h×w是网格的总数目。迷宫方法的最大缺点是要搜索较大的布图空间,所以要花费较大的时间和存储空间。它的优点是能在任何有解的情况下保证找到一个解。
为了克服迷宫方法的缺点,Hightower于1969年([D.W.Hightower,A solution to theLine Routing Problem on the Continuous Plane,Proc.Of the 6th Design AutomationWorkshop,1969,1-24.]),Mikami和Tabuchi于1968年([Mikami K.and Tabuchi K.,AComputer Program for Optimal Routing of Printed Circuit Connectors,IFIPS Proc.,1968,H47,1475-1478])分别提出了线搜索方法。它的计算时间和空间复杂度均为0(L),其中L为该方法所产生的线数。
另外一种比较有代表性的方法是文献[J.M.Ho,M.Sarrafzadeh and A.Suzuki,“An ExactAlgorithm For Single-Later Wire-Length Minimization”,Proceedings of IEEEInternational Conference of Computer Aided Design,pp.424-427,1990.]提出的单层详细布线中的最小化两端线网的方法。它使用一种称为“同伦变换(homotopictransformation)”的方法对线网进行优化变换,所谓的“同伦”就是不改变线网的整体布局。作者提出:当路径中不存在“空U”(三段连续的线段构成的形如字母U的线路称为一个“U”,“空U”即指在U形线路的中间那段向U内部仍有上移空间)时,便可断定为最短路径。这个方法只适用于两端线网的处理,它能得到最优路径。
三篇文献:[周智,有障碍的Manhattan空间中的最小Steiner树问题(硕士学位论文)。合肥:中国科学技术大学,1998.]、[周智,陈国良,顾钧。用O(tlogt)的连接图求有障碍时的最短路径。计算机学报,1999,22(5):519-524.]和[周智,蒋承东,黄刘生,顾钧,“用Q(t)的广义连接图求有障碍时的最短路径”,软件学报,2003,14(2):pp.166-174.]中引入了广义连接图GG,其平均复杂度为Θ(t),其中t为障碍的极边数(多边形相邻的三条边e1(x1,x2),e2(x2,x3),e3(x3,x4),若 正好反向,则e2即为极边)。GG在复杂度上有一定的优势。在这些文献中提出了利用GG来构造两端线网的最小Steiner树,另外也提出GG可以用来构造多端线网,但是他们还没有具体实现。
相比之下,人们针对多端点线网提出的考虑障碍的直角Steiner树方法还相对很少。与两端点线网相比,多端点情况要复杂得多。尤其是在有障碍的情况下,很难在人们可以接受的时间内求得最优解。本专利申请所涉及的方法就是针对多端点线网的一种启发式方法,它能够在较短的时间内求解大规模线网在不同形状障碍下的Steiner树。以下将列举目前已有的考虑障碍的多端点线网的方法,并与本专利申请所涉及的方法进行比较,以指出他们之间的区别。
文献[Chen Desheng,Sarrafzadeh M.A wire-length minimization algorithm forsingle-layer layout[A].In:Proceedings of IEEE/ACM International Conference ofComputer Aided Design(ICCAD),Santa Clara,USA,1992.390-393.]对单层对的布图中的多端线网进行了研究,提出了基于TPT转换和“线段可见性”概念下的最小化方法。其时间复杂度为O(max(mn,mlogm)),其中n和m分别是指定待连线网N和全部线网集L的线段数目。该方法比较简单,它在转换过程中保持了“拓扑结构”不变(topology preserving)。但拓扑结构的固定又限制了TPT转换的自由度,使结果在很大程度上依赖于转换前的初始布线,因而在某些情况下结果不太理想。
文献[Yukiko KUBO,Yasuhiro TAKASHIMA,Shigetoshi NAKATAKE,Yoji KAJITANI.Self-reforming routing for stocha stic search in VLSI interconnection layout[A].In:Proceedings of IEEE/ACM Asia-Pacific Design Automation Conference(ASP-DAC),Yokohama,Japan,2000.87-92.]提出了使用名称为flip和dual-flip技术来优化原有布线。在这篇文献中证明了利用flip和dual-flip可将连接线网的任意一棵树转换为任何其他形状的树,这使得该方法的转换比上述的TPT转换有更大自由度。但由于该方法采用模拟退火技术,使得执行时间非常长。它的时间复杂度大大于本专利申请所涉及的方法。
文献[Zheng S Q,Lim J S,Iyengar S S.Finding obs tacle-avoiding shortest pathsusing implicit connection graphs[J].IEEE Transaction on Computer-Aided Design ofIntegrated Circuits and Systems.1996,15(1):103-110.]引入一个强连接图GC,其复杂度为O(e2),其中e为障碍的总边数。它同时采用方法的名称为A*和基于“detour”值不改向进行启发。另外,三项专利:[Ranko Scepanovic,Cupertino;Cheng-Liang Ding,SanJose.Toward optimal steiner tree routing in the presence of rectilinear obstacles,5491641,Feb.13,1996],[Ranko Scepanovic,Cupertino;Cheng-Liang Ding,SanJose.Towardoptimal steiner tree routing in the presence of rectilinear obstacles,5615128,Mar.25,1997],和[Ranko Scepanovic,Cupertino;Cheng-Liang Ding,SanJose.Toward optimalsteiner tree routing in the presence of rectilinear obstacles,5880970,Mar.9,1999]也都是利用一个相似的强连接图“逃逸图graph”,通过迷宫方法或者是对最小生成树(spanning tree)进行Steiner化的方法来求有障碍下多点线网的Steienr树。这一类方法在障碍情况比较简单的情况下会有较好的求解效果,但在障碍形状较复杂、边数较多的情况下,它们所基于的强连接图将会变得非常复杂,求解效率就比较差。因此,这一类方法仅适用于障碍比较简单的情况。而本专利申请所涉及的方法能适用于各种复杂的障碍情况。
文献[Liu Jian,Zhao Ying,Shragowitz E,Karypis G.A polynomial timeapproximation scheme for rectilinear Steiner minimum tree construction in thepresence of obstacles[A].In:Proceedings of IEEE Internat ional Symposium onCircuits and Systems(ISCAS),Scottsdale,USA,2002.781-784.]引入了几何优化方法中名为Guillotine-cut的技术。该方法在无障碍时复杂度为多项式时间。虽然该方法可以应用到有障碍的情况,但求解就不能在多项式时间内完成,还需进行复杂度简化的研究工作。
文献[Ganley J L,Cohoon J.P.Routing a multi-terminal critical net:Steinertree construction in the presence of obstacles[A].In:Proceedings of IEEEInternational Symposium on Circuits and Systems(ISCAS).London,UK,1994.113-116.]提出的观点是:由于3点和4点的情况比较简单,因此在多点情况下可将它们按一定的要求分成3点组(greedy 3-Steinerization,G3S)或4点组(greedy 4-Steinerization,G4S)来实现。对于有障碍下的Steiner树问题,G3S的时间复杂度为O(k2n),而G4S的时间复杂度为O(k3n2)。其中n是可选的Steiner点数目,k是执行迭代的次数,效率较低。batched3-Steinerization(B3S)成批地选择三点组,时间复杂度为O(rkn),其中r为反复的次数,提高了求解效率。但如何选择三点组或四点组是这个方法的核心问题,它决定着该方法求解结果的好坏。在无障碍的情况下,通常采取的方法是将比较靠近的点归为一组,这个方法是比较合理的,得到的结果也比较好。但是在有障碍的情况下,选择点组时就需要综合考虑障碍以及点的分布情况。因此,如何选择合适点组的问题就复杂很多。然而,在该文献中并没有针对这个核心问题给出明确的解决方法。虽然该方法的时间复杂度还不是很高,但是需要再做后续优化工作才能使该方法得到优化的结果。
文献[曹跃胜.PCB/MCM设计中性能驱动的基于形状布线算法.计算机辅助设计与图形学学报13(7):594-597,2001]提出了一种性能驱动的基于形状布线方法,但是没有给出绕障碍方法的具体实施过程和实验结果。
专利[洪先龙,经彤,杨旸,朱祺,王垠.标准单元总体布线时障碍下的直角Steiner树方法.CN1529268A.]提出的时间复杂度为O(mn)的方法。该方法的运行时间、结果都比较理想,是目前公布的效果最理想的方法。但该方法还存在不足:处理障碍的形状局限在凸多边形的情形,绕障碍的方法依赖于初始Steiner树的构造结果,不适用于规模较大的线网。本专利申请所涉及的方法除了与该方法的思路不同外,我们能求得更优的线长结果,请具体参见后面的“本发明方法效果的实验数据”中给出的实验数据对比及其说明。
最新的进展是,文献[Yu Hu,Zhe Feng,Tong Jing,Xianlong Hong,Yang Yang,Ge Yu,Xiaodong Hu,Guiying Yan,“FORst:A 3-Step Heuristic for Obstacle-AvoidingRectilinear Steiner Minimum Tree Construction”.In:Proceedings of ISC&I’04,Zhuhai,China,1017-1021.]提出的3-step的方法。该方法能够处理各种形状的障碍,而且能适用于很大规模的线网,但是对于超大规模集成电路中的常规线网(端点数小于100)的处理效果并不理想。本专利申请所涉及的方法除了与该方法的思路不同外,我们能求得更优的线长结果,请具体参见后面的“本发明方法效果的实验数据”中给出的实验数据对比及其说明。
另外,文献[黄林,赵文庆,唐璞山.一种含浮动端点的斯坦纳树的构造方法.计算机辅助设计与图形学学报.Vol.10,No.6,1998.11.]、[洪先龙.一种以时间为优化目标的力指向Steiner树算法.半导体学报,16(3):218-223,1995]、[洪先龙.一种以电性能优化为目标的Steiner树算法.计算机学报.18(4):266-272,1995]、[鲍海云,洪先龙,蔡懿慈,乔长阁.基于Sakurai模型的时延驱动Steiner树算法.半导体学报.1999,20(1):41-46]、[Yeun TsunWong.Rectilinear Steiner’s Problem and MRST Routing.广东工程学院学报.13(1):1-4,1996]、[马军、杨波、马绍汉.近乎最佳的Manhattan型Steiner树近似算法.软件学报,11(2):260-264,2000]在具体分析和方法描述中,没有针对有障碍情况的说明。
已进行过“新颖性检索”,检索报告见附件1。
发明内容
本发明的目的在于提出一种线长优化的绕障碍的直角布线树方法。
本发明的总体思路是:首先给定连接点和障碍构造轨迹图;然后对此轨迹图进行简化,最后用在此简化后的轨迹图上构造直角Steiner树。
本发明的思路:根据给定连接点和障碍构造轨迹图,然后提出对此轨迹图进行简化的方法,最后用在此简化后的轨迹图上利用蚁群方法构造直角Steiner树。具体而言,它依次含有以下步骤:
(1)初始化;
(2)构造轨迹图:根据线网的端点和给定的障碍构造轨迹图;
(3)利用“轨迹图简化”方法对此轨迹图进行简化;
(4)以简化后的轨迹图为连接图,采用蚁群方法(ACO)在此连接图上构造Steiner树;
本发明的特征在于,它依次含有以下几个步骤:
(1)初始化,计算机从外部读入如下预设数据:
线网的信息:线网编号,线网中需要连接引脚的物理位置,用二维笛卡儿坐标表示,即为端点;
障碍信息:形成障碍的多边形的点列;
在简化后的轨迹图上构造Steiner树时,采用蚁群方法构造子树计算蚂蚁m下一个要到达的结点vj应满足下面公式:
v j = max v k ( [ τ v i , v k ] α · [ η v i , v k m ] β ) , v k ∈ N
其中,集合N是结点集合,它是由所有通过轨迹图上的边与当前蚂蚁m所在的结点相连、且不是蚂蚁m所访问过的结点组成的集合;
ηvi,vj m是当前蚂蚁m在结点vi时与蚂蚁m相连的结点中的某一结点vj的可见度:
η v i , v j m = 1 w ( v i , v j ) + γ · ψ v j m
其中,ψvj m是从结点vj到当前所有其他蚂蚁已经访问过的结点的最短距离,为已知量,w(vi,vj)是从结点vi到结点vj的长度,τvi,vj是边(vi,vj)上的信息素浓度的更新值:
               τvi,vj=(1-ρ)·τvi,vj+ρ·Δτvi,vj
其中,Δτvi,vj是在每选定一边时,其上所增加的信息素的量:
其中,f(St)是当前所保留的最小直角Steiner树的总线长,Et是它的边集合;
上述的α、β、γ、ρ、Z皆为常量,预先设定,其范围如下:
α∈[1,5],β∈[1,5],γ∈[1,4],ρ∈[0,1],Z∈[1,∝]
其中,α、β、γ、Z是整数,ρ是实数,这里ρ表示信息素蒸发的速率,α、β分别表示信息素和几何距离的调整因子,γ表示蚂蚁移动步长与相互位置之间的调整因子,Z用来控制信息素τvi,vj的增量;
(2)根据线网的端点和给定的障碍构造轨迹图,所述轨迹图是根据线网端点和给定障碍的极边生成的一种连接图,如果障碍位于某条障碍边所在的直线的同侧,那么该障碍边就是一条极边,所述障碍边是形成障碍的多边形中的一条边,构造轨迹图的步骤如下:
(2.1)根据给定障碍的点列得到水平极边和竖直极边序列;
(2.2)对于竖直极边序列中的每条极边,向上、下两端延展,直到遇到障碍边为止;
(2.3)对于水平极边序列中的每条极边,向左、右两端延展,直到遇到竖直极边序列中的边,或者遇到障碍边为止;
(2.4)对于每个线网端点,向上、下、左、右四个方向作射线,每个方向一旦遇到上述极边序列中的边或障碍边就停止延伸;
(2.5)记录以上步骤(2.2)-(2.4)所产生的交点和边,所述的边是指交点所在的上述极边序列中的边或障碍边,把交点连接成轨迹图;
(3)利用“轨迹图简化”方法对该轨迹图进行简化,其步骤如下:
(3.1)构造一个先进先出队列q:将轨迹图上所有度数为2的非线网端点的交点,也称为结点,送入队列q,所述的“度”是指该结点所连接的边数;
(3.1.1)从队列q中取出队首的那个元素u,按照如下步骤进行简化:
(3.1.2)设u是轨迹图上一个非线网端点的结点,结点u仅仅与两条正交边e1和e2相接,e1和e2形成的矩形记为R1,如果矩形R1的另外两边在轨迹图中存在,则e1和e2从轨迹图中删除;
(3.1.3)设边e1和边e2除结点u以外的另一个结点分别是u1和u2,如果在步骤(3.1.2)中边e1和边e2被删除,则将结点u1和结点u2加入队列q;
(3.1.4)如果队列q不为空,则继续从步骤(3.1.1)开始执行;
(3.2)将轨迹图上所有的凸角顶点送入队列q,这里首先定义凸角顶点和凹角顶点这两个概念;凸角顶点/凹角顶点的定义是:设结点a是构成障碍点列中的一个元素,如果与结点a相邻的两结点p1和p2使得线段 穿过障碍内部,那么结点a就是一个凸角顶点,否则结点a就是一个凹角顶点;
(3.2.1)这时队列q中的所有结点都是凸角顶点,按照如下步骤情况进行简化:
(3.2.2)从队列q中取出队首的那个元素,显然此元素是障碍的一个凸角顶点,如果与该凸角顶点相邻的两点都是凹角顶点,R2是以与上述两个凹角顶点相邻的另外两个结点为对角线构成的矩形,如果R2的不包含与上述凹角顶点相连的那两边在轨迹图中存在,那么所述凸角顶点及与其相邻的两个凹角顶点、所述凸角顶点和所述两个凹角顶点之间的连线、所属两个凹角顶点与它们各自相邻的两个结点之间的连线都可以从轨迹图中删除;
(3.2.3)如果队列q不为空,则继续从步骤(3.2.1)开始执行;
(3.3)第(3.3)步对所有度数为1的端点和与它们相连的边进行简化;
(3.3.1)将所有度数为1的端点送入队列q;
(3.3.2)定义并初始化一个数组tRecorder,该数组的每个元素都是一个二元组,包含一个结点和与这个结点相连的边;
(3.3.3)从队列q中取出队首的那个元素t,按照如下步骤情况进行简化:
(3.3.2)如果与端点t相邻的边为(t,t’),则从轨迹图中删除端点t和边(t,t’),并将结点t’设置为新端点,再将t’和边(t,t’)加入数组tRecorder中;
(3.3.3)如果队列q不为空,则继续从步骤(3.3.1)开始执行;
(4)在简化后的轨迹图上构造Steiner树:采用蚁群方法构造树,其步骤依次如下:
(4.1)设定:轨迹图的边上的初始信息素值,用τ表示,τ即为信息素值;
(4.2)在上述步骤(3)简化后的轨迹图的各端点处放置1只蚂蚁,并予以编号,用antName表示;同时,每一只蚂蚁维护一个禁忌表,用于记录已经访问过的结点;设定迭代次数的最大值;
(4.3)在当前存活的所有蚂蚁中随机选择一只蚂蚁m,通过下式计算并选择每个蚂蚁m要到达的边与其相邻结点的概率,vi表示蚂蚁m所在的结点,vj表示结点vi的相邻结点,(vi,vj)表示连接结点vi和结点vj的边,蚂蚁m选择结点vj作为下一个要到达的结点当且仅当:
v j = max v k ( [ τ v i , v k ] α · [ η v i , v k m ] β ) , v k ∈ N
其中,集合N是结点集合,它是由所有通过轨迹图上的边与当前蚂蚁m所在的结点相连、且不是蚂蚁m所访问过的结点组成的集合;
ηvj m:当前蚂蚁m在结点vi时,与蚂蚁m相连的结点中的某一结点vj的可见度:
η v i , v j m = 1 w ( v i , v j ) + γ · ψ v j m
ψvj m:从结点vj到当前所有其他蚂蚁已经访问过的结点的最短距离,为已知量,w(vi,vj):从结点vi到结点vj的长度,τvi,vj:边(vi,vj)上的信息素浓度的更新值:
τvi,vj=(1-ρ)·τvi,vj+ρ·Δτvi,vj
Δτvi,vj:在每选定一边时,其上所增加的信息素的量:
Figure A20041009088500123
其中,f(St)是当前所保留的最小直角Steiner树的总线长,Et是它的边集合;
上述的α、β、γ、ρ、Z皆为常量,预先设定,其范围如下:
α∈[1,5],β∈[1,5],γ∈[1,4],ρ∈[0,1],Z∈[1,∝]
其中,α、β、γ、Z是整数,ρ是实数,这里ρ表示信息素蒸发的速率,α、β分别表示信息素和几何距离的调整因子,γ表示蚂蚁移动步长与相互位置之间的调整因子,Z用来控制信息素Tvi,vj的增量;
上述tabulist是禁忌表, k ∉ tabulist ( m ) 表示k点不在m的禁忌表中;
(4.4)依照步骤(4.3)得到的蚂蚁m要通过的边(vi,vj);
(4.5)把结点vj添加到蚂蚁m的禁忌表中;
(4.6)若蚂蚁m通过边(vi,vj)到达下一结点时遇到另一只蚂蚁m’,就把蚂蚁m从蚂蚁集中去掉,并把m的禁忌表中的结点添加到另一只蚂蚁m’的禁忌表中,再重新为蚂蚁m’分配一个新位置,这个位置是蚂蚁m’的禁忌表中的一个结点,而且这个结点距离其他蚂蚁禁忌表中的结点距离最近;否则,蚂蚁m暂时停止移动,即每个蚂蚁每次只移动一步,在原地等待下一次被随机选中;
(4.7)当存活的蚂蚁只剩一只时,更新该次循环中所有蚂蚁经过的边上的信息素的含量;否则,转到步骤(4.3);
(4.8)迭代次数加1,重复步骤(4.2)-(4.8),一直迭代到设定的迭代次数的最大值为止;
(5)从数组tRecorder中依次取出每个元素,对于每个元素所包含的结点t’,根据它所对应的边(t,t’),在得到的Steiner树上还原端点t和边(t,t’)。
本发明的方法有如下特点:
首先,本发明的方法能处理多端点(包括能处理两端点)的线网;能处理复杂障碍(包括凹多边形障碍)的情况。即本发明方法的适用范围更广。同时,本发明方法并不像有些文献那样只给出了一个设想或思路雏形,而是一个能在具体装置(工作站)上运行的为布线过程服务的IC CAD工具,有具体的实施描述。
其次,与已有的考虑障碍的多端点线网Steinet树构造方法相比,本发明的方法在处理实际超大规模集成电路中的线网时有更好的性能。本发明方法能够在30秒之内计算出100个端点线网绕10个直角障碍的情况,对于7个端点以下的情况,我们的方法都能在0.1秒左右求出结果;同时用本方法求解的线长结果也十分理想。本发明的方法在线网端点数小于100时的效果上优于已有方法,请具体参见“本发明方法效果的实验数据”中给出的实验数据说明。
本发明方法效果的实验数据
进行实验的计算机系统具体描述如下:
一台Sun公司的V880型工作站;
Unix操作系统;
C++编程语言;
Vi编辑器、gcc编译器、gdb调试工具等;
在测试中,设置参数如下:蚁群方法:α=1,β=1,γ=1,ρ=0.5,Z=10000,MAX_LOOP=500。
MCNC电路中的线网作为测试例子,针对下述9个线网,本发明方法与最新研究进展的方法——Yang Yang等的“2-step”方法[Yang Yang,Qi Zhu,Tong Jing,Xianlong Hong,YinWang.″Rectilinear Steiner Minimal Tree among Obstacles.In:Proceedings of IEEEASICON,Beijing,China,2003,348-351.]的测试结果比较列出如下,对每个实例测试10次,把平均情况、最差/好情况分别记录如下:
NetID Terminal Number 2-step[2]                Ours[1]
    Best     Ave     Worst
    C2:22     2     0%     0%     0%     0%
    C2:33     2     0%     0%     0%     0%
    C2:2     3     0%     0%     0%     0%
    C2:17     3     1.87%     0%     0%     0%
    C2:504     4     3.80%     0%     0%     0%
    C2:59     3     4.46%     0%     0%     0%
    C2:609     4     4.89%     0%     0%     0%
    C2:67     5     5.48%     0%     0%     0%
    C2:177     6     7.28%     0%     0.1%     0.2%
    C2:98     4     21.4%     0%     0%     0%
    C2:117     3     1.87%     0%     0%     0%
    C2:18     4     3.80%     0%     0.06%     0.5%
    Average     /     5.31%     0%     0.08%     0.35%
[1]Ours:本发明方法生成的有障碍下的RSMT长度的冗余度[3]。
[2]“2-step”方法求解生成的有障碍下的RSMT长度。
[3]冗余度=(结果Steiner树总线长-最优Steiner树总线长)/最优Steiner树总线长*100%。这里最优Steiner树总线长是手工计算的。
[4]Best,Ave,Worst分别是最好结果、平均结果和最差结果。
从上述测试结果可计算得到本发明方法求解的布线树的线长冗余度的平均值为0.08%,远小于2-step的冗余度(5.31%)。
利用随机生成的测试例子,本发明方法还与Yu Hu等的“FORst”方法[Yu Hu,Zhe Feng,Tong Jing,Xianlong Hong,Yang Yang,Ge Yu,Xiaodong Hu,and Guiying Yan,″A 3-StepHeuristic for Obstacle-Avoiding Rectilinear Steiner Minimum Tree Construction″,inProc.of ISC&I′04,Zhuhai,China,pp.1017-1021.]的测试结果比较列出如下:
    Terminal Number   Obstacle Number[5]     Our[6]     FORst[7]
    7     7     19380     22700
    8     7     21040     24090
    9     9     25380     27450
    10     9     26990     27330
    12     10     31630     33770
    16     10     41350     43780
    20     10     43630     45790
    30     10     44970     46120
    50     10     53260     55410
    70     10     68390     70140
    100     10     80040     81830
[5]障碍数量。
[6]用本方法求得的结果树的线长。
[7]用FORst方法求得的结果树的线长。
G4S是现有方法中能够高效处理多端点绕障碍的Steiner的方法。
可以看出,当端点个数小于100的时候,我们的方法优于FORst。
附图说明
图1:本发明核心部分流程图。
图2:步骤2的流程图。
图3:步骤3的总流程图。
图4:外部冗余结点简化方法流程图。
图5:内部冗余结点简化方法流程图。
图6:端点简化方法流程图。
图7-图17:net6的构造过程示意图:
图7:初始布局。
图8:竖直极边延伸。
图9:水平极边延伸。
图10:端点延伸:
图11:构造出的轨迹图。
图12:在轨迹图中标注所有2度结点。
图13:外部冗余结点简化后结果。
图14:内部冗余结点简化后结果。
图15:端点简化后结果。
图16:利用蚁群方法得到的Steiner树。
图17:最终结果布线树。
具体实施方式
首先具体分析本专利申请涉及的“线长优化的绕障碍的直角布线树方法”的核心思想。
在将电路的障碍和线网的信息读入并进行处理后,本方法核心的部分就是构造Steiner树的过程,总流程框图如图1所示。该方法的思路与以往的方法不同,首先给定连接点和障碍构造轨迹图;然后对此轨迹图进行简化,最后在此简化后的轨迹图上构造直角Steiner树。。以下分别介绍方法的具体步骤。
第一步:构造轨迹图:根据线网的端点和给定的障碍构造轨迹图,相当于前面发明思路中的第(2)步。这里轨迹图是根据线网端点和给定障碍的极边生成的一种连接图,如果障碍位于某条障碍边所在的直线的同侧,那么该障碍边就是一条极边。该步流程图如图2所示。
我们采用论文[Y.F.Wu,P.Widmayer,M.D.F.Schlag,and C.K.Wong.“RectilinearShortest Paths and Minimum Spanning Trees in the Presence of Rectilinear Obstacles”,IEEE Trans on Computers,1987,36(3):pp.321-331.]提出的方法构造轨迹图。
根据线网的端点和给定的障碍构造轨迹图的步骤如下:首先,根据给定障碍的点列得到水平极边和竖直极边序列;然后,对于竖直极边序列中的每条极边,向上下两端延展,直到遇到障碍边为止;再对于水平极边序列中的每条极边,向左右两端延展,直到遇到竖直极边序列中的边,或者遇到障碍边为止;接下来,对于每个线网端点,向上下左右四个方向作射线,每个方向一旦遇到极边序列中的边或障碍边就停止延伸;最后,记录以上动作所产生的交点和边,连接成轨迹图。
第二步:这一部分的主要任务就是利用“轨迹图简化”方法对此轨迹图进行简化,相当于前面发明思路中的第(3)步,该步骤流程图如图3所示,其具体步骤如下:
首先简化外围冗余结点,该步骤流程图如图4所示:构造一个先进先出队列q,并将轨迹图上所有度数为2的非线网端点的结点送入队列q;然后,从队列q中取出队首的那个元素u,设u是轨迹图上一个非线网端点的结点,u仅仅与两条正交边e1和e2相邻,e1和e2形成的矩形记为R1,如果矩形R1的另外两边在轨迹图中存在,则e1和e2可以从轨迹图中删除;设边e1和边e2除u以外的另一个结点分别是u1和u2,如果在边e1和边e2被删除,且标记结点u1和u2的状态为未访问,则将结点u1和结点u2加入队列q,并且标记结点u1和u2的状态为已访问;如果队列q不为空,则继续从队列q中取出队首元素循环执行,直到队列为空。
下面简化内部冗余结点,该步骤流程图如图5所示:
这里首先定义凸角顶点和凹角顶点这两个概念;这里凸角顶点/凹角顶点的定义是:设点a是构成障碍点列中的一个元素,如果与点a相邻的两点p1和p2使得线段 穿过障碍内部,那么点a就是一个凸角顶点,否则a就是一个凹角顶点。
要简化内部冗余结点,首先,将轨迹图上所有的凸角顶点送入队列q,接下来从队列q中取出队首的那个元素D,如图12所示,显然D是障碍的一个凸角顶点,如果与凸角顶点D相邻的两点C和E都是凹角顶点,V4和V7分别是与C和E相邻的另外一个结点,R2是由结点V4和V7构成的对角线的矩形,如果R2的不包含线段 的那两边在轨迹图中存在,那么边(V4,C)、边(C,D)、边(D,E)、边(E,V7)和结点C、结点D、结点E都可以从轨迹图中删除;如果队列q不为空,则继续从队列q中取出队首元素循环执行,直到队列为空。
接下来简化端点,该步骤流程图如图6所示:首先,将所有度数为1的端点送入队列q,定义并初始化数组tRecorder,该数组的元素是一个结点和与这个结点相关的边;然后,从队列q中取出队首的那个元素t,如果与端点t相邻的边为(t,t’),则从轨迹图中删除端点t和边(t,t’),并将结点t’设置为新端点,再将t’和边(t,t’)加入数组tRecorder中;如果队列q不为空,则继续从队列q中取出队首元素循环执行,直到队列为空。
第三步:这一部分的主要任务就是在简化后的轨迹图上利用利用蚁群方法构造Steiner树,相当于前面发明思路中的第(4)步,其具体步骤如下:
蚁群方法是一种适用于多种NP-hard问题的启发式方法,它兼顾了贪婪方法和随机优化方法的优点,既保证了不过快地陷入到某个局部最优解,又保证了复杂度不会像模拟退火(SA)那么高。
具体到我们的方法,我们在每一个端点上放置一个蚂蚁,由其构成一个蚂蚁的集合。每一轮迭代,都首先任选一个蚂蚁,通过连接图上的与它相邻的边,移动到另一个相邻结点。每一次移动,所选蚂蚁都会在走过的边上留下信息素(trail),而路径上的信息素又会随着时间的推移而逐渐挥发。每一个蚂蚁同时维护着一个禁忌表(tabulist),用它记录下已访问过的结点,以避免重复访问而形成回路。当一个蚂蚁移动到另一个蚂蚁所经过的结点时,则将前者从蚂蚁集中去掉,并将它禁忌表中的结点添到后者的禁忌表中。这个选蚂蚁、选路径、更新信息素的过程持续到只剩下一只蚂蚁。记录下当前构造出的解。这算是一次迭代。进行多次迭代,每次迭代结束后与前面所构造的结果进行比较,保留下线长较小者,直到总线长不再变小,或是达到迭代次数的最大值(经过试验,我们把这个值设为500)。
蚂蚁是按照贪婪策略来选择下一步的目标的。这个策略取决于两个方面,一方面是蚂蚁在前面迭代中在路径上所留下的信息素浓度,另一方面是相连结点所对应的可见度。设当前蚂蚁m在结点vi,则相连结点中的结点vj的可见度可用下式来表达:
η v i , v j m = 1 w ( v i , v j ) + γ · ψ v j m
其中,γ是一个常量,ψvj m是从结点vj到当前所有其他蚂蚁已访问点的最短距离,它表征了以怎样的一个速度与其他点相连,w(vi,vj)是从结点vi到结点vj的长度。
边(vi,vj)上的信息素浓度的更新可用下式表征:
          τvi,vj=(1-ρ)·τvi,vj+ρ·Δτvi,vj                 (2)
其中ρ是一个常量,称之为蒸发速率,它表征了路径上的已有信息素挥发速度。而每选定一边,其上所增加的信息素的量为
Figure A20041009088500182
其中f(St)是当前所保留的RSMT的总线长。Et是它的边集合,Z是一个常量,表征整棵树上总的信息素的量。
至此,当前蚂蚁m选中边(vi,vj)当且仅当:
v j = max v k ( [ τ v i , v k ] α · [ η v i , v k m ] β ) , v k ∈ N - - - - - - - - - ( 4 )
其中集合N,是由所有通过连接图上的边与当前蚂蚁所在结点相连,并且不是它所访问过的结点组成,其中α、β为常数。
下面给出蚁群方法:
---------------------------------------------------------------------
初始化每一边上的信息素为p0;
设置当前的迭代次数为0;
while迭代次数<设定的迭代次数的最大值
在端点集中的每一个端点上放置一个蚂蚁,并将他们放入各自的禁忌表中。
while蚂蚁的数目>1
任选一蚂蚁m;
通过(1)式和(4)式,计算出选择每个与之相连的结点的概率;
依照贪婪策略,选出所要通过的边(vi,vj);
将结点vj添加到蚂蚁m的禁忌表中;
if当前蚂蚁m移动到另一只蚂蚁m’所经过的结点
then将蚂蚁m的禁忌表中的所有元素添加到m’的禁忌表中;
从蚂蚁集合中将m去掉再重新为蚂蚁m’分配一个新位置,
这个位置是蚂蚁m’的禁忌表中的一个结点,
而且这个结点距离其它蚂蚁禁忌表中的结点距离最近;
用(2)式和(3)式更新所有蚂蚁经过的边上的信息素含量。迭代次数加一;
---------------------------------------------------------------------
在实施中,规定公式(1)-(5)中的参数取值如下:
α=1,β=1,γ=1,ρ=0.5,Z=10000,MAX_LOOP=100。
第三步:从数组tRecorder中依次取出每个元素,对于每个元素所包含的结点t’,根据它所对应的边(t,t’),在得到的Steiner树上还原端点t和边(t,t’)。
下面结合一个MCNC的电路线网的例子,说明本方法的全过程,如下:
为了实现,或者说是具体实施本项发明,我们给出以下关于发明实施的描述。
实施本发明的计算机系统:本发明所设计的为布线服务的软件要在一个具体的计算机系统上得以实施,该计算机系统具体描述如下。
一台Sun公司的V880型工作站;
Unix操作系统;
C++编程语言;
Vi编辑器、gcc编译器、gdb调试工具等。
步骤(1):预备工作。读入线网信息、障碍信息并处理这些信息。下面是描述线网的文件:net 6(78,190)(343,113)(266,321);
——说明:线网描述文件的一般形式是:net net_id{(pin_x,pin_y)};
其中net_id表示线网号,(pin_x,pin_y)表示线网需要连接的引脚的坐标。
针对6号线网的障碍信息描述文件如下:
obs(151,76)(228,76)(228,153)(304,153)(304,208)(377,208)(377,285)(151,285);
——说明:障碍描述文件的一般形式是:obs{(x,y)};
其中(x,y)表示障碍多边形上的结点,点列的顺序是从左下角开始,沿着顺时针的方向依次排列。
图7为输入线网net6和障碍的示意图,图中给出了待连线网端点的坐标,以及障碍的各端点坐标,黑色实心点表示端点,空心点表示普通结点。
步骤(2):根据给定的障碍描述文件,利用下列判定方法得到极边序列:如果障碍位于某条障碍边所在的直线的同侧,那么该障碍边就是一条极边。据此,图7中的障碍边(A,B),(F,G),(G,H),(H,A)为极边,所以水平极边序列为(A,B)和(G,H),竖直极边序列为(F,G)和(H,A)。
下面,对于竖直极边序列中的每条极边,向上下两端延展,直到遇到障碍边为止。即,极边(H,A)和(F,G)向上下两端延展,由于始终没有遇到障碍边,则形成两条直线:直线(H,A)和直线(F,G),如图8所示。
再对水平极边序列中的每条极边,向左右两端延展,直到遇到竖直极边序列中的边,或者遇到障碍边为止。水平极边序列包含两条极边(A,B)和(G,H),其中极边(A,B)向左延伸没有遇到任何竖直极边序列中的边或者遇到障碍边,向右延伸遇到竖直极边序列中的边(F,G),则停止延伸,所以形成向左的射线;极边(G,H)向左右两端延伸没有遇到任何竖直极边序列中的边或者遇到障碍边,所以形成直线(G,H);水平极边序列延伸后的结果如图9所示。
接下来,对于每个线网端点,向上下左右四个方向作射线,每个方向一旦遇到极边序列中的边或障碍边就停止延伸。对于端点T1,向左延伸没有遇到任何极边序列中的边或者遇到障碍边,向右延伸遇到障碍边(H,A),停止延伸,向上延伸遇到水平极边序列中的边(A,B),停止延伸,向下延伸遇到水平极边序列中的边(G,H),停止延伸;对于端点T2,向左延伸遇到障碍边(B,C),停止延伸,向右延伸遇到竖直极边序列中的边(F,G),停止延伸,向上延伸遇到水平极边序列中的边(A,B),停止延伸,向下延伸遇到障碍边(E,F),停止延伸;对于端点T3,向左延伸遇到竖直极边序列中的边(H,A),停止延伸,向右延伸遇到竖直极边序列中的边(F,G),停止延伸,向上延伸遇到障碍边(G,H),停止延伸,向下延伸极边序列中的边,或者遇到障碍边;这样,端点延伸后的结果如图10所示。
然后,记录以上动作所产生的交点和这些交点产生的边,连接成轨迹图,如图11所示。
步骤(3)利用“轨迹图简化”方法对此轨迹图进行简化,先进行外部简化,其步骤如下:
首先,构造一个先进先出队列q,初始化q中的元素为空,标记所有结点的状态为未访问。
再从轨迹图中得到所有度数为2的结点,一次送入队列q中,图12标记了该轨迹图中所有度数为2的结点(用带纹理的点表示),分别是结点V1,V3,V8,V10,V11和C,D,E共8个,则当前队列q中的元素按照从队首到队尾的次序分别为{V1,V3,V8,V10,V11,C,D,E},设置结点V1,V3,V8,V10,V11,C,D,E的状态为已访问。
下面,从q中取出队首元素V1,V1不是端点,而且V1仅仅与两条正交边(V1,A)和(V1,T1)相邻,边(V1,A)和(V1,T1)形成的矩形为(V1,A,V6,T1),显然它的另外两边(V6,A)和(V6,T1)在轨迹图中存在,则结点V1和边(V1,A)、(V1,T1)从轨迹图中删除。
接着,由于结点A和结点T1的状态为未访问,所以将结点A和结点T1加入队列q的队尾,所以q中的元素现在为{V3,V8,V10,V11,C,D,E,A,T1},设置结点A和结点T1的状态为已访问。
同理,从q中取出队首元素V3,结点V3和边(V3,V2)、(V3,V5)从轨迹图中删除,由于结点V2和结点V5的状态为未访问,所以将结点V2和结点V5加入队列q的队尾,所以q中的元素现在为{V8,V10,V11,C,D,E,A,T1,V2,V5},设置结点V2和结点V5的状态为已访问;
从q中取出队首元素V8,结点V8和边(V8,H)、(V8,T1)从轨迹图中删除,由于结点H的状态为未访问,将结点H加入队列q的队尾,所以q中的元素现在为{V10,V11,C,D,E,A,T1,V2,V5,H},设置结点H的状态为已访问;
从q中取出队首元素v10,结点V10和边(V10,H)、(V10,T3)可以从轨迹图中删除,由于结点T3的状态为未访问,将结点T3加入队列q的队尾,所以q中的元素现在为{V11,C,D,E,A,T1,V2,V5,H,T3},设置结点T3的状态为已访问;
从q中取出队首元素V11,结点V11和边(V11,G)、(V10,T3)可以从轨迹图中删除,结点V11和边(V11,G)、(V11,T3)可以从轨迹图中删除,由于结点G的状态为未访问,将结点G加入队列q的队尾,所以q中的元素现在为{C,D,E,A,T1,V2,V5,H,T3,G},设置结点T3的状态为已访问;
从q中取出队首元素C,与结点C相邻的两条边(C,V4)和(C,D)形成的矩形的另外一对边在轨迹图里并不存在,所以不能删除该点;同理,结点D,E,A皆不能被删除,这时队列q中的元素为{T1,V2,V5,H,T3,G};
从q中取出队首元素T1,由于是端点,故不能被删除;
从q中取出队首元素V2,结点V2和边(V2,B)、(V2,T2)可以从轨迹图中删除,结点V2和边边(V2,B)、(V2,T2)可以从轨迹图中删除,由于结点B和结点T2的状态为未访问,将结点B和结点T2加入队列q的队尾,所以q中的元素现在为{V5,H,T3,G,B,T2},设置结点B和结点T2的状态为已访问;
从q中取出队首元素V5,结点V5和边(V5,F)、(V5,T2)可以从轨迹图中删除,结点V5和边边(V5,F)、(V5,T2)可以从轨迹图中删除,由于结点F的状态为未访问,将结点F加入队列q的队尾,所以q中的元素现在为{H,T3,G,B,T2,F},设置结点F的状态为已访问;
从q中取出队首元素H,与结点H相邻的两条边(H,V6)和(H,V9)形成的矩形的另外一对边在轨迹图里并不存在,所以不能删除该点;同理,结点G,B,F皆不能被删除,又因为T3和T2位端点,也不能删除,所以队列q直接弹出这些元素,此时队列为空,外部结点简化完成,结果如图13所示。
下面,对图13所示的轨迹图进行内部简化,步骤如下:
首先,将图13中所有的凸角顶点送入队列q,图13中用纹理标出的结点就是凸角顶点,这时q中的元素是{A,B,D,F,G,H}。
根据前述规则,q中的元素只有结点D符合要求:与结点D相邻的两点C和E都是凹角顶点,V4和V7分别是与C和E相邻的另外一个结点,R是由结点V4和V7构成的矩形,R的不包含线段(V4,C)和(V7,E)的那两边是(V4,T2)和(V7,T2),所以边(V4,C),(C,D),(D,E),(E,V7)和结点C,D,E都可以从轨迹图中删除。
这样,内部简化结束,得到如图14所示的结果。
最后,进行端点简化:将所有度数为1的端点送入队列q,定义并初始化数组tRecorder,该数组的元素是一个结点和与该结点相关的边;这时队列q中的元素为{T1,T3},数组tRecorder为空。
从队列q中取出队首元素T1,与端点T1相邻的边为(T1,V6),则从轨迹图中删除端点T1和边(T1,V6),并将结点V6设置为端点,再将V6和边(T1,V6)加入数组tRecorder中,这时q={T3},tRecorder={[V6,(T1,V6)]};
从队列q中取出队首元素T3,与端点T3相邻的边为(T3,V9),则从轨迹图中删除端点T1和边(T3,V9),并将结点V9设置为端点,再将V9和边(T3,V9)加入数组tRecorder中,这时q={ },tRecorder={[V6,(T1,V6)],[V9,(T3,V9)]}。
此时,队列q为空,端点简化结束,端点简化以后的轨迹图如图15所示。
至此,轨迹图的简化工作全部完成,下面开始使用蚁群方法在简化后的轨迹图上求Steiner树。
步骤(4):使用蚁群方法在简化后的轨迹图上求Steiner树,步骤如下:
首先,初始化C1边上的信息素值:
τ(A,B)=τ(B,V4)=τ(V4,T2)=τ(T2,V7)=τ(V7,F)=τ(F,G)=τ(G,V9)=τ(V9,H)=τ(H,V6)=τ(V6,A)=1.0,
其中τ(A,B)表示边AB上的信息素值,其它类似。
下面开始蚁群方法的第一次迭代:首先在3个端点(V6,T2,V9)处各放置一只蚂蚁,记这3只蚂蚁为ant1(初始位于V6点)、ant2(初始位于T2点)和ant3(初始位于V9点),设置ant1、ant2、ant3的禁忌表分别为{V6}、{T2}、{V9}。现在通过蚂蚁的移动来构造一棵Steiner树:
第一次选择ant1(每次随机选择一只存活的蚂蚁),根据(1)式计算ant1选择(V6,A)边时的可见度,这里m=1,i=V6,j=A,c(i,j)=|V6,A|=|151-151|+|190-76|=114,γ是一个常量,我们把它设为1,ψj m是从结点j到其他蚂蚁所有已访问点的最短距离,这时,所谓其他蚂蚁就是ant2和ant3,ant2和ant3所访问的点就是它们的禁忌表中的点,即{T2,V9},容易计算,A和T2之间的距离为:|A,T2|=|151-343|+|76-113|=229,A和V9之间的距离为:|A,V9|=|151-266|+|76-285|=324,所以ψj m是从结点A到T2和V9点的最短距离:min(|A,T2|,|A,V9|)=229,代入(1)式得到:
η V 6 , A 1 = η vi , vj m = 1 114 + 1 × 229 ≈ 0.00291
下面再用同样的方法计算ant1选择(V6,H)边时的可见度:
此时,根据(1)式,m=1,vi=V6,vj=H,c(vi,vj)=|V6,H|=|151-151|+|190-285|=95,|H,T2|=|151-343|+|285-113|=364,|H,V9|=|151-266|+|285-285|=115,min(|H,T2|,|H,V9|)=115,
η V 6 , H 1 = η vi , vj m = 1 95 + 1 × 115 ≈ 0.00476
根据(4)式,计算ant1选择的下一个结点,其中,τvi,vk是边(vi,vk)上的信息素量,所以τV6,A即是τ(V6,A)=1.0,τV6,H即是τ(V6,H)=1.0,α和β是常量,我们设为α=1,β=1。集合N,是由所有通过连接图上的边与当前蚂蚁所在结点相连,并且不是它所访问过的结点组成,所以N={A,H}。
v j = max v k ( [ τ v i , v k ] α · [ η v i , v k m ] β ) , v k ∈ { A , H }
= max v k ( [ τ V 6 , A · η V 6 , A 1 ] v k = A , [ τ V 6 , H · η V 6 , H 1 ] v k = H )
= max v k ( [ 1.0 × 0.00291 ] v k = A , [ 1.0 × 0.00476 ] v k = H ) = H
由以上计算得到,ant1选择的下一个结点为H,所以ant1沿着(V6,H)边移动到H,ant1把H点加入到自己的tabulist中,所以现在ant1的tabulist={V6,H}。
目前还存活3只蚂蚁ant1,ant2和ant3,所以继续选择蚂蚁,本次选择的是ant3(同上,也是随机选择的),与上面同样的过程,我们计算出ant3选择的下一个结点为H,所以ant3沿着(V9,H)边移动到H;由于H点已经包含在ant1的tabulist中,所以ant3死亡,并且把ant3的tabulist合并到ant1的tabulist中,即ant1的tabulist={V6,H,V9}。
现在,需要为ant1重新定位,要从它的tabulist中选出一个点,使得这个结点距离其它蚂蚁(即是ant2)禁忌表中的结点距离最近,目前ant2的tabulist为{T2},所以从V6,H,V9这3个结点中选择到结点T2最近的那个,分别计算距离:
|V6,T2|=|151-343|+|190-113|=269,
|H,T2|=|151-343|+|285-113|=364,
|V9,T2|=|266-343|+|285-113|=249,
V9到T2的距离最近,所以选择V9作为ant1的新位置。
目前还存活2只蚂蚁,所以继续选择蚂蚁,本次选择的是ant1(同上,也是随机选择的),与上面同样的过程,我们计算出ant1选择的下一个结点为G,ant1的tabulist为{V6,H,V9,G};接下来继续选择蚂蚁,本次选择的还是ant1,与上面同样的过程,我们计算出ant1选择的下一个结点为F,ant1的tabulist为{V6,H,V9,G,F};接下来选择的是ant2,与上面同样的过程,我们计算出ant2选择的下一个结点为V7,ant2的tabulist为{T2,V7};接下来选择的还是ant2,与上面同样的过程,我们计算出ant2选择的下一个结点为F,由于F点已经包含在ant1的tabulist中,所以ant2死亡,并且把ant2的tabulist合并到ant1的tabulist中,即ant1的tabulist={V6,H,V9,G,F,V7,T2}。
目前,仅有1只蚂蚁存活,这说明已经构造出来一个完整解S,这个解由存活的那只蚂蚁的tabulist中的点表示。计算这个解的权值,也就是这棵Steiner树的总线长:
c(S)=|V6,H|+|H,V9|+|V9,G|+|G,F|+|F,V7|+|V7,T2|=95+115+111+77+34+95=527
根据上面的权值和公式(3)计算信息素的增量:
Δ τ vi , vj = Z c ( S t ) = 1000 527 = 1.898
然后再根据(2)式更新当前解S的所有边上的信息素的值,ρ是一个常量,称之为蒸发速率,它表征了路径上的已有信息素挥发速度,我们设为0.5:
τ(V6,H)=(1-ρ)×τ(V6,H)+ρ×Δτvi,vj
         =(1-0.5)×1.0+0.5×1.898=1.449
同理,τ(H,V9)=τ(V9,G)=τ(G,F)=τ(F,V7)=τ(V7,T2)=1.449,
下面开始新的一轮迭代,再构造一组解,并与上面已有的最优解作比较,如果优于当前最优解,则以此解来替换当前最优解,否则进行下一次循环,直到循环次数大于500。可以得到如图16所示的Steiner树。
步骤(5):从数组tRecorder中依次取出每个元素,恢复原有端点和所对应边。根据步骤(3)端点简化后的结果,tRecorder={[V6,(T1,V6)],[V9,(T3,V9)]}。
对于元素[V6,(T1,V6)],对应结点V6,对应边(T1,V6),在得到的Steiner树上还原端点T1和边(T1,V6);对于元素[V9,(T3,V9)],对应结点V9,对应边(T3,V9),在得到的Steiner树上还原端点T3和边(T3,V9)。
现在,所有操作完成,得到如图17所示的最终连接结果。

Claims (1)

1.线长优化的绕障碍的直角布线树方法,其特征在于,它依次含有以下步骤:
(1)初始化,计算机从外部读入如下预设数据:
线网的信息:线网编号,线网中需要连接引脚的物理位置,用二维笛卡儿坐标表示,即为端点;
障碍信息:形成障碍的多边形的点列;
在简化后的轨迹图上构造Steiner树时,采用蚁群方法构造子树计算蚂蚁m下一个要到达的结点vj应满足下面公式:
v j = max v k ( [ τ v i , v k ] α · [ η v i , v k m ] β ) , v k ∈ N
其中,集合N是结点集合,它是由所有通过轨迹图上的边与当前蚂蚁m所在的结点相连、且不是蚂蚁m所访问过的结点组成的集合;
ηvi,vj m是当前蚂蚁m在结点vi时与蚂蚁m相连的结点中的某一结点vj的可见度:
η v i , v j m = 1 w ( v i , v j ) + γ · ψ v j m
其中,ψvj m是从结点vj到当前所有其他蚂蚁已经访问过的结点的最短距离,为已知量,w(vi,vj)是从结点vi到结点vj的长度,τvi,vj是边(vi,vj)上的信息素浓度的更新值:
                    τvi,vj=(1-ρ)·τvi,vj+ρ·Δτvi,vj
其中,Δτvi,vj是在每选定一边时,其上所增加的信息素的量:
其中,f(St)是当前所保留的最小直角Steiner树的总线长,Et是它的边集合;
上述的α、β、γ、ρ、Z皆为常量,预先设定,其范围如下:
α∈[1,5],β∈[1,5],γ∈[1,4],ρ∈[0,1],Z∈[1,∝]
其中,α、β、γ、Z是整数,ρ是实数,这里ρ表示信息素蒸发的速率,α、β分别表示信息素和几何距离的调整因子,γ表示蚂蚁移动步长与相互位置之间的调整因子,Z用来控制信息素τvi,vj的增量;
(2)根据线网的端点和给定的障碍构造轨迹图,所述轨迹图是根据线网端点和给定障碍的极边生成的一种连接图,如果障碍位于某条障碍边所在的直线的同侧,那么该障碍边就是一条极边,所述障碍边是形成障碍的多边形中的一条边,构造轨迹图的步骤如下:
(2.1)根据给定障碍的点列得到水平极边和竖直极边序列;
(2.2)对于竖直极边序列中的每条极边,向上、下两端延展,直到遇到障碍边为止;
(2.3)对于水平极边序列中的每条极边,向左、右两端延展,直到遇到竖直极边序列中的边,或者遇到障碍边为止;
(2.4)对于每个线网端点,向上、下、左、右四个方向作射线,每个方向一旦遇到上述极边序列中的边或障碍边就停止延伸;
(2.5)记录以上步骤(2.2)-(2.4)所产生的交点和边,所述的边是指交点所在的上述极边序列中的边或障碍边,把交点连接成轨迹图;
(3)利用“轨迹图简化”方法对该轨迹图进行简化,其步骤如下:
(3.1)构造一个先进先出队列q:将轨迹图上所有度数为2的非线网端点的交点,也称为结点,送入队列q,所述的“度”是指该结点所连接的边数;
(3.1.1)从队列q中取出队首的那个元素u,按照如下步骤进行简化:
(3.1.2)设u是轨迹图上一个非线网端点的结点,结点u仅仅与两条正交边e1和e2相接,e1和e2形成的矩形记为R1,如果矩形R1的另外两边在轨迹图中存在,则e1和e2从轨迹图中删除;
(3.1.3)设边e1和边e2除结点u以外的另一个结点分别是u1和u2,如果在步骤(3.1.2)中边e1和边e2被删除,则将结点u1和结点u2加入队列q;
(3.1.4)如果队列q不为空,则继续从步骤(3.1.1)开始执行;
(3.2)将轨迹图上所有的凸角顶点送入队列q,这里首先定义凸角顶点和凹角顶点这两个概念;凸角顶点/凹角顶点的定义是:设结点a是构成障碍点列中的一个元素,如果与结点a相邻的两结点p1和p2使得线段
Figure A2004100908850003C1
穿过障碍内部,那么结点a就是一个凸角顶点,否则结点a就是一个凹角顶点;
(3.2.1)这时队列q中的所有结点都是凸角顶点,按照如下步骤情况进行简化:
(3.2.2)从队列q中取出队首的那个元素,显然此元素是障碍的一个凸角顶点,如果与该凸角顶点相邻的两点都是凹角顶点,R2是以与上述两个凹角顶点相邻的另外两个结点为对角线构成的矩形,如果R2的不包含与上述凹角顶点相连的那两边在轨迹图中存在,那么所述凸角顶点及与其相邻的两个凹角顶点、所述凸角顶点和所述两个凹角顶点之间的连线、所属两个凹角顶点与它们各自相邻的两个结点之间的连线都可以从轨迹图中删除;
(3.2.3)如果队列q不为空,则继续从步骤(3.2.1)开始执行;
(3.3)第(3.3)步对所有度数为1的端点和与它们相连的边进行简化;
(3.3.1)将所有度数为1的端点送入队列q;
(3.3.2)定义并初始化一个数组tRecorder,该数组的每个元素都是一个二元组,包含一个结点和与这个结点相连的边;
(3.3.3)从队列q中取出队首的那个元素t,按照如下步骤情况进行简化:
(3.3.2)如果与端点t相邻的边为(t,t’),则从轨迹图中删除端点t和边(t,t’),并将结点t’设置为新端点,再将t’和边(t,t’)加入数组tRecorder中;
(3.3.3)如果队列q不为空,则继续从步骤(3.3.1)开始执行;
(4)在简化后的轨迹图上构造Steiner树:采用蚁群方法构造树,其步骤依次如下:
(4.1)设定:轨迹图的边上的初始信息素值,用τ表示,τ即为信息素值;
(4.2)在上述步骤(3)简化后的轨迹图的各端点处放置1只蚂蚁,并予以编号,用antName表示;同时,每一只蚂蚁维护一个禁忌表,用于记录已经访问过的结点;设定迭代次数的最大值;
(4.3)在当前存活的所有蚂蚁中随机选择一只蚂蚁m,通过下式计算并选择每个蚂蚁m要到达的边与其相邻结点的概率,vi表示蚂蚁m所在的结点,vj表示结点vi的相邻结点,(vi,vj)表示连接结点vi和结点vj的边,蚂蚁m选择结点vj作为下一个要到达的结点当且仅当:
v j = max v k ( [ τ v i , v k ] α · [ η v i , v k m ] β ) , v k ∈ N
其中,集合N是结点集合,它是由所有通过轨迹图上的边与当前蚂蚁m所在的结点相连、且不是蚂蚁m所访问过的结点组成的集合;
ηvj m:当前蚂蚁m在结点vi时,与蚂蚁m相连的结点中的某一结点vj的可见度:
η v i , v j m = 1 w ( v i , v j ) + γ · ψ v j m
ψvj m:从结点vj到当前所有其他蚂蚁已经访问过的结点的最短距离,为已知量,
w(vi,vj):从结点vi到结点vj的长度,
τvi,vj:边(vi,vj)上的信息素浓度的更新值:
                 τvi,vj=(1-ρ)·τvi,vj+ρ·Δτvi,vj
Δτvi,vj:在每选定一边时,其上所增加的信息素的量:
其中,f(St)是当前所保留的最小直角Steiner树的总线长,Et是它的边集合;
上述的α、β、γ、ρ、Z皆为常量,预先设定,其范围如下:
α∈[1,5],β∈[1,5],γ∈[1,4],ρ∈[0,1],Z∈[1,∝]
其中,α、β、γ、Z是整数,ρ是实数,这里ρ表示信息素蒸发的速率,α、β分别表示信息素和几何距离的调整因子,γ表示蚂蚁移动步长与相互位置之间的调整因子,Z用来控制信息素τvi,vj的增量;
上述tabulist是禁忌表, k ∉ tabulist ( m ) 表示k点不在m的禁忌表中;
(4.4)依照步骤(4.3)得到的蚂蚁m要通过的边(vi,vj);
(4.5)把结点vj添加到蚂蚁m的禁忌表中;
(4.6)若蚂蚁m通过边(vi,vj)到达下一结点时遇到另一只蚂蚁m’,就把蚂蚁m从蚂蚁集中去掉,并把m的禁忌表中的结点添加到另一只蚂蚁m’的禁忌表中,再重新为蚂蚁m’分配一个新位置,这个位置是蚂蚁m’的禁忌表中的一个结点,而且这个结点距离其他蚂蚁禁忌表中的结点距离最近;否则,蚂蚁m暂时停止移动,即每个蚂蚁每次只移动一步,在原地等待下一次被随机选中;
(4.7)当存活的蚂蚁只剩一只时,更新该次循环中所有蚂蚁经过的边上的信息素的含量;否则,转到步骤(4.3);
(4.8)迭代次数加1,重复步骤(4.2)-(4.8),一直迭代到设定的迭代次数的最大值为止;
(5)从数组tRecorder中依次取出每个元素,对于每个元素所包含的结点t’,根据它所对应的边(t,t’),在得到的Steiner树上还原端点t和边(t,t’)。
CNB2004100908855A 2004-11-16 2004-11-16 线长优化的绕障碍的直角布线树方法 Expired - Fee Related CN100336065C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2004100908855A CN100336065C (zh) 2004-11-16 2004-11-16 线长优化的绕障碍的直角布线树方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2004100908855A CN100336065C (zh) 2004-11-16 2004-11-16 线长优化的绕障碍的直角布线树方法

Publications (2)

Publication Number Publication Date
CN1604094A true CN1604094A (zh) 2005-04-06
CN100336065C CN100336065C (zh) 2007-09-05

Family

ID=34667232

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004100908855A Expired - Fee Related CN100336065C (zh) 2004-11-16 2004-11-16 线长优化的绕障碍的直角布线树方法

Country Status (1)

Country Link
CN (1) CN100336065C (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100442306C (zh) * 2007-09-13 2008-12-10 北京航空航天大学 一种基于蚁群智能的无人机机器视觉图像匹配方法
CN101377850B (zh) * 2008-09-27 2011-03-16 北京航空航天大学 一种基于蚁群聚类的多模板图像分割方法
CN102096742A (zh) * 2011-02-24 2011-06-15 江苏大学 基于禁忌蚁群混合算法的超大规模集成电路布线设计方法
CN103324796A (zh) * 2013-06-21 2013-09-25 福州大学 一种大规模集成电路设计中的绕障直角斯坦纳树构造方法
CN103337084A (zh) * 2013-06-05 2013-10-02 东南大学 一种基于人工地物特征的地物图斑自动生成方法
CN108804811A (zh) * 2018-06-07 2018-11-13 福州大学 大规模集成电路设计中多层绕障直角布线方法
CN110104561A (zh) * 2019-05-05 2019-08-09 三峡大学 一种障碍空间下起重作业吊物迹线规划系统
CN116402006A (zh) * 2023-06-07 2023-07-07 南京集成电路设计服务产业创新中心有限公司 一种基于边移动的完备最优斯坦纳树查找表构建方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7080336B2 (en) * 2000-12-06 2006-07-18 Cadence Design Systems, Inc. Method and apparatus for computing placement costs
CN100470556C (zh) * 2003-09-26 2009-03-18 清华大学 标准单元总体布线时障碍下的直角Steiner树方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100442306C (zh) * 2007-09-13 2008-12-10 北京航空航天大学 一种基于蚁群智能的无人机机器视觉图像匹配方法
CN101377850B (zh) * 2008-09-27 2011-03-16 北京航空航天大学 一种基于蚁群聚类的多模板图像分割方法
CN102096742A (zh) * 2011-02-24 2011-06-15 江苏大学 基于禁忌蚁群混合算法的超大规模集成电路布线设计方法
CN103337084A (zh) * 2013-06-05 2013-10-02 东南大学 一种基于人工地物特征的地物图斑自动生成方法
CN103337084B (zh) * 2013-06-05 2015-11-18 东南大学 一种基于人工地物特征的地物图斑自动生成方法
CN103324796A (zh) * 2013-06-21 2013-09-25 福州大学 一种大规模集成电路设计中的绕障直角斯坦纳树构造方法
CN103324796B (zh) * 2013-06-21 2016-08-10 福州大学 一种大规模集成电路设计中的绕障直角斯坦纳树构造方法
CN108804811A (zh) * 2018-06-07 2018-11-13 福州大学 大规模集成电路设计中多层绕障直角布线方法
CN108804811B (zh) * 2018-06-07 2021-11-30 福州大学 大规模集成电路设计中多层绕障直角布线方法
CN110104561A (zh) * 2019-05-05 2019-08-09 三峡大学 一种障碍空间下起重作业吊物迹线规划系统
CN116402006A (zh) * 2023-06-07 2023-07-07 南京集成电路设计服务产业创新中心有限公司 一种基于边移动的完备最优斯坦纳树查找表构建方法
CN116402006B (zh) * 2023-06-07 2023-08-22 南京集成电路设计服务产业创新中心有限公司 一种基于边移动的完备最优斯坦纳树查找表构建方法

Also Published As

Publication number Publication date
CN100336065C (zh) 2007-09-05

Similar Documents

Publication Publication Date Title
CN1304996C (zh) 超大规模集成电路避障碍的直角Steiner树方法
CN1278525C (zh) 最长匹配地址查询的方法和装置
CN1708958A (zh) 无线自组织网络中的最大生存时间路由
CN100336065C (zh) 线长优化的绕障碍的直角布线树方法
CN1849608A (zh) 由边界表示数据生成体数据的方法及其程序
CN101061672A (zh) 通信系统、无线局域网基站控制装置和无线局域网基站装置
CN1383082A (zh) 集成电路布局布线设计和设计程序以及集成电路制造方法
CN1779686A (zh) 确定缓冲器插入的方法和系统
CN1276359C (zh) 用于检查和操作数据的存储器引擎
CN101047733A (zh) 短信处理方法以及装置
CN101031892A (zh) 排列的生成方法以及排列生成程序
CN1992674A (zh) 一种基于多比特分割的多维分组分类方法
CN1666474A (zh) 管理节点设备、节点设备、网络配置管理系统、网络配置管理方法、节点设备控制方法、和管理节点设备控制方法
CN101055566A (zh) 一种电子数据表的函数收集方法和装置
CN1275317C (zh) 集成电路布图规划与缓冲器规划集成的布局方法
CN1796942A (zh) 城际导航路径的计算方法
CN1808450A (zh) Rlc互连线和传输线模型的传递函数递推方法及其模型简化
CN1474297A (zh) 一种基于gis的计算机网络地图的组织维护方法
CN1910789A (zh) 迷宫生成方法、天线最优设计方法、程序及天线
CN1529268A (zh) 标准单元总体布线时障碍下的直角Steiner树方法
CN1425982A (zh) 程序变换装置、方法及进行程序变换处理的计算机程序
CN1992673A (zh) 一种高速路由器及防火墙中实现快速分组流识别的方法
CN1564164A (zh) 消除由耦合电感引起串扰的标准单元总体布线方法
CN110032815B (zh) 基于文化基因的八角形斯坦纳树构建方法
CN1287295C (zh) 信息处理装置和方法及摄像装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C19 Lapse of patent right due to non-payment of the annual fee
CF01 Termination of patent right due to non-payment of annual fee