4、有限元建模流程:几何简化、网格划分策略、边界条件设定、载荷施加
好,咱们进入正题。TCB热压键合的仿真,说白了就是把物理过程搬到电脑里算一遍。但你不能真把整个设备、整个晶圆都建模进去,那计算量谁也扛不住。所以,建模流程的核心就四个字:合理简化。
我个人习惯,拿到一个TCB工艺问题,先花半小时想清楚“我要算啥”。是算芯片翘曲?还是焊点应力?还是界面脱层?目标不同,模型简化策略完全不同。下面我按步骤拆开讲。
4.1 几何简化:该砍的砍,该留的留
很多新手一上来就把芯片、基板、焊球、Underfill、散热盖全画出来。结果网格一画,几百万单元,算三天三夜。其实没必要。
我的经验是:
- 芯片和基板:如果只关心热-力耦合,可以简化为各向同性的均质块体。除非你要分析芯片内部的金属层应力,否则没必要建详细层结构。
- 焊球/微凸点:这是关键。TCB工艺中焊点往往还没完全熔化,处于半固态。我建议用等效材料模型代替真实几何。比如把一排焊点等效成一个连续层,赋予等效弹塑性参数。我在项目中试过,误差在5%以内,计算量减少80%。
- Underfill:如果工艺阶段还没点胶,就别建。如果模拟的是键合后冷却过程,那必须加上。
- 对称性利用:TCB头通常是阵列式。如果芯片阵列是周期性的,只建一个1/4模型甚至1/8模型就够了。记得加对称边界条件。
重要原则:几何简化的底线是——不能丢失你关心的物理现象。比如你要分析焊点颈部的应力集中,那就不能把焊点简化成方块。
4.2 网格划分策略:疏密有致,别均匀
网格划分是仿真里最磨人的活。我刚开始做的时候,总想把网格画得又细又均匀,结果算到一半电脑死机。后来才明白,网格要“疏密有致”。
我的建议:
- 关键区域加密:焊点与芯片/基板的界面、芯片边角、应力集中区,网格尺寸控制在5-10μm。远离这些区域的地方,比如基板底部,可以放到50-100μm。
- 单元类型选择:对于热-力耦合分析,我推荐六面体单元(C3D8T)。它比四面体单元精度高,而且不容易出现剪切闭锁。如果几何太复杂,退而求其次用二阶四面体(C3D10T)。
- 过渡网格:从细网格到粗网格,要平滑过渡。突然的尺寸变化会导致计算发散。我一般用渐变比例1.2-1.5。
小技巧:在划分网格前,先做一次“几何清理”。把那些小倒角、小圆角、微小台阶都去掉。这些特征对结果影响微乎其微,但会让网格质量急剧下降。
下面这张图是我常用的网格划分策略,你可以参考一下:
4.3 边界条件设定:别让模型“飞”起来
边界条件设定,说白了就是告诉软件“哪里固定、哪里自由”。TCB工艺中,边界条件相对明确,但有几个坑要注意。
位移边界条件:
- 底部基板:通常固定底部中心点或底面,防止刚体位移。但不要全约束,否则会引入额外应力。我一般只约束Ux、Uy、Uz在基板底面中心,或者约束底面所有节点的Uz。
- 对称面:如果用了1/4模型,对称面上要加法向位移约束。比如X=0对称面,约束Ux=0;Y=0对称面,约束Uy=0。
- TCB头:通常模拟为刚体,施加向下的位移或压力。注意,TCB头在键合过程中会有微小倾斜,如果你要分析均匀性,可以加一个旋转自由度。
热边界条件:
- 初始温度:设为室温,比如25°C。
- 加热过程:TCB头施加温度载荷,通常是从室温快速升温到键合温度(比如250-350°C)。我习惯用幅值曲线(Amplitude)来定义温度随时间的变化。
- 对流换热:芯片和基板表面与空气接触,设置对流换热系数。这个系数不好查,我一般取10-20 W/(m²·K),具体看设备风道设计。
注意:热边界条件中,最容易忽略的是接触热阻。芯片与焊点之间、焊点与基板之间,都存在接触热阻。如果不设,温度场会过于均匀,导致应力计算偏小。我一般设接触热阻为1e-4 ~ 5e-4 m²·K/W。
4.4 载荷施加:温度、压力、时间,一个不能少
TCB工艺的载荷,说白了就三样:温度、压力、时间。但怎么施加,有讲究。
温度载荷:
- 通过TCB头施加。我通常把TCB头设为温度边界条件,而不是热流。这样更稳定。
- 升温速率:TCB工艺升温很快,一般50-100°C/s。在仿真中,时间步长要设小一点,比如0.01s,否则温度场会振荡。
- 保温时间:键合温度保持几秒到几十秒。这个阶段焊点发生蠕变,应力会松弛。如果你用蠕变模型,这个阶段必须算。
压力载荷:
- 施加在TCB头上,方向向下。压力大小根据工艺参数来,一般0.1-1 MPa。
- 注意:压力不是瞬间加满的。实际工艺中,压力是逐渐上升的。我建议用斜坡加载,在0.5-1秒内从0升到目标值。
时间历程:
- 整个TCB过程分为:升温→保温→冷却。每个阶段的时间步长不同。
- 升温阶段:步长0.01-0.05s,捕捉快速变化。
- 保温阶段:步长0.1-0.5s,计算蠕变。
- 冷却阶段:步长0.05-0.1s,注意冷却速率。
核心要点:载荷施加的顺序很重要。先加热还是先加压?实际工艺中两者几乎同时。但在仿真中,我建议先加压力,再加温度。这样更稳定,不容易出现接触不收敛。
下面是一个典型的热-力耦合载荷施加代码片段(Abaqus CAE Python脚本风格):
# 定义幅值曲线 - 温度
from abaqus import *
from abaqusConstants import *
# 温度幅值:0-1s升温到300°C,1-5s保温,5-8s冷却
tempAmp = mdb.models['Model-1'].TabularAmplitude(
name='TempRamp',
timeSpan=STEP,
smooth=SOLVER_DEFAULT,
data=((0.0, 25.0), (1.0, 300.0), (5.0, 300.0), (8.0, 25.0))
)
# 压力幅值:0-0.5s线性加载到0.5MPa
pressAmp = mdb.models['Model-1'].TabularAmplitude(
name='PressRamp',
timeSpan=STEP,
smooth=SOLVER_DEFAULT,
data=((0.0, 0.0), (0.5, 0.5), (8.0, 0.5))
)
# 创建分析步
mdb.models['Model-1'].CoupledTempDisplacementStep(
name='Bonding',
previous='Initial',
description='TCB热压键合过程',
initialInc=0.01,
minInc=1e-5,
maxInc=0.5,
maxNumInc=1000
)
嗯,到这里,建模流程的核心部分就讲完了。你可能会问:“这些参数怎么定?” 说实话,没有标准答案。每个设备、每种材料都不一样。我的做法是:先做一组DOE(实验设计)仿真,跑几个极端工况,看看趋势对不对。然后再细调参数。
我曾经遇到一个项目,客户给的工艺参数怎么算都算不对。后来发现是边界条件设错了——他们把TCB头当成了固定约束,但实际上TCB头是有弹性变形的。改过来之后,结果就吻合了。所以,边界条件一定要跟实际物理过程对应,不能想当然。
最后,送你一句话:仿真不是算得越细越好,而是算得越准越好。合理的简化、恰当的网格、正确的边界,比盲目追求高精度更有价值。
公众号:蓝海资料掘金营,微信deep3321