4. 晶圆图可视化基础

在KLA缺陷图谱分析流程中,可视化不是“画得好看”的收尾工作,而是把坐标、类别、空间关系转成可判读模式的第一道分析手段。同一份缺陷数据,用散点图看的是“点在哪里、是否成线成环”,用密度热力图看的是“哪里密、哪里稀”,用Die级聚合图看的是“哪些Die受影响、良率损失集中在哪个区域”。三者回答的问题不同,因此不能互相替代。本节以Python/Matplotlib为工具,围绕一张300 mm晶圆、Notch朝下的示例数据,说明如何把缺陷坐标正确映射到晶圆坐标系,并叠加晶圆边缘、Notch/Flat方向与Shot边界。

一、先统一坐标系与方向约定

晶圆图最容易出错的地方不是绘图代码,而是方向。工程上通常约定:晶圆中心为原点(0,0),X轴向右为正,Y轴向上为正,单位为毫米;Notch位于正下方,即270°方向(或-90°)。若设备输出的坐标系以Notch为0°、逆时针为正,则必须先转换到上述笛卡尔坐标系,否则整张图会旋转,导致后续与Shot边界、边缘Die对不上。转换关系为:x = r·cos(θ),y = r·sin(θ),其中θ从X轴正方向逆时针度量。本节所有图示与代码均采用这一约定,Notch统一画在下方。

晶圆半径R=150 mm。判断一个缺陷点是否在晶圆内,用x²+y²≤R²即可;判断是否落在边缘环带(例如距边缘10 mm内),用R-10≤√(x²+y²)≤R。这两个判据在散点图和聚合图中都会反复使用。

二、缺陷散点图:看空间模式

散点图是最基础也最不可省略的一层。核心是把每个缺陷的(x,y)画成点,并按类别着色。示例中假设有三类缺陷:0=颗粒(particle)、1=划伤(scratch)、2=图形缺陷(pattern)。用Matplotlib实现时,关键是设置等比例坐标轴,否则圆会被拉成椭圆,边缘环带和Shot边界的形状判断就会失真。

import numpy as np
import matplotlib.pyplot as plt

R = 150.0
fig, ax = plt.subplots(figsize=(7, 7))

# 晶圆边缘
theta = np.linspace(0, 2*np.pi, 720)
ax.plot(R*np.cos(theta), R*np.sin(theta), color='#1f4e79', lw=1.8)

# Notch(下方,270°)
ax.plot([-6, 0, 6], [-R+2, -R-8, -R+2], color='#1f4e79', lw=2)

# 缺陷散点,按类别着色
colors = {0: '#2e86de', 1: '#e67e22', 2: '#8e44ad'}
labels = {0: 'particle', 1: 'scratch', 2: 'pattern'}
for cls in [0, 1, 2]:
    m = df['class'] == cls
    ax.scatter(df.loc[m, 'x'], df.loc[m, 'y'],
               s=6, c=colors[cls], alpha=0.7, label=labels[cls])

ax.set_aspect('equal')
ax.set_xlim(-R-15, R+15); ax.set_ylim(-R-15, R+15)
ax.set_xlabel('X (mm)'); ax.set_ylabel('Y (mm)')
ax.legend(loc='upper right', fontsize=8)
plt.show()

读图时先看整体:点是否集中在某条半径附近(径向模式)、是否沿某条直线排列(划伤)、是否在边缘环带聚集(边缘环)。示例中若划伤类点近似落在y≈-40 mm的一条水平带上,就提示可能是某道工序的传输划伤,而不是随机颗粒。

三、密度热力图:看聚集程度

散点图在点数上万时会糊成一团,此时改用密度热力图。做法是把晶圆区域划分成网格,统计每个网格内的缺陷数,再用颜色深浅表示。网格尺寸是重要参数:2 mm网格适合看局部聚集,5 mm网格适合看全局分布。示例采用4 mm网格,用np.histogram2d统计,并用掩膜把圆外网格置为透明。

grid = 4.0
bins = np.arange(-R, R+grid, grid)
H, xe, ye = np.histogram2d(df['x'], df['y'], bins=[bins, bins])

xc = (xe[:-1] + xe[1:]) / 2
yc = (ye[:-1] + ye[1:]) / 2
Xc, Yc = np.meshgrid(xc, yc, indexing='ij')
H = np.ma.masked_where(Xc**2 + Yc**2 > R**2, H)

ax.imshow(H.T, origin='lower', extent=[-R, R, -R, R],
          cmap='YlOrRd', interpolation='nearest')

热力图的价值在于把“密度”变成可比较的量。若某象限的峰值密度明显高于其他区域,且峰值位置靠近边缘,就要优先排查该象限对应的工艺腔体或传输路径。注意热力图只反映计数,不区分缺陷类别,因此它通常与散点图配合使用,而不是单独下结论。

四、Die级聚合图:看良率影响

缺陷最终要落到Die上才有良率意义。Die级聚合图的做法是:先按Die的物理尺寸(例如26 mm×33 mm)和Shot排布生成Die网格,再把每个缺陷归属到所在Die,统计每个Die的缺陷数或是否超标,最后用颜色表示。示例中把缺陷数≥3的Die标为红色(超标),1~2个标为橙色,0个为浅灰。

die_w, die_h = 26.0, 33.0
df['die_i'] = np.floor((df['x'] + R) / die_w).astype(int)
df['die_j'] = np.floor((df['y'] + R) / die_h).astype(int)
cnt = df.groupby(['die_i', 'die_j']).size()

for (i, j), n in cnt.items():
    x0 = -R + i*die_w; y0 = -R + j*die_h
    if x0**2 + y0**2 > R**2:   # 跳过圆外Die
        continue
    c = '#c0392b' if n >= 3 else ('#e67e22' if n >= 1 else '#e8e8e8')
    ax.add_patch(plt.Rectangle((x0, y0), die_w, die_h,
                 facecolor=c, edgecolor='white', lw=0.4, alpha=0.85))

Die级聚合图直接回答“哪些Die受影响”。若红色Die在晶圆上呈一条弧线或集中在某个Shot内,说明问题具有空间结构性,而不是随机分布。此时应把Die网格与Shot边界叠加,判断超标Die是否恰好落在同一Shot内——这正是下一层分析的关键。

五、叠加Shot边界与边缘、Notch

Shot是光刻曝光的基本单元,一个Shot通常包含若干Die。把Shot边界画成矩形框叠加在Die聚合图上,可以快速判断缺陷是否“整Shot分布”。示例中假设Shot尺寸为52 mm×66 mm(即2×2个Die),从晶圆中心向外排布。绘制时用半透明蓝色矩形框,线宽0.8,不填充,避免遮挡Die颜色。

shot_w, shot_h = 52.0, 66.0
nx = int(np.ceil(2*R / shot_w))
ny = int(np.ceil(2*R / shot_h))
for i in range(nx):
    for j in range(ny):
        x0 = -R + i*shot_w; y0 = -R + j*shot_h
        ax.add_patch(plt.Rectangle((x0, y0), shot_w, shot_h,
                     fill=False, edgecolor='#1f4e79',
                     lw=0.8, alpha=0.6))

叠加后要检查三件事:第一,晶圆边缘是否完整闭合,Notch是否朝下且位置正确;第二,Shot边界是否与Die网格对齐,若错位说明Shot原点或Die尺寸设置有误;第三,超标Die是否集中在某个Shot内。若三者都成立,就可以把该Shot对应的曝光区域作为重点排查对象。

晶圆图三层可视化叠加示意(R=150 mm,Notch朝下) ① 缺陷散点图 Notch particle scratch pattern ② 密度热力图(4 mm网格) Notch 颜色越深,缺陷计数越高 ③ Die聚合 + Shot边界 Notch ≥3 超标 1~2 0 Shot边界 三层图共用同一坐标系:中心原点、X向右、Y向上、Notch朝下(270°) 散点看模式 → 热力看密度 → Die聚合看良率影响 → Shot边界定位工艺单元

六、结果判读与常见问题

三层图叠加后,判读顺序建议为:先看散点图确认是否存在非随机模式,再看热力图确认聚集位置,最后看Die聚合图确认良率影响范围,并用Shot边界判断是否整Shot分布。若散点图显示随机、热力图无明显峰值、Die聚合图无超标Die,则可判定为随机缺陷,不必过度追查空间因素。

常见问题有三类。第一,圆被拉成椭圆:忘记set_aspect('equal'),导致边缘环带判断失真。第二,Notch方向反了:设备坐标系未转换,整图旋转180°,Shot边界与Die对不上。第三,Die归属错误:Die尺寸或原点设置与产线不一致,导致缺陷被归到相邻Die。排查时先核对坐标系约定,再核对Die与Shot尺寸,最后检查网格原点是否从晶圆中心还是左下角起算。这三步确认后,晶圆图才具备与后续空间模式分析对接的可靠性。