4. 电阻测试结构:设计、测量与提取
电阻测试结构,听起来简单,但要做到「测出来就是准的」,其实门道不少。我见过不少新同事,把四个焊盘一画就觉得完事了,结果量出来的数据根本没法用。
说白了,一个靠谱的电阻测试结构,要回答三个问题:怎么设计才能避免寄生效应?怎么测才能消除接触电阻?怎么提取才能得到真实的薄层电阻?
核心思路:电阻测试结构的关键,在于把被测电阻与接触电阻、引线电阻分离开。分离得越干净,数据就越真。
4.1 设计:结构与尺寸
我最早做电阻结构时吃过一次亏。设计的尺寸太小,结果光刻偏差对电阻值的影响非常大,批量数据离散得一塌糊涂。所以设计的第一步,是搞清你要测什么。
4.1.1 四端法结构
四端法,也叫开尔文结构。原理很简单:两条线通电流,两条线测电压。这样电流回路的接触电阻和引线电阻,就不会串到电压测量回路里去。
你想想看,如果只用两端法,接触电阻可能有几欧姆,而你要测的电阻可能才几十毫欧,那数据基本就废了。
设计要点清单:
- 电流端(Force):从外端接入,走大电流不发热
- 电压端(Sense):从内端引出,走极小电流不影响电位
- 传导线长度:过长会增加寄生电阻和压降
- 端头尺寸:一般取电阻主体宽度的 2-3 倍,以减少端头效应
4.1.2 尺寸选择逻辑
电阻的阻值由 Rs * (L/W) 决定。Rs 是薄层电阻,单位是 Ω/□。但实际结构中,端头电流会扩散,等效的 L 和 W 会变。我用过的一个经验规则是:
- 长宽比(L/W):至少在 5:1 以上,端头效应才足够小
- 宽度 W:大于最小设计规则的 3 倍,避免线宽偏差影响过大
- 长度 L:大于最小尺寸的 10 倍,利于端头修正
我个人习惯:在同一晶圆上放至少三个不同 L/W 的电阻组。比如 5:1、10:1、20:1。这样通过回归就能直接算出 Rs 和端头修正量,比单点靠谱得多。
4.1.3 端头修正
实际电流在端头处不是垂直进出,而是有弧线流动。这会让有效长度 L 变短。修正公式一般是:
R_measured = Rs * (L_eff / W)
L_eff = L_drawn - 2 * ΔL
这个 ΔL 和端头形状、端头与连接孔的间距都有关系。我曾经做过一组实验,发现若端头距离接触孔不足 5 μm,ΔL 会增大 30% 以上。
4.2 测量:硬件与步骤
设计做好了,测量也不能马虎。这里说几个关键点,都是我踩过坑后才明白的。
4.2.1 测量硬件配置
最常用的配置是:恒流源 + 数字电压表 + 开关矩阵。我建议恒流源输出电流稳定度要优于 0.1%,电压表分辨率至少 1 μV。
| 参数 | 推荐值 | 备注 |
|---|---|---|
| 恒流源电流 | 100 μA ~ 1 mA | 视电阻大小调整,防止自发热 |
| 电压表输入阻抗 | >10 GΩ | 避免分流 |
| 采样延迟 | 50 ~ 200 ms | 等电流稳定后再采集 |
| 扫描次数 | ≥ 5 次 | 取中位数或平均值 |
4.2.2 编程实现
下面是一个伪代码示例,展示测量流程:
# 恒流源初始化
source.set_current(500e-6) # 500 μA
source.output(True)
# 遍历所有电阻测试结构
for each structure in DUT_list:
# 通过开关矩阵连接
switch.connect(channel_force_high)
switch.connect(channel_force_low)
switch.connect(channel_sense_high)
switch.connect(channel_sense_low)
# 等待稳定
delay(100e-3)
# 采集电压
V = voltmeter.measure()
# 记录原始数据
data[structure.id] = {"I": 500e-6, "V": V}
# 提取电阻
for id, sample in data.items():
R = sample["V"] / sample["I"]
# 根据 L/W 计算 Rs
Rs = R * sample["W"] / sample["L"]
我曾经遇到一个案例:一个同事用 10 mA 电流去测一个 10 Ω 的电阻结构,结果电阻因自发热增大了 5%。测量时一定要确认电流密度不超过 1×10⁵ A/cm² 的经验极限。否则你测出的根本不是真实薄层电阻。
4.3 提取:从数据到物理参数
数据采回来只是第一步。你要从一堆 V/I 数字中,把真正的 Rs 和修正因子提取出来。
4.3.1 Greeks法则应用
Greeks法则是对多结构数据的统计算法。核心思想是:对不同 L/W 的结构,测量其总电阻 R_total,然后做线性回归。
公式是:
R_total = Rs * (L_drawn / W) + 2 * R_contact
其中,R_contact 是单端接触电阻。
画出 L_drawn 和 R_total 的曲线,斜率就是 Rs/W,截距就是 2*R_contact。这个方法能同时分离出薄层电阻和接触电阻,非常实用。
4.3.2 数据筛选
实际测量中,总会有异常点。比如探针打偏了,或者有颗粒污染。我一般用两个指标剔除数据:
- 残差阈值:拟合残差超过 5% 的点直接剔除
- 重复性要求:同一组结构的多次测量,RSD 应 < 2%
小技巧:在提取 Rs 时,同时记录 V 和 I 的极性翻转数据。正反向各测一次取平均,可以消除热电势和偏移电压的影响。
4.3.3 温漂与补偿
电阻结构对温度敏感。Si 的电阻温度系数(TCR)大约是 0.1%/℃。如果测量时温度变化 1 ℃,结果偏差能有 0.1%。在量产测试中,我建议在探针台旁边贴一个热电偶,同时记录温度,后处理时做线性补偿。
# 温度补偿范例
def compensate_R(R_measured, T_measured, T_reference, TCR):
return R_measured / (1 + TCR * (T_measured - T_reference))
# TCR 一般取 0.001 /℃ 作为近似
4.4 常见问题与避坑
问题一:测量值偏小
原因通常是电压端感受压太小,或者探针接触不良。解决方案:用电流-电压四线测试,并定期用标准电阻校准整个测量回路。
问题二:数据离散度大
可能是因为电阻结构旁边的 dummy 不够,或者周边有漏电路径。我建议在结构周围加一圈 guard ring 接地。
问题三:提取的 Rs 与设计值不符
检查端头修正系数是否使用正确。如果没有经过校准的端头修正表,宁可先做一组不同 L/W 的实验标定。
嗯,该说的也就这些了。电阻测试结构,设计与测量各占一半,提取则考验你的数据处理功底。把这些点吃透了,测试出来的 Rs 值才不会坑了后面的工艺监控。