薛 凱,侯榮彬,李 勇
(中國核動力研究設計院 核反應堆系統設計技術重點實驗室,成都 610213)
在現代數字控制系統中,儲存器是現代數字系統的重要組成部分之一。隨著半導體工藝技術的發展,以及各領域對儲存器件速度、容量的要求日益提高,在使系統性能變得更強的同時,系統也變得越來越復雜,對電路的故障診斷也提出了更高的要求。由于儲存器件硬件電路結構的復雜性,為了保證系統能夠穩定地運行,有必要對儲存器件進行有效的測試,及時發現錯誤,確保系統正確穩定地運行。
儲存器的類型多種多樣,有易失性(如SRAM、SDRAM、DDR等)、非易失性(如FLASH、EEPROM等)、靜態性(如SRAM等)和動態性(SDRAM、DDR等)。它們都有自己的特點和結構,也有著與邏輯測試不同的測試和故障診斷的方法。盡管不同器件在儲存容量和硬件結構上有所不同,但它們在地址的硬件結構上非常相似[1],所以它們的測試方法也基本類似。
SRAM有高速和不用刷新等優點,故本文以SRAM(靜態隨機儲存器)[1]作為討論和研究類型。圖1顯示了一個內存數組的基本結構,內存的硬件包括單元數組、解碼行和列地址的解碼器、讀和寫邏輯,以及用于處理內存數組之間的輸入輸出的邏輯塊。SRAM中的每一位都儲存在由4個場效應管(A1、A2、A3、A4)構成的兩個交叉耦合的反相器中,另外兩個場效應管(A5、A6)是儲存基本單元,用于對讀寫位線(Bit Line)的控制開關。訪問SRAM的時候,字線(Word Line)拉高,使控制每個基本單元的兩個晶體管A5和A6導通,把基本單元與位線(Bit Line)連通。

圖1 儲存器基本結構圖Fig.1 Basic structure of memory
1)自動化測試
自動化測試是利用自動化測試設備(Auto Test Equipment,ATE)對SARM的儲存陣列進行訪問,通過封裝引腳直接對儲存器進行讀寫測試,經過多種測試算法進行故障診斷[2]。其缺點是:隨著自動化測試設備上算法復雜度的提升,對設備上儲存器容量的要求也越高[3],自動化測試設備對嵌入式儲存器進行測試也相對較難。
2)微處理器測試
通過嵌入式微處理器對儲存器進行寫讀測試,測試向量由微處理器內執行測試的程序生成[4],在需要對儲存器進行測試的時候,直接調用這部分代碼進行測試診斷。其優點是:不需要硬件上的改動,而且測試算法可在微處理器上靈活修改與實現。
3)儲存器內建自測試(MBIST)
儲存器內建自測試技術(Memory Build - In Self Test,MBIST)的工作原理是在儲存器外圍產生測試控制電路,包括數據生成、地址控制、讀寫控制以及測試結果比較等電路[5],實現儲存器測試向量的自動產生,以及測試結果的自動判斷。正常工作的時候旁路該部分控制電路需要進行測試的時候,可通過外部通信接口發送指令,自動進入儲存器測試模式[5]。
SRAM的故障類型主要有以下幾種:
1)固定故障(Stuck-At Faults,SAF)
固定故障是指一個儲存單元的值總是0或1,并且不能改變。
2)跳變故障(Transition Faults,TF)
儲存陣列中的一個儲存單元或多個儲存單元中的一位或多位不能從0到1進行跳變,或不能進行從1到0的跳變。存儲器單元能進行1到0的跳變,不能進行0到1的跳變,稱為向上跳變故障;存儲器單元能進行0到1的跳變,不能進行1到0的跳變,稱為向下跳變故障。
3)耦合故障(Coupling Faults,CF)
存儲單元中一些位在跳變的時候,導致相鄰其他位的值也發生變化。這種現象既存在于不同儲存單元之間,也存在于在同一儲存單元的不同位之間。同一單元中,字與字之間相互影響產生的故障稱為字間故障,同一字節內比特位之間相互影響產生的故障稱為字內故障。耦合故障中,包含翻轉耦合故障(CFin:inversion)、冪等耦合故障(CFid:idempotent)、狀態耦合故障(CFst:state)[6]。當某個儲存單元的值的跳變使其他某個儲存單元的值發生翻轉的現象,稱為翻轉耦合故障(如儲存單元M的狀態由1跳變為0時,儲存單元N的狀態發生翻轉);當某個儲存單元的值的跳變使其他某個儲存單元的值變為一個固定的值的現象,稱為冪等耦合故障(如當儲存單元M的狀態從0跳變為1或從1跳變為0,此時儲存單元N的狀態會變為某個特定的值);某個儲存單元的某個確定的狀態,使其他儲存單元發生跳變為某一狀態的現象,稱為狀態耦合(如當儲存單元M狀態為1時,儲存單元N跳變為一個隨機值)。
4)地址譯碼故障(Address Decoder Faults,ADF)
地址譯碼故障,其實就是地址譯碼器發生的故障,主要有以下4種類型:
◇ 對于給定的地址,不存在相對應的儲存單元。
◇ 對于一個儲存單元,沒有相對應的物理地址。
◇ 多個單元被一個地址訪問。
◇ 多個地址訪問一個單元。
5)橋連故障(Bridging Faults,BF)
指由兩個或多個位線(BL)一起短路引起的。短路的結果表現為兩個單元格的and或or邏輯,所產生的短路只影響其中一個單元,另一個單元的值不變[7]。
SRAM的測試原理非常簡單,通過內建自測試的方法,由電路自己生成針對每一種故障類型的測試向量,通過程序控制邏輯對每一個儲存單元進行反復讀寫,依靠自身邏輯來判斷所得到的測試結果是否正確,從而確定儲存器中是否存在故障[8]。

表1 March算法表Table 1 March algorithm table
由于March算法不僅實現方式簡單,而且測試方便,使其在儲存器測試方面得到廣泛應用。March算法也有很多不同的類型,主要有MATS、MATS+、MATS++、March X、March C、March A、March Y、March B[9]等類型,各種March算法的不同在于測試向量的不同(這里的測試向量又稱為March元素)。不同March算法的每個March元素對于地址的升降順序都有規定,具體每個March算法的讀寫規則見表1。
通過表2可以看出,各種March算法都不能把故障進行全面覆蓋,比如耦合故障中的狀態耦合故障和橋連故障,它們的發生與周圍某一個儲存單元的狀態有關。本文提出一種可以覆蓋全部故障的測試方法,通過增加測試向量的復雜度,使測試向量中相鄰兩比特位出現00、01、10、11這4種值來檢測這類故障。以16位位寬的SRAM為例,測試向量見表3。
對以上測試向量進行讀寫,w(n)表示向儲存中寫入第n個測試向量;r(n)表示從儲存中讀取的第n個測試向量。具體操作規則見表4。
由于FPGA內塊RAM與SRAM的控制接口類似,所以本文以FPGA內部16位塊RAM代替SRAM,每次操作128個地址長度,通過故障注入的方式進行仿真驗證。

表2 各March算法故障覆蓋率Table 2 Fault coverage of each March algorithm

表3 測試向量表Table 3 Test vector table

表4 測試向量操作規則表Table 4 Test vector operation rules

圖3 數據產生模塊仿真波形圖Fig.3 Simulation waveform of data generation module

圖4 SRAM讀寫模塊仿真波形圖Fig.4 Simulation waveform of SRAM read / write module

圖2 軟件設計框圖Fig.2 Software design block diagram
軟件模塊主要由3個模塊組成。
1)測試向量產生模塊:用于產生所需的測試向量。
2)SRAM讀寫模塊:用于控制SRAM的讀寫。
3)數據對比模塊:將寫入的測試向量與從SRAM讀出的數據進行比對,當比對錯誤時報出故障。
如圖2所示,首先data_gen模塊產生開始寫SRAM的標志(start_wr_flag)以及測試向量(source_data),還有用于對讀寫地址升降順序的控制信號(addr_sel),當addr_sel為2'b00的時候表示寫地址和讀地址都為降序;為2'b01的時候表示寫地址為降序,讀地址為升序;為2'b10的時候表示寫地址為升序,讀地址為降序;2'b11的時候表示寫地址和讀地址都為升序。sram_control模塊根據指令進行寫讀操作,把從讀出來的數據送入data_compare模塊與source_data信號進行比對,當比對正確時data_compare模塊發出compare_done信號,當比對有錯誤時發出compare_error信號。
1)數據產生模塊
產生測試向量source_data,地址讀寫升降順序控制信號addr_sel,開始寫SRAM信號start_wr_flag,每當compare_done信號為1(即全部比對正確)時,開始發送下一組測試向量,一共18個測試向量,若任意一組向量測試比對出錯停止發送。
2)SRAM讀寫模塊

圖5 數據比對模塊仿真波形圖Fig.5 Simulation waveform of data comparison module

圖6 插入故障的仿真波形圖Fig.6 Simulation waveform of insertion fault
根據data_gen模塊發出的數據及控制信號對SRAM進行讀寫。
3)數據比對模塊
將SRAM讀出的數據與data_gen模塊發出的寫入數據進行比對,比對成功拉高compare_done信號,比對出錯拉高compare_error信號。
4)插入故障的數據比對模塊
當插入故障時,可見圖6中的compare_error信號拉高。
本文以SRAM為例,介紹了SRAM中幾種故障類型,以及針對不同故障的測試方法。在現有算法的基礎上,通過增加測試向量的復雜度,對原有算法進行優化,擁有了較高的故障覆蓋率,并通過搭建儲存器內建自測試模型對SRAM進行測試驗證。儲存器內建自測試的優點在于不需要使用專用的測試儀器,通過代碼編寫測試邏輯產生激勵信號以及對測試結果的特征分析來找出故障,實現自我診斷,使芯片在完成原有邏輯功能的前提下,還能根據外部測試命令進入自我測試并輸出結果,不僅能降低對測試設備的要求,還能及時發現故障,實現方式也相對簡單。缺點是:由于儲存器內建自測試技術需要占用額外的芯片資源,可能會對原有邏輯電路的時序特性產生影響[10]。