2023 ICCAD Contest Problem B 3D Placement with Macros 赛题解析


###############################################################
12/3更新:感觉之前写的这篇的方法已经过时了。已更新较新的两篇方法:
https://blog.csdn.net/kkkjfg/article/details/134587772
###############################################################

问题简述

问题背景

随着芯片里的单元尺寸越来越小,进一步压缩面积变得越发困难,即单片3D(Monolithic 3D)堆叠技术变得越来越重要,这种技术可以把元器件分割到两个芯片上,然后把芯片堆叠起来,以进一步缩小面积和增大元器件密度,那么直接做两个芯片,然后拿导线相连可不可以呢?答案是也不行,因为两个芯片就要用到两套基底,芯片间的连线的传输速率也会有所限制。所以要做成“单片”3D,就是在原本的芯片上多堆叠一些金属层的方式把芯片向z方向扩展,不过目前来说,这种技术仅仅限于两层,且两层之间相对独立,层间使用纳米级的层间过孔连接。这个赛题就是给定一些宏单元(就是较大的模块,如存储单元)和标准单元,要求在限制范围之内把它们合理地布局在两层芯片上。

问题描述与优化目标

给定一些宏单元和标准单元,以及它们之间的连线,要求合理划分到两个两个芯片中,并优化以下目标:
1,最小化各网络的HPWL之和。
2,最小化过孔损失。
3, 最小化运行时间。
即:
在这里插入图片描述
跟平均时间比,每快2倍就可以获得多百分之2的分数,8倍速就能获得6%的加成。反之亦然,以下是计算公式。
在这里插入图片描述
上半芯片是和下半芯片正对着贴在一起的:
在这里插入图片描述
里面这些terminals就是芯片的连接端口,端口由于要放在芯片顶层,会比标准单元大很多,数目也有限。由于端口和端口是直接贴在一起的,所以上方芯片的某网络,比如说net1的端口是在(1,1)处,下方的net1的端口就要放在相应位置处。
在这里插入图片描述
在真实的生产中,最后两个芯片的接触面会做成对称的,但在赛题中,只要把上下芯片的对应网络的暴露端口的位置设置成一模一样就可以了,比如net1连接可以都放在(1,1)或者都放在(2,2)就行。

还有三点需要注意的是,1,宏单元允许进行旋转。1,上下芯片各自的连接端口都不与标准单元,宏单元在一个金属层,所以在考虑端口位置的时候不用考虑它与标准单元,宏单元的重叠冲突,但端口和端口之间有最小间距要求。3,上下芯片为了加工方便,允许使用不同的工艺进行生产,所以同样的单元放在上方芯片和放在下方芯片的大小,引脚位置可能会不一样。

输入输出格式

在这里插入图片描述
没什么好说的,这一页的输入就是说有多少个元件,以及给定元件之间的连接,还给了每个芯片的最高利用率(利用率=所有元件面积/芯片面积)不能超过多少。
在这里插入图片描述
这一页的输入是在说上下层芯片用的工艺,芯片的行高和行数,宽度,以及两种工艺下的各元件的大小,引脚位置。
在这里插入图片描述
这一页说了两层之间的连接端口的大小,最小间距,以及每个引脚在最终评价指标中的权重。最后,赛题说明了各输入的顺序。

在这里插入图片描述
输出格式很简单,就是说清楚上层芯片以及下层芯片要放哪些单元,它们的位置以及旋转角度。
下面是一个示例。
在这里插入图片描述

以往工作

以下两篇是赛题尾附上的论文列表中的论文。提供了优化两层布局的一些思路。

Compact-2D: A Physical Design Methodology to Build Two-Tier Gate-Level 3-D ICs

做单片3D布局有一种思路是先用现成的工具做2D的布局,然后想办法把布局映射到两层芯片上。Compact-2D就是用这种思想的方法之一。
在这里插入图片描述
以上是Compact-2D的算法流程,之所以叫“Compact-2D”,是因为这个算法的核心是图中叫“Placement Contraction”的一步,这一步缩短元件之间的连线的长度,它之前的memory expansion和RC scaling是做的准备工作,以便“Contraction”这一步顺利实施,其后的“Placement Row Splitting”和“Post-Tier-Partitioning Optimization”等是针对这个缩小后的布局做进一步的优化。

在这里插入图片描述
Contraction这步其实也很简单,就是把线长缩短至原来的 1 / 2 1/\sqrt{2} 1/2 倍就行了,这样就完成了布局的收缩,这样做是为了适应两层芯片所应有的面积。
听起来好像很简单粗暴,看到这里相信会有疑问:收缩之后的布局仍然是合法布局吗?既然仅仅是收缩就可以达到减小面积的话,为什么还要做双层结构?
根据我的理解,收缩之后的布局从拥挤度来说可能不合法,但在之前的memory expansion的处理下,应该起码是没什么重叠的。而这里正是因为收缩之后可能变得拥挤了布线资源不足,所以需要扩展到两层上。

收缩之后需要使用FM之类的算法进行分割把布局分割成上下两半,这样就算是大致地在两层间进行了布局了。

下面讲一下收缩之前的准备工作,和收缩之后如何进行进一步的优化。

在这里插入图片描述
先讲这一段,首先不好理解的概念就是这个Memory Expansion。

在这里插入图片描述
文中好像是说如果不做expansion就会出现像(a)这样出现重叠,而(b)这样先进行过expansion就不会出现重叠,我第一次看这里是很懵的,我在想,(a)里直接把宏单元也缩小不就行了,反正(b)中也缩了,为什么要扩大再缩小?

我的理解是,首先,要注意到流程图中memory expansion是出现在线长缩小之前的,所以如果不做这一步的话,要保证缩小的时候不重叠,宏单元就要进行压缩,我画了个示意图我觉得更形象一点:
在这里插入图片描述
这里橙线和绿线要是要缩短的话,这两个宏单元就不可避免的要进行收缩。收缩有什么不对吗?各种单元其实是没办法收缩的,因为收缩了之后不符合规范没法进行实际制作。所以要么缩之前先把该扩大的扩大,这样缩小之后就变回原大小了,或者缩小之后再进行扩大。Compact-2D这篇文章显然是前者,先扩大,再进行布局收缩。

另一个问题是,为什么只提memory单元,不提标准单元?我的理解是,memory单元这种是需要跨越很多行的,是和线长是一个数量级的,才存在线长一缩短就导致重叠这种情况,而标准单元本来就很小,就占一行,相对来说就像一个点一样,即使提前扩大了 2 \sqrt{2} 2 倍也到不了两行,所以不用管或者单独去处理。

流程图中Memory Flattening这一步说的是由于宏单元的接口太多了,分放两行可能导致层间连接太多,所以可以手工将宏单元都放在同一层。

RC Scaling是说由于导线经过了缩短,其电容电阻值会发生变化,如果要保证电路运行情况和缩短之前一样的话要进行线型的更改,以让它的电阻率等参数变化,R,C的值保持不变。
在这里插入图片描述
(图源:https://m.elecfans.com/article/2006075.html)
上图是我从一篇博客上找的公式,所以看来延时与电阻率,电容率,导线长度都有关系,当线长缩短到 1 / 2 1/\sqrt{2} 1/2 倍的时候,r,c都扩大到 2 \sqrt{2} 2 倍刚好延时不变。

下面介绍一下在分层之后的后续的优化。
在这里插入图片描述
后续的优化这篇文章是希望使用现成的2D优化工具进行优化,所以要做的事情是把现在的两层的情形映射到一层上然后进行优化。
在这里插入图片描述
这文章使用了一个巧妙的方法,就是把两层交错放在同一个平面上,但是通孔via还是放在原有位置,如上图白色是上层的,红色是下层的,假如出现上层下层的单元有一点重叠的话就不能使用已有的2D优化工具进行优化了,所以作者将这一行进行了“Splitting”,一半放上层,一半放下层。但是通孔的位置还是不变,这样就取消了重叠。这样就可以送进2D优化工具进行优化了。注意这里并不是真实的把一个单元变成了一个一半高的单元,这里只是为了解除重叠送进2D优化工具暂时高度折半了,优化结束之后还要再变回来。

文章说这种方法可以不同于之前的一层一层进行优化的方法,使用这种方法可以两个层一起优化,更有可能得到更好的解。这种做法有一个局限,就是如果上层芯片和下层不使用相同的工艺,上下层不一样高的话就不能用这种方法了。

流程图中再往后的"Incremental routing"和"Final GDSII Generation"看上去都是对布局进行整理和合法写入文件了,不涉及Compact-2D的核心idea。

总的来说,Compact-2D是一篇尝试使用2D优化技术优化双层布局的算法,核心idea包括缩线和分割行,预处理之后进行缩线使得分割之后的布局几乎是直接可以用在双层芯片上的,分割行的想法使得仅仅使用现有的2D布线技术就可以对两层同时进行优化。
就局限性来说,这篇文章仍然是使用2D的方法和思维解决问题,是希望用2D的工具解决3D的问题。不会是这个问题的最终解和最优解,且行分割这种方法在上下芯片的行高不同时无法使用。

Pin-3D: A Physical Synthesis and Post-Layout Optimization Flow for Heterogeneous Monolithic 3D ICs

以下是Pin-3D的流程图,看起来比Compact-2D简洁很多,就是分层,进一步布局优化,合法化,时序优化,ECO优化这一串。
在这里插入图片描述
Pin-3D的核心思想是想解决布局上层或者下层的时候不知道另一层的情况。Compact-2D针对这个问题的解决方案就是行分裂,这样把两行摆在一起进行优化就能在两层的布局的上下文中进行优化了。

Pin-3D的解决方案是把另一层的引脚投影过来,而无视另一层的各单元所占用的面积。如下,(b)中,下层芯片的单元变成了浅蓝色,表示被无视了,在©中,上层单元变成了浅红色表示无视,但被无视的一边的芯片引脚固定且不无视,这样有利于在优化另一侧的时候更好地捕捉信息布出更短的线。
在这里插入图片描述
后续的legalization和timing closure的介绍章节也基本上在说使单元透明和投影引脚的一些好处,可以更好地利用上下文之类。

文章后面还介绍了一个”ECO optimization",文中说寄存器关键路径中,寄存器本身的延时占总延时的比例大于10%,所以这里把关键路径上的寄存器的驱动强度进行升级,或许这样可以加快速度吧。如果驱动强度已经是最大,则尝试更换至最小电压阈值的寄存器(可能电压阈值越低延时越低?)。非关键路径上,则把寄存器进行降级,若已经是最低级,则更换为最低功率的寄存器。文章说这样能又解决时序冲突又节约功率。不过我其实这块没有看太懂,感觉这个策略和“Pin-3D”这个标题似乎也没什么关系,不过好在这部分和布局的赛题关系已经不大了。
在这里插入图片描述
看完几篇文章,我发现Shrunk-2D和Compact-2D都有2D布局-收缩-分割-逐层再布局的步骤,我其实每get到为什么前两步都有先布局和收缩的步骤,我问了问chatgpt,感觉它说的挺有道理:

“在实际的芯片设计中,电路规模往往非常庞大,直接采用2D布局算法进行全局布局会面临许多问题,如布线长度过长、时序规格无法满足等,从而导致布局质量下降。因此,在这种情况下,先采用缩小布局的方法,将电路规模降低到可接受的范围,然后再进行分割和逐层布局,可以大大提高布局质量和效率。”
其实就是,提前做一个大致的整体2D布局以满足时序要求,这样再分割之后,即使再各自优化,线长,相对位置与原布局相接近,发生线长过长,时序不满足等问题的概率会小一些。

这个意义上,Pin-3D做的工作其实是挺有意义的,因为Shrunk-2D和Compact-2D之所以去不掉2D布局-收缩这两步,是因为每层都感知不到另一层的导线的位置,直接布局容易造成”上下层某net都短,但上下拼起来之后net过长“等等的问题,Pin-3D做一个引脚投影之后,由于能看到整个net,这种问题会被缓解。

总结

1,从已有的方法上看上去两层布线问题总是免不了partition这一步,总得先把上下层之间做一次分割,把模块大致分配到某一层了才能做进一步的优化,甚至Pin-3D中,宏单元被“flatten”到同一层。
2,两层的芯片布局问题目前的方法还是伪3D,为了感知另一层的信息,Compact-2D采取的方案是行分裂,把两层的单元放在一起讨论,Pin-3D采取的方法是投影另一层的引脚,并且这些方都希望利用现成的已有的2D工具进行辅助处理。
3,看了看去年的优胜队伍的展示视频,貌似步骤就是分割,再逐层global placement,detailed placement这样,这样能行的原因可能是不要求做时序分析,所以逐层弄,无视另一层的网络是可行的。所以或许今年也可以就逐层做就行了,但是这种情况下,宏单元还没想好怎么处理比较合适,或许可以直接参与分割?或许可以像Compact-2D一样做一个“flatten”都放在同一层?
4,考虑到上下层工艺不同,或许分割元器件的时候可以向元器件更小的一侧倾斜。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值