集成电路通道布线数学建模
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
集成电路通道布线数学建模:
集成电路通道布线中脚标拥堵问题
集成电路是利用半导体技术把电子元件集成在一起的具有特定功能的电路,已广泛应用于生产生活的方方面面。随着技术的发展,集成电路内部的元器件数目已达到十亿级别,需要借助专用计算机软件才能完成电路设计与实现,该类软件统称为电子设计自动化(Electronic Design Automation,EDA)工具。
集成电路设计由多个阶段组成,其中一个重要阶段称为“物理设计”,先将器件摆放在合适的位置,然后用金属线连接器件实现连接关系。其中,后者称为“布线”,它是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代码和解释请看这个大佬的帖子
https:///Python_Matlab/article/details/1064 69362
看了上面的帖子代码,你可能会理解是否有无解跟脚标顺序存在关联,不存在长宽的关系,所以检验有无解也就是检验上下脚标顺序是否按顺序排列。
如果你不明白为什么布线拥堵是和脚标有关系建议作图去理解~*
0-1规划思路
我们对有解情况进行求最小布线距离。
对布线的区域赋值为1
未布线的区域赋值为0
那
d=sum(y)={x=1}y∈(m,n)
{x=0}
方法二
是否有解采取同样的解决方法
而对于有解的距离计算采用曼哈顿距离公式进行推演
在这里插入图片描述
方法二的Matlab代码
1. clc;clear
2. Ai=[1 4 7 8 10 12 14];%输入上脚标坐标
3. Bi=[1 2 8 5 13 11 15];%输入下脚标坐标
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. if a==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的双层解决问题
决定使第一层布线数在不拥堵的情况下达到最大,并且将剩余的布线放置到第二层,也就是将双层布线问题转化成两个一层布线问题,对于第二层脚标拥堵沿用第一问的解决方法,若第二层布线拥堵,则说明该情况在双层布线中无解。
如何使得第一层布线在不拥堵的情况下还能达到最大呢?