雷星辰,季偉偉,陳龍,韓森
(1.電子科技大學(xué)(深圳)高等研究院,廣東深圳 518110;2.中國(guó)電子科技集團(tuán)公司第五十八研究所,江蘇無錫 214035)
Flash 型FPGA 以其非易失性[1]、低功耗[2]、高安全性和上電即可運(yùn)行[3]的特性在航空航天及軍事領(lǐng)域得到廣泛應(yīng)用[4],因此對(duì)Flash 型FPGA 內(nèi)部資源測(cè)試方法的研究尤為重要。FPGA 內(nèi)嵌的塊隨機(jī)存儲(chǔ)器(BRAM)能夠快速且穩(wěn)定地存取數(shù)據(jù),因此對(duì)BRAM的測(cè)試是至關(guān)重要的[5]。在存儲(chǔ)器測(cè)試中,存儲(chǔ)器內(nèi)建自測(cè)試(MBIST)已經(jīng)成為主流測(cè)試方法,此方法不僅能減少測(cè)試步驟和提高故障覆蓋率,還能減少測(cè)試成本[6-7]。March C+算法是存儲(chǔ)器測(cè)試中最為有效的測(cè)試算法之一,因其具有較高的故障覆蓋率和較短的測(cè)試時(shí)間等優(yōu)點(diǎn),被廣泛應(yīng)用于存儲(chǔ)器測(cè)試中,但其仍然存在故障覆蓋不全的問題,如不能覆蓋寫干擾耦合、干擾耦合、寫破壞耦合、字內(nèi)反向耦合、字內(nèi)等冪耦合、字內(nèi)狀態(tài)耦合等故障[8]。本文基于March C+算法對(duì)其進(jìn)行改進(jìn),提高其故障覆蓋率,并設(shè)計(jì)內(nèi)建自測(cè)試(BIST)電路對(duì)優(yōu)化后的算法進(jìn)行驗(yàn)證,結(jié)果表明,該算法可以達(dá)到提高故障覆蓋率的目的。
故障模型不但可以將存儲(chǔ)器內(nèi)部的物理缺陷反映出來,同時(shí)也有助于完善測(cè)試算法。根據(jù)敏化Flash型FPGA 內(nèi)嵌BRAM 故障需要進(jìn)行的操作行為,將故障分為單單元故障、雙單元耦合故障以及多單元故障[9]。因多單元故障很少出現(xiàn),因此本文暫不對(duì)其進(jìn)行研究。
單單元故障是指在一個(gè)單獨(dú)的存儲(chǔ)單元上發(fā)生的故障,不受其他存儲(chǔ)單元的影響。單單元故障主要包括固定故障(SAF)、轉(zhuǎn)換故障(TF)、寫干擾故障(WDF)、讀破壞故障(RDF)、偽讀破壞故障(DRDF)、錯(cuò)誤讀取故障(IRF)、地址譯碼故障(ADF)和字內(nèi)故障[10]。
SAF 是指對(duì)存儲(chǔ)單元進(jìn)行任何讀寫操作都不影響它的故障狀態(tài)值。存儲(chǔ)單元的固定值為0 或1(記為SAF0 或SAF1)且不發(fā)生改變。
TF 是指存儲(chǔ)單元的狀態(tài)值無法從0 跳變到1,或無法從1 跳變到0。
WDF 是指對(duì)某個(gè)單元進(jìn)行寫操作,當(dāng)寫入值與存儲(chǔ)單元自身的存儲(chǔ)值相同時(shí),這個(gè)寫操作會(huì)引起自身的存儲(chǔ)值發(fā)生改變。
RDF 是指對(duì)存儲(chǔ)單元進(jìn)行讀操作時(shí),讀操作引起存儲(chǔ)單元內(nèi)原有值發(fā)生變化,并將發(fā)生變化后的錯(cuò)誤值讀出。
DRDF 是指對(duì)存儲(chǔ)單元進(jìn)行讀操作時(shí),讀操作會(huì)引起存儲(chǔ)單元內(nèi)原有值發(fā)生變化,但讀出的數(shù)據(jù)卻是未發(fā)生變化之前的正確值。
IRF 是指對(duì)存儲(chǔ)單元進(jìn)行讀操作時(shí),存儲(chǔ)單元內(nèi)原有值不發(fā)生變化,但讀出的數(shù)據(jù)卻是錯(cuò)誤值。
ADF 是指給出的邏輯地址不能與對(duì)應(yīng)的存儲(chǔ)單元匹配,導(dǎo)致存儲(chǔ)單元儲(chǔ)存的數(shù)據(jù)錯(cuò)誤。
字內(nèi)故障是指存儲(chǔ)單元中一個(gè)字節(jié)內(nèi)的單個(gè)比特發(fā)生改變,導(dǎo)致另一個(gè)比特發(fā)生變化。單個(gè)單元的字內(nèi)耦合故障分為以下三類:字內(nèi)反向耦合故障(Intra-word CFin)、字內(nèi)冪等耦合故障(Intra-word CFid)、字內(nèi)狀態(tài)耦合故障(Intra-word CFst)。
雙單元耦合故障是指對(duì)一個(gè)存儲(chǔ)單元進(jìn)行操作時(shí),導(dǎo)致與其相鄰或耦合的單元存儲(chǔ)的值發(fā)生改變。雙單元耦合故障可分為以下幾類:狀態(tài)耦合故障(CFst)、干擾耦合故障(CFds)、轉(zhuǎn)換耦合故障(CFtr)、寫破壞耦合故障(CFwd)、讀破壞耦合故障(CFrd)、偽讀破壞耦合故障(CFdrd)和錯(cuò)誤讀取耦合故障(CFir)。
CFst 是指某個(gè)存儲(chǔ)單元的某個(gè)特定狀態(tài)引起相鄰或耦合單元跳變?yōu)槟骋粻顟B(tài)。
CFds 是指對(duì)某個(gè)存儲(chǔ)單元進(jìn)行讀寫操作,引起相鄰或耦合單元的數(shù)據(jù)發(fā)生改變。CFds 可以進(jìn)一步細(xì)分為讀干擾耦合故障(CFdsrx)和寫干擾耦合故障(CFdsxwx)等類型。
CFtr 是指當(dāng)某個(gè)存儲(chǔ)單元為特定狀態(tài)時(shí),引起相鄰或耦合單元的數(shù)據(jù)發(fā)生轉(zhuǎn)換故障。
CFwd 是指對(duì)某個(gè)存儲(chǔ)單元進(jìn)行寫操作,引起相鄰或耦合單元的數(shù)據(jù)發(fā)生寫破壞故障。
CFrd 是指當(dāng)某個(gè)存儲(chǔ)單元為特定狀態(tài)時(shí),引起相鄰或耦合單元的數(shù)據(jù)發(fā)生讀破壞故障。
CFdrd 是指當(dāng)某個(gè)存儲(chǔ)單元為特定狀態(tài)時(shí),引起相鄰或耦合單元的數(shù)據(jù)發(fā)生偽讀破壞故障。
CFir 指當(dāng)某個(gè)存儲(chǔ)單元為特定狀態(tài)時(shí),引起相鄰或耦合單元的數(shù)據(jù)發(fā)生錯(cuò)誤讀取故障。
BIST 的準(zhǔn)確性是由所采用的測(cè)試算法來保證的。在存儲(chǔ)器測(cè)試算法中,March 系列算法是最常用的[11]。最早的March 算法相對(duì)簡(jiǎn)單,并且測(cè)試元素的設(shè)計(jì)也不夠成熟。March C+算法由于具有測(cè)試步驟少、故障覆蓋率高和易實(shí)現(xiàn)的特點(diǎn),被廣泛應(yīng)用于存儲(chǔ)器測(cè)試中。March C+算法的基本流程如下:
1)對(duì)存儲(chǔ)器中的所有存儲(chǔ)單元進(jìn)行初始化,將它們的值設(shè)置為特定的初始狀態(tài)值(通常為0 或1);
2)按照升序或降序的順序,依次將數(shù)據(jù)寫入每個(gè)存儲(chǔ)單元;
3)在寫入數(shù)據(jù)之后,以相同的順序逐個(gè)讀取每個(gè)存儲(chǔ)單元的數(shù)據(jù),并將讀取的數(shù)據(jù)與預(yù)期值進(jìn)行比較,預(yù)期值是根據(jù)寫入數(shù)據(jù)的規(guī)律和地址順序確定的;
4)根據(jù)不同的寫入和讀取順序組合,可以檢測(cè)出存儲(chǔ)器中可能存在的各種故障,例如SAF、TF 和耦合故障等,如果讀取的數(shù)據(jù)與預(yù)期值不一致,則表明存儲(chǔ)器存在故障;
5)為了提高故障檢測(cè)的覆蓋率,需要多次執(zhí)行步驟2~4,每次執(zhí)行時(shí),可以選擇不同的寫入模式和讀取順序,以覆蓋更多的測(cè)試情況;
6)在執(zhí)行完上述寫入和讀取操作后,進(jìn)行最后一次寫入和讀取的操作。最后一次寫入操作是為了檢測(cè)存儲(chǔ)單元是否存在保持故障,而最后一次讀取操作則是為了驗(yàn)證存儲(chǔ)器是否達(dá)到期望狀態(tài)。
March C+算法的具體步驟為{↑W0;↑(R0,W1,R1);↑(R1,W0,R0);↓(R0,W1,R1);↓(R1,W0,R0);↓R0}。
用March C+算法檢測(cè)BRAM 時(shí)仍有部分故障檢測(cè)不到,其中包括WDF、CFds、CFwd、字內(nèi)耦合故障等。WDF、CFds、CFwd 不能被檢測(cè)出來的原因是在0或1 狀態(tài)下沒有進(jìn)行寫0 或?qū)? 操作,從而不能將存儲(chǔ)單元敏化為0w0 或1w1 狀態(tài)。字內(nèi)耦合故障不能被檢測(cè)出來的原因是在存儲(chǔ)單元狀態(tài)為0000 或1111時(shí),沒有進(jìn)行寫0101 或?qū)?010 操作,只是對(duì)一個(gè)字節(jié)內(nèi)全部寫0 或全部寫1。
改進(jìn)后的算法增加了連續(xù)寫0 或?qū)? 的測(cè)試數(shù)據(jù)背景,即增加0w0 或1w1 的測(cè)試數(shù)據(jù)背景來覆蓋WDF、CFds 和CFwd。針對(duì)字內(nèi)耦合故障的檢測(cè),由于都是在同一個(gè)地址進(jìn)行寫操作,且是由高位到低位寫入,因此,字內(nèi)耦合故障與地址的升降無關(guān),可在原有算法基礎(chǔ)上增加0101 及1010 的測(cè)試數(shù)據(jù)背景來檢測(cè)字內(nèi)耦合故障。對(duì)于1 個(gè)位寬為4 的存儲(chǔ)器,其具體的測(cè)試算法步驟如下:{↑Wd0;↑(Rd0,Wd1,Rd1);↑(Rd1,Wd2,Rd2);↑(Rd2,Wd3,Rd3);↑(Rd3,Wd0,Wd0,Rd0);↓(Rd0,Wd3,Wd3,Rd3);↓(Rd3,Wd0,Rd0);↓Rd3}(其中d0 為4'b0000,d1 為4'b0101,d2 為4'b1010,d3 為4'b1111)。采用優(yōu)化后算法控制電路狀態(tài)轉(zhuǎn)換的流程如圖1 所示。
圖1 采用優(yōu)化后算法控制電路狀態(tài)轉(zhuǎn)換的流程
優(yōu)化后算法改進(jìn)了故障模型及故障原語,如表1所示。
表1 優(yōu)化后算法的故障模型和故障原語
將常見的March 系列算法檢測(cè)出的故障類型[8]與優(yōu)化后算法檢測(cè)出的故障類型進(jìn)行對(duì)比,各種算法的故障覆蓋率如表2 所示??梢钥闯?,優(yōu)化后算法對(duì)各類故障的覆蓋更全面,故障覆蓋率更高。相較于March C+算法的故障覆蓋率(72.1%),優(yōu)化后算法的故障覆蓋率(97.1%)提高了25 個(gè)百分點(diǎn);與時(shí)間復(fù)雜度相同的March SS 算法相比,優(yōu)化后算法的故障覆蓋率提高了5.8 個(gè)百分點(diǎn)。
表2 各種算法的故障覆蓋率
BIST 是一種在設(shè)計(jì)時(shí)在集成電路或芯片中嵌入相關(guān)功能電路,以提供自我測(cè)試功能的測(cè)試技術(shù),可在集成電路或芯片內(nèi)部進(jìn)行故障檢測(cè)。該技術(shù)通過在芯片內(nèi)部引入專門的測(cè)試電路,對(duì)各個(gè)功能模塊或組件的輸入/輸出數(shù)據(jù)進(jìn)行控制和驗(yàn)證,以判斷芯片是否可以正常工作。相較于傳統(tǒng)的外部測(cè)試方法,BIST具有更高的靈活性和效率,因此,本文選擇BIST 來驗(yàn)證算法的有效性。BIST 電路通常包括控制器、地址生成器、向量生成器和比較器等關(guān)鍵組件。控制器負(fù)責(zé)管理整個(gè)測(cè)試流程,包括啟動(dòng)和停止測(cè)試、控制測(cè)試模式和參數(shù)等。地址生成器負(fù)責(zé)生成訪問存儲(chǔ)單元的地址序列,以確保覆蓋全部存儲(chǔ)單元的測(cè)試。向量生成器則產(chǎn)生具有特定模式或隨機(jī)性的測(cè)試數(shù)據(jù),用于驅(qū)動(dòng)和驗(yàn)證芯片功能。比較器則用于將實(shí)際輸出值與預(yù)期輸出值進(jìn)行比較,以檢測(cè)存儲(chǔ)器是否存在故障。本文利用Flash 型FPGA 自身的硬件資源構(gòu)建BIST電路架構(gòu),完成對(duì)內(nèi)嵌BRAM 的測(cè)試。采用Verilog 硬件描述語言設(shè)計(jì)BIST 電路架構(gòu),BIST 電路的基本結(jié)構(gòu)如圖2 所示。在完成BIST 電路的設(shè)計(jì)后,將BIST電路配置到FPGA 內(nèi)嵌BRAM 周圍,并對(duì)其進(jìn)行測(cè)試。當(dāng)BIST 電路的DONE 信號(hào)處于高電平時(shí),表明測(cè)試已經(jīng)完成;當(dāng)BIST 電路的FAIL 信號(hào)處于高電平時(shí),表明FPGA 內(nèi)嵌BRAM 存在故障;當(dāng)BIST 電路的PASS 信號(hào)處于高電平時(shí),表明FPGA 內(nèi)嵌BRAM無故障。
圖2 BIST 電路的基本結(jié)構(gòu)
對(duì)March C+算法和優(yōu)化后的算法進(jìn)行功能驗(yàn)證,采用Microsemi 公司的Libero SoC 設(shè)計(jì)工具,并使用其搭建Modelsim 仿真平臺(tái),待測(cè)存儲(chǔ)器為1 024×4的BRAM,圖3 為采用March C+算法檢測(cè)無故障的BRAM 的仿真波形圖,可以看出,BIST 電路的PASS信號(hào)和DONE 信號(hào)分別從低電平變?yōu)楦唠娖?,這表明測(cè)試結(jié)束且沒有測(cè)出故障。圖4 為采用優(yōu)化后算法檢測(cè)無故障的BRAM 的仿真波形圖,同樣未檢測(cè)出故障。
圖3 采用March C+算法檢測(cè)無故障的BRAM 的仿真波形圖
圖4 采用優(yōu)化后算法檢測(cè)無故障的BRAM 的仿真波形圖
通過對(duì)BRAM 注入WDF、CFds 和字內(nèi)耦合故障,分別采用兩種算法對(duì)注入WDF 的BRAM 進(jìn)行測(cè)試。圖5 為采用March C+算法檢測(cè)注入WDF 的BRAM 的仿真波形圖,可以看出未檢測(cè)到故障。圖6為采用優(yōu)化后算法檢測(cè)注入WDF 的BRAM 的仿真波形圖,可以看到,在對(duì)BRAM 進(jìn)行連續(xù)的寫操作后對(duì)BRAM 進(jìn)行讀操作,讀出數(shù)據(jù)與寫入數(shù)據(jù)不同,F(xiàn)AIL 信號(hào)由低電平變高電平,這表明在地址為3'h379處發(fā)生了WDF。
圖6 采用優(yōu)化后算法檢測(cè)注入WDF 的BRAM 的仿真波形圖
圖7 為采用優(yōu)化后算法檢測(cè)注入CFds 的BRAM的仿真波形圖,可以看出,在對(duì)地址3'h14e 進(jìn)行連續(xù)的寫操作后,3'h14d 處的數(shù)據(jù)發(fā)生變化,產(chǎn)生了CFds,F(xiàn)AIL 信號(hào)由低電平變?yōu)楦唠娖?,這表明故障被測(cè)出。因?yàn)闊o法使用March C+算法進(jìn)行連續(xù)的寫操作,所以無法檢測(cè)出CFds。
圖7 采用優(yōu)化后算法檢測(cè)注入CFds 的BRAM 的仿真波形圖
圖8 為采用優(yōu)化后算法檢測(cè)注入字內(nèi)耦合故障的BRAM 的仿真波形圖。在對(duì)原有數(shù)據(jù)為0000 的存儲(chǔ)單元進(jìn)行寫1010 操作時(shí),F(xiàn)AIL 信號(hào)從低電平變?yōu)楦唠娖?,這說明發(fā)生了字內(nèi)耦合故障,導(dǎo)致數(shù)據(jù)發(fā)生變化,此時(shí)讀出數(shù)據(jù)為0011,與正確數(shù)據(jù)不符。采用March C+算法進(jìn)行測(cè)試時(shí),其沒有0101 及1010 等測(cè)試數(shù)據(jù)背景,因此無法檢測(cè)出字內(nèi)耦合故障。
本文在March C+算法的基礎(chǔ)上進(jìn)行改進(jìn),得到的優(yōu)化后算法能夠覆蓋WDF、CFds、CFwd 和字內(nèi)耦合故障等原來不能被檢測(cè)到的故障。對(duì)Flash 型FPGA內(nèi)嵌BRAM 進(jìn)行BIST 仿真驗(yàn)證,結(jié)果表明,優(yōu)化后的算法可以有效提高故障覆蓋率,相較于March C+算法,其故障覆蓋率提高了25 個(gè)百分點(diǎn),相較于時(shí)間復(fù)雜度相同的March SS 算法,其故障覆蓋率提高了5.8 個(gè)百分點(diǎn)。