2. PUF的物理基础:半导体制造工艺中的随机偏差

做PUF设计,说白了就是跟芯片制造过程中的“不完美”打交道。你想想看,一颗芯片从设计到流片,要经历上百道工艺步骤。每一道工序,都存在微小的随机波动。这些波动,在传统数字设计里是我们要极力避免的“工艺偏差”。但在PUF里,它们恰恰是宝贝——是生成硬件指纹的天然熵源。

我个人习惯把PUF的物理基础拆成四个维度来看。这样理解起来更清晰,也方便后续做电路设计时对症下药。

2.1 阈值电压的随机偏差

阈值电压Vth,是MOS管开启的“门槛”。理论上,同一批晶圆上所有相同尺寸的管子,Vth应该完全一致。但现实呢?

我在一次65nm工艺的流片项目中遇到过这样的情况:同一片晶圆上,相邻两个晶体管的Vth能差出20-30mV。当时做SRAM PUF,上电后读出的初始值,有一半的bit是稳定的,另一半则像抽风一样跳来跳去。后来排查才发现,就是Vth的局部失配在作怪。

为什么会这样?主要有三个原因:

  • 掺杂原子数的随机涨落:沟道区的掺杂原子数量越少,相对波动就越大。先进工艺下,沟道里可能只有几十个掺杂原子,少一个多一个,Vth就变了。
  • 栅氧化层中的固定电荷:氧化层生长过程中,会引入随机分布的固定正电荷。这些电荷会改变沟道表面的电场,直接影响Vth。
  • 界面态陷阱:Si-SiO2界面处的悬挂键和缺陷,会随机俘获或释放载流子,造成Vth的时域波动(也就是1/f噪声)。

关键认知:阈值电压的失配,是SRAM PUF、锁存器PUF、触发器PUF等存储类PUF的核心物理来源。两个交叉耦合的反相器,谁的Vth更低,谁就能在上电时抢占优势,输出“0”或“1”。

2.2 栅氧化层厚度差异

栅氧化层的厚度,直接决定了栅电容的大小,进而影响晶体管的驱动电流和开关速度。理论上,氧化层厚度应该均匀得像一面镜子。但实际工艺中,氧化层生长速率会受到温度、气体流量、晶圆表面平整度等多种因素的影响。

我记得有一次做可靠性测试,发现同一颗芯片上,不同区域的氧化层厚度能差出0.2-0.3nm。对于45nm工艺,栅氧厚度也就1.2nm左右。0.3nm的偏差,意味着超过20%的相对变化。

这种厚度差异会带来两个直接影响:

  • 隧穿电流的变化:氧化层越薄,栅极漏电流越大。这个漏电流的随机性,可以被用来设计“漏电PUF”。
  • 电容失配:栅电容的差异,会导致环形振荡器的振荡频率产生偏差。这就是RO PUF(环形振荡器PUF)的物理基础。

实战技巧:在做RO PUF时,我建议把振荡器摆放在芯片的同一温度梯度线上。因为氧化层厚度在晶圆上往往呈现径向分布——中心薄、边缘厚。如果两个RO一个在中心一个在边缘,频率差可能主要来自工艺梯度,而不是真正的随机偏差。这会影响PUF的唯一性。

2.3 互连线延迟偏差

互连线延迟,是深亚微米工艺下越来越头疼的问题。线宽越细,线间距越小,寄生电阻和寄生电容的随机波动就越明显。

互连线延迟的随机偏差,主要来自:

  • 线宽线距的刻蚀偏差:光刻和刻蚀过程中,线条的边缘会粗糙不平。这种“线边缘粗糙度”会导致实际线宽偏离设计值。
  • 介质层厚度的不均匀:层间介质的CMP(化学机械抛光)过程,很难做到绝对平坦。介质厚度的变化,直接改变寄生电容。
  • 金属晶粒的随机取向:铜互连线的晶粒大小和取向是随机的。不同晶粒的电阻率不同,导致整条线的电阻存在随机波动。

我曾经调试过一个基于延迟链的PUF。仿真时一切完美,但流片回来测试,发现同一组延迟链的延迟值,在不同芯片上的分布范围比仿真预测大了两倍。后来分析,就是互连线延迟的随机偏差在作祟。仿真模型里只考虑了工艺角,没考虑局部随机失配。

注意:互连线延迟的偏差,在先进工艺节点(28nm以下)会急剧增大。因为线宽已经接近物理极限,工艺的随机性占比越来越高。做PUF设计时,一定要在版图阶段就考虑匹配和对称性,否则后仿和实测会差很多。

2.4 金属层电阻率波动

金属互连线的电阻率,也不是一个固定值。它受晶粒尺寸、杂质浓度、温度等多种因素影响。在纳米尺度下,电子在晶粒边界会发生散射,这就是“尺寸效应”——线越细,电阻率越大。

金属层电阻率的波动,对PUF设计的影响主要体现在:

  • IR drop的随机分布:电源网络上的压降,会因为局部电阻率的差异而产生随机变化。这会影响晶体管的实际工作电压,进而改变延迟和阈值。
  • 电迁移寿命的随机性:电阻率高的区域,电流密度大,电迁移风险高。虽然PUF不关心长期可靠性,但这种随机性本身也可以作为熵源。

嗯,这里要注意一点。金属层电阻率的波动,通常比晶体管参数的波动要小一个数量级。所以它很少作为PUF的主要熵源,更多是作为辅助的随机性来源,或者在某些特定结构(如基于电阻分压的PUF)中发挥作用。

2.5 知识体系总览

下面这张图,是我自己总结的PUF物理基础框架。它把四个维度的随机偏差,以及它们对应的PUF类型,串在了一起。

PUF物理基础与对应PUF类型 PUF物理基础:制造偏差 → 硬件指纹 半导体制造工艺偏差 阈值电压 Vth 偏差 掺杂涨落 / 界面态 栅氧化层厚度差异 隧穿电流 / 电容失配 互连线延迟偏差 线宽粗糙度 / 介质厚度 金属层电阻率波动 晶粒尺寸 / 尺寸效应 ↓ 对应的PUF类型 ↓ SRAM / 锁存器 PUF RO PUF / 漏电 PUF 延迟链 / 仲裁器 PUF 电阻分压 / 混合 PUF 核心结论 PUF的物理基础 = 制造工艺中不可控的随机偏差 这些偏差在传统设计中是“缺陷”,在PUF设计中是“指纹”

2.6 偏差的量化与建模

做PUF设计,不能只停留在定性理解。你得知道这些偏差到底有多大,怎么建模。

我常用的方法是Pelgrom模型。它描述了MOS管失配与器件面积的关系:

σ(ΔVth) = Avth / sqrt(W * L)

其中:
σ(ΔVth) —— 阈值电压失配的标准差
Avth      —— 工艺相关的失配系数(单位:mV·μm)
W * L     —— 晶体管的有源区面积

这个公式告诉我们一个关键规律:管子越大,失配越小。做PUF时,如果你想得到稳定的指纹,就得用大尺寸管子,让随机偏差足够大、足够稳定。但管子太大,面积成本就上去了。这是个trade-off。

设计准则:对于SRAM PUF,我一般建议使用最小尺寸的1.5-2倍。太小了,失配会被噪声淹没;太大了,面积浪费。具体值要结合工艺的Avth参数来算。

互连线延迟的偏差,可以用类似的方式建模。不过它更复杂,因为涉及线宽、线距、介质厚度等多个随机变量。我习惯用蒙特卡洛仿真来评估——在版图寄生参数提取后,给每条线的R和C加上3σ的随机扰动,跑1000次仿真看分布。

嗯,说到建模,有个坑我得提醒你。很多EDA工具默认只做“工艺角”仿真(TT, FF, SS),不做“局部失配”仿真。但PUF恰恰依赖的是局部失配,不是全局工艺角。所以一定要在仿真设置里打开“Mismatch”或“Local Variation”选项。我刚开始做PUF时就吃过这个亏——工艺角仿真结果漂亮得很,一实测全翻车。

2.7 小结

这一章我们聊了PUF的四个物理基础:阈值电压偏差、栅氧化层厚度差异、互连线延迟偏差、金属层电阻率波动。它们都是半导体制造工艺中无法消除的随机偏差。PUF设计,就是把这些“不完美”变成“唯一性”。