薛 凱,侯榮彬,李 勇
(中國核動力研究設(shè)計(jì)院 核反應(yīng)堆系統(tǒng)設(shè)計(jì)技術(shù)重點(diǎn)實(shí)驗(yàn)室,成都 610213)
在現(xiàn)代數(shù)字控制系統(tǒng)中,儲存器是現(xiàn)代數(shù)字系統(tǒng)的重要組成部分之一。隨著半導(dǎo)體工藝技術(shù)的發(fā)展,以及各領(lǐng)域?qū)Υ嫫骷俣取⑷萘康囊笕找嫣岣?,在使系統(tǒng)性能變得更強(qiáng)的同時,系統(tǒng)也變得越來越復(fù)雜,對電路的故障診斷也提出了更高的要求。由于儲存器件硬件電路結(jié)構(gòu)的復(fù)雜性,為了保證系統(tǒng)能夠穩(wěn)定地運(yùn)行,有必要對儲存器件進(jìn)行有效的測試,及時發(fā)現(xiàn)錯誤,確保系統(tǒng)正確穩(wěn)定地運(yùn)行。
儲存器的類型多種多樣,有易失性(如SRAM、SDRAM、DDR等)、非易失性(如FLASH、EEPROM等)、靜態(tài)性(如SRAM等)和動態(tài)性(SDRAM、DDR等)。它們都有自己的特點(diǎn)和結(jié)構(gòu),也有著與邏輯測試不同的測試和故障診斷的方法。盡管不同器件在儲存容量和硬件結(jié)構(gòu)上有所不同,但它們在地址的硬件結(jié)構(gòu)上非常相似[1],所以它們的測試方法也基本類似。
SRAM有高速和不用刷新等優(yōu)點(diǎn),故本文以SRAM(靜態(tài)隨機(jī)儲存器)[1]作為討論和研究類型。圖1顯示了一個內(nèi)存數(shù)組的基本結(jié)構(gòu),內(nèi)存的硬件包括單元數(shù)組、解碼行和列地址的解碼器、讀和寫邏輯,以及用于處理內(nèi)存數(shù)組之間的輸入輸出的邏輯塊。SRAM中的每一位都儲存在由4個場效應(yīng)管(A1、A2、A3、A4)構(gòu)成的兩個交叉耦合的反相器中,另外兩個場效應(yīng)管(A5、A6)是儲存基本單元,用于對讀寫位線(Bit Line)的控制開關(guān)。訪問SRAM的時候,字線(Word Line)拉高,使控制每個基本單元的兩個晶體管A5和A6導(dǎo)通,把基本單元與位線(Bit Line)連通。
圖1 儲存器基本結(jié)構(gòu)圖Fig.1 Basic structure of memory
1)自動化測試
自動化測試是利用自動化測試設(shè)備(Auto Test Equipment,ATE)對SARM的儲存陣列進(jìn)行訪問,通過封裝引腳直接對儲存器進(jìn)行讀寫測試,經(jīng)過多種測試算法進(jìn)行故障診斷[2]。其缺點(diǎn)是:隨著自動化測試設(shè)備上算法復(fù)雜度的提升,對設(shè)備上儲存器容量的要求也越高[3],自動化測試設(shè)備對嵌入式儲存器進(jìn)行測試也相對較難。
2)微處理器測試
通過嵌入式微處理器對儲存器進(jìn)行寫讀測試,測試向量由微處理器內(nèi)執(zhí)行測試的程序生成[4],在需要對儲存器進(jìn)行測試的時候,直接調(diào)用這部分代碼進(jìn)行測試診斷。其優(yōu)點(diǎn)是:不需要硬件上的改動,而且測試算法可在微處理器上靈活修改與實(shí)現(xiàn)。
3)儲存器內(nèi)建自測試(MBIST)
儲存器內(nèi)建自測試技術(shù)(Memory Build - In Self Test,MBIST)的工作原理是在儲存器外圍產(chǎn)生測試控制電路,包括數(shù)據(jù)生成、地址控制、讀寫控制以及測試結(jié)果比較等電路[5],實(shí)現(xiàn)儲存器測試向量的自動產(chǎn)生,以及測試結(jié)果的自動判斷。正常工作的時候旁路該部分控制電路需要進(jìn)行測試的時候,可通過外部通信接口發(fā)送指令,自動進(jìn)入儲存器測試模式[5]。
SRAM的故障類型主要有以下幾種:
1)固定故障(Stuck-At Faults,SAF)
固定故障是指一個儲存單元的值總是0或1,并且不能改變。
2)跳變故障(Transition Faults,TF)
儲存陣列中的一個儲存單元或多個儲存單元中的一位或多位不能從0到1進(jìn)行跳變,或不能進(jìn)行從1到0的跳變。存儲器單元能進(jìn)行1到0的跳變,不能進(jìn)行0到1的跳變,稱為向上跳變故障;存儲器單元能進(jìn)行0到1的跳變,不能進(jìn)行1到0的跳變,稱為向下跳變故障。
3)耦合故障(Coupling Faults,CF)
存儲單元中一些位在跳變的時候,導(dǎo)致相鄰其他位的值也發(fā)生變化。這種現(xiàn)象既存在于不同儲存單元之間,也存在于在同一儲存單元的不同位之間。同一單元中,字與字之間相互影響產(chǎn)生的故障稱為字間故障,同一字節(jié)內(nèi)比特位之間相互影響產(chǎn)生的故障稱為字內(nèi)故障。耦合故障中,包含翻轉(zhuǎn)耦合故障(CFin:inversion)、冪等耦合故障(CFid:idempotent)、狀態(tài)耦合故障(CFst:state)[6]。當(dāng)某個儲存單元的值的跳變使其他某個儲存單元的值發(fā)生翻轉(zhuǎn)的現(xiàn)象,稱為翻轉(zhuǎn)耦合故障(如儲存單元M的狀態(tài)由1跳變?yōu)?時,儲存單元N的狀態(tài)發(fā)生翻轉(zhuǎn));當(dāng)某個儲存單元的值的跳變使其他某個儲存單元的值變?yōu)橐粋€固定的值的現(xiàn)象,稱為冪等耦合故障(如當(dāng)儲存單元M的狀態(tài)從0跳變?yōu)?或從1跳變?yōu)?,此時儲存單元N的狀態(tài)會變?yōu)槟硞€特定的值);某個儲存單元的某個確定的狀態(tài),使其他儲存單元發(fā)生跳變?yōu)槟骋粻顟B(tài)的現(xiàn)象,稱為狀態(tài)耦合(如當(dāng)儲存單元M狀態(tài)為1時,儲存單元N跳變?yōu)橐粋€隨機(jī)值)。
4)地址譯碼故障(Address Decoder Faults,ADF)
地址譯碼故障,其實(shí)就是地址譯碼器發(fā)生的故障,主要有以下4種類型:
◇ 對于給定的地址,不存在相對應(yīng)的儲存單元。
◇ 對于一個儲存單元,沒有相對應(yīng)的物理地址。
◇ 多個單元被一個地址訪問。
◇ 多個地址訪問一個單元。
5)橋連故障(Bridging Faults,BF)
指由兩個或多個位線(BL)一起短路引起的。短路的結(jié)果表現(xiàn)為兩個單元格的and或or邏輯,所產(chǎn)生的短路只影響其中一個單元,另一個單元的值不變[7]。
SRAM的測試原理非常簡單,通過內(nèi)建自測試的方法,由電路自己生成針對每一種故障類型的測試向量,通過程序控制邏輯對每一個儲存單元進(jìn)行反復(fù)讀寫,依靠自身邏輯來判斷所得到的測試結(jié)果是否正確,從而確定儲存器中是否存在故障[8]。
表1 March算法表Table 1 March algorithm table
由于March算法不僅實(shí)現(xiàn)方式簡單,而且測試方便,使其在儲存器測試方面得到廣泛應(yīng)用。March算法也有很多不同的類型,主要有MATS、MATS+、MATS++、March X、March C、March A、March Y、March B[9]等類型,各種March算法的不同在于測試向量的不同(這里的測試向量又稱為March元素)。不同March算法的每個March元素對于地址的升降順序都有規(guī)定,具體每個March算法的讀寫規(guī)則見表1。
通過表2可以看出,各種March算法都不能把故障進(jìn)行全面覆蓋,比如耦合故障中的狀態(tài)耦合故障和橋連故障,它們的發(fā)生與周圍某一個儲存單元的狀態(tài)有關(guān)。本文提出一種可以覆蓋全部故障的測試方法,通過增加測試向量的復(fù)雜度,使測試向量中相鄰兩比特位出現(xiàn)00、01、10、11這4種值來檢測這類故障。以16位位寬的SRAM為例,測試向量見表3。
對以上測試向量進(jìn)行讀寫,w(n)表示向儲存中寫入第n個測試向量;r(n)表示從儲存中讀取的第n個測試向量。具體操作規(guī)則見表4。
由于FPGA內(nèi)塊RAM與SRAM的控制接口類似,所以本文以FPGA內(nèi)部16位塊RAM代替SRAM,每次操作128個地址長度,通過故障注入的方式進(jìn)行仿真驗(yàn)證。
表2 各March算法故障覆蓋率Table 2 Fault coverage of each March algorithm
表3 測試向量表Table 3 Test vector table
表4 測試向量操作規(guī)則表Table 4 Test vector operation rules
圖3 數(shù)據(jù)產(chǎn)生模塊仿真波形圖Fig.3 Simulation waveform of data generation module
圖4 SRAM讀寫模塊仿真波形圖Fig.4 Simulation waveform of SRAM read / write module
圖2 軟件設(shè)計(jì)框圖Fig.2 Software design block diagram
軟件模塊主要由3個模塊組成。
1)測試向量產(chǎn)生模塊:用于產(chǎn)生所需的測試向量。
2)SRAM讀寫模塊:用于控制SRAM的讀寫。
3)數(shù)據(jù)對比模塊:將寫入的測試向量與從SRAM讀出的數(shù)據(jù)進(jìn)行比對,當(dāng)比對錯誤時報(bào)出故障。
如圖2所示,首先data_gen模塊產(chǎn)生開始寫SRAM的標(biāo)志(start_wr_flag)以及測試向量(source_data),還有用于對讀寫地址升降順序的控制信號(addr_sel),當(dāng)addr_sel為2'b00的時候表示寫地址和讀地址都為降序;為2'b01的時候表示寫地址為降序,讀地址為升序;為2'b10的時候表示寫地址為升序,讀地址為降序;2'b11的時候表示寫地址和讀地址都為升序。sram_control模塊根據(jù)指令進(jìn)行寫讀操作,把從讀出來的數(shù)據(jù)送入data_compare模塊與source_data信號進(jìn)行比對,當(dāng)比對正確時data_compare模塊發(fā)出compare_done信號,當(dāng)比對有錯誤時發(fā)出compare_error信號。
1)數(shù)據(jù)產(chǎn)生模塊
產(chǎn)生測試向量source_data,地址讀寫升降順序控制信號addr_sel,開始寫SRAM信號start_wr_flag,每當(dāng)compare_done信號為1(即全部比對正確)時,開始發(fā)送下一組測試向量,一共18個測試向量,若任意一組向量測試比對出錯停止發(fā)送。
2)SRAM讀寫模塊
圖5 數(shù)據(jù)比對模塊仿真波形圖Fig.5 Simulation waveform of data comparison module
圖6 插入故障的仿真波形圖Fig.6 Simulation waveform of insertion fault
根據(jù)data_gen模塊發(fā)出的數(shù)據(jù)及控制信號對SRAM進(jìn)行讀寫。
3)數(shù)據(jù)比對模塊
將SRAM讀出的數(shù)據(jù)與data_gen模塊發(fā)出的寫入數(shù)據(jù)進(jìn)行比對,比對成功拉高compare_done信號,比對出錯拉高compare_error信號。
4)插入故障的數(shù)據(jù)比對模塊
當(dāng)插入故障時,可見圖6中的compare_error信號拉高。
本文以SRAM為例,介紹了SRAM中幾種故障類型,以及針對不同故障的測試方法。在現(xiàn)有算法的基礎(chǔ)上,通過增加測試向量的復(fù)雜度,對原有算法進(jìn)行優(yōu)化,擁有了較高的故障覆蓋率,并通過搭建儲存器內(nèi)建自測試模型對SRAM進(jìn)行測試驗(yàn)證。儲存器內(nèi)建自測試的優(yōu)點(diǎn)在于不需要使用專用的測試儀器,通過代碼編寫測試邏輯產(chǎn)生激勵信號以及對測試結(jié)果的特征分析來找出故障,實(shí)現(xiàn)自我診斷,使芯片在完成原有邏輯功能的前提下,還能根據(jù)外部測試命令進(jìn)入自我測試并輸出結(jié)果,不僅能降低對測試設(shè)備的要求,還能及時發(fā)現(xiàn)故障,實(shí)現(xiàn)方式也相對簡單。缺點(diǎn)是:由于儲存器內(nèi)建自測試技術(shù)需要占用額外的芯片資源,可能會對原有邏輯電路的時序特性產(chǎn)生影響[10]。