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