基于SS序列集成电路不规则模块布图算法
扫描二维码
随时随地手机看文章
1 模块的划分
对于不规则模块的先期处理是将其划分为许多小矩形,从而避免了传统算法将整个不规则模块算为1个大矩形而带来的面积浪费。如图1所示,由2个矩形合并而成,传统分割法将其视为1个矩形整体,再利用SS序列算法将其放入版图,如图1(a)所示,造成了底面积的浪费。SS序列无法区分模块空白区域,而是将其视为一整体放入版图,导致下部空白区域永远无法被其他模块空间占用,带来了较大浪费,随着模块面积增大和不规则模块数量增多,面积浪费现象将更为严重。因此在输入模块数据前就应将模块进行划分,为了程序计算方便,规定为对模块自上而下、以左边为基准进行划分,如图1(b)所示将该不规则模块划分为A、B两个小矩形输入数据,在SS算法处理过程中将其视为两个连在一起不同的模块,运用区域模块连接算法使其在变换的过程中始终保持紧密的连接在一起,如此则可充分利用下部空余的面积部分。对于有弧形的不规则模块,应以弧形最边缘切线为起点画一矩形将其包围,如图1(c)所示模块。首先以整体模块最左边为基准,即起始点,以上半部弧形右边最顶点为终点,上弧形最顶点为上边作一矩形,将该不规则模块分为上下两部分矩形。对于更为复杂的不规则模块也是如此划分。
2 模块区域连接算法
在划分模块后,存在许多相互需要连接在一起的小模块,这时必须要建立新的序列来反映这些模块间的相互关系。如图2所示,SS布图算法[4]分别变换SS序列及模块数据序列的排列顺序,将模块数据序列一一对应放入SS序列所生成的单元图中,使得版图不断发生变化。因此加入了模块区域连接序列后,应在变换模块数据序列前先将连接在一起的模块放入SS序列所生成的单元中。算法规则如下:
(1)将划分过的小矩形根据输入的顺序编号,将同一不规则模块的小矩形归为一组,不同组间由0相隔,从而生成反映模块间相互连接关系的模块区域连接序列。
(2)变换SS序列后,由于模块是自上而下的划分,因此需要找出SS单元图中呈上下连接关系的单元号先放入不规则模块。首先随机选取1个SS序列号A,找出其相邻下方的单元且水平位置最接近A的单元号B,即满足公式Mbl(A)-1=Mas(B)并且Min(|Mbs(A)-Mbs(B)|)的SS序列号。
(3)将模块区域连接序列中对应的模块(划分后的小矩形)放入规则(2)所找出的单元中。
(4)根据模块区域连接序列,交换与规则(2)所得的单元号相对应的模块数据序列。
(5)生成版图。
3 不规则模块的翻转算法
在SS解码算法中还需将模块翻转以获得更好地摆放位置。由于不规则模块被划分成许多小矩形,翻转时不能简单改变矩形的长宽顺序,而应结合模块区域连接序列进行整体翻转。不同于简单矩形模块只有0°和90°2种状态,而不规则模块要复杂得多,其中包括0°、90°、180°和270° 4种翻转状态,如图3所示。
3.1 180°翻转算法
180°翻转情况相对较为简单,从图3中可看出180°翻转仅仅是在原始状态的基础上改变了划分的小矩形的上下位置关系,并没有改变这些小矩形的长宽数据,因此只需改变模块区域连接序列中对应组的顺序。设有模块区域连接序列:XXXX0ABCD0XXX0XXX0XXX,要使矩形组ABCD组成的模块进行180°翻转,只需将序列改变为XXXX0DCBA0XXX0XXX0XXX即可,如图4所示。
3.2 90°翻转算法
90°翻转的情况较为复杂,不仅涉及到模块区域连接序列,而且由于其改变了小矩形的长宽数据,同时要改变模块数据序列。首先要对模块重新进行划分:
(1)在原有模块数据序列中找出长度最小的模块,将其宽加上改组中所有模块宽度,作为一个新的小矩形。
(2)找出原有模块数据序列中长度第2小的模块,将其长减去(1)中矩形的长作为其新的长度,其宽改为原来宽度加上改组中所有模块宽度再减去(1)中长度最小的模块的宽度。
(3)重复以上步骤直至所有矩形被处理。
(4)将修改过的模块数据序列中长宽数据对换。
(5)修改模块区域连接序列使其与现在的模块数据序列相对应。
模块90°翻转如图5所示。
3.3 270°翻转算法
270°相当于在90°翻转的基础上再次180°翻转,因此只需在3.2节的基础运用3.1节的算法进行翻转即可。
本文在SS序列算法的基础上进行了改进,使原有算法在只能进行简单矩形模块布图的基础上,可以对一些复杂的不规则模块进行布图,大大增加了SS算法的实用能力和处理复杂模块的能力,为将来集成电路布图的灵活多变打下了基础。本文提出了新的模块划分概念,并提出了模块区域连接算法、不规则模块翻转算法、模块区域连接序列等新的算法和概念。充实了SS序列算法,增加了SS序列算法的功能,大大改进了SS算法的实用性和处理复杂情况的应变能力。