劉勇鋒,姚竹亭,顧秀江,王潔,秦新紅
(中北大學 機械工程與自動化學院,山西省太原市 030051)
所謂存儲器修復技術是指通過在存儲器中預置的冗余存儲單元,對出現故障的存儲單元進行替換的方法。由于冗余單元的劃分形式各不相同,可以把嵌入式存儲器的修復策略分為3類:基于冗余字的修復、基于冗余列的修復和基于冗余行的修復。在文獻中提出了對冗余列分段的軟修復方法、二維冗余修復方法、基于冗余字的修復方法,以及同類型的冗余字作為冗余單元替換故障字等等很多方法,但是在實際的開發應用中發現這些設計方法都有各自的優點,但是這些優點都是在不同程度上犧牲了修復率、功耗,以及修復類型,所以針對上述各個問題,本文提出了改進的基于 DWL 修復策略(Divided Word-Line Structure,DWL),這種修復策略是任何冗余單元可以替代檢測到的故障單元。
任何一個完整的存儲器內部都由兩個部分構成其主要的系統——內建測試(BIST,Built-In Self-Test)和內建冗余分析(BIRA,Built-In Redundancy Analysis)兩個部分,而這兩部是在整個系統中,在不同的工作模式下工作:測試/修復模式和正常工作模式。當在測試/修復模式下,系統上電啟動,BIST模塊開始對等待測試的存儲器進行測試,在檢測到故障后,檢測模塊會把故障信號Fail給內建冗余模塊發送,同時將故障地址送入BIRA模塊,BIST模塊暫停檢測。BIRA模塊接收到Fail信號后,對具體故障地址分析,對其地址判斷是否已經保存在BIRA內部存儲,如果未存儲,則在BIRA內部存儲器的最末端保留該地址,并進行冗余分配,修復完成之后啟動BIST繼續進行測試;如果已經把該故障地址保存,則繼續進行BIST。在正常工作模式下,BIST電路處于不工作狀態,要訪問的地址直接被送到BIRA模塊中,由BIRA模塊判斷是否是故障地址,如果是則進行地址重映射,調用冗余存儲單元,如果不是則直接訪問正常存儲單元。
本文針對靜態隨機讀寫存儲器(static random access memory,SRAM)內建自修復電路的研究,一般SRAM的存儲單元陣列是采用6管結構,其結構模型如圖1所示。

圖1 SRAM的存儲單元結構圖
行冗余、列冗余和塊冗余是最常用的冗余單元類型。基于冗余單位修復策略就是對存儲器中故障單元所在的整行、列或塊被一個冗余行、列或塊所代替。雖然對冗余資源的配置有很多算法,但是在故障修復效率的提高上,還是主要依靠冗余配置分析算法和冗余資源的類型、數量、修復策略。
在電路設計自修復的過程中,對電路的故障的修復率、算法的復雜度、性能的影響等指標基本上不會有太多考慮。就拿二維冗余結構修復存儲器來說,最優的配置分析問題是一個NP完全性問題已被證明。在采用二維冗余修復方案的行塊和列塊結構,盡管故障的修復率提高了,但是它的算法的復雜度比較大,使得系統的穩定性和可靠性降低。在研究中發現,如果采用一維冗余結構修復算法進行故障修復的話,實現起來比較簡單而且直接、對系統的穩定性影響不太大,然而在面對整行的或整列的修復,這種方案的故障修復率明顯較低。為此,要尋找到了一種新型的冗余,所以提出了基于冗余行塊的修復策略,盡管它能夠很好地解決修復電路的面積開銷問題,但它的故障修復率仍然不高。
對上述問題的研究后,改進冗余行塊的修復策略的做法是可行的,改進后不僅彌補了在一維冗余修復策略中出現的修復率低的缺點,同時也繼承了一維冗余修復策略大的優點。改進了的DWL修復策略,可以替代檢測到的任何故障單元。如果在檢測到的故障單元,而在行組(row bank)中沒有可利用的冗余行塊時,行組地址會自動加1,用同樣的方式去判斷行組里是否能找到可利用的冗余塊,如果有則被用來修復故障單元,如果沒有,行組地址還會繼續自動加1,直到在行組塊中找不到任何可利用的冗余塊,再在容錯系統的報告中顯示存儲器無法修復。改進的基于DWL的替代方法硬件部分包括4根行組選線(rbs0~rbs3)和16根行選線(W0~W15),32根位選線,還有就是,其中有兩個冗余行,換句話說就是8個冗余行塊,如圖2所示,在下面的6個故障行塊中,故障部分(主存中的陰影部分)都成功被冗余行塊所替代。顯然,改進后的DWL修復策略的替代方法使得故障修復率大大提升。
比如,用戶訪問存儲器時,內建自修復模塊會對輸入地址首先判斷該存儲單元是否為故障單元,如果是則該地址直接被輸入到CAM中,而相應被冗余塊所替代的故障單元的也就是由冗余塊輸出,所以,修復后的存儲使得用戶訪問是冗余存儲區的讀寫操作。

圖2 故障行塊被冗余行塊所替代
任何一個存儲器的自修復系統設計在其內部都包括內建自修復模塊和內建自測試兩部分的內容。其實,修復模塊是在自建測試電路的基礎上建立的,當然,存儲器要做到自修復必須加入一些冗余行,這樣就使得主存儲器與冗余存儲區之間構成了DWL結構的硬件組成,從而完成了總體存儲器的自修復系統電路的設計,同時這個電路具有了在線測試和離線修復存儲器的功能。若用戶訪問存儲器時,內建自修復模塊會對輸入地址首先判斷該存儲單元是否為故障單元,如果是則該地址直接被輸入到CAM中,而相應被冗余塊所替代的故障單元的也就是由冗余塊輸出,所以,修復后的存儲使得用戶訪問是冗余存儲區的讀寫操作,從可靠性的角度來說是一種很不錯的方法。
圖3中主要控制信號的含義描述如下:
(1) 在測試/修復模式下,ADDR表示MBIST檢測到的故障單元地址。在用戶模式下,ADDR表示用戶訪問主存儲器的存儲單元的地址。
(2)在用戶訪問模式下,對于HIT信號,作為一個判斷的訪問地址是否為故障地址,當HIT=1時,訪問的地址ADDR是故障地址,如果用戶要對該故障單元進行讀寫操作,那么用戶最后訪問的是替代了的冗余塊,而不是故障單元,與此同時,NF_ROW和NF_BANK會被設置為高阻態,CAM模塊輸出的故障單元的重映射冗余單元地址是S_BANK和S_ADDR。在測試/修復模式下,HIT=1時,表示故障存儲單元對應的ROW_ADDR和ROW_BANK已經檢測出來其存在故障,此時F_ROW和F_BANK置為高阻態,以及CAM模塊不分配任何冗余單元;HIT=0時,表示該故障單元是首次被檢測到,則需要CAM模塊通過分配一個冗余存儲單元重映射該故障單元。

圖3 SRAM存儲器的MBISR系統結構
(3)片選信號CS,是當用戶訪問存儲器時,它決定用戶訪問的是主存儲器還是冗余塊。當CS=0時,用戶訪問主存儲器,反之,就訪問冗余存儲區。CS的電平值總是與HIT的電平值相反。
(4) MBIST控制器的輸出信號是TEST_STOP,當TEST_STOP=1時表示內建自測試過程結束,隨之自啟動MBISR的模塊,同時會設置REPAIR_START=1。
(5)當存儲器被成功修復之后,RP_FINISH=1,同時會設置RP_FAIL=1。
其中按內容尋址存儲器(content address memory,CAM)和故障位圖是在一個模塊中設計實現的。故障位圖是采用16×4的二維數組設計的,在設計中數組的個數正好要等于主存儲器的塊數。當故障比較器的輸出結果為高電平時,則可以判定輸入存儲單元是故障單元,此故障單元的行組地址和行地址分別被轉換成十進制數,與之相對應的數組內容就會被標記為1。在修復過程中MBIRA模塊檢查故障位圖中的每個數組單元的值,如果數組等于1,則根據修復策略而分配一個冗余單元來修復這個故障單元。
2.3.1 實驗平臺
對于本文所述的設計方法,在以Xilinx的Vetex2的FPGA為硬件的平臺上,通過軟件仿真的方式驗證存儲器內建自修復的功能特性。首先,采用FPGA的硬件描述語言VHDL編碼,之后采用Xilinx ISE集成的綜合工具XST和布局布線工具進行綜合與布局布線。本文仿真工具采用的是ModelSim SE6.0a,靜態時序分析工具采用的是 Xilinx 的 Timing Analyzer。
2.3.2 仿真結果分析
通過對16×32bite的SRAM內建自修復系統電路的實驗,驗證了改進的基于一維DWL修復策略的可行性和較高的故障修復率,本文中所有仿真結果的數據采用的都是十六進制表示。
(1)基于編碼方式的SRAM隨機存儲器的時序仿真結果,使用的存儲器是可讀可寫的SRAM隨機存儲器,其中包括16×32bite主存儲器以及兩行冗余存儲區兩部分;與之相對應的地址寬度分別是6位和3位,其中主存儲器的行組地址ROW_BANK寬度為2位,行地址ROW_ADDR寬度為4位,冗余存儲區冗余行組地址SPARE_ROW_BANK寬度為2位,冗余行地址SPARE_ROW寬度為1位。SRAM隨機存儲器的I/O信號分別各有5個。MBISR模塊輸出控制存儲器的信號是由片選信號CS控制,在片選信號CS=1,主存儲器可以被隨機訪問,片選信號CS=1時,被訪問的是冗余存儲區。編碼方式的仿真結果由圖4所示。

圖4 基于編碼方式的SRAM的時序仿真結果
WR和RD信號是對SRAM存儲器的IO控制信號,都是高有效。通過仿真結果可以看到訪問存儲器的地址包括兩部分:行地址(row_addr)和行組地址(row_bank)。
(2)地址生成器的時序仿真
圖5所示的是基于可逆二進制計數器設計的地址生成器的時序仿真結果。地址序列的變化規則是按照二進制的遞增或遞減的形式變化的,即從“00000000B”到“11111111B”或者是從“11111111B”到“00000000B”。高4位代表行地址,低2位代表行組地址。

圖5 地址生成器的時序仿真圖
選擇信號ADDR_SEL=1時,地址序列發生變化,反之保持不變。當ADDR_SEL=1,UPDOWN=1(UPDOWN=0)控制地址的變化移動方向。ADDR_SEL和UPDOWN是由MBIST控制器控制輸出到地址生成器的信號。從仿真結果可以得出信號ROW_ADDR代表訪問存儲器的行地址選線和信號ROW_BANK代表行組地址選線,由此可知,此地址發生器能正確生成需要的地址。
(3) 地址生成器和MBIST控制器連接后的時序仿真
圖6所示的是MBIST控制器控制著R/W存儲器的控制信號、地址生成器輸出訪問存儲器地址以及整個測試電路的同步時序。MBIST控制器中的↑(r0,w1,r1)和?(w0)部分march元素連接地址生成器的仿真結果。

圖6 MBIST控制器和地址生成器連接后的部分時序仿真
從仿真結果可以看到MBIST控制器能夠正確地控制地址生成器的時序和March C+算法中的march元素,以完成存儲器的檢測。
(4)存儲器自修復系統電路修復結果的時序仿真
當MBIST檢測到故障單元時,會立即把故障地址寫入到故障位圖。同時MBIST模塊在完成測試后,會將test_stop信號輸出置為1,同時repair_start自動置1表示MBISR模塊的啟動。

圖7 存儲器的內建自修復仿真波形
從仿真波形圖7得出,故障信號fault_count輸出值為3(MBIST檢測到有3個故障發生)。經過MBIRA分析,判斷檢測到的故障存儲器是否可修復,當確定可修復時,信號repair_fail將置0。在故障修復過程中,故障圖中記錄的故障存儲單元的地址是fault_bankaddr和fault_rowaddr。冗余單元的地址信號s_rowbank(兩位)和s_rowaddr(1位)是CAM完成把判斷檢測到的故障單元的地址重映射到冗余單元的地址。從仿真結果可以看出,本文的改進DWL的修復算法能夠很好地完成存儲器的自修復。
(5)用戶訪問修復后存儲器的仿真
通過改進存儲器的故障檢測和修復,就是提高存儲器的可靠性以及電路性,從而使用戶能正常訪問此存儲器。圖8所示的是用戶訪問存儲器陣列后的時序仿真結果。

圖8 訪問修復后存儲器的仿真波形
當用戶訪問到故障單元時,CAM模塊就會自動被“擊中”,信號hit變為高(信號hit為高時表示訪問的是故障單元)、片選信號memory_cs被置‘0’,而且訪問故障單元(地址信號fault_rowaddr和fault_rowbank表示故障單元地址)被轉換到訪問冗余單元。但當用戶的訪問地址被判斷為無故障單元地址時,hit被置為低且片選信號memory_cs被置‘1’,直接訪問主存儲器。從圖8可以看出完成自修復后,該故障存儲器能被正常訪問,即對故障單元“13”、“22”、“33”的操作結果(即“07H”、“02H”、“07H”)完全正確,從而提高了該故障存儲器的可靠性和穩定性。用戶對其它無故障存儲單元地址(“nf_rowaddr”和“nf_rowbank”)的訪問為正常存取操作主存儲器。從仿真結果可以看出對存儲器的部分存儲單元(包括故障單元)寫入訪問數據(n_din)時,讀出結果(d_out)完全正確。
以下對實驗結果進行分析:
(1)MBIST模塊和CAM模塊的面積開銷評估
通過對電路的面積開銷、故障覆蓋率、對存儲器的性能影響、故障修復率等的分析,才能做出一個比較全面的評價。在對MBIST模塊的面積開銷是根據實驗平臺所采用的集成的綜合工具XST統計實現MBIST電路所使用的等效與非門的個數和實現存儲器電路使用的等效與非門個數之比。其中的CAM模塊是基于SRAM存儲器設計的,目前一個標準的SRAM單元需要用6個晶體管,通過CAM模塊與主存儲器的容量之比就可以得到CAM模塊的面積開銷,計算公式為:

式(1)中的m,n是主存儲器的行數和列數,x是主存儲器的行地址的寬度,a是整個存儲器的行組個數,r是冗余存儲區的冗余行數。MBIST電路和MBISR中的CAM模塊的面積開銷(HO單位:%)如表1所示(其中rbs表示整個存儲器行組選線個數或行組的個數)。

表1 MBIST和CAM模塊的面積開銷
從仿真結果分析可知:
第一,要設計大容量的SRAM可以通過設計MBIST電路和基于一維DWL的改進的自修復算法來實現。
第二,存儲器的行組數與存儲器的面積開銷是成正比的,所以增加行組書就增加了存儲器的面積開銷,但是會提高故障修復率。所以本測試的方法,在大容量的SRAM存儲器中仿真效果會更加明顯。
(2)不同容量大小存儲器的各項重要指標比較
通過測試電路的最大工作頻率、測試電路的最大組合路徑延遲、最小周期、4輸入LUT數目、SLICE寄存器數目、測試電路的綜合SLICE數目等重要指標才能對不懂容量的存儲器的BIST電路作出更準確的比較。表2給出了設計的SRAM存儲器自測試電路的最大工作頻率可達到282.366 MHz。當然,存儲器的容量會影響到測試電路占有的SLICE數量與最大組合路徑延遲存,主要表現為儲器容量增加,存儲器的內建自測試電路也會增加,同時最大組合路徑延遲也增加,但不會影響最小周期以及最大工作頻率。

表2 不同容量大小的MBIST的各項技術指標
在實驗中,被注入故障的存儲單元大約有0.58%,經過修復后電路能夠正常工作,實驗結果表明了改進的修復策略已經修復了所有的故障存儲單元,使得存儲器提高了電路的可靠性。在自修復的過程中,中斷修復進程的訪問不會對存儲器的性能產生多少影響。
本文主要研究了SRAM存儲器的改進的DWL 修復策略,在存儲器設計中,內建自修復結構是降低測試、制造成本、提高成品率的有效方法。但是在這個設計方案中沒有考慮地址重構的延時問題,因此,在將來的內建自修復結構中時延的設計考慮是一個新的突破口。
[1]Zorian Y,Shoukourian S.Embedded memory test and repair: infrastructure IP for SoC yield[J].IEEE Design&Test of Computer,May 2003,20(3):58-66.
[2]雷紹充,邵志標,梁峰.VLSI測試方法學和可測性設計[M].北京:電子工業出版社,2005:253-254,191-192.
[3]陸思安,何樂年,沈海斌.嵌入式存儲器內建自測試的原理及實現[J].固體電子學研究與進展,2004,24(2):205-208.
[4]吳志偉,鄒雪城,雷鑑銘,劉勇.嵌入式存儲器的內建自修復設計[J].微電子學與計算機,2007(02).
[5]江建慧,朱為國.嵌入式存儲器的內建自測試和內建自修復[J].同濟大學學報:自然科學版,2004(08).
[6]梁華國,蔣翠云.使用雙重種子壓縮的混合模式自測試[J].計算機研究與發展,2004(01).
[7]陸思安,何樂年,沈海斌,嚴曉浪.嵌入式存儲器內建自測試的原理及實現[J].固體電子學研究與進展,2004(02).
[8]檀彥卓,徐勇軍,韓銀和,李華偉,李曉維.面向存儲器核的內建自測試[J];計算機工程與科學,2005(04).
[9]林曉偉,鄭學仁,劉漢華,閭曉晨,萬艷.嵌入式存儲器的內建自測試算法及測試驗證[J].中國集成電路,2006(02).
[10]David Janas.下一代手機設計中的嵌入式存儲器[J].電子產品世界,2006(10).
[11]Y Zorian,S Shoukourian.Embedded-Memory test and repair:infrastructure IP for SoCyield[J].IEEE Design&Test of Computers,2003,20(3):58-66.
[12]Rajsuman R.Design and test of large embedded memories:an overview[J].IEEE Design&Test of Computers,2001,18(3):16-27.
[13]B Lu S K.uilt-in self-repair techniques for embedded RAMs[J].IEEE Computers andDigital Techniques,2003,150(4):201-208.
[14]J F Li,J C Yeh,R.F Huang,et al,A built-in self-repair design for RAMs with2-D redundancy[J].IEEE Transaction on VLSI Systems,2005,13(6):742-745.
[15]Goor van de,A J,Hamdioui,Fault models and tests for two-port memory[J].Proceedings 16th IEEE VLSI Test Symposium,Washington DC USA,1998:401-410.
[16]Hamdioui S,Al-Ars Z,van de Goor,et al,Testing static and dynamic faultsin random access memories[J].Proceedings 20th IEEE VLSI Test Symposium,2002.(VTS2002),Monterey California USA,2002:395-400.