集成电路通道布线数学建模.docx

上传人:b****9 文档编号:26377273 上传时间:2023-06-18 格式:DOCX 页数:12 大小:17.93KB
下载 相关 举报
集成电路通道布线数学建模.docx_第1页
第1页 / 共12页
集成电路通道布线数学建模.docx_第2页
第2页 / 共12页
集成电路通道布线数学建模.docx_第3页
第3页 / 共12页
集成电路通道布线数学建模.docx_第4页
第4页 / 共12页
集成电路通道布线数学建模.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

集成电路通道布线数学建模.docx

《集成电路通道布线数学建模.docx》由会员分享,可在线阅读,更多相关《集成电路通道布线数学建模.docx(12页珍藏版)》请在冰豆网上搜索。

集成电路通道布线数学建模.docx

集成电路通道布线数学建模

集成电路通道布线数学建模:

集成电路通道布线中脚标拥堵问题

集成电路是利用半导体技术把电子元件集成在一起的具有特定功能的电路,已广泛应用于生产生活的方方面面。

随着技术的发展,集成电路内部的元器件数目已达到十亿级别,需要借助专用计算机软件才能完成电路设计与实现,该类软件统称为电子设计自动化工具。

集成电路设计由多个阶段组成,其中一个重要阶段称为“物理设计”,先将器件摆放在合适的位置,然后用金属线连接器件实现连接关系。

其中,后者称为“布线”,它是EDA工具需要解决的重要问题。

简单而言,假设可用区域由m*n个方格组成,金属线允许沿着直线或直角(方格)放置,连接指定的方格(引脚)而不引起断路或短路,该过程称为“布线”。

由于金属线引入的寄生电阻会影响电路性能,所以需要最小化布线长度。

本题重点考虑“布线”问题中的一个特

例:

“通道布线”。

“通道”是指一个横向的布线区域,此区域的顶部和底部分布着需要连接的方格,需用金属线将相应的引脚连通起来。

(1)假设采用一层金属布线,那么已经布线的方格被锁定,不允许其它线路穿过,否则会形成短路。

图1所示为采用一层金属的通道布线例子,布线空间为,空间上下沿的数字分别对应方格的引脚编号,编号相同的引脚需要连接起来。

由于空间限制,角标拥堵导致无解,是布线无解的原因之一。

请针对一层金属的“通道布线”问题完成建模和求解,给出角标拥堵导致无解的条件和两三个例子。

(2)引脚标号不变的条件下,将替换(等于5或6或者更大)看是否有解。

在这里插入图片描述(3)可以观察得到,有些测例无法采用一层金属完成布线。

实际中,集成电路会采用多个金属层,不同的金属层处在不同的高度,相邻层之间需要用通孔连通,这样不同金属层可共用一个方格而不引起短路。

图2所示为芯片的剖面图,其中网状填充为金属层,点状填充为通孔。

图3所示为一个用两层金属的布线示例,其中蓝色为下层金属,黄色为上层金属,红色为通孔。

但是一个通孔的电阻等于5个方格的导线,请使用2层金属对“通道布线”对的脚标拥堵无法求解的问题,采用多层布局重新建模和求解,最小电阻和问题2最小电阻进行对比。

在这里插入图片描述

符号意义

N布线区域的宽度

K总的引脚对数

i第i对引脚

A_i第i对引脚的上引脚坐标

B_i第i对引脚的下引脚坐标

假设上引脚坐标从左至右按顺序编号

假设两层金属版无差异*

问题1和问题2

启发思路我们使用A*算法

1

详细Python代码和解释请看这个大佬的帖子

看了上面的帖子代码,你可能会理解是否有无解跟脚标顺序存在关联,不存在长宽的关系,所以检验有无解也就是检验上下脚标顺序是否按顺序排列。

如果你不明白为什么布线拥堵是和脚标有关系建议作图去理解~*

0-1规划思路

我们对有解情况进行求最小布线距离。

对布线的区域赋值为1

未布线的区域赋值为0

d=sum(y)={x=1}y∈(m,n)

{x=0}

方法二

是否有解采取同样的解决方法

而对于有解的距离计算采用曼哈顿距离公式进行推演

在这里插入图片描述

方法二的Matlab代码

1.clc;clear

2.Ai=[1478101214];%输入上脚标坐标

3.Bi=[1285131115];%输入下脚标坐标

4.a=sort(Bi);%对矩阵进行升序排序

5.n=input('请输入n的数值');%输入宽度

6.l=input('请输入l的数值');%输入长度

7.K=sum(sum(Bi~=0));%K为Bi中非零元素数

8.kuandu=['宽度',num2str(n)];

9.disp(kuandu)

10.changdu=['长度',num2str(l)];

11.disp(changdu)

12.duishu=['脚标对数',num2str(K)];

13.disp(duishu)

14.shangjiaobiao=['上引脚坐标',num2str(Ai)];

15.disp(shangjiaobiao)

16.xiajiaobiao=['下引脚坐标',num2str(Bi)];

17.disp(xiajiaobiao)

18.ifa==Bi%如果排序矩阵跟原矩阵相同

19.i=sym('i');%定义i

20.ANS=abs(Ai-Bi);

21.ANS1=sum(ANS);

22.ANS2=n*K;

23.d=ANS2+ANS1;

24.Rmin=['最短布线长度',num2str(d)];

25.disp(Rmin)

26.else

27.msgbox("无解")%输出无解

28.end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

问题3

对于问题3的双层解决问题

决定使第一层布线数在不拥堵的情况下达到最大,并且将剩余的布线放置到第二层,也就是将双层布线问题转化成两个一层布线问题,对于第二层脚标拥堵沿用第一问的解决方法,若第二层布线拥堵,则说明该情况在双层布线中无解。

如何使得第一层布线在不拥堵的情况下还能达到最大呢?

让第一层的引脚对数达到顺序排列最大,将剩余脚标对放置到第二层。

对于如何筛选脚标对数则分别使用了贪婪算法和二分排序法进行筛选。

贪婪算法Python代码如下

1.arrayLen=int(input())#数组长度

2.

3.

4.list=[]#数组1

5.list2=[]#数组2

6.

7.Temporaryarray1=[]#暂存

8.Temporaryarray2=[]

9.

10.end_list=-1

11.

12.list=input().split()

13.list2=input().split()

14.

15.

16.foriinrange(arrayLen):

17.list[i]=int(list[i])

18.list2[i]=int(list2[i])#将字符变为数字

19.

20.

21.foriinrange(arrayLen-1):

22.if(list[end_list-1]>list[end_list]):

23.Temporaryarray1.append(list.pop(end_list-1))

24.Temporaryarray2.append(list2.pop(end_list-1))

25.else:

26.end_list=end_list-1

27.print(list)

28.print(list2)

29.

30.print()

31.print(Temporaryarray1[:

:

-1])

32.print(Temporaryarray2[:

:

-1])

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

控制台输入的是数组长度上角标下角标

例如数组长度是5

上角标21354

下角标679810

那么输入5

21354

679810

二分排序法Matlab代码如下

1.function[s1,s2]=erfenpaixu(data)

2.%data=[100269578131112];

3.chang=length(data);

4.fori=1:

chang

5.route(i)=0;

6.end

7.len=[];

8.

9.max_len=0;

10.len

(1)=1;

11.fori=2:

length(data)

12.len(i)=1;

13.route(route>=0)=0;

14.forj=1:

i-1

15.if(data(j)len(i))

16.len(i)=len(j)+1;

17.end

18.end

19.if(len(i)>max_len)

20.%s1_temp=[s1_tempdata(j)];

21.max_len=len(i);

22.end

23.

24.end

25.max_len;

26.

27.max_select=max(len);

28.s1=[];

29.s2=[];

30.fori=1:

max_select

31.

32.ind=find(len==i);

33.temp=min(data(ind));

34.s1=[s1,temp];

35.

36.end

37.

38.fori=1:

length(data)

39.if~ismember(data(i),s1)

40.s2=[s2,data(i)];

41.end

42.end

43.

44.s1;%第一层下脚标

45.s2;%第二层下脚标

46.%利用二分排序法进行筛选数据

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

data=[具体数值]控制台输入

如果需要调用筛选后的数据控制台输入

[s1,s2]=erfenpaixu(data)%调用指令***

缺陷问题

对于以上问题的解决存在某种不具有实际意义的脚标排序情况

如在4*7的布线空间中

上脚标23456

下脚标678910

虽然其也是按照顺序排列但是其依然无解

A这里插入图片描述

其中Ai为上引脚坐标n为宽度Bi为下引脚坐标

也就是说如果符合该公式其布线依然拥堵,题目依然无解。

当然这个公式只是一种数学猜想,希望读者们自己进行数据检验并提出改进空间

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1