利用DFT規則提高ASIC錯誤檢測范圍
本文是作者關(guān)于錯誤檢測范圍分析和ASIC設計全掃描測試模擬的第二篇文章(第一篇《在設計中遵循DFT規則提高錯誤檢測覆蓋率》見(jiàn)本刊今年8月第二期)。在前一篇里作者討論了一些實(shí)用的方法,系統地分析了未包含在全掃描檢測范圍內的恒定錯誤,并提供設計實(shí)例,文中主要講了一些重要的DFT規則,只要遵循這些規則就能大大提高錯誤檢測范圍。本文則詳細介紹如何針對錯誤檢測范圍(而不是邏輯驗證)用錯誤模擬的方法來(lái)模擬ASIC非掃描向量,其中的原理同樣可以應用在FPGA等其它IC設計中。
ASIC 供應商們廣泛應用掃描測試來(lái)檢測一般稱(chēng)為恒定錯誤的制造缺陷,錯誤檢測范圍分析的目的是精確計算所有可檢測錯誤百分比,并尋找方法將不在檢測范圍內的錯誤加入到檢測范圍內,以使最終錯誤檢測范圍百分比達到95%以上,這也是ASIC供應商所使用的標準,用以證明電路本身制造是正確的。
從DFT 規則1(參見(jiàn)《電子工程專(zhuān)輯》2002年8月第二期第46頁(yè)《在設計中遵循DFT規則,提高錯誤檢測覆蓋率》一文)可知,我們應該進(jìn)行邊界掃描,或者在嵌入式RAM周?chē)黾訙y試點(diǎn)進(jìn)行全掃描測試,即需要對設計作一些更改。但假如由于進(jìn)度、性能或面積等原因不能這樣做該怎么辦呢?如何將非掃描邏輯模塊加入到測試范圍之內呢?因為大多數不可測錯誤很可能就存在于這些模塊中。在這種情況下,一般是進(jìn)行錯誤模擬,使用一個(gè)支持恒定錯誤模型的特殊模擬器(稱(chēng)為錯誤模擬器),針對錯誤檢測范圍模擬非ATPG(自動(dòng)測試模式)測試向量。非ATPG向量可以是那些最初開(kāi)發(fā)用于功能驗證的向量,也可以是手工開(kāi)發(fā)用來(lái)針對己知錯誤的向量(圖1)。
錯誤模擬不能從零開(kāi)始,它從ATPG工具提供的錯誤檢測范圍結果中讀出數據,并加上非ATPG測試向量提供的其它錯誤檢測結果。所以讓錯誤模擬器能讀入 ATPG工具的輸出文件非常重要,確保做到這點(diǎn)的方法之一是使用同一供應商提供的兩種工具,如果這兩種工具來(lái)自不同的供應商,在購買(mǎi)以前就要確認兩種工具之間可以交流。另外一個(gè)關(guān)鍵之處是有些錯誤模擬器不能直接使用測試基準程序(如在Verilog中使用的程序),且需要特殊格式的輸入激勵和輸出響應文件,如由1和0組成的二進(jìn)制格式。
因此需要有一個(gè)工具來(lái)進(jìn)行這種轉換,工具可以由ASIC供應商提供,大多數情況下必須使用C、C++或者Perl5之類(lèi)的語(yǔ)言進(jìn)行開(kāi)發(fā),記住要分配足夠的資源用于該項重要任務(wù)。
圖1中的功能測試向量由幾個(gè)不同類(lèi)型的測試向量組成,錯誤模擬的第一步是決定哪一類(lèi)向量能提供最大錯誤檢測范圍,從而只模擬這些向量,其中包括:
·邏輯測試向量 由ASIC設計人員或DVT工程師或共同開(kāi)發(fā)生成,用于對設計進(jìn)行功能驗證。
·BSR測試向量由ASIC供應商使用BSDL文件創(chuàng )建生成,如果每一個(gè)初級I/O引腳都處于邊界掃描鏈中,那么這些向量還包括參數測試向量。
·參數測試向量由ASIC設計人員或DVT工程師或共同開(kāi)發(fā)生成,用于不是每個(gè)初級I/O引腳都處于邊界掃描鏈的設計,這種向量使每個(gè)初級I/O引腳在狀態(tài)1、0和Z態(tài)間轉換。
·TAP控制器測試向量由ASIC設計人員或DVT工程師或兩者共同開(kāi)發(fā)生成,用于通過(guò)TAP邏輯中每個(gè)要求的狀態(tài)和掃描指令,并測試邊界掃描邏輯。TAP邏輯有些錯誤可以被掃描測試本身所覆蓋,如那些在時(shí)鐘網(wǎng)表中的錯誤,但其它的必須用這些向量進(jìn)行測試。
經(jīng)驗顯示,邏輯測試向量對于錯誤檢測范圍不是很有效,因為它們不是專(zhuān)門(mén)針對錯誤的,但偶爾它們也會(huì )將一些ATPG測試范圍內部或外部的錯誤傳送至初級輸出處。假如把它們放在芯片測試儀上運行,就可以使用錯誤模擬找出這些向量是否恰巧檢測出一些檢測范圍以外的錯誤,如果能夠的話(huà)就不必再手工編寫(xiě)測試向量將那些錯誤歸到檢測范圍之內,但這需要對設計有透徹的理解且要做很多工作。
BSR向量很難用于錯誤模擬,原因是ASIC供應商的邊界掃描工具只能讀取BSDL文件,并只根據初級I/O引腳狀態(tài)生成BSR向量,它不知道ASIC內部任何邏輯。圖2是兩個(gè)BSR組成的一個(gè)邊界掃描鏈,用于三態(tài)初級輸出引腳PO。
為了在非ATPG測試向量上進(jìn)行錯誤模擬,應確保模擬器會(huì )產(chǎn)生帶有這些向量的預期輸出響應,并且不能有任何不匹配。使用BSR時(shí)我們可以從BSR向量中的 TMS信號值算出邊界掃描鏈轉移結束時(shí)間,對該時(shí)間而不是轉移中的輸出響應進(jìn)行比較。錯誤模擬器也可以這樣做,但不是自動(dòng)的(監視TMS引腳數值)。此外,生成BSR向量不需要有關(guān)ASIC內部邏輯的知識(我們只對其中的錯誤分類(lèi)感興趣),所以要大幅增加錯誤檢測范圍不太可能。鑒于這些理由,通常不使用 BSR向量。
錯誤模擬的第二步是了解ATPG和錯誤模擬兩者所得到的錯誤之間的區別,因為后者必須從前者的錯誤檢測范圍結果開(kāi)始,之所以有區別主要源于下面一些原因:
·RAM BIST模塊在A(yíng)TPG中作為黑盒模型而在錯誤模擬中卻作為真實(shí)邏輯模型,所以錯誤模擬能看到ATPG看不到的所有BIST模塊錯誤,這沒(méi)什么關(guān)系,只需告訴錯誤模擬器不要針對這些模塊中的錯誤即可。
· 錯誤模擬中使用的網(wǎng)表可能與ATPG中使用的網(wǎng)表不同。例如當ATPG運行時(shí),因為它在后端流程中處于早期階段,所以還沒(méi)對設計進(jìn)行適當優(yōu)化。設計布局布線(xiàn)完成后,將產(chǎn)生門(mén)和網(wǎng)絡(luò )延遲,根據這些值,有些門(mén)可能要進(jìn)行充實(shí),甚至需要作少許設計更改,這時(shí)既可以在修改過(guò)的網(wǎng)表上再運行ATPG,也可以用錯誤模擬覆蓋這些增加的錯誤。注意要將類(lèi)似這樣的不匹配報告給ASIC設計人員,確保引起足夠重視。
·ATPG測試中掃描觸發(fā)器是多路復用掃描型,其clk、d和si引腳是自動(dòng)測試的(qn引腳不是);而在錯誤模擬中,這些引腳變成邏輯引腳,是錯誤模擬器的檢測對象,必須告訴模擬器不要對這些引腳進(jìn)行檢測。
·如前所述,如果門(mén)級網(wǎng)表使用Verilog賦值語(yǔ)句,ATPG將把它轉換為數據庫中的偽緩沖器單元,而這些單元不在錯誤模擬器數據庫中。
· 有時(shí)候僅僅為了錯誤模擬器必須修改設計網(wǎng)表,如在使用延遲單元時(shí)。圖3(a)中的del_1和del_2就是這種單元,結果使clk和 we_ram_unbuf信號間的電路及其產(chǎn)生的波形不能在錯誤模擬器中直接進(jìn)行模擬,這是因為we_ram_unbuf的正確波形依賴(lài)于通過(guò)兩個(gè)延遲單元的延遲信號,但延遲信息是不能模擬的。在這方面不是只有錯誤模擬才這樣,ASIC仿真和測試系統也有同樣的局限。
在錯誤模擬中我們所能做的就是旁路掉圖3(a)中clk和we_ram_unbuf信號間的電路,方法是從一個(gè)稱(chēng)為we_ram_unbuf_fs(_fs表示錯誤模擬)的附加初級輸入引腳處將we_ram_unbuf波形直接送至we_logic的a3引腳,如圖4。如果設計里有多個(gè)RAM,可將引腳 we_ram_unbuf_fs送至所有這些RAM。注意這個(gè)引腳和多路器只是為了錯誤模擬而加上的,并不用在芯片制造中。
總之,你必須了解ATPG和錯誤模擬之間網(wǎng)表的差別,并決定錯誤模擬的對象是什么。錯誤模擬數據庫(包括ATPG錯誤檢測范圍結果)建立好以后,錯誤模擬器就可以創(chuàng )建它所能得到的初始錯誤檢測范圍,這可能與ATPG看到的初始錯誤檢測范圍不同,具體取決于所顯示的新錯誤數量和確定不作為檢測對象的錯誤數量。此外,由于將RAM模擬為灰盒以及測試數據現在可以完全傳送以測試所有直接訪(fǎng)問(wèn)RAM的非掃描邏輯,錯誤模擬中的不可測錯誤要比在A(yíng)TPG中少得多。
同樣,非掃描觸發(fā)器也不再是指定的ALWAYS0或ALWAYS1模型,事實(shí)上有些類(lèi)型的不可測錯誤完全消失了,如像CONS_UNCNTRL_UNTESTABLE和CONS_UNOBSRV_UNTESTABLE錯誤,這是因為沒(méi)有將初級I/O引腳限制為恒定值。
錯誤模擬而不能由ATPG報告,這就是CLOCK_FAULT_UNTESTABLE錯誤。這種錯誤大多產(chǎn)生在存貯單元(觸發(fā)器和鎖存器)的時(shí)鐘引腳上,不可能對它們初始化,從而使不確定值傳送到輸出端。如圖5中latch1引腳en上的恒1錯誤, CLOCK_FAULT_UNTESTABLE錯誤也產(chǎn)生在非時(shí)鐘引腳上,如圖6中mux引腳上的恒0錯誤。
那么在A(yíng)TPG中這些引腳上會(huì )有什么類(lèi)型的錯誤呢?因為圖6非掃描觸發(fā)器 register1指定為ALWAYS0模型,所以mux上所有錯誤都是DANGLING_UNTESTABLE。圖5的latch1在BIST模塊內部而沒(méi)有被ATPG看到,因此時(shí)鐘和使能引腳上的CLOCK_FAULT_UNTESTABLE錯誤最多變成可能檢測到的錯誤。雖然輸出值是不確定的,但一般它們能在測試儀上檢測到,因為時(shí)鐘錯誤最終會(huì )產(chǎn)生一個(gè)與預期不同的輸出值,所以可從錯誤模擬器中排除這類(lèi)錯誤。
錯誤模擬的最后一步也是最困難的:將非掃描測試向量翻譯成錯誤模擬器所需的格式。市面上還沒(méi)有這類(lèi)翻譯器,必須得自己寫(xiě)。
有些ASIC供應商使用一個(gè)24-邏輯值系統來(lái)描述工作在芯片中的測試向量。例如,如果一個(gè)輸入腳得到一個(gè)值為“1”的激勵,在整個(gè)模擬周期中1都不會(huì )變化;如果加在這個(gè)引腳上的激勵為“/”,則在當前周期中這個(gè)值會(huì )從以前的值改變?yōu)楫斍爸?,并在當前周期的余下時(shí)間里都保持為1。
最困難的問(wèn)題是將這個(gè)24-邏輯值系統與錯誤模擬器所使用的4-邏輯值系統(1,0,X和Z)匹配起來(lái)。例如對于一個(gè)三態(tài)或雙向引腳,如果它的控制信號是X 或改為X,引腳的值可以是24-邏輯值系統中C、E、Z、c、e和z中的一個(gè),但在錯誤模擬中這個(gè)值必須是X或改為X。當控制信號是X時(shí)就是大多數邏輯和錯誤模擬器工作的方式,如果控制信號不是X,而三態(tài)或雙向引腳是C、E、Z、c、e和z中的一個(gè),那么在錯誤模擬中這個(gè)值將轉換成Z。必須充分了解這一細微之處并進(jìn)行正確處理,否則錯誤模擬輸出響應將不匹配。兩個(gè)系統之間的另一個(gè)區別是,24-邏輯值向量含有用于三態(tài)或雙向引腳的內部控制信號,這個(gè)信號不能進(jìn)入到錯誤模擬器使用的激勵和響應文件中,但它們可以告訴翻譯器什么時(shí)候三態(tài)引腳為Z值以及什么時(shí)候雙向引腳改變方向,這樣就能正確生成這兩個(gè)文件。
編寫(xiě)翻譯器的工作量很大,因為兩個(gè)系統之間的區別數量大,而且非常細微,但這一點(diǎn)能夠做到而且必須做到。因為錯誤模擬的關(guān)鍵是要將內部錯誤的影響傳送至初級輸出以進(jìn)行觀(guān)察,所以我們的目標是測試向量在轉換以及被錯誤模擬器使用時(shí)沒(méi)有輸出不匹配。即使有一個(gè)輸出不匹配錯誤模擬也是無(wú)效的,因為這表示模擬向量沒(méi)有按芯片在芯片測試儀上進(jìn)行測試的同樣方法運行。錯誤模擬可以在正確的輸入激勵和輸出響應文件生成后開(kāi)始,每項測試運行結束后,標出檢測到的錯誤,這樣在后面就不用再對其進(jìn)行測試了。在這種情況下,每項測試都會(huì )減少余下檢測范圍之外的錯誤。所有提供的非掃描測試運行完以后,很可能仍然有一些檢測范圍以外的錯誤。如果這些錯誤所在的模塊必須位于錯誤檢測范圍內,就應針對這些錯誤用手工開(kāi)發(fā)更多的測試向量,這將是一個(gè)耗時(shí)并需要多次反復的過(guò)程,但也可以從很多地方(如錯誤模擬工具供應商處)獲取實(shí)用且經(jīng)過(guò)驗證的方法和有用的工具。
總之,掃描測試問(wèn)題在A(yíng)SIC設計中不是一個(gè)小問(wèn)題,如果前期沒(méi)有充分考慮到,那么到了后期將花費大量的時(shí)間和資源。所以很重要的一點(diǎn)是將它們作為與設計相關(guān)的事項對待,而不是與設計無(wú)關(guān)。同樣重要的是,ASIC設計人員應與掃描測試新技術(shù)保持同步,因為新技術(shù)能以更容易的方法得到更高錯誤檢測范圍,并與現有掃描測試方法配合使用。
評論