一、STIL Protocol文件基礎結構
包含的內容:
- scan input和output的名稱
- 哪些pin充當“clock”
- pins、clock、measures的時序定義
- 端口約束、等效關系
- test setup sequence、test_setup macro
- Scan enable sequence、load_unload procedure
- Scan shift sequence、Shift procedure
- 其他與設計有關的過程:master_observe,shadow_observe
示例:
STIL; ScanStructures{ ScanChain "chain1" { ScanIn “SDI[1]"; ScanOut SDO[1] ; } ScanChain "chain2" { ScanIn "SDI[2]"; ScanOut SDO[2] ; } Procedures { "load unload" { // clocks & resets off; enable scan V{CLOCK=0; RSTB=1; SCAN_EN=1; CONF_ENABLE=0;} shirt { V { _si=##; _ so=##; CLOCK=P;} //pulse shift clock; ##會用實際的pattern替代 } } } MacroDefs { "test setup" { V {CONF = 1; CONF ENABLE = 1 ; CLOCK = P;} V {CONE = 0; CONE ENABLE = 1; CLOCK = P;} V {CONF = 1; CONE ENABLE = 1; CLOCK = P;} V (CONF _ENABLE = 0; CLOCK = 0;} } }
二、創建SPF方法
①使用DFTC創建SPF(常用,首選)
②使用快速STIL命令
③手動創建SPF
在DRC或TEST模式下,可以使用以下命令來編寫模板SPF文件:
write_drc_file <file> [-replace]
[-generic captures] (默認設置,將針對所有故障模型的單周期通用捕獲過程寫入帶有單個協議文件的輸出drc文件中)
[-nogeneric_captures]
常規/慢周期:multiclock_capture
at-speed周期:allclock_launch,allclock_capture
如果SPF可用,讀入spf:
run_drc <spf_file>
set_drc <spf_file> run_drc
三、手動定義
1.定義PI
定義PI約束
-- 在整個測試程序中保持端口恆定,定義Pl(原輸入)約束:
add_pi_constraints 1 ASIC_TEST
-- 查看現有的PI約束列表:
report_pi_constraints
-- 查看輸入、輸出、輸入輸出、所有端口的列表:
report_primitives [-pis l -pos l -pios l -ports]
定義PI Equivalences
-- 端口上的PI equivalences:
add_pi_equivalences [list P1 P2 P3]
add_ pi_equivalences ENA_P -invert ENA_N
-- 定義差分時鍾:
add_clocks 0 CLKP -shift
add_clocks 1 CLKN -shift
add_pi_equivalences CLKP -differential CLKN
-- 查看現有的P1 equivalences:
report_pi_equivalences
2.quick STIL clock(一般不用,使用DFTC自動生成已經有了)
手動定義時鍾:
add_ clocks <off_state> <port_name> -shift
-timing <[list period leading trailing strobe]>
//Examples: add clocks 0 [ list c1k1 c1k2] -timing [list 100 45 55 40] -shift //-shift使時鍾在scan shift期間在load_unload過程中產生脈沖 add_clocks 1 SLAVE_CK -timing [ list 100 30 90 95]
定義OCC(internal clock):
add clocks <0 | 1> <pirgoames_list> -intclock
-pll_source <node_name>
-cycle <<<cycle_id> always_on l always_off l<int_node_name> <0 l 1 >>>
//example add_clock 0 "my_pll_ctrl/intclk" -intclock -pll_source u_pll/clka -cycle { 0 "my_pll_ctrl/u_clock_chain/launch_enable" 1 \ 1 "my_pll_ctrl/u_clock_chain/capture_enable" 1 }
注意:
在定義內部時鍾之前,請先指定set_drc -num pll_cycles選項(定義capture模式下允許的PLL時鍾周期數)
定義ATE時鍾:
add_ clocks <0 l 1> <pin_names_list> -shift
-refclock
-timing {<<period><LE><TE><measure_time>>}
add_clocks 0 ate_clk1 -refclock -shift -timing {100 45 55 20}
如果在capture過程中需要產生脈沖,則ATE時鍾也必須定義為TetraMAX的參考時鍾。
定義異步set/reset:
①TetraMAX要求將影響時序設備的存儲狀態、測試儀周期內執行脈沖操作的所有port定義為“clocks”
②TetraMAX時鍾包括: 傳統clock、flip-flops和latch的異步set和reset、 RAMS的write/read控件
③用作同步和異步的reset不應定義為時鍾。 使用以下drc選項: set_drc -allow_unstable_set_reset
3.SPF Capture procedures
//Capture procedure for stuck-at patterns "multiclock_capture" { W "_default_wET_"; F { "TEST_MODE"=1;} V ( "_pi" = \r169 #; " po"=r164 #; }} //Capture procedures for Transition or Path Delay patterns "allclock_launch" { w "_launch_WFT_"; F {“TEST_MODE"=1;} V{ "_pi"= \r169 #; "_po"=\r164 #; }} "allciock_capture" { w "_capture_WET_"; F {"TEST_MODE"=1;} V {"_pi"= \r169 #; "_po"=\r164 # ; }} "allclock_launch_capture" { w "_launch_capture_WFT_" F {"TEST_MODE"=1 ; } v {"_pi"= \r169 #; "_po"= r164 #;}} //Clocks pulses are controlled as part of the _pi signal group
4.在SPF中定義scan chain
add_scan_chains chain1 SDI2 SDO2
add_scan_chains chain2 SDI1 D1
add_scan_enables 1 SCAN_EN
add_scan_enables Z BIDI
Scanstructures { scanchain "chain1" {ScanIn SDI2; ScanOut SDO2; } scanchain "chain2" {ScanIn SDI1; ScanOut D1; } } Procedures { " load_unload"( V {CLOCK = 0;BIDI =Z ; SCAN EN=1;}” shift { V {_si=##; _so=##; CLOCK=P;) // pulse shift clock } } }
四、TetraMAX獲取時間信息
TetraMAX使用基於周期的模擬器進行DRC分析。模擬器本身沒有定時功能,但是事件按特定順序發生,並在特定時間應用於測試儀
- 事件順序和時間來自測試協議,測試協議可以來自多個地方:
從DFTC寫入的SPF文件
使用Quick STIL命令指定的時間
TetraMAX中的默認計時
手動輸入到SPF中的時間
- TetraMAX在此期間的定時的作用:
DRC:使用timing值和事件順序進行DRC檢查。
ATPG和故障模擬:不使用timing信息
pattern:timing與輸出向量相關聯
1.在已存在的UPF中更新timing
read_drc
update_ *
read_drc <original_SPF_file> update_wft -wft <name> -period <d> -force <d> -strobe <d> update_clock -wft <name> -clock <name> -pulse {<le><te>) update_scale -wft <name> -unit <nslps> write_drc_file <new_SPF_file> ………… run_drc <new_SPF_file>
2.SPF中的波形表和信號組
在STIL文件中把定義的時序保存為WaveformTable
Timing { WaveformTable "_default_MFT_" { Period "100ns" ; Waveforms { "_default_In_Timing_" { 01ZN {'0ns' D/U/z/N; }} "_default_cLk0_Timing_" {P {'0ns' D; '45ns' U; '55ns' D;}} //D高電平 U低電平 "_default_Out_Timing_" {X {'0ns' X; }} "_default_Out_Timing_" {HTL {'0ns'; '40ns' H/T/L; }} } } }
STIL文件用SignalGroups節省空間
SignalGroups { "_default_clk1_Timing_" = '"prst_n"'; "_default_clk0_Timing_" = '"sdr_clk"+"sys_clk"' ; "_default_In_Timing_" = '"pframe_n"+ ..."pad[0]"'; "_default_out_Timing_" ='"pframe_n" + ... "pad[0]"'; "_si" = '"pad[0]" + ... "pad[5]"' {scanIn;} "_so" = '"sd_ A[0]" + ... "sd_A[5]"'{scanout;} ; }
五、不同的Bond-outs
功能引腳的不同bond-outs可以完全在TetraMAX中處理,2個步驟:
step.1 在build之前從網表中刪除未綁定的pin
add_net_connections PI {pi_list} -remove
add_net_connections PO {po_list] -remove
add_net_connections PIO {bidir_list} -remove
step.2 從協議文件中刪除引腳:
從信號部分刪除
從相關的signalGroups中刪除(_pi_po等)
減少procedures中signalgroups更改中的重復計數
注意:如果使用Quick STIL命令,則不需要第二步
- 如果未綁定測試端口,則應更改設計的測試方法,而不是更改ATPG
查找掃描鏈的最低配置
盡可能在內部限制恆定信號並通過初始化序列進行驅動
考慮多模式掃描設置(用於晶圓測試的完整鏈條的測試模式、在封裝測試時重新配置以減少鏈條;注意:每種模式需要單獨運行的ATPG)
使用壓縮邏輯減少對頂層引腳的需求(自適應掃描可以通過有限的引腳驅動許多鏈)
- 如果無法訪問鏈,則會影響pattern質量,覆蓋范圍,運行時間和pattern數