在此例中,將2000個(gè)測試向量發(fā)送至必須用恒定2V加電的CMOS IC。此例將使用一個(gè)閾值電平,而且1μA及以下的靜態(tài)電流將被認為是合格電流。無(wú)需保存實(shí)際的測量值,所以將只檢查260X的箝位狀態(tài)。為確保生產(chǎn)吞吐量符合要求,必須盡快完成測量,最好在1秒以?xún)。測量?jì)x器必須發(fā)送一個(gè)通過(guò)/失效指示至數字測試系統。 方案:開(kāi)發(fā)TSP腳本用于創(chuàng )建“IddqTest(smu, ndevices, nvectors)函數”。此腳本的一部分被列在下面。完整的腳本可以在吉時(shí)利網(wǎng)站(www.keithley.com)下載。此腳本可以用測試腳本生成器查看、編輯、裝載和運行。由于無(wú)法獲得實(shí)際的“數字測試系統”,因而使用IDDQ測量與測試向量應用同步的觸發(fā)線(xiàn)路進(jìn)行環(huán)繞測試以評估函數的速度性能。260X的輸入觸發(fā)線(xiàn)路連至其輸出觸發(fā)線(xiàn)路。在此條件下,260X能以每秒約2500個(gè)向量的速率執行IDDQ測試。 函數定義如下。除了這里示出的以外,實(shí)際腳本包括更多注釋。注釋用雙橫線(xiàn)(--)標識。函數中聲明了幾個(gè)局部變量。所有變量都是全局的,除非顯式聲明為局部變量。此函數在執行實(shí)際測試前要進(jìn)行一些儀器初始化設置。此設置包括設定2V源電平和1μA箝位極限,選擇電壓感測模式以及配置觸發(fā)線(xiàn)路。例子中使用了本地(2線(xiàn))電壓感測?梢灾苯訉⑵涓臑檫h端(4線(xiàn))感測。 function IddqTest(smu, ndevices, nvectors) -- 傳遞參數: -- 源測量單元是用于測試的SMU(A或B) -- ndevices是待測IC的數量 -- nvectors是Iddq測試序列用到的向量數量 -- 默認smua,如果未指定SMU。 if smu == nil then smu = smua end -- ***** 聲明并初始化臨時(shí)變量***** -- 保存“等待觸發(fā)信號”布爾狀態(tài)的變量 local l_sot_received local l_trig_received -- 放棄測試標記(布爾型) local l_abort_test -- 保存定時(shí)信息的變量 local l_start_time, l_stop_time, l_elapsed_time -- 計數器變量 local l_i, l_nvectors_remaining -- 用于模擬器件機械手分級的表格 local l_bins = {0,0} -- 全部分級初始設置為0 -- *************** 執行260X的初始化設置*************** smu.reset() -- 將SMU重置為缺省設置 smu.source.func = smu.OUTPUT_DCVOLTS -- 源DCV smu.source.rangev = 2 -- 將自動(dòng)選擇6V量程 smu.source.levelv = 2 -- 源2V smu.source.limiti = 1E-6 -- 電流箝位設為1uA smu.sense = smu.SENSE_LOCAL -- 用smu.SENSE_REMOTE進(jìn)行4線(xiàn)感測 -- 配置數字I/O端口 digio.writeprotect = 0 -- 全部比特撤銷(xiāo)保護 digio.writeport(30) -- 將2、3、4和5比特/行設置為高 digio.writeprotect = 30 -- 觸發(fā)線(xiàn)路2、3、4和5寫(xiě)保護 -- 配置觸發(fā)線(xiàn)路2(輸入SOT) digio.trigger[2].mode = digio.TRIG_FALLING -- 檢測下降沿 digio.trigger[2].clear() -- 清除“鎖存”觸發(fā)信號 -- 配置觸發(fā)線(xiàn)路3(輸出EOT) digio.trigger[3].mode = digio.TRIG_FALLING -- 輸出TTL低電平脈沖 digio.trigger[3].pulsewidth = 10E-6 -- 確保最小脈沖 -- 配置觸發(fā)線(xiàn)路4(在設置了測試向量時(shí)輸入TRIG) digio.trigger[4].mode = digio.TRIG_FALLING -- 檢測下降沿 digio.trigger[4].clear() -- 清除“鎖存”觸發(fā)信號 -- 配置觸發(fā)線(xiàn)路5(在完成IDDQ測量后輸出TRIG) digio.trigger[5].mode = digio.TRIG_FALLING -- 輸出TTL低電平脈沖 digio.trigger[5].pulsewidth = 10E-6 -- 確保最小脈沖 -- 清除錯誤隊列 errorqueue.clear() -- ************************* 執行測試************************* -- 在前面板顯示一些狀態(tài)信息 display.clear() display.setcursor (1,1) display.settext(" Test In Progress") display.setcursor (2,1) display.settext(" Testing "..tostring(ndevices).." Parts") timer.reset() l_start_time = timer.measure.t() for l_i = 1, ndevices do -- 等待SOT指示器件準備好進(jìn)行測試;10ms后超時(shí) l_sot_received = digio.trigger[2].wait(0.01) -- 打開(kāi)SMU輸出;等到測試完成 smu.source.output = smu.OUTPUT_ON -- 初始化中斷標記和向量計數器 l_abort_test = false l_nvectors_remaining = nvectors digio.trigger[4].clear() -- 清除全部“鎖存”觸發(fā)信號 -- 重復測試直至不再有測試向量或測試失敗 while (l_nvectors_remaining >0) and not (l_abort_test) do -- 等待來(lái)自數字測試系統的觸發(fā)信號;10ms后超時(shí) l_trig_received = digio.trigger[4].wait(10E-3) -- 如需建立時(shí)間,delay(0.0005)在這里插入延時(shí) -- 檢查箝位狀態(tài);返回布爾值真或假 l_incompliance = smu.source.compliance -- 如果源在箝位狀態(tài),那么器件損壞并且中斷測試 if l_incompliance then digio.writeport(32) --寫(xiě)失效模式至DIO l_bins[2] = l_bins[2]+1 -- “分級”器件 l_abort_test = true -- 將中斷測試標記置為真并退出循環(huán) else -- 否則,器件仍然是好的,所以繼續測試 digio.trigger[5].assert() -- 輸出觸發(fā)信號至“數字測試系統” l_nvectors_remaining = l_nvectors_remaining – 1 -- 新計數 end --if語(yǔ)句 -- 如果測試不中斷,那么器件是好的 if not (l_abort_test) then digio.writeport(64) -- 寫(xiě)通過(guò)模式至DIO l_bins[1] = l_bins[1]+1 -- “分級”器件 end --if語(yǔ)句 --關(guān)閉SMU輸出 smu.source.output = smu.OUTPUT_OFF -- 輸出EOT觸發(fā)信號 digio.trigger[3].assert() -- 清除分級碼(將全部撤銷(xiāo)保護的比特置為零) delay(0.0001) -- 清除分級碼之前延遲的單位為秒 digio.writeport(0) end --for語(yǔ)句 l_stop_time = timer.measure.t() l_elapsed_time = l_stop_time - l_start_time -- 在260X前面板顯示吞吐率和最終分級結果 display.clear() display.setcursor (1,1) display.settext("Parts per sec = "..tostring(ndevices / l_elapsed_time)) display.setcursor(2,1) display.settext("Bin Count: Good= "..l_bins[1].." Bad= "..l_bins[2]) -- 將速度與分級結果寫(xiě)至輸出隊列以供PC主機讀取 print("Elapsed time = "..l_elapsed_time.." sec") print("Parts per sec = "..tostring(ndevices / l_elapsed_time)) print("Bin Count: Good Parts: "..l_bins[1].." Bad Parts: "..l_bins[2]) end --IddqTest函數 用測試腳本生成器或者其它應用執行示例的IDDQ測試腳本僅創(chuàng )建了函數,不執行任何測試。執行IDDQ測試需要調用IddqTest()函數。例如,為了用2000個(gè)測試向量測試100個(gè)器件,系統控制器必須發(fā)送指令“IddqTest(smua, 100, 2000)”。 作為對函數調用的響應,260X等待外部數字測試系統對每個(gè)DUT的開(kāi)始測試(SOT)觸發(fā)信號。260X收到SOT信號后,打開(kāi)SMU輸出并等待數字測試系統的觸發(fā)信號。數字測試系統向IC輸入端施加測試向量,然后發(fā)送一個(gè)觸發(fā)信號至260X。260X接到觸發(fā)信號后,等待一個(gè)預定的建立時(shí)間,然后檢查其箝位狀態(tài)。如果不在箝位狀態(tài),那么這項IDDQ測試通過(guò),而且260X輸出一個(gè)觸發(fā)信號至數字測試系統并進(jìn)入循環(huán)等著(zhù)下一個(gè)施加的測試向量。此過(guò)程持續進(jìn)行直至完成全部測試向量或者260X進(jìn)入箝位狀態(tài)。如果成功通過(guò)全部測試向量,260X 就向其DIO端口寫(xiě)入十進(jìn)制數64表明通過(guò)了數字測試系統。表元素“l(fā)_bins[1]”加1用于模擬器件的分級。然后,260X輸出測試結束(EOT)觸發(fā)信號至數字測試系統,表明已完成DUT的IDDQ測試序列。 如果260X進(jìn)入箝位狀態(tài),那么IDDQ測試失敗。在單項測試失敗時(shí),260X采用“立即”分級方案,這意味著(zhù)260X會(huì )立即向數字測試系統寫(xiě)一個(gè)失效位模式(十進(jìn)制數32),中斷 剩余的測試序列,然后輸出EOT觸發(fā)信號至數字測試系統。在輸出了失效模式后,表元素“l(fā)_bins[2]”加1用于模擬分級過(guò)程。在260X通過(guò)寫(xiě)十進(jìn)制數0至DIO端口來(lái)發(fā)送EOT觸發(fā)信號后,260X等待一個(gè)預定的時(shí)間間隔就會(huì )清除通過(guò)/失效位模式。如果有更多的DUT要測試,260X進(jìn)入循環(huán)并等待下一個(gè)SOT觸發(fā)信號。當完成全部測試后,在260X前面板會(huì )顯示吞吐率和分級結果;吞吐率和分級結果也會(huì )打印至輸出隊列以供系統控制器讀取。 |