1. 为什么需要「晶圆智眼」
半导体制造有 700+ 道工序,任何一道的微小漂移都会在良率上放大。传统模式下,缺陷检测靠人工复判、良率分析靠 Excel、根因定位靠老师傅经验,三个环节彼此割裂。
| 痛点 | 传统做法 | 带来的问题 |
|---|
| 缺陷复判 | 人工看 SEM/光学图 | 单片复判 30~60 分钟,主观性强 |
| 良率分析 | Excel + 人工画 Wafer Map | 空间模式靠肉眼,跨批次对比困难 |
| 根因定位 | 经验 + 逐个机台排查 | 平均定位周期 3~7 天 |
| 知识沉淀 | 个人笔记、邮件 | 人员流动即知识流失 |
「晶圆智眼」要解决的核心问题只有一个:把缺陷、良率、设备参数三条数据流打通,让根因定位从「天级」压缩到「小时级」。
2. 角色与权限矩阵
系统按「谁看什么、谁能改什么」划分为 5 类角色,权限逐级收敛。
| 角色 | 核心诉求 | 数据范围 | 写权限 |
|---|
| 工艺/良率工程师 | 找根因、出报告 | 全厂良率 + 缺陷 | 标注、报告、知识库 |
| 产线操作员 | 快速复判、异常上报 | 本产线任务 | 复判、备注、上报 |
| 设备/工艺管理 | 参数监控、调参验证 | 本车间设备 | 参数配置、维护记录 |
| 质量管理 | 放行审核、追溯 | 全厂批次 | 放行、审计 |
| 平台运营方 | 模型迭代、数据治理 | 平台级 | 模型发布、样本管理 |
| 系统管理员 | 账号、资源、安全 | 平台级 | 用户、设备、算力 |
设计要点:数据隔离按「工厂 → 车间 → 产线」三级下钻,工程师默认只能看到自己负责的产线,跨线查看需申请临时授权并留审计日志。
3. 核心功能拆解
3.1 缺陷检测:从「看图」到「给结论」
| 能力 | 输入 | 输出 | 关键指标 |
|---|
| 缺陷检测与分类 | 晶圆图像 | 缺陷框 + 类别 | mAP ≥ 0.92 |
| 定位与尺寸测量 | 缺陷框 | 长/宽/面积(μm) | 误差 ≤ 5% |
| 严重度分级 | 类别 + 尺寸 + 位置 | Critical/Major/Minor | 与人工一致率 ≥ 95% |
| 相似缺陷检索 | 缺陷图 | Top-K 历史案例 | 召回率 ≥ 0.88 |
3.2 良率分析:Wafer Map 空间模式识别
Wafer Map 的空间分布本身就是「根因指纹」:边缘环状多为刻蚀/涂胶均匀性问题,中心簇状多为 CMP 或光刻聚焦问题。
| 空间模式 | 典型形态 | 高概率根因方向 |
|---|
| Center(中心) | 中心密集分布 | CMP、光刻聚焦 |
| Edge-Ring(边缘环) | 沿边缘成环 | 刻蚀均匀性、涂胶 |
| Scratch(划伤) | 线性条纹 | 搬运、CMP 研磨 |
| Donut(环形) | 环状带 | 温度场不均 |
| Random(随机) | 无规律散点 | 颗粒污染 |
3.3 根因定位:假设 → 验证 → 闭环
4. 关键数据表设计
4.1 缺陷记录表t_defect
| 字段 | 类型 | 说明 |
|---|
| defect_id | bigint | 主键 |
| wafer_id | varchar(64) | 晶圆唯一标识 |
| lot_id | varchar(64) | 批次号 |
| defect_class | varchar(32) | 缺陷类别 |
| severity | tinyint | 1=Minor 2=Major 3=Critical |
| x, y | decimal(10,3) | 晶圆坐标(mm) |
| area_um2 | decimal(12,3) | 缺陷面积 |
| model_version | varchar(32) | 产出该结果的模型版本 |
| review_status | tinyint | 0=待复判 1=确认 2=误报 |
4.2 良率汇总表t_yield_summary
| 字段 | 类型 | 说明 |
|---|
| lot_id | varchar(64) | 批次号 |
| wafer_id | varchar(64) | 晶圆号 |
| yield_rate | decimal(5,2) | 良率百分比 |
| pattern_type | varchar(16) | 空间模式 |
| top_root_cause | varchar(64) | 首要根因 |
| shift_id | varchar(16) | 班次 |
5. 代码模块
5.1 缺陷严重度分级(Python)
fromdataclassesimportdataclass@dataclassclassDefect:defect_class:strarea_um2:floatis_edge:boolSEVERITY_RULES={"particle":(50.0,200.0),"scratch":(100.0,500.0),"void":(20.0,80.0),}defgrade_severity(d:Defect)->int:"""返回 1=Minor 2=Major 3=Critical"""low,high=SEVERITY_RULES.get(d.defect_class,(100.0,400.0))ifd.area_um2>=highor(d.is_edgeandd.area_um2>=low):return3ifd.area_um2>=low:return2return1
5.2 Wafer Map 空间模式识别(Python + OpenCV)
importcv2importnumpyasnpdefdetect_pattern(wafer_map:np.ndarray)->str:"""wafer_map: 0/1 二值图,1 表示失效 die"""h,w=wafer_map.shape ys,xs=np.nonzero(wafer_map)iflen(xs)==0:return"none"cx,cy=w/2,h/2dist=np.sqrt((xs-cx)**2+(ys-cy)**2)radius=min(cx,cy)edge_ratio=np.mean(dist>radius*0.8)center_ratio=np.mean(dist<radius*0.3)ifedge_ratio>0.6:return"edge_ring"ifcenter_ratio>0.6:return"center"iflen(xs)>0.3*h*w:return"donut"return"random"
5.3 良率损失归因(SQL)
SELECTd.defect_class,COUNT(*)ASdefect_cnt,ROUND(SUM(d.area_um2)/1000,2)AStotal_area_mm2,ROUND(AVG(y.yield_rate),2)ASavg_yield,ROUND(100.0*COUNT(*)/SUM(COUNT(*))OVER(),2)ASpctFROMt_defect dJOINt_yield_summary yONd.wafer_id=y.wafer_idWHEREd.lot_id=#{lotId}ANDd.review_status=1GROUPBYd.defect_classORDERBYdefect_cntDESC;
5.4 根因假设生成(Java)
publicclassRootCauseEngine{publicList<Hypothesis>generate(YieldAnomalyanomaly){List<Hypothesis>result=newArrayList<>();Stringpattern=anomaly.getPatternType();switch(pattern){case"edge_ring":result.add(newHypothesis("ETCH_UNIFORMITY",0.82));result.add(newHypothesis("COATER_THICKNESS",0.65));break;case"center":result.add(newHypothesis("CMP_PRESSURE",0.78));result.add(newHypothesis("LITHO_FOCUS",0.61));break;default:result.add(newHypothesis("PARTICLE_CONTAMINATION",0.55));}result.sort(Comparator.comparingDouble(Hypothesis::getScore).reversed());returnresult;}}
5.5 模型灰度发布(Python)
defcanary_release(new_model,baseline,sample_batch,threshold=0.02):"""新模型 mAP 不低于基线 2% 才允许全量"""new_map=evaluate(new_model,sample_batch)base_map=evaluate(baseline,sample_batch)ifnew_map>=base_map-threshold:return{"action":"promote","new_map":new_map,"base_map":base_map}return{"action":"rollback","new_map":new_map,"base_map":base_map}
6. 性能与效果指标
| 指标 | 上线前 | 上线后 | 提升 |
|---|
| 单片复判耗时 | 45 min | 6 min | ↓ 87% |
| 缺陷分类准确率 | 82%(人工) | 94.6% | ↑ 12.6pt |
| 根因定位周期 | 5.2 天 | 0.8 天 | ↓ 85% |
| 良率异常发现时延 | 8 小时 | 15 分钟 | ↓ 97% |
| 检测吞吐 | 120 片/天 | 480 片/天 | ↑ 4 倍 |
7. 落地建议
- 先跑通一条产线:选缺陷类型集中、数据积累充分的产线做试点,避免一开始就全厂铺开。
- 模型与规则并行:严重度分级初期用「模型 + 规则」双通道,规则兜底可解释性。
- 数据治理先行:标注质量决定模型上限,难例挖掘要常态化。
- 闭环比精度更重要:根因假设必须能验证、能跟踪,否则系统只是「好看的看板」。
![]()
![]()
![]()
![]()
![]()
![]()
![]()