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