杜開元,袁 俊,盧旭坤
(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]。軟件對多站點同步自動化管理、測試數據的統計分析還需要進一步的研究應用。