杜開元,袁 俊,盧旭坤
(1.廣東利揚(yáng)芯片測試股份有限公司,廣東 東莞 523041; 2.西安電子科技大學(xué) 微電子學(xué)院, 西安 710071)
近年來,晶圓測試在整個芯片制造流程中有著重要的地位,測試的成本占芯片制造總成本的30%,wafer中性能異常的die通過人工測試是難以實(shí)現(xiàn)的,而探針臺(prober)作為一種在晶圓級芯片測試時必須的探針測試設(shè)備,通過探針測試,大大減少了測試時間以及后續(xù)流程中的成本與加工耗費(fèi)[1]。隨著儀器自動化技術(shù)的發(fā)展,wafer測試設(shè)備的自動化程度越來越高,手動或半自動測試設(shè)備慢慢被淘汰,使用全自動探針臺的探針測試成為了晶圓測試的主要手段[2]。由于晶圓測試對工作環(huán)境和無塵條件的苛刻要求以及主流Prober探針臺只能通過自帶觸摸顯示屏進(jìn)行操作的限制,使得芯片測試研發(fā)工程師對測試方案進(jìn)行調(diào)試的過程變得繁瑣,并且耗費(fèi)了大量時間在不必要的環(huán)節(jié)。
對GPIB通訊協(xié)議進(jìn)行應(yīng)用編程時需要使用美國國家儀器NI公司所開發(fā)的NI-VISA接口。該接口適用于常用的多種儀器總線通信,并且自身有獨(dú)特的軟件架構(gòu),保證在驅(qū)動程序時不受設(shè)備平臺、通信總線和外部環(huán)境的限制。使用NI-VISA進(jìn)行儀器控制的應(yīng)用開發(fā)可以通過一模一樣的方法與儀器通信,而不用考慮接口具體是哪一種類型,大大簡化儀器的控制應(yīng)用[3]。
Python編程語言有著豐富的庫以及GUI開發(fā)環(huán)境,Pyvisa庫搭配NI公司的gpib-32.dll動態(tài)鏈接時庫文件作為開發(fā)底層文件,再加上PyQt5作為GUI開發(fā)工具進(jìn)行人機(jī)交互界面開發(fā),可以實(shí)現(xiàn)實(shí)時控制測試設(shè)備儀器的功能[4]。
本文通過python、NI-VISA以及GPIB提出探針臺無法進(jìn)行遠(yuǎn)程化、自動化操作現(xiàn)狀的解決方案,以本地局域網(wǎng)內(nèi)計(jì)算機(jī)測站終端為核心,GPIB接口作為端口,python編程實(shí)現(xiàn)友好的程控人機(jī)交互界面,NAT內(nèi)網(wǎng)穿透技術(shù)作為遠(yuǎn)程控制橋梁,實(shí)現(xiàn)選擇儀器、探針臺的map圖顯示、儀器控制以及儀器狀態(tài)監(jiān)控等處理功能,控制探針臺Prober進(jìn)行晶圓探針測試,實(shí)現(xiàn)研發(fā)中心對車間探針臺儀器的集中統(tǒng)一管理。
系統(tǒng)測試站部分由探針臺prober、GPIB-USB轉(zhuǎn)換接口、測試站終端、路由器組成,探針臺與測試站終端之間需要安裝連接GPIB-USB轉(zhuǎn)換接口來實(shí)現(xiàn)設(shè)備與終端的GPIB通信(如圖1),由于探針臺本身與測站終端的GPIB連接還承擔(dān)著與ATE通訊的任務(wù),所以在軟件進(jìn)行連接的時候會先行釋放ATE與探針臺之間的GPIB連接句柄,以免造成GPIB總線忙的狀態(tài)。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
系統(tǒng)遠(yuǎn)程控制部分由遠(yuǎn)程控制服務(wù)器及遠(yuǎn)程客戶端組成,使用frp內(nèi)網(wǎng)穿透的技術(shù),通過在遠(yuǎn)程客戶端進(jìn)行訪問IP和密鑰等設(shè)置,可以穿透連接控制內(nèi)網(wǎng)環(huán)境中的測站終端[5]。
NI GPIB-USB-HS+是NI公司開發(fā)的一款I(lǐng)EEE 488控制器和便攜式分析儀,用于采用USB插槽的計(jì)算機(jī)。使用該設(shè)備可將儀器集成到系統(tǒng)中,以及排除和解決GPIB硬件和軟件問題,由于不需要GPIB電纜,因此可使用高速USB端口控制最多14個GPIB儀器。
GPIB連接線可以連接測試站終端與探針臺Prober,適用于從Lab到工廠車間等不同環(huán)境內(nèi)的儀器控制應(yīng)用,多個GPIB連接線可以連接到同一測試終端,通過GPIB連接模塊的選擇來進(jìn)行選擇性控制與監(jiān)測。
軟件設(shè)計(jì)分為測站終端與客戶端兩部分。測站終端部分通過GUI人機(jī)交互界面對GPIB總線上連接的設(shè)備進(jìn)行連接、監(jiān)控、控制及測試結(jié)果顯示。測站終端模塊中的GPIB控制子模塊主要是實(shí)現(xiàn)測站終端與當(dāng)前總線上prober設(shè)備的連接、控制權(quán)限句柄的獲取。測試進(jìn)程獲取子模塊主要用于實(shí)時map圖的獲取以及測試結(jié)果的獲取。儀器狀態(tài)監(jiān)控子模塊主要用于實(shí)時監(jiān)控探針臺狀態(tài)與異常,便于及時處理。
遠(yuǎn)程客戶端部分能夠使用frp內(nèi)網(wǎng)穿透技術(shù)通過內(nèi)網(wǎng)中連接了外網(wǎng)的主機(jī)作為中轉(zhuǎn),將測試站終端的端口連接到客戶電腦,再使用Windows自帶MSTAC遠(yuǎn)程桌面連接進(jìn)行訪問,就實(shí)現(xiàn)了遠(yuǎn)程操控未連接外網(wǎng)的電腦并控制本地探針臺的功能。
如圖2所示,客戶端人機(jī)交互界面能夠達(dá)到和實(shí)際操作探針臺一樣的交互體驗(yàn)。
圖2 測試站模塊界面
顯示模塊是通過python的pillow庫顯示Map圖信息、BIN項(xiàng)信息、坐標(biāo)信息、測試結(jié)果以及狀態(tài)監(jiān)控顯示。
儀器查詢連接模塊,能夠選擇不同公司不同型號探針臺,并通過GPIB連接線進(jìn)行測試站終端與prober的連接。
儀器參數(shù)設(shè)施模塊通過界面修改OD等探針臺測試中的重要參數(shù),設(shè)置prober參數(shù)。
儀器交互控制模塊,通過人機(jī)交互界面的按鈕,對探針臺進(jìn)行移動、扎針以及抬針等操作。
使用frp內(nèi)網(wǎng)穿透的技術(shù)和Python編寫遠(yuǎn)程客戶端GUI模塊,將frp的程序和config設(shè)置嵌入到遠(yuǎn)程客戶端中,將內(nèi)網(wǎng)穿透需要的參數(shù)輸入框放置在遠(yuǎn)程客戶端GUI界面,通過在遠(yuǎn)程客戶端進(jìn)行訪問IP和密鑰等設(shè)置,可以通過公網(wǎng)端口穿透內(nèi)網(wǎng)并與內(nèi)網(wǎng)環(huán)境中的測站終端PC端口連接。
圖3 遠(yuǎn)程客戶端模塊界面
軟件基于Python編程語言來進(jìn)行設(shè)計(jì),啟動程序后通過選擇不同設(shè)備類型來選擇設(shè)備指令集,該選擇將決定后續(xù)收發(fā)指令階段的底層內(nèi)容,通過NI-VISA動態(tài)鏈接庫底層文件中的查詢函數(shù)查詢當(dāng)前GPIB總線上連接的設(shè)備地址,選取prober設(shè)備地址后發(fā)送ibdev命令獲取handler,prober進(jìn)入等待接收命令階段。讀取待測wafer的信息文件來提取map圖坐標(biāo)系以及wafer基本信息,獲取坐標(biāo)系后自動發(fā)送查詢指令并接受坐標(biāo)信息,將坐標(biāo)值返回到基于pillow庫的cavans模塊進(jìn)行分析作圖,作圖完成后對GUI顯示框刷新并更新當(dāng)前map圖,完成刷新后返回指令發(fā)送準(zhǔn)備狀態(tài)等待新的操作。具體軟件設(shè)計(jì)流程圖如圖4。
圖4 遠(yuǎn)程客戶端模塊界面
遠(yuǎn)程控制流程由客戶端主機(jī)組織,配置完成并完成點(diǎn)對點(diǎn)內(nèi)網(wǎng)穿透連接后,由SSH技術(shù)實(shí)現(xiàn)本地主機(jī)端口與測站主機(jī)端口的互連,客戶端主機(jī)借用本地主機(jī)端口向測站探針臺發(fā)送指令進(jìn)行測試,并使用同樣的端口接受并返回測試與控制的結(jié)果,具體流程如圖5所示。
圖5 遠(yuǎn)程控制流程圖
使用NI公司開發(fā)的GPIB連接線,能夠滿足測站終端與多臺設(shè)備連接并進(jìn)行控制的要求,同時將NI驅(qū)動文件中的gpib32.dll動態(tài)鏈接庫與Python自帶的Py-Visa庫結(jié)合并作為主程序中GPIB通訊協(xié)議的底層文件,再使用Python編程構(gòu)造GUI人機(jī)交互界面,將設(shè)備的程序控制模塊與GUI的模塊進(jìn)行連接。
使用Python在Pycharm開發(fā)環(huán)境下與探針臺控制流程如下。
1)調(diào)用動態(tài)鏈接庫與Py-Visa庫:
編寫底層文件,通過import方法將兩個庫引用并封裝到函數(shù)中。
2)查詢并選擇儀器對象:
rm = pyvisa.ResourceManager();//查詢并返回當(dāng)前GPIB連接的儀器信息
Device = self.rm.list_resources();//查詢到的儀器存入list
3)獲得儀器連接地址:
GPIB::XX::INSTR是被連接儀器的代號,其中“XX”就是GPIB通訊中的paddress,所以只要使用“paddress = int(machine.split('::')[1])”代碼獲得paddress。
4)儀器連接:
將獲得的paddress傳入封裝好的connect函數(shù)中:
Gpib.Gpib(0, self.paddress, 0, timeout=12, send_eoi=1, eos_mode=0);
檢查返回值,如果正確則完成儀器的連接。
Connect函數(shù)具體實(shí)現(xiàn)代碼如下:
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
其中g(shù)pib.find與gpib.dev就是將gpib32動態(tài)鏈接庫與Py-visa對應(yīng)功能模塊封裝起來的函數(shù),例如:
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通訊協(xié)議結(jié)合儀器控制標(biāo)準(zhǔn)指令來實(shí)現(xiàn),使用底層函數(shù)綜合出的write與read函數(shù),配合不同類型prober的標(biāo)準(zhǔn)CMD即可實(shí)現(xiàn)儀器控制,例如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設(shè)備在GPIB控制過程中接收到指令后會根據(jù)指令進(jìn)行相應(yīng)動作,在操作結(jié)束后返回操控者期望的信息,同時根據(jù)返回信息中所包含的坐標(biāo)和BIN項(xiàng)等信息,并在Pillow作圖模塊中刷新當(dāng)前Map圖,然后將最新Map圖更新至顯示模塊。由于優(yōu)化了Pillow作圖模塊的代碼,使得在更新Map圖時只針對發(fā)生改變的Die進(jìn)行改動,而不是重新讀取Map圖信息,大大的加快了顯示模塊更新的速度。
7)儀器狀態(tài)狀態(tài)監(jiān)控:
為了使測站終端能夠監(jiān)控prober設(shè)備狀態(tài),同時prober能向終端返回異常報警、發(fā)送準(zhǔn)備完成等通知,為此GPIB通訊協(xié)議設(shè)置了SRQ(服務(wù)請求)功能。當(dāng)已連接的設(shè)備向測站終端發(fā)出SRQ請求,那么GPIB總線上SRQ線為”TURE”,通知測站終端有連接在總線上的設(shè)備發(fā)出了服務(wù)請求。但是僅憑總線上的SRQ信號無法確定發(fā)出請求設(shè)備的地址,于是需要測站終端進(jìn)行輪詢處理,查詢發(fā)出請求的地址并處理請求內(nèi)容。
在程序中狀態(tài)監(jiān)控分為兩部分,使用多線程的工作模式,其中監(jiān)控模塊通過while循環(huán)定時在總線上一臺一臺地查詢當(dāng)前SRQ狀態(tài),被查詢的設(shè)備向測站終端反饋9 bit的數(shù)據(jù),其中包含最高位的狀態(tài)字節(jié)以及余下八位SRQ請求數(shù)據(jù)。測站終端通過分析返回的數(shù)據(jù),監(jiān)控哪一臺設(shè)備發(fā)出了SRQ,提出何種請求。而指令反饋模塊則是將SRQ請求查詢設(shè)置在向設(shè)備發(fā)送指令之后,這樣既有準(zhǔn)確的設(shè)備地址和指令內(nèi)容,又可以快速監(jiān)控設(shè)備對指令的反應(yīng)情況。狀態(tài)監(jiān)控模塊的內(nèi)容都將實(shí)時顯示在GUI界面中的顯示模塊,便于使用者查看。具體SRQ請求如表1。
表1 P12機(jī)臺SRQ請求表
遠(yuǎn)程控制人機(jī)交互界面GUI的設(shè)計(jì)通過使用Python提供的QtDesigner集成式套件。設(shè)計(jì)步驟如下:
在工具界面放置一個主窗口Mainwindow控件作為GUI的框架。
根據(jù)提前設(shè)計(jì)規(guī)劃好的功能模塊,通過layout布局合理的放置Frame作為模塊框架。
在相應(yīng)的功能模塊Frame中加入ListWidget、pushbutton和combox等控件。
通過信號槽的方式將button_click等事件與程序中的功能函數(shù)連接起來。
完成GUI的設(shè)計(jì)后會生成ui文件,通過配置external tools中的pyuic工具對ui文件進(jìn)行轉(zhuǎn)換生成py文件,py文件中的Mainwindow就是GUI主界面,然后在軟件設(shè)計(jì)主程序中import主界面py文件,就可以將主界面中的各個模塊與主程序中的程序模塊通過信號槽連接,實(shí)現(xiàn)人機(jī)交互界面的設(shè)計(jì)。
從20世紀(jì)90年代開始,一種被稱作網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)的技術(shù)誕生,也叫做網(wǎng)絡(luò)地址偽裝或者IP地址偽裝(IP masquerading),這種技術(shù)廣泛應(yīng)用在解決由IPv4地址不足引起的保存IP地址困難問題。解決的方法是在IP數(shù)據(jù)包通過路由器或防火墻時重新編寫發(fā)出數(shù)據(jù)包的IP地址或被訪問的IP地址。這種技術(shù)的最佳使用場景是在內(nèi)網(wǎng)有多臺主機(jī)但只有一個公有IP地址訪問外網(wǎng)的情況。
NAT穿透,就是要在兩個處于不同類型NAT網(wǎng)絡(luò)下的節(jié)點(diǎn)之間建立起穩(wěn)定的直接連接,要實(shí)現(xiàn)這種直接連接,必須的條件是互連雙方互相知道對方的公網(wǎng)IP與端口,這樣才能互相發(fā)送數(shù)據(jù)包來建立連接[7]。通過分析可知,本軟件所在的公司網(wǎng)絡(luò)為圓錐形地址限制NAT(Address-Restricted cone NAT),也就是內(nèi)網(wǎng)各主機(jī)的客戶端必須首先發(fā)送數(shù)據(jù)包到對方IP地址,然后才能接收來自對方IP地址的數(shù)據(jù)包。在內(nèi)外網(wǎng)訪問方面,唯一的限制是要求數(shù)據(jù)包是來自對方IP地址。內(nèi)部地址和端口映射到外部地址和端口,所有發(fā)自內(nèi)網(wǎng)主機(jī)的數(shù)據(jù)包都經(jīng)由外部地址和端口向外發(fā)送。外網(wǎng)主機(jī)地址(不限制端口)能通過給外部地址和端口發(fā)包到達(dá)內(nèi)網(wǎng)。具體內(nèi)外網(wǎng)訪問類型如圖6所示。
圖6 圓錐形地址限制NAT
要想實(shí)現(xiàn)圓錐形地址受限NAT的穿透,需要能輕松獲得對方公網(wǎng)IP與端口,為了實(shí)現(xiàn)這種功能,選用FRP來安全地向?qū)Ψ奖┞蹲陨鞩P地址與端口。FRP(fast reverse proxy)是一個高效安全的可用于內(nèi)外網(wǎng)NAT穿透的反向代理(reverse proxy)應(yīng)用,支持tcp, udp協(xié)議,為 http和https應(yīng)用協(xié)議提供了額外的能力,且嘗試性支持了點(diǎn)對點(diǎn)穿透。對于公司來說,某些服務(wù)如果直接暴露在公網(wǎng)上將會存在一定的安全隱患,所以需要安全地暴露內(nèi)網(wǎng)服務(wù)。使用xtcp類型的代理可以避免讓任何人都能訪問要穿透的服務(wù),所以需要在客戶端訪問者也運(yùn)行一個frp client。
Frp使用方法為在客戶端與本地端進(jìn)行config的配置,并且搭建一個輔助服務(wù)器來使客戶端與本地端互相交換config中配置的IP和端口,服務(wù)器有著固定的公網(wǎng)IP與端口,所有本地端與客戶端都能連接到輔助服務(wù)器,服務(wù)器就獲得了所有本地端與客戶端的IP和端口??蛻舳酥灰埱笙氪┩傅谋镜囟?,服務(wù)器驗(yàn)證雙方config配置中用戶名和密鑰然后就可以返回目標(biāo)本地端的外網(wǎng)IP和端口,同時通知目標(biāo)本地端即將進(jìn)行FRP連接并發(fā)送客戶端的外網(wǎng)IP與端口,再運(yùn)行frpc與frps時能夠通過本地主機(jī)轉(zhuǎn)發(fā)內(nèi)網(wǎng)測站終端的SSH服務(wù),客戶端就可以通過在兩邊都部署上frpc建立起客戶端與本地主機(jī)之間直接的連接,就實(shí)現(xiàn)了穿透NAT設(shè)備的需求,具體結(jié)構(gòu)如圖7所示。
圖7 Frp穿透模式
上述應(yīng)用情景是基于穿透雙方的NAT類型一致時,服務(wù)器僅作為輔助來實(shí)現(xiàn)數(shù)據(jù)中轉(zhuǎn)。但遇到P2P穿透的應(yīng)用情景時,往往雙方NAT類型并不相同,這個時候客戶端到服務(wù)器與客戶端到本地端的IP和端口都是不同的,但本地端的外網(wǎng)IP與端口卻沒有改變,所以客戶端到本地端的連接是可以實(shí)現(xiàn)的,只要通過UDP通訊中的recvfrom address結(jié)構(gòu)體,就能得到客戶端的外網(wǎng)IP和端口,即可實(shí)現(xiàn)P2P穿透的應(yīng)用。
該軟件針對晶圓測試探針臺遠(yuǎn)程化自動化操作需求開發(fā),使用該系統(tǒng)進(jìn)行晶圓測試方案開發(fā)調(diào)試的開發(fā)流程與原有開發(fā)流程對比,有效地縮短了測試方案開發(fā)周期,并且在探針臺管理、實(shí)時監(jiān)控等方面也更具優(yōu)勢,具體見表2。
表2 本軟件開發(fā)模式與原有開發(fā)模式應(yīng)用性對比
該軟件從2019年投入使用后,截至2020年4月,已經(jīng)參與近15個晶圓測試項(xiàng)目的開發(fā)流程,軟件運(yùn)行良好、操作方便且效果顯著,具有良好的可靠性、可移植性、可交互性,其中內(nèi)網(wǎng)穿透效果良好,穿透率達(dá)到95%。
本文結(jié)合晶圓測試與探針臺設(shè)備的實(shí)際情況,基于現(xiàn)有探針臺設(shè)備以及GPIB等硬件資源的基礎(chǔ)上設(shè)計(jì)開發(fā)了一個探針臺的內(nèi)外網(wǎng)NAT穿透遠(yuǎn)程控制管理軟件,由于該軟件與不同類型探針臺的標(biāo)準(zhǔn)指令相關(guān)度不高,在軟件開發(fā)過程中使用模塊化開發(fā),可以在后續(xù)使用中針對新的設(shè)備進(jìn)行推廣[8]。軟件對多站點(diǎn)同步自動化管理、測試數(shù)據(jù)的統(tǒng)計(jì)分析還需要進(jìn)一步的研究應(yīng)用。