企业通常依赖过时的统计过程控制 (SPC) 软件来监控生产过程。尽管行业内有许多其他 SPC 程序在使用,但企业往往仍然坚持使用那些使数据分析和呈现对用户来说十分困难的旧程序。
本海报介绍了一种创建SPC图表的方法,用于展示半导体行业常用的大批量晶圆炉的薄膜厚度数据。这些大批量炉的薄膜厚度结果受多种因素影响。在JMP Graph Builder中呈现这些信息具有以下几个优势:
大家好,我叫科迪·桑德奎斯特,是恩智浦半导体(NXP)德克萨斯州奥斯汀分公司的一名工艺工程师。几年前我开始接触JMP脚本,这对我来说既是一个挑战,也是我日常工作中发现的实用工具。今天我给大家带来的是……我用JMP制作的一个用于统计过程控制(SPC)的界面。
任何从事制造业的人,我相信都熟悉SPC是什么。我用过好几种不同的SPC系统。有些比其他的好,但它们都存在一些……缺陷,或者缺乏JMP所具备的交互性或快速切换信息的功能。
今天我要介绍的是如何制作SPC图表并利用JMP软件,从而加快工程决策速度并促进信息共享。我们目前在使用的一些SPC程序存在一些问题,比如我们公司(NXP)使用的那套比较老旧的SPC系统。这些系统我在公司里用。
关于这些设备,简单说明一下。我们使用的是大型立式炉,一次最多可容纳 150 片生产晶圆,也就是 6 批。每批 25 片晶圆,炉内设有多个区域。我们在不同的区域使用测试晶圆监测器,以便跟踪整个炉内每个区域的晶圆厚度,而不仅仅是跟踪一批晶圆的厚度。
首先,我使用的SPC程序一次只能显示一个炉子的数据,而最好是将所有炉子的数据显示在同一张图表上,这样才能发现是否存在异常情况。此外,它不显示各个区域的厚度,而是显示所有区域的平均值。如果某个区域存在特殊问题,仅仅依靠这个SPC程序很难找出问题所在。
除此之外,分析其他一些常见问题因素也十分困难。例如,批次中包含多少个生产批次,以及不同的装载量(例如,25 片晶圆和 150 片晶圆的装载量不同,都会导致不同的厚度测量结果)。测量厚度的计量设备可能存在认证缺陷,而计量设备出现偏差的情况并不少见。如果我们仅仅依赖统计过程控制 (SPC) 系统,有时很难发现这些信息。
我使用 JMP 脚本创建了自己的自定义仪表盘,可以将所有炉子的信息显示在同一张图表上。我可以按炉子位置显示信息,例如炉子顶部、炉子底部,并查看炉子特定位置是否存在异常情况。
我之前提到的另一点是,对于很多常见因素,我可以查看是否存在其他影响因素。例如,可能是计量测量数据,也可能是负载尺寸。我甚至可以将晶圆供应商信息等其他信息添加到此表中,查看是否更换了晶圆供应商,以及是否出现了导致厚度变化的情况。我所说的这些功能,正是JMP更易于使用、功能更强大的原因,它比市面上一些常见的SPC程序更胜一筹。
我的设置方式是为了方便快速找到所需的工艺配方。如果您不熟悉配方,我们有很多不同类型的工艺,每个工艺都有不同的厚度目标。我希望能够快速找到所需的工艺配方。所以我设计了一个弹出窗口,只需输入配方名称,然后点击“确定”即可。
这样做之后,它会获取该名称,并将其与该工艺的某个文件进行匹配。它会筛选出该工艺配方名称对应的厚度限制和目标值。我有一个原始厚度文件。我们的SPC系统中包含多个配方的厚度数据。因此,再次填写数据,筛选出我们所需的配方,它会在图表生成器中绘制出所有数据。
我再次爱上了图表生成器,因为它交互性很强。你会注意到这两个图表的对比:上面这张图只有一个炉子,而下面这张图有多个炉子,我可以显示所有不同区域的数据。实际上,我设置这个工具是为了进行一些计算,我不仅想要平均厚度,还想要标准差和每个区域的范围。所以,我也可以在这方面进行自定义设置。
如果我想按一些常用因素(例如计量设备或负载大小)进行筛选,我可以快速筛选。我也可以按单个炉子进行筛选。是的,它的优势当然在于更高的可定制性,更灵活地制作SPC图表,您可以快速分析导致偏差的不同因素,然后截屏,发送给其他人,开始寻找解决方案;或者,如果某个区域出现偏差,需要进行一些调整,我也可以这样做。
这个软件唯一的缺点就是我必须手动提取厚度数据并将其保存为 CSV 或文本文件。理想情况下,我希望能直接连接到 NXP 的数据库,但我没有相应的权限。所以这不是 JMP 的问题,而是我公司没有这个权限。
更详细地讲解一下脚本,我知道逐字逐句地讲解冗长的脚本可能有点枯燥,但我会尽量简化,只关注关键点及其工作原理。前面已经提到过,我需要提取一个原始厚度文件,其中包含了多个工艺配方的所有厚度数据。我还会保存另一个文件,其中包含SPC的限制和目标值。我使用JMP的模态函数来弹出一个窗口。在这个弹出窗口中,我输入所需的配方名称,它就会筛选出原始厚度文件中的信息以及相应的限制值。
它会将限值和目标值保存为变量,这些变量稍后将用于在图形生成器中创建线条、目标值和限值,以及增量和大小。这正体现了 JMP 脚本的灵活性,因为我们拥有的这些数据文件中,并非所有行都相同。每个批次都会有所不同。有时,我们的测试晶圆监控器会监控两片晶圆,分别在顶部和底部区域运行。有时会监控三片晶圆。有时会监控五片晶圆。因此,一行可能填充了两列,另一行填充了三列,还有一行填充了五列,每次都不一样。
通过一系列 if 语句(我不会详细介绍),我可以根据哪些列已填写,确定每个单元格引用的具体区域,从而将其分配到正确的位置,这样就不会出现错误或混淆,也不会在图表构建器中显示时将其放在错误的区域。
关于在图形生成器中结束脚本这一点,我再补充一点:这些变量被放入图形生成器中以生成线条,我可以自定义图形生成器来以我想要的方式显示信息。我工作中遇到的一个解决问题的简单例子是,在我们的主SPC图表中,某个工艺配方的某个炉子的标准偏差超标。请记住,我们的SPC系统实际上并不显示任何详细信息。
利用我的 JMP 脚本,我能够将所有不同区域的信息拆分开来,并在底部区域发现了双峰分布。也就是说,这里出现了两个相同的问题。然后,我筛选出这台单独的炉子,并根据一些共同因素进行筛选。在这个例子中,共同因素是装载量。这次装载了六批次,也就是满仓,这意味着炉子装满了 150 片生产晶圆。因此,我们能够准确地缩小问题范围,找出问题的根源。
问题出在炉子的最底部,当时正进行着满负荷的生产,温度范围出现了峰值。然后我把这个峰值和我们计量系统提供的坐标数据结合起来,绘制出了晶圆分布图,甚至可以深入分析是晶圆的哪个部分、炉子的哪个区域出了问题。
通过与我们的设备技术人员分享这些信息,我们将能够准确定位炉子的问题所在,更换部件,并使炉子恢复到良好稳定的运行状态。这只是一个简单的例子,感谢您的时间。希望您有所收获,期待在会议上与您再次相见。