☰
MIM电容文档里的电阻模型:方块电阻表与等效电路实战解析
2026/11/3 21:01:57 网站建设 项目流程

简介:这份资料是 TSMC 关于 MIM 电容与 RF 电阻模型的官方技术文档,面向模拟/射频 IC 设计工程师、版图工程师及微电子相关专业学习者,用于解决 MIM 电容建模、电阻参数提取与电路仿真中的参数取值问题。压缩包内共 1 个 PDF 文件,约 2.2MB,内容为原厂规范文档,便于直接查阅与归档。已有 1853 人学习下载,具备较高的工程参考价值。文档围绕测量结果展开,给出 Sheet Resistance Table 与 Film Parameters,覆盖 P+ poly、N+ poly、P+ diff、N+ diff 等 film 类型在有无 silicide 条件下的 Rp、Rint、Rgrain 参数,并列出 TC1、TC2、VC1、VC2 等温度与电压系数;同时提供电阻等效电路模型及 R0 由 Rsh 与 deltaL、deltaW 计算的关系式,说明 -40°C~125°C 温度范围与 -3.3~3.3V 电压范围内的适用条件。读者可据此理解 MIM 电容性能、完成电阻模型参数代入与设计校核,适合作为设计参考与学习资料。

1. 拿到一份“名不副实”的工艺文档:MIM 电容标题下全是电阻模型

如果你在找 MIM 电容的工艺参数,翻到一份标题写着 MIM 电容介绍、正文却整页都是 P+ poly、N+ poly、diff 电阻表格的文档,先别急着关掉。这份材料真正值钱的地方,恰恰是那张 Sheet Resistance Table 和后面那套电阻等效电路模型——它把版图尺寸、方块电阻、温度系数、电压系数串成了一条能直接算数的链路。做模拟前端、偏置网络、RC 滤波或者匹配网络的工程师,只要用到 poly 电阻或扩散电阻,这份文档就是绕不开的底稿。它适合两类人:一是要手算阻值、评估温漂的模拟设计者,二是要把工艺参数落进仿真模型、做 corner 分析的版图与建模人员。下面按“参数怎么读、模型怎么套、坑在哪”拆开讲。

2. 拆解 Sheet Resistance Table:Rp、Rint、Rgrain 到底谁管谁

2.1 四种 film 的阻值分层逻辑

文档把电阻膜分成四类:P+ poly w/o silicide、N+ poly w/o silicide、P+ diff w/o silicide、N+ diff w/o silicide,另外还给了带 silicide 的 poly 和 diff 的方块电阻。这里最容易翻车的是把“带 silicide”和“不带 silicide”的模型混用。带 silicide 的 poly,电流主要走上面的低阻硅化物层,所以模型退化成单一 R0 加温度、电压修正;不带 silicide 的 poly,电流被迫穿过整个多晶硅膜,界面和晶粒边界开始主导,于是才有 Rint、Rgrain 这两个额外项。

从表格看,P+ poly w/o silicide 的 Rp 是 311±65 Ω/sq,Rint 是 66.98 Ω·um,Rgrain 是 39.39 Ω;N+ poly w/o silicide 对应 292±66、14.84、37.22。注意 Rint 的单位是 Ω·um,不是 Ω/sq,它跟宽度相关,套公式时必须先除以有效宽度。扩散电阻那边,N+ diff w/o silicide 是 59±5.8 Ω/sq,P+ diff 是 133±19 Ω/sq,这两个没有给 Rint、Rgrain 的分项,直接用 R0 加 TC、VC 修正即可。

提示:表格里 Rp 那一列下面还有一串 TC1、TC2、VC1、VC2 的数字,它们不是独立参数,而是分别对应 Rp、Rint、Rgrain 三个分量的温度/电压系数,读表时按行对齐,别串行。

2.2 有效宽度与 deltaW 的修正关系

带 silicide 的 poly 表格里有一列 deltaW,P+ 是 -0.051 um,N+ 是 -0.065 um。这个负值意味着实际导电宽度比画出来的 W 要宽,计算 R0 时公式是 Rsh*(L-deltaL)/(W-deltaW),deltaW 为负相当于分母变大、阻值变小。很多新手直接拿 drawn W 去算,结果跟实测差出几个百分点,在匹配要求高的偏置电路里就是致命的。

不带 silicide 的 poly 没有单独列 deltaW,但 Rint 项里写的是 Rint/(W-DeltaW),说明同样要做宽度修正。我一般会先把 deltaW 代进去算一遍,再用 drawn 尺寸算一遍,两者差值超过 3% 就说明这个电阻对宽度敏感,版图上要留够余量。扩散电阻的表格没给 deltaW,但注明了带 silicide 的 N+、P+ diff 方块电阻是 geometry dependent,意思是窄条和宽条的 Rsh 不一样,不能一个值用到底。

2.3 用 Python 把表格参数变成可算的阻值

把表格抄进脚本是第一步,关键是让公式和参数一一对应。下面这段代码把 P+ poly w/o silicide 的完整模型跑一遍,输入 drawn L、W 和温度、偏压,输出总电阻。

# P+ poly w/o silicide 电阻估算,参数取自文档表格 Rp_sheet = 311.0 # Ohm/sq, Rp 均值 Rint = 66.98 # Ohm*um Rgrain = 39.39 # Ohm deltaW = 0.0 # 该 film 未单列 deltaW,先按 0 处理 TC1_Rp, TC2_Rp = -13.80e-6, 581.1e-9 TC1_Rint, TC2_Rint = -1.790e-3, -7.245e-6 TC1_Rgrain, TC2_Rgrain = 2.979e-3, -2.295e-6 VC1_Rp, VC2_Rp = 78.52e-9, -488.9e-15 VC1_Rint, VC2_Rint = 229.9e-9, -1.779e-12 VC1_Rgrain, VC2_Rgrain = 291.0e-9, -426.7e-15 def poly_resistor(L, W, T=25.0, dV=0.0, nc=2): dT = T - 25.0 # 三个分量各自做温度、电压修正 rp = Rp_sheet * (L / (W - deltaW)) * (1 + TC1_Rp*dT + TC2_Rp*dT**2) \ * (1 + VC1_Rp*abs(dV) + VC2_Rp*dV**2) rint = (Rint / (W - deltaW)) * (1 + TC1_Rint*dT + TC2_Rint*dT**2) \ * (1 + VC1_Rint*abs(dV) + VC2_Rint*dV**2) rgrain = Rgrain * (1 + TC1_Rgrain*dT + TC2_Rgrain*dT**2) \ * (1 + VC1_Rgrain*abs(dV) + VC2_Rgrain*dV**2) # 两端各一份 Rint 和 Rgrain,接触电阻按 nc 分摊 return 2*rp + 2*rint + 2*rgrain print(poly_resistor(L=10, W=1, T=85, dV=0.3))

这段代码的逻辑是严格照文档的 R = 2Rc + 2Rint + 2Rgrain + Rp 展开,其中 Rp 用 Rsh(L-deltaL)/(W-deltaW) 算,Rint 和 Rgrain 各自带温度和电压修正。参数说明:L、W 用 um,T 用摄氏度,dV 是电阻两端压差,nc 是接触孔个数,默认 2。注意 Rint 项里除的是 (W-deltaW),不是 W,宽度越小这一项越大,窄电阻的界面电阻占比会明显上升。跑完可以改 T 到 -40 和 125,看阻值漂多少,这就是后面 corner 分析的输入。

3. 套用电阻等效电路:温度系数与电压系数的正确打开方式

3.1 带 silicide 与不带 silicide 的公式分叉

文档把电阻分成两组公式。带 silicide 的 poly 和 diff 用 R = R0*[1+VC1dV+VC2dV²][1+TC1dT+TC2*dT²],一个 R0 打天下;不带 silicide 的 poly 则拆成 Rint、Rgrain、Rp 三项,每项都有自己的 TC、VC 系数,而且 Rint 和 Rgrain 的电压项用的是 |dV| 而不是 dV。这个绝对值不是笔误,它反映的是界面耗尽层对偏压极性不敏感,正反偏都会让阻值变化。如果你在代码里漏了 abs,负偏压下的结果会偏。

电压有效范围也要盯住:带 silicide 的 poly 是 -3.3~3.3V,N+ diff 是 0~3.3V,P+ diff 是 -3.3~0V。扩散电阻是单边的,因为它是靠衬底偏置工作的,反偏方向不能随便用。不带 silicide 的 poly 给的是 0~0.5mA/um 的电流密度限制,不是电压限制,换算时要用电流乘电阻反推压降,别直接套 3.3V。

3.2 温度扫描与电压扫描的实操步骤

做温漂评估时,固定 dV=0,把 T 从 -40 扫到 125,步长 5 度,画一条阻值曲线。做电压系数评估时,固定 T=25,把 dV 在有效范围内扫,注意 poly w/o silicide 要用电流密度上限反算最大 dV。下面这段脚本把两种扫描一起跑,输出极值点。

import numpy as np temps = np.arange(-40, 126, 5) vals = [poly_resistor(L=10, W=1, T=t, dV=0.0) for t in temps] print("Tmin R:", min(vals), "Tmax R:", max(vals)) print("drift %:", (max(vals)-min(vals))/vals[0]*100) # 电压扫描,先按 0.5mA/um 电流密度估最大压降 Imax = 0.5e-3 * 1 # W=1um Rnom = poly_resistor(L=10, W=1, T=25, dV=0.0) dVmax = Imax * Rnom dvs = np.linspace(0, dVmax, 20) vvals = [poly_resistor(L=10, W=1, T=25, dV=v) for v in dvs] print("dVmax:", dVmax, "R range:", min(vvals), max(vvals))

逻辑说明:第一段扫温度,看 -40 到 125 的阻值漂移百分比,这个数直接决定偏置电流的温漂预算。第二段先用电流密度上限估出最大压降,再在这个范围内扫电压,避免超出文档给的有效偏置区。参数上,Imax 按每微米宽度 0.5mA 算,W=1um 就是 0.5mA,乘标称电阻得到压降上限。如果算出来的 dVmax 超过 3.3V,说明这个尺寸的电阻不能用到满电流密度,要么加宽要么降电流。

3.3 接触孔个数 nc 对总阻值的影响

文档在电路模型里写了 Rcon = Rc/nc,nc 默认 2。这意味着接触电阻是并联分摊的,接触孔越多,Rcon 越小。但注意 Rint 和 Rgrain 是串在电流路径上的,不随 nc 变。所以窄电阻、少接触孔的结构里,Rcon 可能占总阻值的可观比例。我一般会在脚本里把 nc 做成参数,版图定下来之前先跑 nc=2 和 nc=4 两版,看差多少,差得多就在版图上多加孔。

注意:文档只给了 Rcon 的表达式,没给 Rc 的具体数值,实际使用时 Rc 要从工艺侧或测试结构里取,别自己拍一个数填进去。

4. 避坑与排查:五个让仿真和实测对不上的细节

4.1 现象:仿真阻值比实测低一截,原因:漏了 deltaW 修正

带 silicide 的 poly 表格里 deltaW 是负值,P+ 为 -0.051um,N+ 为 -0.065um。如果按 drawn W 直接算,分母偏小,阻值偏大;但很多人反过来把 deltaW 当正值减掉,结果分母更小,阻值更大。正确做法是 W-deltaW,deltaW 为负时相当于加宽。排查方法:拿一个 W=1um 的电阻,分别用 W 和 W-deltaW 算,差值应该在 5% 上下,对不上就检查符号。

4.2 现象:负偏压下阻值算出来偏大,原因:Rint、Rgrain 的电压项没取绝对值

不带 silicide 的 poly 模型里,Rint 和 Rgrain 的电压修正用的是 |dV|,Rp 用的是 dV。如果统一写成 dV,负偏压时一次项变号,阻值走向就反了。排查时把 dV 设成 -0.3 和 +0.3 各跑一遍,正确模型下 Rint、Rgrain 两项应该对称,Rp 项不对称。对不上就回去看公式里的绝对值符号。

4.3 现象:扩散电阻在负压区仿真报错或结果离谱,原因:有效电压范围用反了

N+ diff 的有效范围是 0~3.3V,P+ diff 是 -3.3~0V。这两个是单边偏置,因为扩散电阻依赖衬底结的反偏。如果在 N+ diff 上加负压,模型公式还能算,但已经出了文档给的有效区,结果不可信。排查方法:在脚本入口加一个范围检查,超出就打印警告,别让错误数据静默流进 corner 表。

4.4 现象:高温下阻值漂移比预期大,原因:TC2 项被忽略

TC1 是一次项,TC2 是二次项,在 125°C 时 dT=100,TC2dT² 的量级不一定小。比如 Rp 的 TC2 是 581.1E-9,乘 10000 是 5.8E-3,跟 TC1dT 的 -1.38E-3 同量级甚至更大。只留 TC1 会低估高温漂移。排查:把 TC2 置零和不置零各跑一遍,差值超过 1% 就不能省。

4.5 现象:接触孔从 2 加到 4,阻值几乎没变,原因:Rc 没进模型或占比太小

Rcon=Rc/nc,如果 Rc 本身很小,nc 翻倍对总阻值影响有限。这时候别怀疑公式,先算 Rcon 占总阻值的比例。占比低于 2% 就说明这个结构对接触孔数不敏感,版图上不必为此加孔。反过来,如果占比高但改 nc 没反应,检查脚本里 nc 是不是真的传进去了。

5. 把参数表变成可复用的 corner 模板:一个电阻模型的落地习惯

走到这一步,表格里的数已经不是用来“看”的,而是用来“跑”的。我习惯把四类 film 的参数写成一个字典,每个 film 带自己的公式分支,跑 corner 时只换 T、dV 和工艺偏移,不碰公式本体。下面这个结构可以直接抄走。

FILMS = { "P+_poly_silicide": {"Rsh": 7.8, "dW": -0.051, "TC1": 2.88e-3, "TC2": 5.01e-7, "VC1": -7.89e-4, "VC2": 6.19e-3, "vrange": (-3.3, 3.3)}, "N+_poly_silicide": {"Rsh": 7.4, "dW": -0.065, "TC1": 2.92e-3, "TC2": 2.66e-7, "VC1": 1.35e-3, "VC2": 7.15e-3, "vrange": (-3.3, 3.3)}, "N+_diff": {"Rsh": 59.0, "dW": 0.0, "TC1": 1.47e-3, "TC2": 8.32e-7, "VC1": 7.55e-4, "VC2": 1.97e-4, "vrange": (0, 3.3)}, "P+_diff": {"Rsh": 133.0, "dW": 0.0, "TC1": 1.43e-3, "TC2": 7.82e-7, "VC1": -1.19e-3, "VC2": -1.80e-4, "vrange": (-3.3, 0)}, } def simple_res(film, L, W, T=25.0, dV=0.0): p = FILMS[film] lo, hi = p["vrange"] if not (lo <= dV <= hi): print(f"warning: dV={dV} out of {film} range {p['vrange']}") dT = T - 25.0 r0 = p["Rsh"] * (L - 0.0) / (W - p["dW"]) return r0 * (1 + p["VC1"]*dV + p["VC2"]*dV**2) \ * (1 + p["TC1"]*dT + p["TC2"]*dT**2)

这个模板只覆盖带 silicide 的 poly 和扩散电阻,因为它们的公式统一;不带 silicide 的 poly 单独走前面那个三分量函数。字典里 vrange 用来做入口检查,dW 为负的 film 在分母里自动加宽。跑 corner 时,把 Rsh 按 ±3σ 偏移、T 取 -40/25/125、dV 取范围两端,三组一组合,就是一张能直接贴进仿真报告的阻值表。

最后说个血泪经验:我最早做偏置网络时,直接拿表格里的 Rsh 均值算完就投了版图,没跑温度扫描,结果高温下电流掉了将近两成,回头查才发现 TC2 项在 125°C 贡献了将近一半的漂移。从那以后我每次拿到这类工艺文档,都强制先把 TC1、TC2、VC1、VC2 四项代进去跑一遍全温区扫描,再决定电阻尺寸和接触孔数。这份材料的价值不在标题,在那几张表和那组公式,照着跑一遍,比读十页说明都管用。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询