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