发明内容
本发明的目的是提供一种基于多边形操作的集成电路版图上最小通孔数目设计规则检查的方法。通过该方法,将版图图形抽象成一种多边形数据表示,并在此基础上通过预定义的多边形操作快速准确的查找满足要求的线网待测走线集合,并对线网待测走线集合上的最小通孔数目进行设计规则检查。本发明提出的最小通孔数规则检查的数据表示以及多边形操作具有很低的计算复杂性,不仅高效而且准确,能够很好的嵌入到自动布线流程及设计规则检查工具中进行最小通孔数的检查。
为解决上述技术问题,实现上述技术目的,本发明采用如下技术方案:
一种集成电路版图设计最小通孔数目设计规则的检查方法,将版图图形抽象成为由一系列的水平边界定义的多边形数据表示,定义并实现多边形特征提取方法、多边形之间的逻辑运算方法、多边形连通区域和边界边的枚举遍历操作方法,在此基础之上,进行最小通孔数目设计规则的检查和标记。
其包括以下模块:版图布线数据和最小通孔数目规则的加载模块、提取待检测线网的宽大走线(Fatwire)以及与宽大走线相连接的一定距离范围之内的细小走线(Halo)模块、提取所有可能违背设计规则的通孔集合模块、过滤掉不满足要求的通孔模块、对待检测的通孔集合进行最小数目的检测模块。
在所述版图布线数据和最小通孔数规则的加载模块中,将LEF文件中定义的最小通孔数目规则和DEF文件中定义的版图布线数据加载到数据库中和自定义的数据结构中,以便进行接下来的操作。
在所述提取待检测线网的宽大走线以及与宽大走线相连接的一定距离范围之内的细小走线模块中,针对每层金属层上的每一条线网,依据多边形的放大和缩小操作,查找其中满足一定宽度和长度的Fatwire,并将其存储到待测金属线集合中;如果这条最小通孔设计规则还带有Halo的要求,则为每条线网建立与Fatwire相接触的Halo走线,加入待测金属走线集合。上述步骤中,根据线网的不同类型,Halo走线的创建也可以放在所述最小通孔数目检测模块中进行。由于芯片上存在一些比较大的线网且这些线网上通孔(Via)的数目相对比较少,尤其是VSS和VDD两条线网。由于这些线网比较大,贯穿于整个芯片,所以线网会被分割成很多部分,而有很多部分上都不存在满足特定要求的Via,所以这部分线网就不需要对最小通孔数目规则进行检测,也就不需要对相应的Fatwire建立Halo,当Halo的长度比较大且线网的布线形状不规则时,建立相应的Halo会消耗很多时间。因此,对于这部分线网,将上述Halo检测的过程放入所述最小通孔数目检测模块中进行中,在提取出通孔信息之后,再根据通孔的位置,只查找并抽取通孔周围的Halo走线,能有效减少算法的实际执行时间。
在所述提取所有可能违背设计规则的通孔模块中,为每条线网建立区域查询树,提取出所有与待检测金属走线集合(Fatwire和Halo)邻近的通孔,将这些通孔加入待检测通孔集合中。
在所述过滤掉不满足要求的通孔中,根据设计规则定义中通孔之间的距离和通孔是否被上下层金属线同时覆盖的条件,将满足距离要求和同时被覆盖的通孔合并到同一通孔子集合中。对于每一通孔子集合,如果其中的通孔数量大于设计规则的要求,则将这些通孔从待检测通孔集合中删除。
对待检测的通孔进行最小数目的检测模块,对每一个待检测通孔子集合,根据与该子集合相连接的待检测金属线的长宽,在设计规则中查找需要满足的通孔数,检查通孔子集合中的通孔总数是否满足该数目的要求。对违背设计规则的通孔,要建立相应的标识,记录下违背设计规则的信息,利于后面对电路设计进行更改。
具体包括以下步骤:
步骤1)加载版图布线数据和最小通孔数设计规则;
步骤2)提取宽大走线;
步骤2.1)将整条线网按照规则中要求的宽大走线长宽的二分之一进行收缩,过滤掉非宽大走线
步骤2.2)将剩余的走线多边形按照规则中要求的宽大走线长宽的二分之一进行放大;
步骤2.3)对于放大后多边形上的走线,其长宽必然满足设计规则中的宽大线宽要求,标记为宽大走线;
步骤3)提取与宽大走线相连接的一定距离范围内的细小走线;
步骤3.1)提取宽大走线与线网剩余部分走线的相交边界;
步骤3.2)针对每条交边,查找该线网的金属走线形成的多边形上的邻接边;
步骤3.3)根据邻接边信息,计算宽大走线需要放大的距离值;
步骤3.4)放大宽大走线,提取该范围之内的所有非宽大走线,加入细小走线集合;
步骤3.5)返回步骤3.1,直到放大的距离满足规则要求退出;
步骤3.6)将宽大走线和细小走线合并成为待检测金属走线集合。
步骤4)产生待检测通孔集合。
步骤4.1)根据通孔之间距离,将满足设计规则距离要求的通孔加入同一通孔子集合;
步骤4.2)如果某一子集合中通孔数大于设计规则的通孔数要求,并且这些通孔被相同的上下层金属线覆盖,则该子集合满足设计规则;
步骤4.3)将不满足上述要求的通孔子集合加入待检测金属通孔集合。
步骤5)对通孔数目进行检查。
步骤5.1)对于待检测金属线集合,查找与之相交的金属通孔;
步骤5.2)检查金属通孔所属子集合内的通孔总数,标记出不满足设计规则要求的通孔集合。
上述技术方案具有如下有益效果:
本发明的集成电路版图设计最小通孔数目规则检查的方法,依据多边形操作以及多边形边界边的遍历枚举操作方法,能够快速的准确的提取出线网中的待测走线集合。对于版图中存在违反设计规则的图形区域,对其作出启发性的标记,供自动布线工具进行局部区域拆分重布或设计人员进行版图的手动微调。
上述说明仅仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实例并配合附图对本专利进行详细说明。
具体实施方式
下面结合附图对本发明的优选实例进行详细介绍。首先介绍下文中会用到的符号名词:
Net:集成电路上连接引脚的线网;
Wire:线网上的金属导线,每根导线是一个矩形;
Via:电路间连接上下层金属走线的通孔或通孔数组;
Cut:Via中真实的金属通孔连接,每个Via中可包含多个Cut;
Fatwire:Net上满足一定宽度和高度的Wire;
Halo:Net上与Fatwire相连接的一定范围之内的Wire;
Marker:一个矩形标记区域,用于标记违背规则的Cuts。
接下来详细地讲述最小通孔数(MinimumCut Rule)检测流程。
(1)最小通孔数规则(MinimumCut Rule)的定义
Lefdef文件中MinimumCut Rule定义如下所示:
当Net上Wires宽度大于width时(称这些wire为Fatwire),检查其上Cut的数目是否大于等于numCuts个,且Cut之间的距离要小于CutDistance。当[FROMABOVE|FROMBELOW]其中之一被指定时,只检查向上层或者向下层连接的Cut,当都不指定时,向上层及向下层连接的Cut要分别作检查。当[LENGTH length WITHIN distance]被指定时,如果Fatwire的长度也大于length,表明对连接到这个Fatwire的其余的Wires(Halo)也做检查,如果Cut沿着Halo到Fatwire的距离小于distance,也要满足Cut的数目numCuts及之间距离小于等于CutDistance的要求。
(2)最小通孔数规则的检测流程
从上边的MinimumCut Rule定义可以很容易的看出,这条规则主要检测每条线网上Fatwire和Halo上的Cut数目以及Cut间的距离,对不满足要求的Cut进行标记并利于后面的修改。整个算法流程如图1所示。
如附图1所示,首先加载版图数据和设计规则,这步主要将LEF/DEF文件中的布线数据以及所有MinmumCut Rule导入数据库中,利于后面的读取;其次,读取每条MinimumCut Rule,针对每层金属层上的每一条线网,查找其中的满足一定宽度和高度的宽大走线(Fatwire),并将其存储起来,如果这条规则还带有Halo的信息,还要针对每条线网建立与Fatwire相接触的Halo。针对线网的不同类型,Halo的创建过程也可以放在最小通孔数目检测模块中。因为芯片上存在一些比较大的线网且这些线网上Via的数目相对比较少,尤其是VSS和VDD两条线网,由于这些线网比较大,贯穿于整个芯片,所以线网会被分割成很多部分,而有很多部分上都不存在满足特定要求的Via,所以这部分线网就不需要对MinimumCut规则进行检测,也就不需要对相应的Fatwire建立Halo,当Halo的长度比较大且线网的走线十分不规则时,建立相应的Halo会消耗很多时间,因此,对于这部分线网,将上述检测Halo的过程放入最小通孔数目检测模块中,在提取出通孔信息之后,再根据通孔的位置,只查找并抽取通孔周围的Halo走线,能有效减少算法的执行时间。
在上述步骤完成之后,查找线网上所有可能违背规则的Via并对其进行过滤,这部分主要依据距离和[FROMABOVE|FROMBELOW]信息;最后,根据收集到的通孔集合,检测与Fatwire或者Halo相关Cut的数目是否满足特定数目的要求,对违背要求的Cut,要建立相应的Marker,记录下违背设计规则的Cut信息,利于后面对电路设计进行更改。
(3)创建Fatwire和Halo
针对每条线网,查找线网中的Fatwire部分,如果规则中还存在Halo检测信息,即规则中存在[LENGTH length WITHIN distance]信息,还要准确的建立Halo,这部分主要用到前面提到的多边形操作,包括对一个多边形按大小进行缩放、对两个多边形交差补运算以及遍历多边形的边界等。
Fatwire的建立分为两部分:第一部分对线网按Fatwire长度和宽度的一半进行收缩,第二部分对刚收缩的线网再次放大,放大的大小与缩小的大小一样,如果经过缩放之后的多边形非空,则存在Fatwire,将其储存起来。
如下附图2所示,假设规则中规定Fatwire的长度为h,宽度为w,首先将线网a进行收缩,收缩的长与宽分别为h/2、w/2,收缩之后的图形如第一实线区域a1所示,外边虚线的线网将被缩掉,然后将第一实线区域a1进行放大,放大的大小仍为h/2和w/2,放大之后的线网形状如第二实线区域a2所示,这样,将线网中满足一定高度和宽度的Fatwire过滤出来,即得到Fatwire,如附图2中第三实线区域a3所示,并将其存储起来。
接下来主要介绍Halo的创建过程,这部分在整个算法的设计中是最重要的一部分,尤其是在不损失准确性的情况下如何快速的创建Halo。而在集成电路设计中,由于物理设计中的种种约束,导致布线之后的线网的形状不是很规则,如附图4所示的线网,所以要快速准确地创建Fatwire的Halo是一个复杂的问题。
创建Halo的关键在两点:第一是准确性,如何依据Halo的长度准确的创建Halo在整个设计规则检查中起到至关重要的作用,第二是效率,如何保证在准确性的基础上快速的创建Halo也是十分重要的。本发明阐述一种新颖的快速的创建Halo的方法,其能够快速的准确的创建Halo,从而保证规则检查的合理性,提取Halo的流程图如附图3所示。
根据附图3所示。首先,检测线网上是否存在Fatwire,如上面创建Fatwire部分所示。其次,求解Fatwire与线网其他部分相交的边界,如附图4所示的边界1-13所示,根据图中的Fatwire,第一次得到相交的边界将有三条,分别为图示中1,2,3标示的三条边界。再次,求得非Fatwire上与相交的边界相邻的两条边界,如附图4中与边界1-13中任意一条相邻的两条边界,求解相邻的边界是为了计算Fatwire下一步应该放大的距离,由于对线网进行缩放比较耗费时间,这样保证求得Halo使用尽可能少的步数对线网进行放大,从而减少创建Halo的时间,其中每次放大的距离最长不能超过两条临边的边长的极小值,再者,还要将这个距离与剩余需要放大的距离求得极小值,保证对Fatwire放大这个距离之后求得的Halo长度不大于规则中Halo的长度。求得下次需要放大距离之后,再对Fatwire进行放大。最后,判断是否达到了规则中要求的Halo长度,如果达到,退出,此时已经创建了准确的Halo,如附图4中求得相交的边界11之后,再次放大达到了Halo的长度,此时退出这个分支的求解,继续求解剩余的分支,即附图4中相交的边界13,如果放大之后已经达到线网此分支的整个部分,此时也退出这个分支的Halo求解,如附图4中的Halo1和Halo2,当分别求得相交的边界1和边界2,再次放大之后,Halo1和Halo2所在的线网分支已经达到了终端,此时就不需要继续对这些分支继续求解,此时也已经求得了准确的Halo。在整个芯片上,大部分线网都满足这种退出条件,如果已经放大距离仍然小于规则中要求的距离,则跳转至第二步,继续求解已经放大的Fatwire与线网中剩余的部分相交的边界,迭代进行,直到达到上边两个退出条件。如附图4中得Halo3分支所示,开始求得相交边界3,放大Fatwire一次之后Fatwire边界到边界4,此时剩余的线网还有很复杂的一部分,即边界4右侧的线网,此时还没达到规则要求的Halo长度,需要迭代进行放大,根据提取Halo流程图4,跳转至第二步,继续进行求相交边,临边,距离和放大操作,如附图4中所示,按照相交边界的顺序3,4,5,6...12,13求解,直到Halo3创建完毕。注意1,2,3三个分支Halo的求解过程是随机的,在相交边界6时,也出现两条分支,此种情况类似于最初建立Halo时三个分支情况,此算法迭代循环进行,每次都放大尽可能大的距离,保证尽可能少放大操作将Halo建立完毕。
在求解距离的过程中,上面简单求解三个值的最小值的方法有时会产生一种误差,如附图5所示,此时建立线网的Halo时会使创建的Halo比规则中要求的Halo长。
附图5中的线网在布线中很少出现,由于金属层上各层的走线方向不同,多数情况下会将这段线网根据线网的走线方向分别布到不同的金属层上,不过这种情况还是有可能出现。当这种情况出现时,附图5中的Fatwire经一次放大之后,其右边界到位置P1处,当再次进行放大时,其相交的边界的两条临边的长度分别L1和L2,第二次放大的距离为L1=min(L1,L2),附图5中得Fatwire经第二次放大之后的右边界到位置P2处,这样我们会发现此线网的上面的Halo分支的实际长度已为L1+L3-L4>L1(L3>L4),这样会使实际创建的Halo比我们想要创建的Halo长,从而会导致规则检查的准确性得不到保证。
从上边问题发现,对Fatwire进行第二次放大的距离不合理,很容易看出第二次放大的最合理的距离应该为L3,不应该为L1,这样对Fatwire再增加两次放大,这样上边的Halo分支的bloat过程由两步变为四步,第一次扩大到P1,第二次扩大到P3,第三次扩大到P4,最后一步扩大到线网终端P2,这样得到的Halo的长度与实际的长度相等,都为L1+L3-L4,准确性得到保证。
由准确的创建Halo和不准确的Halo创建之间的区别发现,不准确的Halo创建是由于Fatwire一次扩大的部分线网的形状不是简单的线形,而是凹字形,由于线网发生弯曲,导致计算出来的Halo线长比我们实际需要的线长长,所以解决上述问题的有效方法是保证每次扩大Fatwire的时候扩大的部分不能存在弯曲,从而要对下次扩大的步长进行第四次限制,针对走线出现凹字形的情况,要针对每个凹字形的内侧的边界向线网内部做一次映射,通过增加映射点来进一步限制下次最大的放大的步长。通过顺序枚举多边形的各条边,可以找出形成凹字形走线的凹点,如附图5所示,两个圆形的凹点g和b,针对每一个凹点,沿着线网的边界向线网内部做映射,每个凹点将形成两个映射点,附图5中两个凹点形成四个映射点,如图中四个三角形c,d,e,f所标识的位置,最后根据这四个凹点,进一步限制下次对Fatwire放大的距离,由于映射点d经第一次放大之后已经包含在Fatwire中,所以考虑剩余三个映射点,将第二次扩大的距离由L1缩小为L4,即扩大到映射点f处,第三次扩大的距离为L3,即扩大到映射点c处,接下来与普通情况一样,继续扩大到P4,最后扩大到终点P2。这样,经过四次扩大,比最理想的情况多做一次扩大操作,但经过这样预处理之后,使扩大的距离十分准确,即L1+L3-L4。从而这种问题就得到了很好的解决。
另外,即使放大的距离计算准确,但在对Fatwire进行放大的过程中,还可能导致扩进一些本不应该扩进的部分,如附图6所示,这已经不能在通过缩小距离得到保证了。所以在Fatwire创建之后,要依据放大之后的Fatwire与放大之前Fatwire的临界关系对Fatwire放大之后的结果进行一次校正,进一步保证结果的合法性。
如附图6所示,对Fatwire进行放大,第一次放大的距离为length,这样放大Fatwire之后的结果如附图中虚线内部分所示,此时一个多边形扩大之后变成两个两个多边形,一个由Fatwire和Halo4组成,另一个是Halo5,从附图中可以很明显的看出,其实这两个Halo4和Halo5应该属于一个Halo,在算法中这将导致两个分支分别做放大,或者说同时被放大,被新扩进的Halo5在下次扩大时会明显的影响Halo的创建结果,当不对这种情况进行特殊的处理,在下次扩大时是由Halo4和Halo5的右边界共同向右扩展,从而会使扩大的Halo长度不准确。针对附图6中这种情况,Halo5离Fatwire比Halo4远,要过滤掉Halo5部分,这样才能保证结果的准确性。
为了防止这种类似的问题发生,在每次对Fatwire扩大之后,要对扩大之后的部分进行筛选,筛选出与扩大之前的Fatwire相邻接的部分继续进行扩大,保证每次扩大都是基于一个多边形进行操作,从而获得准确的结果。
上面对提取Halo方法的主体思想进行了简单介绍,接下来我们举例利用详细的数据说明下为什么这种方法即能保证高校准确的创建Halo。
如附图7所示,图中所示的某层金属层上一条线网的布线走向,假设这层金属层MinimumCut规则要求Fatwire高度和宽度都为8,Halo的长度为34。首先求得相交的边界及两条相邻的边界,两条相邻的边界的长度分别为14和16,此时求得第一次放大的距离为14=min(14,16,34),这里会像附图6中的情况出现,从而进行一次相邻筛选,因为已经放大了14个单位,此时将待放大Halo距离变为20=34-14,由于其不满足算法退出条件,对Fatwire进行第二次放大,第二次放大的距离为2=min(2,8,20),此时将待放大Halo距离变为18=20-2,此时也不满足退出条件,继续迭代进行放大,接下来放大的距离依次为6,2,10,而待放大的距离依次为12,10,0,此时待放大的距离变为0,Fatwire放大到附图7中虚线的位置,算法达到退出条件,Halo创建完毕,即从Fatwire右边界沿着wire到达虚线的位置。
根据MinimumCut规则的定义知,对超出Fatwire和Halo边界Cut不做检查,从附图7中可以看出,即使大于Halo distance的两个Cut违背MinimumCut规则,也不做出标记,只针对小于Halo distance的四个Cut做检查。对违背规则的Cut创建相应的Marker进行标记。
(4)、对Cut进行过滤
根据上述算法创建完Fatwire和Halo之后,需要收集与线网相关的所有Via并对其进行过滤,这步的目的是找出所有可能违背规则的Cut。Filter Cut算法流程图如附图8所示。我们采用三次过滤,使检测的Cut数目减少,从而提高MinimumCut规则检测效率。
第一次根据线网与Via之间的距离进行过滤,收集所有可能违背规则的Via。这步过滤处理是以Via为单位,而不是以Cut为单位。MinimumCut规则说明:如果线网上Fatwire和Halo非空,要对与其相关联的Cut进行检查,这步就是找出与Fatwire和Halo在一定距离h1之内的所有的Via,距离h1如公式(1)所示:
h1=(numCuts-1)*CutDist+numCuts*CutSize (1)
公式(1)中得numCuts代表规则中要求的Cut的数目,CutDist代表规则中要求Cut之间的距离,CutSize代表Cut的大小,为Cut长和宽的最大值。
然后对上次收集到的Via在进行第二次过滤,这步过滤处理是以Cut为单位,而不是以Via为单位。这次主要根据Cut之间的距离h2进行过滤分组,将距离在h2之内Cut分为一组,其中h2如公式(2)所示。
h2=CutDist (2)
最后一次根据规则中的FROMABOVE或FROMBLOW信息进行过滤,将与这条线网不接触或者不被上下层覆盖的Via都过滤掉。这样处理之后就可以转到下面进行Cut数目的检查。
根据附图8所示的流程,上边对各部分进行了简单的描述,接下来根据附图9中的线网详细地分析。
附图9中黄线代表一层金属层上的一条线网,这条线网的Fatwire和Halo都已经创建完毕,其中红色矩形代表Via且其中每个Via都只包含一个Cut(single Via),针对包含多个Cut的Via(array Via或者custom Via),该检测过程同样适用。A和B分别代表其上的Via满足FROMABOVE和FROMBLOW条件。
首先,对线网进行第一次过滤,位置在Fatwire和Halo上的Via与Fatwire或Halo的距离为0,满足距离h1的条件,右侧的5个Via由于其不在Fatwire或Halo上,所以到对其进行严格的距离对比,从附图中可以看出,这五个Via中上边的两个Via超出了距离h1,从而经第一次过滤之后,右侧五个Via只剩下黑色虚线框内的三个Via和Fatwire上4个Via以及两个Halo上三个Via,总共剩下10个Via。
其次,根据对这10个Via根据距离h2进行分组,如附图10中绿色虚线所示,没有被绿色虚线框住的,每个Cut单独为一组,这10个Cut总共分成五组,其中两组中有一个Cut,两组中有两个Cut,一组中有四个Cut。
最后,根据MinCut规则中的FROMABOVE和FROMBLOW信息对Cut进行第三次过滤,如果规则中包含FROMABOVE,那么只需检测被上层覆盖的Cut,从附图中看出左侧的七个Via被上层覆盖,其余三个直接过滤掉,如果规则中包含FROMBLOW,那么只需检测被下层覆盖的Cut,从附图中可以看出只包含中间的六个Cut,其余4个Cut直接过滤掉,如果规则中FROMABOVE和FROMBLOW都不包含,则即相当于上面两种情况的总和,分别对上下层覆盖进行检测。
(5)、检测通孔的数目
上面几部分主要做了一些准备工作,根据规则的定义,创建Fatwire和Halo,并将与其相关的所有Cut收集起来,最后对这些Cut进行过滤分组,找出所有可能违背规则的Cut,接下来对所有可能违背规则的Cut做最后一步检查,即Cut的数目。
首先检测线网上是否存在Fatwire或者Halo,如果Fatwire不存在,Halo肯定不存在,此时直接退出整个流程,如果存在Fatwire,就要按照上步的过滤分组,然后计算每组中的Cut数目是否满足规则中要求的numCuts,如果满足,这组Cut没有违背规则,如果不满足,要对违背规则的Cut进行标记,创建Marker,记录下什么原因违背物理设计规则,并记录下违背规则的位置,以利于后面的修正。