尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

半导体Fab自研缺陷分析系统:Klarf解析与Defect Map可视化实战

半导体Fab自研缺陷分析系统:Klarf解析与Defect Map可视化实战 干半导体Fab这一行但凡跟良率、缺陷沾点边的工程师手头几乎都离不开Klarf文件。缺陷扫描机台跑完一片Wafer吐出来的Klarf就是后续所有分析的地基而要把这些枯燥的坐标、尺寸、类别变成一张能让工艺、设备、整合都看懂的Defect Map大多数Fab选择直接花钱买商业YMS或者缺陷分析软件。可真到了产线深处你会发现商业工具贵、封闭、定制周期长最后逼得一拨人自己动手写解析、画Map、搭平台。这篇文章就把我们团队从零自研半导体Fab缺陷分析系统的完整路线讲清楚重点拆解Klarf文件的读取和字段含义、坐标转换的坑、Defect Map可视化的实现方案以及系统落地过程中那些文档里绝对不写的排错经验。适合想做缺陷数据平台开发的工程师也适合被商业软件折腾到想换路子的良率和工艺同事。1. 自研的起点商业工具到底贵在哪、缺什么1.1 缺陷数据在Fab的日常地位晶圆制造过程中每一层光刻、刻蚀、薄膜、CMP之后产品Wafer都要过缺陷扫描机台检测表面有没有颗粒、刮伤、水痕、桥接之类的异常。扫描结果会按标准格式输出最常见的格式就是KlarfKLA Results File的行业惯例称法。文件里记录每一颗缺陷的坐标、X/Y尺寸、缺陷类别、所属Die位置等信息有时还附带缺陷图像路径或者Review结果。工艺整合工程师拿到Klarf后第一件事是打开分析软件看Defect Map判断缺陷分布是随机散落还是集中在某个区域是边缘密集还是中心大片再结合当前工艺层判断可能的机台来源。没有这张Map光看缺陷数量你根本无从下手。缺陷分析在良率管理里的顺序通常是扫描发现缺陷 - 读Klarf - 看分布/尺寸/类别 - 抽样Review确认形态 - 追溯工艺层和机台 - 反馈改善。其中“读Klarf - 看分布”这一步几乎每个Fab每天都有人在做这也是自研系统最值得优先替代的一环。1.2 商业软件的三个痛点市面上主流的商用缺陷分析软件功能确实强Recipe管理、自动缺陷分类、与Review SEM联动、SPC监控什么都有。但真正在产线用起来有几个绕不开的问题第一是成本。这类软件普遍按License数量、模块、用户数分别计价一个Fab动辄几十上百个工程师要看MapLicense费用相当可观而且每年还要交维护费。第二是封闭。商业软件大多提供固定功能界面想跟厂内的MES、RMS、历史良率系统做深度打通接口要么没有要么贵得离谱。我们产线曾经想把缺陷数据按批次直接关联到良率报表里商软顾问排期排了一个多月最后给了一个半自动导出再导入的方案效率一言难尽。第三是灵活性不足。Fab里各种特殊分析需求特别多比如某个新工艺层需要对缺陷按象限分区统计、要跟上一层的Defect Map做叠加比对、要按缺陷密度自动筛选异常Wafer……这些需求在商业软件里往往要靠配置和脚本有些直接做不了。1.3 自研方案的边界划定决定自研之前团队开过好几次会核心争议是要不要完全替代商业软件最终结论很统一——不追求大而全把高频刚需链路做到极致。我们圈定的目标是四条能快速解析Klarf文件兼容常见版本和各家扫描机台导出格式能生成正确的Defect Map支持按缺陷尺寸、类别、区域过滤能把单文件分析扩展到批次、多点、多片对比辅助良率趋势判断能和厂内已有的MES、RMS数据库做对接减少手工导出导入的重复劳动。实践证明这个边界画得很准。先把日常最高频的“看Map”做到顺手、准确、快后续再慢慢往自动分类、缺陷时空追溯方向扩展每一步都能在产线产生实际价值团队也好推进。2. 啃下第一块硬骨头Klarf文件深度拆解2.1 Klarf的版本与文件结构Klarf本质上是ASCII文本文件按“Record Type”组织内容。行业里常见版本有8.x、9.x不同扫描机台厂商导出的Klarf在字段顺序和命名上会有细微差异但大结构是统一的。一份典型Klarf文件的逻辑结构大致是FileVersion 8.5 RecordType DefectRecord ... DeviceID TD_TEG_001 LotID LOT2024A001 SampleSize 2 SlotMap 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 DieOrigin -1,-99 DieSize 10000,10000 ... DefectRecord 1 3000 2500 100 120 1 0 2 -1500 4800 80 95 2 0 ...注意这里的缩进和空格在不同文件里可能有差异解析程序必须写得足够鲁棒。Klarf的核心是逐行读取遇到RecordType字段就切换到对应解析模式直到下一个RecordType或文件结束。2.2 关键字段与含义把Klarf比作一张“病历单”头部字段就是病人的基本信息DefectRecord就是每一条异常记录。下面这几类字段是解码时必须优先处理的字段含义典型值/备注FileVersion文件格式版本8.5、9.0等SampleType样本类型Wafer、Reticle等DeviceID产品/器件名称用于关联工艺层和产品LotID批次号关联MES批次信息SampleSize文件中包含的Wafer数量一片或多片SlotMap槽位映射对应晶圆盒里的槽位编号DieOrigin芯片原点在Wafer坐标中的位置坐标值带正负号DieSize芯片物理尺寸单位通常为微米DefectRecord缺陷记录起始标记之后每行是一条缺陷XREL/YREL缺陷相对Wafer中心的坐标单位一般为微米XSIZE/YSIZE缺陷X/Y方向尺寸微米DEFECTCLASS缺陷类别数字编号需与分类定义表对应CLUSTER是否属于群聚缺陷0或非0很多人第一次动手解析最容易被DieOrigin和DieSize这两个字段搞晕。实际上DieOrigin告诉你的不是“Wafer上第一颗Die的物理位置”而是定义了一个坐标参考点所有Die的物理坐标都能根据这个原点加上行列数和DieSize推算出来。后面画Defect Map时想叠加Die网格这两个字段必须正确读取。2.3 坐标体系的易错点Klarf坐标体系的坑比想象中多得多。最常踩的是把坐标单位、坐标参考系、图像方向三个问题混在一起。坐标单位方面不同机台导出的Klarf坐标单位可能是微米、纳米甚至像素。解析时必须先读头部是否有Unit字段或者根据DieSize数量级来推断。曾有同事解析一个新导入机台的文件没注意单位差异Map上几乎所有缺陷坐标都偏了10倍结果全部落在Wafer边缘外面排查了很久才发现是单位搞错了。坐标参考系方面Klarf的XREL/YREL通常是相对Wafer几何中心的坐标但晶圆上通常还有Notch凹槽或者Flat平边作为取向标记。坐标正负方向的约定跟画布坐标轴的映射关系直接决定了Map画出来会不会左右翻转、上下颠倒。图像方向方面扫描机台导出的坐标是基于它自己的扫描方向和坐标系而工程师看Map时习惯把Notch朝下或者朝右两者之间往往差一个旋转或镜像变换。这个在投影到可视化画布时一定要做一次校验否则整张图看起来就是“不对”但又说不出哪里不对。2.4 解析代码示例核心片段我们第一版的Klarf解析器是用Python写的配合pandas做后续分析开发效率很高。伪代码如下保留了核心逻辑import pandas as pd def parse_klarf(file_path): header {} defects [] in_defect_section False with open(file_path, r, encodingutf-8, errorsignore) as f: lines f.readlines() for line in lines: line line.strip() if not line: continue if line.startswith(RecordType): cur_record line.split()[1] in_defect_section (cur_record DefectRecord) continue if not in_defect_section: parts line.split() if len(parts) 2: header[parts[0]] parts[1] else: parts line.split() if len(parts) 7: defects.append({ x_rel: float(parts[0]), y_rel: float(parts[1]), x_size: float(parts[2]), y_size: float(parts[3]), defect_class: int(parts[4]), cluster: int(parts[5]) if len(parts) 5 else 0, }) df pd.DataFrame(defects) return header, df这个版本只处理了解析正确性的主干实际生产环境还要处理文件编码、BOM头、多RecordType分支、超大文件分批读取等情况后面第5章会展开讲。2.5 解析阶段必须做的四件小事除了把字段读出来解析阶段还有几个容易被忽略的动作直接影响后续使用体验第一文件命名规范化。Klarf文件名通常包含LotID、Slot、设备ID和扫描Recipe等信息解析后要把这些信息自动拆出来存库里并跟MES数据做匹配。人工去核对几千个文件名不现实。第二缺陷分类映射。DEFECTCLASS数字编号本身没有直观含义需要跟厂内的分类定义表关联。比如某Fab把“1”定义为颗粒、“2”定义为水痕不同产线定义可能不一样映射表要允许维护否则统计报表就是一堆数字。第三坐标越界检查。解析完坐标后立刻检查坐标范围是否合理超出晶圆半径的点要单独标记出来。这些越界点往往代表坐标单位错误或者晶圆尺寸设置异常能提前拦住一批数据质量问题。第四原始文件归档。Klarf解析后不要删原文件按批次和日期归档到文件存储里。后续如果发现解析逻辑有bug还能重新解析不用去跟机台厂商重新要数据。3. 从坐标到画面Defect Map可视化怎么做才专业3.1 坐标转换不是简单放大缩小拿到解析好的缺陷坐标下一步是把这些坐标映射到画布上。这一步看起来简单实际要处理的问题不少。首先是确定Wafer在画布上的显示范围。一片12吋晶圆直径300mm不同产品曝光区域可能只是其中一部分但缺陷扫描通常覆盖整个有效区域。画布上我们用一个圆表示Wafer半径根据晶圆尺寸和显示区域比例决定。缺陷坐标单位是微米需要在渲染时统一换算到像素。其次是Notch或Flat的朝向处理。大多数工程师习惯Notch朝下这个显示约定要固定下来否则不同人看到的Map朝向不一致交流时容易产生误会。最后是边缘排除区Edge Exclusion的概念。很多Fab把晶圆边缘3mm或5mm以内的区域定义为排除区因为边缘区域受机械搬运、边缘曝光等影响缺陷分布没有代表性。分析时往往要把排除区内的缺陷过滤掉或者至少单独统计。坐标转换后要能方便地做这种半径筛滤。这里给出坐标转换的核心思路假设Wafer有效半径是radius_um画布中心是(cx, cy)显示半径是radius_pximport math def wafer_to_canvas(x_rel, y_rel, radius_um, radius_px, cx, cy): scale radius_px / radius_um px cx x_rel * scale py cy - y_rel * scale # Y轴取反因为Klarf坐标Y正方向朝上 return px, py注意Y轴取反这一步。Klarf坐标系统Y轴朝上是常见的而前端Canvas和SVG的Y轴朝下不处理的话整张图会上下颠倒。这类“小坑”积累多了就变成团队内部流传的“前人踩坑指南”。3.2 不同Map类型的应用场景Defect Map不是只有“一个点一个坑”这一种画法。实际分析里根据关注点不同需要切换多种视图视图类型展示内容适用场景散点Map每个缺陷画一个点观察整体分布、定位异常区域尺寸气泡Map缺陷尺寸映射为点的大小判断大缺陷与良率相关性密度热力Map局部区域缺陷密度用色阶表示识别群聚缺陷、热点区域Die粒度Bin Map按Die格统计缺陷数量并填色分析跨Die重复性缺陷类别着色Map不同缺陷类别用不同颜色区分工艺层相关缺陷多Wafer对比图同一批次多片Wafer并排显示判断缺陷是随机还是系统性系统里我们默认显示散点图但工具栏上保留一键切换热力图和Die网格叠加的功能。实际体验下来工程师最常用的反而是“先散点看分布再按尺寸过滤看大缺陷”。大缺陷往往直接跟良率相关小缺陷则更容易暴露工艺系统性问题。3.3 交互需求与筛选条件静态图片和可交互系统的差距用一次就回不去了。交互功能里我们认为下面几项是不可妥协的按缺陷尺寸范围过滤比如只看XSIZE大于0.5um的点按缺陷类别过滤比如只看某几个分类编号鼠标悬停查看单颗缺陷的完整字段包括坐标、尺寸、类别、所属Die行列缩放和平移特别是缺陷集中在某个角落时叠加Die网格方便判断缺陷落在哪个芯片区域框选缺陷并导出列表用于后续Review抽样。这些交互的实现逻辑不难难在前面数据模型规划阶段就留好字段索引。比如按尺寸过滤、按类别过滤如果每次都要全量扫描数据几万点就会明显卡顿必须走数据库索引或者前端数据分片。3.4 渲染性能别被几万个点卡死我们第一版Map图直接用了通用图表库的散点图Wafer上几千个点还流畅一旦超过两三万点拖拽缩放就开始掉帧。扫描机台的灵敏度做高之后一片Wafer扫出十几万颗缺陷也不是稀奇事性能必须从第一版就考虑。最终的方案是Canvas 2D自绘配网格聚合。Canvas 2D画几万个圆点本身并不慢真正拖慢性能的是图层重绘和DOM节点管理。图表库的散点图在交互时会重建整个图层而Canvas自绘只需要在requestAnimationFrame回调里重绘可见区域。另一个重要优化是数据降采样。当画布上某个区域聚集了过多缺陷点人眼根本分不清每个点这时可以做基于网格的聚合每个网格保留一个代表性点并把数量编码成颜色或点大小。Map从“一堆黑色点”变成“一片红色热区”信息量反而更高。3.5 后端存储与缓存规划缺陷数据体量不小分析时又需要秒级响应后端存储方案需要提前定。我们采用的是PostgreSQL为主库Redis做查询缓存和异步任务中间件。PostgreSQL里存放解析好的缺陷明细记录表结构简单直接wafer、lot、step、缺陷坐标、尺寸、类别。索引重点建在(lot_id, slot_no)和(wafer_id, defect_class)筛选和统计都靠这两个维度。Redis在这个系统里主要干两件事。第一缓存“某片Wafer的解析结果”同一个Klarf文件被反复打开分析时不需要重新解析文件再查库直接读缓存。第二作为文件解析任务队列用户上传Klarf后先把任务塞进Redis队列后台Worker拉取任务并解析入库。这样大批量导入文件时前端不会因为同步等待而卡死。这里有个细节值得注意缓存的数据结构建议用紧凑的数组或二进制序列化不要直接缓存JSON字符串。一片Wafer十几万缺陷记录JSON缓存会占用大量内存存取速度也慢很多。4. 实操过程与系统落地从解析脚本到Web化平台4.1 整体架构和各模块分工系统从单机脚本进化到Web平台架构上分成了四层文件接入层接收Klarf上传也支持从产线文件服务器按批次路径拉取解析服务层异步解析Klarf校验数据质量写入数据库生成缓存数据服务层提供查询接口支撑Map渲染、统计报表、缺陷列表导出前端展示层Map可视化、筛选工具栏、统计面板、多Wafer对比视图。这里最建议先做的是“文件接入层”的路径规则化。Fab里Klarf文件通常按“设备类型/日期/批次/Recipe”的目录结构存放如果每次都要手动上传文件系统推广阻力会很大。我们做了一版自动扫描文件服务器目录的功能按命名规则自动识别LotID和Slot解析完直接归档。这个功能看着不起眼实际是工程师愿意天天用的关键。4.2 解析任务调度与并发处理多片Wafer同时导入时解析服务不能单线程慢慢磨。我们评估过几条路Python multiprocessing简单直接适合解析逻辑本身是CPU密集的场景Python asyncio适合大量文件、每个文件解析又不算重的情况Go重写核心解析库性能最好但团队Go经验不深初期没选。最终选择的是Python multiprocessing每个Worker处理一个文件Redis队列负责分发任务。解析一片5000颗缺陷的Wafer大约需要几百毫秒到一秒钟多Worker并行后一个批次的25片Wafer能在十几秒内全部入库完全满足产线节奏。并发处理有一个注意点多Worker同时写数据库要控制好连接池大小否则数据库连接数会被打满。我们的做法是每个Worker持有自己的数据库连接池最大连接数按Worker数量乘以2来估算。4.3 数据库表结构设计与索引选择数据建模直接决定查询性能和后续扩展性。核心表我们设计得比较克制没有一上来就做一堆复杂关系CREATE TABLE wafer_defect ( id BIGSERIAL PRIMARY KEY, lot_id VARCHAR(32) NOT NULL, slot_no INT NOT NULL, device_id VARCHAR(64), step_id VARCHAR(64), x_rel DOUBLE PRECISION NOT NULL, y_rel DOUBLE PRECISION NOT NULL, x_size DOUBLE PRECISION, y_size DOUBLE PRECISION, defect_class INT, cluster_flag INT, die_row INT, die_col INT, source_file VARCHAR(256), created_at TIMESTAMP DEFAULT now() ); CREATE INDEX idx_wafer_defect_lot_slot ON wafer_defect(lot_id, slot_no); CREATE INDEX idx_wafer_defect_class ON wafer_defect(defect_class);die_row和die_col是解析阶段根据DieOrigin和DieSize推算出来的相当于把Die网格信息提前物化到表里。这样查“这个Die上有多少缺陷”就直接走索引不用每次临时计算。表结构设计时的两个经验第一不要存太多重复的批次信息lot_id关联到一张lot主表即可避免每个缺陷行存一堆冗余字段第二坐标字段用DOUBLE PRECISION不要用VARCHAR存数字否则后续做坐标计算时会很痛苦。4.4 可视化前端的关键实现前端技术栈选的是标准三件套加Canvas渲染框架没有上重型BI组件。页面布局分为三个区域左侧是筛选条件面板按批次、槽位、缺陷尺寸范围、缺陷类别过滤中间主画布是Defect Map底部是统计面板实时展示缺陷数量、密度、类别占比。Map画布的核心渲染流程是根据当前筛选条件调用后端接口获取缺陷坐标数组将坐标数组一次性传给渲染函数渲染函数内先做坐标转换再做可见区域裁剪和降采样requestAnimationFrame循环中完成绘制。颜色映射方面我们维护了一张class到颜色的映射表可配置。没有映射关系的类别统一灰色避免“未分类缺陷”用强烈的红色误导分析。缺陷点大小默认按实际尺寸比例映射同时设置最小显示半径防止小缺陷在缩小时看不见。4.5 与良率分析的联动扩展系统上线一段时间后最受欢迎的并不是Map本身而是从Map延伸出来的统计视图。工程师看Map不只是看分布更想知道“这批货到底好不好”。我们陆续加了三个统计维度第一个是缺陷密度趋势图按Lot或者按时间段统计每片Wafer的缺陷密度跟良率趋势图并排看可以快速发现缺陷密度高、良率低的异常批次。第二个是缺陷类别占比Pareto图把每个批次的缺陷按类别聚合画累计占比图一眼看出主要缺陷类别是什么优先处理哪类缺陷性价比最高。第三个是同一Lot内25片Wafer的Map并排对比这个视图直接复用了单Wafer渲染逻辑只需要循环渲染25个小尺寸Canvas。异常Wafer的信号在这种“矩阵视图”里非常直观一片Wafer突然出现大量边缘缺陷矩阵里一眼就跳出来。5. 常见问题与排查技巧实录5.1 坐标错位和镜像翻转自研系统上线一个月内我们接到最多的问题就是“某批文件画的Map方向不对”或者“缺陷位置偏了”。这类问题排查路径基本固定先确认坐标单位再确认Y轴方向最后确认Notch朝向。坐标单位导致的错位特征是缺陷点全部挤在某个角落或者超出圆边界。比如有个机台导出的Klarf坐标明显比DieSize大一个数量级怀疑是纳米和微米的混用统一单位后立刻正常。镜像翻转的特征就更隐蔽整张Map分布形态是对的但左右或者上下反了。这种情况下Die网格通常还是对的因为网格也一起被镜像了只有结合具体工艺层的已知缺陷形态才能判断。比如某层刻蚀工艺已知缺陷集中在Wafer的3点钟方向Map上却出现在9点钟方向基本就是镜像问题。我们的解决办法很土但有效找一片缺陷形态有明显方向性的已知批次在系统里做一个“坐标轴校验”功能一键检查坐标范围、Y轴方向、Notch角度三个参数是否合理发现异常直接给警告。5.2 解析失败和数据缺失Klarf解析失败的原因五花八门最常见的是这三类第一类是文件编码问题。Klarf虽然是ASCII文件但有些机台会在文件头带BOM或者内部混入特殊字符。解析器要按“utf-8 errorsignore”的方式读取并自动跳过BOM头否则第一行就会解析失败。第二类是RecordType切换异常。某些文件在DefectRecord段之后还会有其他记录段比如ResultRecord、ReviewRecord如果解析器没有按RecordType正确切换后续行会被当缺陷数据读进数组轻则解析出大量空坐标重则程序直接崩溃。第三类是文件截断。FTP传输中断、文件服务器同步未完成等情况会导致Klarf文件只有前半部分。我们的做法是解析后立刻做完整性校验比如检查文件尾部是否有结束标记或者DefectRecord数量是否跟文件头部声明的一致一旦发现异常就标记“解析不完整”不写入正式表。5.3 大文件渲染性能优化前面提到了一片Wafer出现十几万缺陷点的情况。这种情况除了前端要降采样后端接口也要配合。我们曾经一版接口把全量缺陷数据当JSON返回接口耗时两三秒前端渲染又卡体验很差。优化分了三步第一步后端接口增加缺陷类型和尺寸范围的预过滤让前端只拿当前视图需要的数据第二步对超大结果集做分层抽样比如超过5万个点就按网格抽样保证返回数据在3万点以内第三步前端加入Canvas的离屏渲染把静态底图晶圆边界、Die网格、Notch标记提前画到一个离屏Canvas上缩放平移时只重绘缺陷点层性能提升非常明显。5.4 类别标签不统一问题很多缺陷的类别信息是工程师在Review SEM上人工分类后回填的命名风格非常自由。同一类缺陷有人标“Particle”有人标“particle”还有人标“PART”。按类别统计时这些都会被当成不同类别导致Pareto图严重失真。我们的处理方案是建立两层映射第一层是“归一化映射”把大小写差异、常见拼写错误、缩写统一映射到标准类别名第二层是“人工审核映射”每周由工艺整合工程师审核一次统计结果中新出现的类别名称确认归并关系。这个过程看起来枯燥但实际上非常重要。缺陷分类数据的质量直接决定后续所有统计报表的可用性不花时间治理系统永远只能停留在“画个Map看看”的水平。5.5 常见问题速查表问题现象可能原因解决思路缺陷点全部在晶圆边界外坐标单位换算错误比对DieSize确认单位是微米还是纳米Map上下颠倒画布Y轴方向未取反坐标转换时对Y坐标做负号处理缺陷位置整体偏移DieOrigin或参考点设置错误用已知批次校验DieOrigin是否正确解析后条数明显偏少文件截断或多RecordType解析遗漏增加完整性校验比对文件头声明数量分类统计混乱类别命名不统一建立归一化映射表定期审核渲染卡顿数据量过大或查询无索引降采样、Canvas离屏渲染、优化索引6. 工具链选型与基础设施建设6.1 解析核心用什么语言我们最终保留了一套双轨制解析方案。日常分析、调试、临时脚本用Python因为pandas和matplotlib生态太方便工程师临时写个验证脚本很快。生产环境的解析任务也先用Python跑通流程后续如果吞吐量不够再考虑用Go重写。Go重写的好处是部署简单编译成单二进制扔到服务器就能跑不依赖Python环境。我们目前还没到那一步但如果未来要支撑多台扫描机台同时导入、每天上千片Wafer的解析量Go版本的核心解析器值得投入。语言选型有一个容易被忽略的点解析逻辑本身并不复杂复杂的往往是各种机台导出格式的兼容处理。所以解析模块一定要接口化设计每种格式一个Parser类新增格式只加类不动主干逻辑。6.2 数据库、缓存和文件存储选型PostgreSQL作为主力数据库支撑本次系统的关系型数据查询完全没有问题。缺陷记录本身没有复杂的空间查询需求不需要上PostGIS。如果后续要做“多批次的缺陷区域自动碰撞检测”这类空间分析再引入空间索引也不迟。Redis在系统里的定位是“快取一小份热数据”。我们只缓存最近一周内被频繁查询的Wafer解析结果设置过期时间避免内存无限增长。文件存储方面Klarf原文件和解析后的二进制缓存都放在NAS上按批次日期归档定期清理超过保留期的文件。6.3 可视化方案选型可视化方案我们对比过三条路线通用图表库比如ECharts的散点图开发最快但大数据量性能吃力数据可视化大屏类框架适合汇报场景不适合日常分析Canvas 2D自绘开发量稍大但性能和定制性最好。最终选了Canvas 2D自绘为主同时用通用图表库负责统计面板里的趋势图、Pareto图。主次分明各用所长。自绘渲染时最值得投入精力的部分是“底图生成”。晶圆边界、Notch标记、Die网格、坐标轴刻度这些静态元素一次性绘制到离屏Canvas后续缩放平移只用变换矩阵重绘这是性能优化的核心思路。7. 从能用到好用几个贴地气的实战心得系统跑了大半年最大的体会是自研系统最难的不是技术而是让一线工程师“愿意用、天天用”。这需要从第一天起就把易用性放在跟功能同等重要的位置。我们后来专门回头补了几个小功能都是看似不起眼但实际使用频率极高的批次对比时自动锁定公共色带避免不同Wafer之间颜色深浅没可比性Map支持一键复制为图片插入PPT省得工程师单独截图全屏模式默认隐藏筛选面板看Map时视野更开阔。如果你也想在Fab内部做类似的自研工具我建议千万别一上来就做一堆花哨功能先把最基础的“整理一个Klarf文件、画出一张正确的Map”打通跑顺。很多团队死在半路不是技术不够而是早期铺得太开、迟迟拿不出让产线眼前一亮的可用版本。先做出来再迭代完善。等工程师发现“这个工具比商业软件还好用”的时候自研系统的价值自然就立住了。
返回列表