基于多步长迷宫算法的模拟集成电路自动布线方法

文档序号:6564187阅读:265来源:国知局
专利名称:基于多步长迷宫算法的模拟集成电路自动布线方法
技术领域
模拟集成电路自动布线方法属于超大规模集成电路物理设计领域,尤其属于模拟集成电路物理设计的技术范畴,是模拟电路版图自动化设计过程中的重要组成部分。该方法将包含针对模拟电路性能约束进行设计的数据结构和路径搜索方法,它将决定模拟集成电路的最终版图,并会影响到模拟集成电路物理设计的设计周期和电路性能。
背景技术
1、模拟集成电路版图自动设计的重要性和必要性人类对于集成电路(Integrated Circuit,IC)的研究是从数字集成电路开始的,因为相对于模拟电路来说,数字集成电路更加容易处理和操作。在二十世纪80年代初期,由于数字信号处理算法的功能日趋增强,并且算法又都很容易地在集成电路上实现,从而使得人们对数字电路产生了过分的信心。甚至有许多专家曾在当时预言模拟电路即将完全被数字电路所取代,从而退出历史的舞台。事实上,这样的预言是建立在集成电路的设计和制造具有足够能力,并且所有信号都可以被离散化表示这样的前提之上的。近年来,模拟集成电路以及针对模拟电路的自动设计工具的设计和开发逐渐吸引了人们的注意力,使得业界对于模拟电路及相关产品的设计方法、设计工具更加重视。人们对模拟集成电路及其设计工具的态度之所以发生如此大的变化,其主要原因是之前人们对于模拟电路的重要性没有充分的认识,而且忽略了由于生产技术进步和工艺改进带来的连锁效应。而事实表明,对于模拟集成电路及其设计工具的研究和开发是具有很强的理论和实际意义的。
首先,人们对于模拟集成电路的需求是巨大的,因为它是处理模拟信号最为有效的必需工具。在自然界,尽管有很多类型的信号都可以被离散的数字信号表示,但是自然界的信号,比如我们获取的视觉、听觉信号和常用的无线电信号等,从本质上说都是模拟量;而且,在很多复杂的高性能系统中,模拟电路仍然是必需的。尤其在近年来,工业界对于模拟集成电路和数模混合集成电路的需求越来越大。据一项统计报告表明,早在上个世纪90年代,已经有近60%的CMOS和BiCMOS专用集成电路(Application Specific Integrated Circuit,ASIC)是数模混合的。另据市场调查公司ICE的对世界集成电路市场发展走势统计表明,模拟集成电路的市场占IC产品总市场的份额为1993年占16%(集成电路总市场为681.8亿美元),1998年增加到17.5%(模拟集成电路市场达191亿美元),到2002年仍将接近15%左右。随着通信行业的进一步发展,新的无线通信系统和视频应用对模拟电路的需求将继续增加,从而使模拟集成电路的市场向更大的规模发展。
其次,数字集成电路和模拟集成电路的界限越来越小,使得数字电路也不得不考虑一些模拟的因素。实际上,数字电路和模拟电路都是由晶体管来实现的,只是利用了晶体管不同的工作状态而已。所以,数字电路和模拟电路从本质上不可能完全是无关的。早在1986年,美国加州大学的Paul.R.Gray教授就用其“鸡蛋模型”对数字电路、模拟电路、以及连接两者的A/D、D/A转换器之间的关系进行了形象的阐述。这一模型把上述三者整体上视为一个鸡蛋,并把数字电路比喻为蛋黄,模拟电路比喻为蛋壳,A/D和D/A转换电路比喻为蛋清,这就体现了三者虽然不同,但是又有相互的渗透和关联,从而成为了一个整体。近几年,随着深亚微米工艺的出现和快速发展,数字集成电路中需要考虑的模拟因素越来越多,因为设计师必须要设法解决所有电子电路在深亚微米工艺下的模拟行为所带来的寄生效应,比如线间耦合、信号延迟、噪声和串扰等。这样一来,我们实际上可以认为数字电路的设计被模拟化了,或者说,无论数字电路还是模拟电路,我们都需要考虑相同的模拟方面的若干因素。正如Maxim公司总裁John Gifford所说的,“在数字产品中将需要更多、性能更好的模拟电路。”第三,模拟集成电路规模的增大对传统的手工设计方式提出了挑战,同时也对面向模拟电路的自动设计工具提出了新的需求。由于模拟集成电路的规模和数字集成电路相比要小得多,但是电路性能要求比数字电路却高得多,所以设计师通常采用手工设计的方式来完成对模拟电路的全部设计。在物理设计阶段,设计师会把大量时间花费在诸如连线、器件位置等枯燥的细节上,从而满足由于电路性能要求带来的各种约束条件。随着片上系统(System ona Chip,SoC)的发展,电路设计中的模拟和混合电路成分越来越多,使得模拟电路的设计成为了整个芯片设计的瓶颈。此外,模拟集成电路规模的增大和工艺尺寸的减小也让设计师的版图设计无法很好地满足精度的要求。因此,很多模拟电路设计师希望能拥有像数字集成电路设计一样的辅助工具,从而降低电路的设计周期,减小设计中的误差。
可见,由于集成电路技术设计和制造技术迅猛发展,模拟集成电路的规模不断变化,其特征尺寸日益减小,传统的手工对模拟电路进行物理设计的方法必须要得到辅助工具的帮助,所以与模拟集成电路相关的电子设计自动化(Electronic Design Automation,EDA)工具也必然成为了设计师关注的焦点。很多大学早已经开始了对模拟集成电路自动设计工具的探索和开发,如加州大学伯克利分校(University of California at Berkeley,UCB)、卡耐基-梅隆大学(Carnegie-Mellon University,CMU);很多知名的EDA软件公司也把目光投向了这一具有相当市场潜力的产品,如Cadence,Synopsis等。尽管如此,由于针对模拟电路的自动设计工具在设计和开发上都有相当的难度,甚至有很多问题需要从设计理论上加以改进和提高,所以到目前为止,仍然没有一个成熟的产品被工业界使用。因此,对于模拟集成电路及其EDA工具的研发具有很重要的理论和实际意义,并在一定时间内还将成为业界研究的热点和难点问题。
2、模拟集成电路自动布线模型在对集成电路进行布线的过程中,我们对布线问题的描述和抽象表示是不同的。这些不同的抽象层次会导致线网在系统中被表示的方法也不相同,从而进一步带来不同的数据结构。在模拟集成电路自动布线系统中,主要有两种布线模型被使用无网格模型和有网格模型,如图1和图2所示。其中,图1为无网格模型,图2为有网格模型。
在无网格模型中,布线区域没有任何限制,所有的单元、模块和线网都被表示为多边形,依靠多边形的顶点坐标来描述所有的单元和线网。显然,使用无网格模型最大的优点在于它在对模拟电路进行布线时可以很容易处理多线宽约束,这也成为了很多现有的模拟电路布线器选择这一布线模型的原因,如现有的ANAGRAM I和ANAGRAM II就是典型的基于无网格模型的布线器。
但是,无网格模型在控制方面的复杂性却让很多模拟电路布线系统最终不能有效地完成布线的目标,其弊端主要体现在三个方面。第一,如前所述,模拟集成电路的性能要求是多样化的,我们不能仅仅因为无网格模型自由的处理机制就认为它最为适合模拟电路自动布线系统。在无网格模型下,由于缺乏几何方面的约束,布线器不容易处理在模拟电路中最重要的对称约束。第二,由于缺乏类似网格的指导信息,无网格模型使得布线系统的数据表示极其复杂,很多可以通过网格简单表示的信息往往需要复杂的描述才能得以实现。第三,无网格布线方法对资源的利用缺乏前瞻性,所以很容易导致资源分配不合理。换句话说,在无网格布线中,如果不加以控制,布线器很可能在一开始的时候肆意使用资源,而随着线网数的增加,线网布通率会逐渐下降;而如果想预先加以控制,这个控制流程则非常复杂。
在有网格模型中,布线区域被一个大网格划分,对区域形成了一定的约束。网格的引入对布线过程起到了指导性的作用,由于网格中拓扑坐标的存在,我们可以很容易地用拓扑坐标替代几何坐标从而表示出线网和障碍的信息。同时,布线过程中我们不需要处理和控制多边形,而把所有线网抽象成线段进行处理即可。由于有网格模型的控制流程比无网格模型简单,所以在规模较大、器件形状规则、线网宽度单一的数字集成电路自动布线系统中,这种模型被大量使用。最早期的模拟电路自动布线器,如ILAC和LADIES,也广泛继承了有网格模型。
然而,后期的模拟电路自动布线器都放弃了有网格模型,最主要的原因还是因为网格的约束使得多线宽的需求难以满足,于是研究者不得不选择控制流程更加复杂的无网格模型。同时,由于在有网格模型下,物理坐标向拓扑坐标的转化会存在一定的系统误差,这些误差有可能使布线资源的利用率受到一定程度的影响。
3、模拟集成电路的多线宽约束在模拟集成电路中,线网的宽度往往是不固定的,这一特点成为了模拟电路和数字电路主要的差别之一。为了确保电路的性能,设计师在确定线网宽度的时候必须要考虑到与性能相关的几个重要因素,包括承载电流的大小、线网的互连电阻(尤其和地线的串联电阻)、并联电容、以及分布电阻和分布电容等。在电路的物理设计阶段,这些因素都应该体现在线网的长度和宽度等几何状态上,所以,由于对具体线网的性能要求的不同,在模拟集成电路中,线网的宽度也是变化的。其中,影响线网宽度的因素重要有三个连线电阻、连线电容和电流密度。
在低频率的模拟电路中,趋肤效应可以忽略,金属连线的电阻可以比较容易地估算出来。在多层金属连线的模型下,顶层连线的方块电阻典型值为30mΩ/□,下层连线的方块电阻典型值为70mΩ/□。当线网承载很大的电流时,线网自身的电阻也会影响到线网宽度的确定。
连线电容对线网宽度的影响比连线电容更加复杂。在实际的电路中,连线与衬底之间会存在平板电容和边缘电容,连线与连线之间也存在同样的电容。但是由于后者通常比较难以计算和量化,所以在布线过程中我们仅考虑连线和衬底之间的电容。在实际的计算过程中,我们使用以下经验公式来计算连线电容的大小C=ϵ[Wh+0.77+1.06(Wh)0.25+1.06(th)0.5]]]>其中W,h,t的值如图6中所示。对于典型尺寸,该公式的计算误差非常小。可以看出,线网宽度对于连线电容的影响是主要因素,所以,合理地在布线中让每条线网有最适合的宽度在模拟集成电路的物理设计中是极其重要和必要的。
另外一个决定线网宽度的因素是“电迁移(Electro-Migration)”现象。在电流密度很高的时候,连线中的铝原子容易产生“迁移”。在器件工作时间比较长后,原子迁移留下的空位最终会导致连线断开。为了避免由于“电迁移”而带来的器件和芯片可靠性问题,模拟电路物理设计过程中必须限制线网所承载电流的最大电流密度。根据经验,通常每微米宽的金属线网可以接受的电流密度为1mA,而且在实际的制造过程中,线网宽度的实际值还会根据金属的厚度进行调整。对于某些瞬态电流,也需要更大的线网宽度。因此,布线过程中的线网宽度也会根据电流密度的不同而不同,这也使得模拟集成电路的线网具有了多线宽的特征。
4、当前解决多线宽约束的方法及缺陷目前,模拟集成电路的版图设计还没有实现自动化,工业界还没有用于实际生产的自动或半自动模拟电路版图设计工具,所以设计师基本依靠手工完成模拟电路的版图设计。而现有的模拟电路自动布线系统大多数没有考虑对多线宽约束的专门处理,它们采用单一线宽布线的方法,使用无网格模型,把所有线网都按照最大的线宽来进行布线。这种布线方法的基本思想和处理方法都来源于数字电路的自动布线系统,没有针对模拟电路的特征进行设计,因此不能适应模拟电路多线宽的要求。而采用最大线宽进行布线的方法虽然能保证布线结果的正确性,但是其布线资源耗费远大于实际布线的资源耗费。而且,无网格模型虽然能提供比较灵活的布线机制,但是布线系统的数据结构和程序控制流程比较复杂,而且不利于同步解决模拟电路的其他几何约束。
基于网格重构的模拟电路布线算法是另外一种解决多线宽约束的方法,它是一种基于网格模型的处理方式。这种方法按照线网所有可能的宽度对线网进行分类处理,每一种布线宽度直接对应一个单位网格尺寸。也就是说,在布线过程中需要反复重新构造网格以适应不同线宽的变化。网格重构方法可以在布线过程中有效地解决多线宽的问题,并且也比最大线宽布线的方法更节约资源,但是,网格重构会给系统带来比较大的负担,因为每一次重构网格都需要把所有的相关信息进行重复标记和处理,而且在单位网格尺寸较大时,系统处理的精度会受到一定影响。
基于现有的模拟电路自动布线系统存在的问题,本发明针对模拟电路的多线宽特点对布线系统的核心算法——路径搜索算法——进行了改进,它具有如下特点为了适应模拟电路的多种约束,本发明采用了有网格模型来进行布线。一方面,在网格模型下布线系统的数据结构和控制流程可以更加简单,另一方面,有网格模型对模拟电路的其他重要特性,如对称和匹配等,有更好的适应性。
在实施布线的过程中,路径搜索算法起到了决定性的作用。本发明对迷宫算法这一在VLSI自动布线领域广泛使用的路径搜索算法进行了改进,使得经典的单一扩展步长的方法可以有多种可选择的步长。这种思想的引入不仅可以很好地满足多线宽约束,使这一约束在布线过程中被同步考虑并解决,还可以进一步提高资源利用率和线网的布通率。同时,与网格重构方法相比,这一方法显然降低了系统在运行时的时间耗费。
由于上述特点,本发明在对模拟集成电路实施布线时具有很好的结果。我们采用了工业界的实际电路作为测试用例,它可以按照给定电路描述的要求完成自动布线,并且能在用户可接受的时间耗费内完成任务。


图1无网格模型示意图;图2有网格模型示意图;图3标准化布线宽度与实际布线宽度的误差示意图;图4迷宫算法示意图;
图5单步长迷宫和多步长迷宫的精度差异;图6连线和衬底的平板电容和边缘电容;图7障碍和引脚示意图;图8引脚映射示意图;图9多步长迷宫扩展示意图;图10布线结果拓扑示意图;图11布线结果集合示意图;图12模拟电路版图自动生成工具流程图;图13自动生成的版图示例;图14基于多步长迷宫算法的模拟电路自动布线系统执行流程示意图。

发明内容
本发明的目的在于提出一种既能满足多线宽约束又能进一步提高资源利用率和线网布通率,从而降低系统运行时间的基于多步长迷宫算法的模拟集成电路自动布线方法。其特征在于,该方法是在计算机平台上依次按以下步骤实现的步骤(1)程序向计算机读入以文件形式提供的电路布局结果、线网信息、约束文件、以及工艺文件。
步骤(2)计算机程序根据步骤(1)读入的信息建立布线过程所必需的数据结构,其中包括线网列表,还有包括障碍列表在内的布线环境描述。
步骤(3)遍历由步骤(2)得到的线网列表,从线网属性中读取线网宽度WireWidth值和线网间距WirePitch值,把两者求和得到线网的网格布线宽度NetSize,并用此值构造网格布线宽度集合SetOfNetSize。同时,依据工艺要求得到金属层的最小线宽和线间距值,并求和后加入该网格布线宽度集合。然后,把该网格布线宽度集合中最小的网格布线宽度值赋给单位网格尺寸变量GridUnitSize作为初始值。
步骤(4)按照以下步骤遍历该网格布线宽度集合SetOfNetSize,在设定误差ERROR控制下,对线网网格布线宽度进行标准化处理,从而得到所有线网的标准化网格布线宽度和布线所需的单位网格尺寸。其中,标准化网格布线宽度是单位网格尺寸的k倍,k是整数,初始化时为1。
步骤(4.1)从网格布线宽度集合中取出第一个当前网格布线宽度;步骤(4.2)把该当前网格布线宽度与k倍单位网格尺寸作比较若该当前网格布线宽度大于k倍单位网格尺寸,则k自动增1,一直到当前网格布线宽度小于或等于k倍单位网格尺寸,接着判断若k倍单位网格尺寸与当前网格布线宽度的差大于指定误差ERROR,则将单位网格尺寸值修正为原来值的一半,同时把k值重置为1,返回步骤(4.1),把当前网格布线宽度重新指向所述第一个当前网格布线宽度;否则,进入步骤(4.3);步骤(4.3)记录k倍单位网格尺寸的值,将它赋予相应线网的标准化网格布线宽度变量SNetSize。
步骤(4.4)按步骤(4.1)~(4.3)所述方法计算所述网格布线宽度集合内剩下的所有网格布线宽度,并赋于相应的标准化网格布线宽度SNetSize。
步骤(5)遍历线网列表,对线网按照标准化网格布线宽度的大小按降序排列,得到排序后的线网列表OrderedNetList。
步骤(6)按照线网优先级和线网的实际布线层VirtualLayer对线网布线位置进行预先分配。
步骤(7)以单位网格尺寸作为单位网格大小建立布线网格,并标记其边界为“不可用”状态。所述网格使用下列二维短整型数组表示,其中0表示网格点“可用”,1表示网格点“不可用”。
步骤(8)遍历障碍列表,对全部已有模块在网格图上进行标记,对应数组的值标记为1。
步骤(9)按以下步骤遍历每条线网的引脚列表PinList和等价引脚列表EqualPinList,在网格图上标记所有的引脚及等价引脚,并将引脚映射为一个可用的网格点以确保后续布线算法执行。
步骤(9.1)建立候选映射点集合SetOfCandidate把所有引脚和等价引脚所覆盖的网格点记录到所述候选映射点集合中。
步骤(9.2)去除候选映射点中不合格的点判断每个候选点从实际所在层开始到对应线网被预先分配的布线层的所有网格点是否已经被占用,如果是,则把该网格点从候选映射点集合中去掉;否则,保留在集合中。
步骤(9.3)建立每个引脚的映射网格点序列ListOfMappingPoint如果候选集合中的点被引脚或等价引脚覆盖,则该点被加入映射网格点序列,并具有高优先级;如果候选集合中只有唯一点,则该点被加入映射网格点序列,并具有高优先级;否则,将其他点分配到相应引脚的映射网格点序列,并根据该点距离引脚中心点的距离决定其优先级,越靠近中心的网格点优先级越高。对于候选映射点集合为空的引脚,标记为“映射失败”,则该线网因布局或系统误差原因暂不可布。
步骤(10)遍历步骤(5)得到的排序后的线网列表,按以下步骤使用多步长迷宫算法对线网实施布线。
步骤(10.1)从排序后的线网列表中读取当前要布线的线网,若线网为多端线网,则将其分解为若干个二端子线网,并建立子线网列表SubNetList,它们的标准化网格布线宽度为单位网格尺寸的k倍,则k为当前线网的最大扩展步长;步骤(10.2)遍历所述子线网列表,从二端子线网的其中一个端点开始对线网进行迷宫扩展,按照多步长迷宫算法的扩展方法,当前点可以向东、南、西、北四个方向有选择地进行扩展,其步长在l到k之间。
设当前点拓扑坐标为(CurrentTopoX,CurrentTopoY),则在扩展时,要检查与扩展方向垂直的±k/2的单位网格点是否可用。若在沿扩展方向最大m个单位网格的位置上有任意一点为“不可用”状态,则扩展的步长为(m-1),其中,m为1到k之间的任一整数。扩展时要记录相应的扩展代价,其中包括扩展到当前位置的代价和扩展到目标点时估计将要发生的代价。其中,当沿垂直方向扩展时,所述±k/2的单位网格点范围从CurrentTopoX-k/2到CurrentTopoX+k/2;当沿水平方向扩展时,所述±k/2的单位网格点范围从CurrentTopoY-k/2到CurrentTopoY+k/2。
步骤(10.3)从二端子线网的另一端点开始按照步骤(10.2)所述的方法进行迷宫扩展。
步骤(10.4)当从两个端点扩展出的网格点相交时,停止扩展,从交点开始分别向两个端点方向进行回找,即从交点开始,依次搜索当前点的父节点,若存在多个父节点,则选择所述扩展代价最小的节点,直到回找到二端线网的两个端点,从而确定最终路径。
步骤(10.5)在线网数据结构中记录布线结果,并在网格数组中标记所布子线网,并判断如果该线网所有子线网未布完,执行步骤(10.2);否则,如果还有线网未布完,执行步骤(10.1);否则,执行步骤(11);步骤(11)把所有的布线结果按CIF格式输出为版图文件。
本发明针对模拟集成电路的多线宽约束而设计,对现有的迷宫算法进行了改进,提出了一种新的最短路径搜索方法。该方法充分利用了有网格模型的优势和特点,以线网为处理目标,在单一网格下完成了适应多种线宽的布线过程。该方法打破了传统的迷宫算法在数据扩展过程中仅有单一步长的局限,可以根据布线的具体情况来确定每一步的扩展步长,在满足模拟电路多线宽要求的同时还能充分利用布线的资源。同时,多步长迷宫算法由于采用了较小的网格宽度,其映射和布线精度比传统的单一步长的迷宫算法更高(如图5所示)。在路径搜索过程中,该方法还引入了启发式的策略,加快了算法的速度,减少了存储空间。该方法使用C++语言并用面向对象思想设计和实现,具有较强的平台通用性,可以在Microsoft Windows,Linux,Sun Solaris等平台上运行。
具体实施例方式
我们使用工业界实际的模拟集成电路作为测试用例,使用该方法对电路实施布线。这里我们选取该实例中的一部分进行具体实施过程描述,如图7所示。
(1)程序读入以文件形式提供的电路布局结果、线网信息、约束文件、工艺文件。
(2)程序根据步骤(1)读入的信息建立布线过程所必需的数据结构,包括线网列表NetList及布线环境描述,包括障碍列表ObstacleList等。在本实例中,线网列表为{Net1,Net2},障碍列表为{Obstaclel,Obstacle2}。
(3)遍历由步骤(2)得到的线网列表,从线网属性中读取线网宽度WireWidth和线网间距WirePitch值,求和得到线网的布线宽度NetSize,并用此值构造布线宽度集合SetOfNetSize。同时,根据工艺要求得到金属层的最小线宽和线间距要求,并求和加入SetOfNetSize。把最小的NetSize值赋给单位网格尺寸变量GridUnitSize作为初始值,把1赋给k作为初始值。在本实例中,Net1的线网宽度WireWidth为0.8um,线网间距WirePitch为0.3um,所以其布线宽度NetSize为1.1um;Net2的线网宽度WireWidth为0.5um,线网间距为0.3um,所以其布线宽度NetSize为0.8um。工艺要求金属层最小线宽为0.28um,最小线间距为0.28um,所以最小布线宽度为0.56um。在实际的程序中,为了计算方便,我们把所有尺寸均扩大1000倍,则布线宽度集合SetOfNetSize={1100,800,560},初始化时k=1,GridUnitSize=560。
(4)遍历布线宽度集合SetOfNetSize,在指定误差ERROR(该误差如图3所示)控制下对线网布线宽度进行标准化处理,从而得到所有线网的标准化布线宽度和布线所需的单位网格尺寸。其中,标准化布线宽度是单位网格尺寸的整数倍(k倍)。在本实例中,我们指定误差ERROR=0.05um,扩大1000倍后ERROR=50。
(4.1)从SetOfNetSize中取出当前网格布线宽度CurrentNetSize;(4.2)如果CurrentNetSize大于k倍单位网格尺寸GridUnitSize,则k自增1,直到CurrentNetSize小于等于k倍GridUnitsize,进入步骤(4.3);(4.3)判断如果k倍GridUnitSize与CurrentNetSize的差大于指定误差ERROR,则将GridUnitSize值修正为GridUnitSize/2,同时把k重置为1,CurrentNetSize重新指向第一个元素,返回(4.1);否则,进入步骤(4.4);(4.4)记录k倍GridUnitSize值,将它赋予相应线网的标准化布线宽度变量SNetSize。
在本实例中,首先取得CurrentNetSize=1100,显然1100>1*560,则k增加为2,此时1100<2*560,且二者之差为2*560-1100=20<50,则SNetSize1=2*560=1120。
然后再取CurrentNetsize=800,同样,当k=2时,800<2*560,但是2*560-800=320>50,所以GridUnitSize=560/2=280,重新返回初始状态进行标准化计算。
重新计算后,对Net1,标准化布线宽度为SNetSize1=4*280=1120;对Net2,标准化布线宽度为SNetSize2=3*280=840。
(5)遍历线网列表,对线网按照标准化布线宽度SNetSize按降序排列,得到排序后的线网列表OrderedNetList。本实例中OrderedNetList={Net1,Net2}。
(6)按照线网优先级和资源分布情况对线网布线位置进行预先分配,线网的实际布线层记录为VirtualLayer。在本实例中,两条线网实际布线层都为3,则VirtualLayer=3,在实际的布线过程中,线网会用到第三和第四层金属,其中第三层布水平线段,第四层布垂直线段。
(7)以GridUnitSize为单位网格大小建立布线网格,并标记其边界为“不可用”状态。这里使用如下二维短整型数组表示该网格,其中0表示网格点“可用”,1表示网格点“不可用”。布线过程中可把布线成功的线网在数组中标记为它的整型编号值。
(8)遍历障碍列表ObstacleList,对所有已有模块在网格图上进行标记,对应数组值标记为1。在本实例中,如图7所示,Obstaclel和Obstacle2在网格图中被标记。
(9)遍历每条线网的引脚列表PinList和等价引脚列表EqualPinList,在网格图上标记所有的引脚及等价引脚,并将引脚映射为一个可用的网格点以确保后续布线算法执行。这里,如图7所示,线网Net1有两个引脚,标记为Pin11和Pin12;线网Net2有两个引脚,标记为Pin21和Pin22。
(9.1)建立候选映射点集合SetOfCandidate把所有引脚和等价引脚所覆盖的网格点记录到该集合中;(9.2)去除候选映射点中不合格的点判断每个候选点从实际所在层开始到对应线网被预先分配的布线层的所有网格点是否已经被占用,如果是,则把该网格点从候选映射点集合中去掉;否则,保留在集合中。
(9.3)建立每个引脚的映射网格点序列ListOfMappingPoint如果候选集合中的点被引脚或等价引脚覆盖,则该点被加入映射网格点序列,并具有高优先级;如果候选集合中只有唯一点,则该点被加入映射网格点序列,并具有高优先级;否则,将其他点分配到相应引脚的映射网格点序列,并根据该点距离引脚中心点的距离决定其优先级,越靠近中心的网格点优先级越高。对于候选映射点集合为空的引脚,标记为“映射失败”,则该线网因布局或系统误差原因暂不可布。
在本实例中,各个引脚被映射到网格上的点如图8所示。
(10)遍历OrderedNetList,使用多步长迷宫算法对线网实施布线。
(10.1)从OrderedNetList中读取当前线网对象,如果线网为多端线网,则将其分解为若干个二端子线网,并建立子线网列表SubNetList,它们的标准化布线宽度为单位网格尺寸的k倍,则k为当前线网的最大扩展步长;在本实例中,两条线网都是二端线网,所以不需要进行分解,直接处理线网即可。其中,Net1的k值为4,Net2的k值为3。
(10.2)遍历子线网列表SubNetList,从二端子线网的其中一个端点开始对线网进行迷宫扩展,按照多步长迷宫算法的扩展方法,当前点可以向东、南、西、北四个方向进行有选择地扩展,其步长从1到k变化。假设当前点拓扑坐标为(CurrentTopoX,CurrentTopoY),则在扩展过程中需要判断沿扩展方向k个单位网格范围内,与扩展方向垂直的方向上从CurrentTopoX-k/2到CurrentTopoX+k/2(沿垂直方向扩展时)或从CurrentTopoY-k/2到CurrentTopoY+k/2(沿水平方向扩展时)的所有点是否为“可用”状态。如果在沿扩展方向最大m个单位网格的位置上有任意一点为“不可用”状态,则扩展的步长为(m-1),其中,m为1到k之间的任一整数。扩展时要记录相应的扩展代价,此代价包括扩展到当前位置的代价和扩展到目标点时估计将要发生的代价。在本实例中,Net1每次按扩展方向向前搜索4个网格点,并检查与扩展方向垂直的±2个单位网格点是否可用。在第一次扩展中,这些点都是可用的,则第一次向前扩展4个单位。而对Net2则每次按扩展方向向前搜索3个网格点,并检查与扩展方向垂直的±1个单位网格点是否可用。扩展过程如图9所示。其中每一个点表示扩展一次前进的位置。在Pinll扩展到Obstacle2时,由于扩展的目标点被障碍占据,所以只能扩展3个单位。
(10.3)从二端子线网的目标点开始按照步骤(10.2)描述的方法进行迷宫扩展。
(10.4)当从两个端点扩展出的网格点相交时,停止扩展,从交点开始分别向两个端点方向进行回找,即从交点开始,依次搜索当前点的父节点,若存在多个父节点,则选择所述扩展代价最小的节点,直到回找到二端线网的两个端点,从而确定最终路径本实例回找后得到的结果如图10所示。
(10.5)在线网数据结构中记录布线结果,并在网格数组中标记所布子线网。判断如果该线网所有子线网未布完,执行步骤(10.2);否则,如果还有线网未布完,执行步骤(10.1);否则,执行步骤(11);在本实例中,需要先后处理Net1和Net2。
(11)把所有的布线结果按CIF格式输出为版图文件。本实例结果如图11所示,电路整体结果如图13所示。
权利要求
1.基于多步长迷宫算法的模拟集成电路自动布线方法,其特征在于,该方法是在计算机平台上依次按以下步骤实现的步骤(1)程序向计算机读入以文件形式提供的电路布局结果、线网信息、约束文件、以及工艺文件;步骤(2)计算机程序根据步骤(1)读入的信息建立布线过程所必需的数据结构,其中包括线网列表,还有包括障碍列表在内的布线环境描述;步骤(3)遍历由步骤(2)得到的线网列表,从线网属性中读取线网宽度WireWidth值和线网间距WirePitch值,把两者求和得到线网的网格布线宽度NetSize,并用此值构造网格布线宽度集合SetOfNetSize;同时,依据工艺要求得到金属层的最小线宽和线间距值,并求和后加入该网格布线宽度集合;然后,把该网格布线宽度集合中最小的网格布线宽度值赋给单位网格尺寸变量GridUnitSize作为初始值;步骤(4)按照以下步骤遍历该网格布线宽度集合SetOfNetSize,在设定误差ERROR控制下,对线网网格布线宽度进行标准化处理,从而得到所有线网的标准化网格布线宽度和布线所需的单位网格尺寸;其中,标准化网格布线宽度是单位网格尺寸的k倍,k是整数,初始化时为1步骤(4.1)从网格布线宽度集合中取出第一个当前网格布线宽度;步骤(4.2)把该当前网格布线宽度与k倍单位网格尺寸作比较若该当前网格布线宽度大于k倍单位网格尺寸,则k自动增1,一直到当前网格布线宽度小于或等于k倍单位网格尺寸,接着判断若k倍单位网格尺寸与当前网格布线宽度的差大于指定误差ERROR,则将单位网格尺寸值修正为原来值的一半,同时把k值重置为1,返回步骤(4.1),把当前网格布线宽度重新指向所述第一个当前网格布线宽度;否则,进入步骤(4.3);步骤(4.3)记录k倍单位网格尺寸的值,将它赋予相应线网的标准化网格布线宽度变量SNetSize;步骤(4.4)按步骤(4.1)~(4.3)所述方法计算所述网格布线宽度集合内剩下的所有网格布线宽度,并赋于相应的标准化网格布线宽度SNetSize;步骤(5)遍历线网列表,对线网按照标准化网格布线宽度的大小按降序排列,得到排序后的线网列表OrderedNetList;步骤(6)按照线网优先级和线网的实际布线层VirtualLayer对线网布线位置进行预先分配;步骤(7)以单位网格尺寸作为单位网格大小建立布线网格,并标记其边界为“不可用”状态;所述网格使用下列二维短整型数组表示,其中0表示网格点“可用”,1表示网格点“不可用”; 步骤(8)遍历障碍列表,对全部已有模块在网格图上进行标记,对应数组的值标记为1;步骤(9)按以下步骤遍历每条线网的引脚列表PinList和等价引脚列表Equal PinList,在网格图上标记所有的引脚及等价引脚,并将引脚映射为一个可用的网格点以确保后续布线算法执行步骤(9.1)建立候选映射点集合SetOfCandidate把所有引脚和等价引脚所覆盖的网格点记录到所述候选映射点集合中;步骤(9.2)去除候选映射点中不合格的点判断每个候选点从实际所在层开始到对应线网被预先分配的布线层的所有网格点是否已经被占用,如果是,则把该网格点从候选映射点集合中去掉;否则,保留在集合中;步骤(9.3)建立每个引脚的映射网格点序列ListOfMappingPoint如果候选集合中的点被引脚或等价引脚覆盖,则该点被加入映射网格点序列,并具有高优先级;如果候选集合中只有唯一点,则该点被加入映射网格点序列,并具有高优先级;否则,将其他点分配到相应引脚的映射网格点序列,并根据该点距离引脚中心点的距离决定其优先级,越靠近中心的网格点优先级越高;对于候选映射点集合为空的引脚,标记为“映射失败”,则该线网因布局或系统误差原因暂不可布;步骤(10)遍历步骤(5)得到的排序后的线网列表,按以下步骤使用多步长迷宫算法对线网实施布线步骤(10.1)从排序后的线网列表中读取当前要布线的线网,若线网为多端线网,则将其分解为若干个二端子线网,并建立子线网列表SubNetList,它们的标准化网格布线宽度为单位网格尺寸的k倍,则k为当前线网的最大扩展步长;步骤(10.2)遍历所述子线网列表,从二端子线网的其中一个端点开始对线网进行迷宫扩展,按照多步长迷宫算法的扩展方法,当前点可以向东、南、西、北四个方向有选择地进行扩展,其步长在1到k之间;设当前点拓扑坐标为(CurrentTopoX,CurrentTopoY),则在扩展时,要检查与扩展方向垂直的±k/2的单位网格点是否可用;若在沿扩展方向最大m个单位网格的位置上有任意一点为“不可用”状态,则扩展的步长为(m-1),其中,m为1到k之间的任一整数;扩展时要记录相应的扩展代价,其中包括扩展到当前位置的代价和扩展到目标点时估计将要发生的代价;其中,当沿垂直方向扩展时,所述±k/2的单位网格点范围从CurrentTopoX-k/2到CurrentTopoX+k/2;当沿水平方向扩展时,所述±k/2的单位网格点范围从CurrentTopoY-k/2到CurrentTopoY+k/2;步骤(10.3)从二端子线网的另一端点开始按照步骤(10.2)所述的方法进行迷宫扩展;步骤(10.4)当从两个端点扩展出的网格点相交时,停止扩展,从交点开始分别向两个端点方向进行回找,即从交点开始,依次搜索当前点的父节点,若存在多个父节点,则选择所述扩展代价最小的节点,直到回找到二端线网的两个端点,从而确定最终路径;步骤(10.5)在线网数据结构中记录布线结果,并在网格数组中标记所布子线网,并判断如果该线网所有子线网未布完,执行步骤(10.2);否则,如果还有线网未布完,执行步骤(10.1);否则,执行步骤(11);步骤(11)把所有的布线结果按CIF格式输出为版图文件。
全文摘要
本发明属于VLSI物理设计技术领域,是面向模拟电路版图设计自动化而开发的计算机辅助设计方法。其特征在于,它完全针对模拟集成电路的多线宽约束进行设计,从而能够满足模拟电路承载电流状况复杂的要求。本发明包含了带有多线宽约束条件的最短路径搜索方法,并采用了启发式的搜索方法,在有网格模型下实现了对模拟电路的自动布线过程。实验结果表明该方法能有效地解决模拟电路的多线宽约束,能适应任意线宽的布线。同时,该方法在布线过程中的时间耗费和空间耗费比其他传统方法小,而且具有很强的可移植性。
文档编号G06F17/50GK1963827SQ20061016492
公开日2007年5月16日 申请日期2006年12月8日 优先权日2006年12月8日
发明者洪先龙, 蔡懿慈, 杜昶旭 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1