时间:2024-05-04
杜开元,袁 俊,卢旭坤
(1.广东利扬芯片测试股份有限公司,广东 东莞 523041; 2.西安电子科技大学 微电子学院, 西安 710071)
近年来,晶圆测试在整个芯片制造流程中有着重要的地位,测试的成本占芯片制造总成本的30%,wafer中性能异常的die通过人工测试是难以实现的,而探针台(prober)作为一种在晶圆级芯片测试时必须的探针测试设备,通过探针测试,大大减少了测试时间以及后续流程中的成本与加工耗费[1]。随着仪器自动化技术的发展,wafer测试设备的自动化程度越来越高,手动或半自动测试设备慢慢被淘汰,使用全自动探针台的探针测试成为了晶圆测试的主要手段[2]。由于晶圆测试对工作环境和无尘条件的苛刻要求以及主流Prober探针台只能通过自带触摸显示屏进行操作的限制,使得芯片测试研发工程师对测试方案进行调试的过程变得繁琐,并且耗费了大量时间在不必要的环节。
对GPIB通讯协议进行应用编程时需要使用美国国家仪器NI公司所开发的NI-VISA接口。该接口适用于常用的多种仪器总线通信,并且自身有独特的软件架构,保证在驱动程序时不受设备平台、通信总线和外部环境的限制。使用NI-VISA进行仪器控制的应用开发可以通过一模一样的方法与仪器通信,而不用考虑接口具体是哪一种类型,大大简化仪器的控制应用[3]。
Python编程语言有着丰富的库以及GUI开发环境,Pyvisa库搭配NI公司的gpib-32.dll动态链接时库文件作为开发底层文件,再加上PyQt5作为GUI开发工具进行人机交互界面开发,可以实现实时控制测试设备仪器的功能[4]。
本文通过python、NI-VISA以及GPIB提出探针台无法进行远程化、自动化操作现状的解决方案,以本地局域网内计算机测站终端为核心,GPIB接口作为端口,python编程实现友好的程控人机交互界面,NAT内网穿透技术作为远程控制桥梁,实现选择仪器、探针台的map图显示、仪器控制以及仪器状态监控等处理功能,控制探针台Prober进行晶圆探针测试,实现研发中心对车间探针台仪器的集中统一管理。
系统测试站部分由探针台prober、GPIB-USB转换接口、测试站终端、路由器组成,探针台与测试站终端之间需要安装连接GPIB-USB转换接口来实现设备与终端的GPIB通信(如图1),由于探针台本身与测站终端的GPIB连接还承担着与ATE通讯的任务,所以在软件进行连接的时候会先行释放ATE与探针台之间的GPIB连接句柄,以免造成GPIB总线忙的状态。
图1 系统硬件结构图
系统远程控制部分由远程控制服务器及远程客户端组成,使用frp内网穿透的技术,通过在远程客户端进行访问IP和密钥等设置,可以穿透连接控制内网环境中的测站终端[5]。
NI GPIB-USB-HS+是NI公司开发的一款IEEE 488控制器和便携式分析仪,用于采用USB插槽的计算机。使用该设备可将仪器集成到系统中,以及排除和解决GPIB硬件和软件问题,由于不需要GPIB电缆,因此可使用高速USB端口控制最多14个GPIB仪器。
GPIB连接线可以连接测试站终端与探针台Prober,适用于从Lab到工厂车间等不同环境内的仪器控制应用,多个GPIB连接线可以连接到同一测试终端,通过GPIB连接模块的选择来进行选择性控制与监测。
软件设计分为测站终端与客户端两部分。测站终端部分通过GUI人机交互界面对GPIB总线上连接的设备进行连接、监控、控制及测试结果显示。测站终端模块中的GPIB控制子模块主要是实现测站终端与当前总线上prober设备的连接、控制权限句柄的获取。测试进程获取子模块主要用于实时map图的获取以及测试结果的获取。仪器状态监控子模块主要用于实时监控探针台状态与异常,便于及时处理。
远程客户端部分能够使用frp内网穿透技术通过内网中连接了外网的主机作为中转,将测试站终端的端口连接到客户电脑,再使用Windows自带MSTAC远程桌面连接进行访问,就实现了远程操控未连接外网的电脑并控制本地探针台的功能。
如图2所示,客户端人机交互界面能够达到和实际操作探针台一样的交互体验。
图2 测试站模块界面
显示模块是通过python的pillow库显示Map图信息、BIN项信息、坐标信息、测试结果以及状态监控显示。
仪器查询连接模块,能够选择不同公司不同型号探针台,并通过GPIB连接线进行测试站终端与prober的连接。
仪器参数设施模块通过界面修改OD等探针台测试中的重要参数,设置prober参数。
仪器交互控制模块,通过人机交互界面的按钮,对探针台进行移动、扎针以及抬针等操作。
使用frp内网穿透的技术和Python编写远程客户端GUI模块,将frp的程序和config设置嵌入到远程客户端中,将内网穿透需要的参数输入框放置在远程客户端GUI界面,通过在远程客户端进行访问IP和密钥等设置,可以通过公网端口穿透内网并与内网环境中的测站终端PC端口连接。
图3 远程客户端模块界面
软件基于Python编程语言来进行设计,启动程序后通过选择不同设备类型来选择设备指令集,该选择将决定后续收发指令阶段的底层内容,通过NI-VISA动态链接库底层文件中的查询函数查询当前GPIB总线上连接的设备地址,选取prober设备地址后发送ibdev命令获取handler,prober进入等待接收命令阶段。读取待测wafer的信息文件来提取map图坐标系以及wafer基本信息,获取坐标系后自动发送查询指令并接受坐标信息,将坐标值返回到基于pillow库的cavans模块进行分析作图,作图完成后对GUI显示框刷新并更新当前map图,完成刷新后返回指令发送准备状态等待新的操作。具体软件设计流程图如图4。
图4 远程客户端模块界面
远程控制流程由客户端主机组织,配置完成并完成点对点内网穿透连接后,由SSH技术实现本地主机端口与测站主机端口的互连,客户端主机借用本地主机端口向测站探针台发送指令进行测试,并使用同样的端口接受并返回测试与控制的结果,具体流程如图5所示。
图5 远程控制流程图
使用NI公司开发的GPIB连接线,能够满足测站终端与多台设备连接并进行控制的要求,同时将NI驱动文件中的gpib32.dll动态链接库与Python自带的Py-Visa库结合并作为主程序中GPIB通讯协议的底层文件,再使用Python编程构造GUI人机交互界面,将设备的程序控制模块与GUI的模块进行连接。
使用Python在Pycharm开发环境下与探针台控制流程如下。
1)调用动态链接库与Py-Visa库:
编写底层文件,通过import方法将两个库引用并封装到函数中。
2)查询并选择仪器对象:
rm = pyvisa.ResourceManager();//查询并返回当前GPIB连接的仪器信息
Device = self.rm.list_resources();//查询到的仪器存入list
3)获得仪器连接地址:
GPIB::XX::INSTR是被连接仪器的代号,其中“XX”就是GPIB通讯中的paddress,所以只要使用“paddress = int(machine.split('::')[1])”代码获得paddress。
4)仪器连接:
将获得的paddress传入封装好的connect函数中:
Gpib.Gpib(0, self.paddress, 0, timeout=12, send_eoi=1, eos_mode=0);
检查返回值,如果正确则完成仪器的连接。
Connect函数具体实现代码如下:
if isinstance(name, str):
self.id = gpib.find(name)
self._own = True
else:
self.id = gpib.dev(name, pad, sad, timeout, send_eoi, eos_mode)
self._own = True
其中gpib.find与gpib.dev就是将gpib32动态链接库与Py-visa对应功能模块封装起来的函数,例如:
def dev(board, pad, sad=NO_SAD, tmo=T30s, sendeoi=1, eos=0):
ud = _lib.ibdev(board, pad, sad, tmo, sendeoi, eos)
if ud < 0:
raise GpibError("dev")
return ud
5)仪器控制:
仪器控制通过GPIB通讯协议结合仪器控制标准指令来实现,使用底层函数综合出的write与read函数,配合不同类型prober的标准CMD即可实现仪器控制,例如TEL公司UF系列prober的chunk移动代码如下:
up_d = b'Y+01 '
self.my_instrument.write(up_d)
self.my_instrument.write(self.A_b)
try:
cCoor = self.my_instrument.read(1000)
except GpibError as e:
self.gpib_read_error()
6)接收仪器信息并显示:
Prober设备在GPIB控制过程中接收到指令后会根据指令进行相应动作,在操作结束后返回操控者期望的信息,同时根据返回信息中所包含的坐标和BIN项等信息,并在Pillow作图模块中刷新当前Map图,然后将最新Map图更新至显示模块。由于优化了Pillow作图模块的代码,使得在更新Map图时只针对发生改变的Die进行改动,而不是重新读取Map图信息,大大的加快了显示模块更新的速度。
7)仪器状态状态监控:
为了使测站终端能够监控prober设备状态,同时prober能向终端返回异常报警、发送准备完成等通知,为此GPIB通讯协议设置了SRQ(服务请求)功能。当已连接的设备向测站终端发出SRQ请求,那么GPIB总线上SRQ线为”TURE”,通知测站终端有连接在总线上的设备发出了服务请求。但是仅凭总线上的SRQ信号无法确定发出请求设备的地址,于是需要测站终端进行轮询处理,查询发出请求的地址并处理请求内容。
在程序中状态监控分为两部分,使用多线程的工作模式,其中监控模块通过while循环定时在总线上一台一台地查询当前SRQ状态,被查询的设备向测站终端反馈9 bit的数据,其中包含最高位的状态字节以及余下八位SRQ请求数据。测站终端通过分析返回的数据,监控哪一台设备发出了SRQ,提出何种请求。而指令反馈模块则是将SRQ请求查询设置在向设备发送指令之后,这样既有准确的设备地址和指令内容,又可以快速监控设备对指令的反应情况。状态监控模块的内容都将实时显示在GUI界面中的显示模块,便于使用者查看。具体SRQ请求如表1。
表1 P12机台SRQ请求表
远程控制人机交互界面GUI的设计通过使用Python提供的QtDesigner集成式套件。设计步骤如下:
在工具界面放置一个主窗口Mainwindow控件作为GUI的框架。
根据提前设计规划好的功能模块,通过layout布局合理的放置Frame作为模块框架。
在相应的功能模块Frame中加入ListWidget、pushbutton和combox等控件。
通过信号槽的方式将button_click等事件与程序中的功能函数连接起来。
完成GUI的设计后会生成ui文件,通过配置external tools中的pyuic工具对ui文件进行转换生成py文件,py文件中的Mainwindow就是GUI主界面,然后在软件设计主程序中import主界面py文件,就可以将主界面中的各个模块与主程序中的程序模块通过信号槽连接,实现人机交互界面的设计。
从20世纪90年代开始,一种被称作网络地址转换(NAT)的技术诞生,也叫做网络地址伪装或者IP地址伪装(IP masquerading),这种技术广泛应用在解决由IPv4地址不足引起的保存IP地址困难问题。解决的方法是在IP数据包通过路由器或防火墙时重新编写发出数据包的IP地址或被访问的IP地址。这种技术的最佳使用场景是在内网有多台主机但只有一个公有IP地址访问外网的情况。
NAT穿透,就是要在两个处于不同类型NAT网络下的节点之间建立起稳定的直接连接,要实现这种直接连接,必须的条件是互连双方互相知道对方的公网IP与端口,这样才能互相发送数据包来建立连接[7]。通过分析可知,本软件所在的公司网络为圆锥形地址限制NAT(Address-Restricted cone NAT),也就是内网各主机的客户端必须首先发送数据包到对方IP地址,然后才能接收来自对方IP地址的数据包。在内外网访问方面,唯一的限制是要求数据包是来自对方IP地址。内部地址和端口映射到外部地址和端口,所有发自内网主机的数据包都经由外部地址和端口向外发送。外网主机地址(不限制端口)能通过给外部地址和端口发包到达内网。具体内外网访问类型如图6所示。
图6 圆锥形地址限制NAT
要想实现圆锥形地址受限NAT的穿透,需要能轻松获得对方公网IP与端口,为了实现这种功能,选用FRP来安全地向对方暴露自身IP地址与端口。FRP(fast reverse proxy)是一个高效安全的可用于内外网NAT穿透的反向代理(reverse proxy)应用,支持tcp, udp协议,为 http和https应用协议提供了额外的能力,且尝试性支持了点对点穿透。对于公司来说,某些服务如果直接暴露在公网上将会存在一定的安全隐患,所以需要安全地暴露内网服务。使用xtcp类型的代理可以避免让任何人都能访问要穿透的服务,所以需要在客户端访问者也运行一个frp client。
Frp使用方法为在客户端与本地端进行config的配置,并且搭建一个辅助服务器来使客户端与本地端互相交换config中配置的IP和端口,服务器有着固定的公网IP与端口,所有本地端与客户端都能连接到辅助服务器,服务器就获得了所有本地端与客户端的IP和端口。客户端只要请求想穿透的本地端,服务器验证双方config配置中用户名和密钥然后就可以返回目标本地端的外网IP和端口,同时通知目标本地端即将进行FRP连接并发送客户端的外网IP与端口,再运行frpc与frps时能够通过本地主机转发内网测站终端的SSH服务,客户端就可以通过在两边都部署上frpc建立起客户端与本地主机之间直接的连接,就实现了穿透NAT设备的需求,具体结构如图7所示。
图7 Frp穿透模式
上述应用情景是基于穿透双方的NAT类型一致时,服务器仅作为辅助来实现数据中转。但遇到P2P穿透的应用情景时,往往双方NAT类型并不相同,这个时候客户端到服务器与客户端到本地端的IP和端口都是不同的,但本地端的外网IP与端口却没有改变,所以客户端到本地端的连接是可以实现的,只要通过UDP通讯中的recvfrom address结构体,就能得到客户端的外网IP和端口,即可实现P2P穿透的应用。
该软件针对晶圆测试探针台远程化自动化操作需求开发,使用该系统进行晶圆测试方案开发调试的开发流程与原有开发流程对比,有效地缩短了测试方案开发周期,并且在探针台管理、实时监控等方面也更具优势,具体见表2。
表2 本软件开发模式与原有开发模式应用性对比
该软件从2019年投入使用后,截至2020年4月,已经参与近15个晶圆测试项目的开发流程,软件运行良好、操作方便且效果显著,具有良好的可靠性、可移植性、可交互性,其中内网穿透效果良好,穿透率达到95%。
本文结合晶圆测试与探针台设备的实际情况,基于现有探针台设备以及GPIB等硬件资源的基础上设计开发了一个探针台的内外网NAT穿透远程控制管理软件,由于该软件与不同类型探针台的标准指令相关度不高,在软件开发过程中使用模块化开发,可以在后续使用中针对新的设备进行推广[8]。软件对多站点同步自动化管理、测试数据的统计分析还需要进一步的研究应用。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!