劉勇鋒,姚竹亭,顧秀江,王潔,秦新紅
(中北大學(xué) 機(jī)械工程與自動化學(xué)院,山西省太原市 030051)
所謂存儲器修復(fù)技術(shù)是指通過在存儲器中預(yù)置的冗余存儲單元,對出現(xiàn)故障的存儲單元進(jìn)行替換的方法。由于冗余單元的劃分形式各不相同,可以把嵌入式存儲器的修復(fù)策略分為3類:基于冗余字的修復(fù)、基于冗余列的修復(fù)和基于冗余行的修復(fù)。在文獻(xiàn)中提出了對冗余列分段的軟修復(fù)方法、二維冗余修復(fù)方法、基于冗余字的修復(fù)方法,以及同類型的冗余字作為冗余單元替換故障字等等很多方法,但是在實(shí)際的開發(fā)應(yīng)用中發(fā)現(xiàn)這些設(shè)計(jì)方法都有各自的優(yōu)點(diǎn),但是這些優(yōu)點(diǎn)都是在不同程度上犧牲了修復(fù)率、功耗,以及修復(fù)類型,所以針對上述各個(gè)問題,本文提出了改進(jìn)的基于 DWL 修復(fù)策略(Divided Word-Line Structure,DWL),這種修復(fù)策略是任何冗余單元可以替代檢測到的故障單元。
任何一個(gè)完整的存儲器內(nèi)部都由兩個(gè)部分構(gòu)成其主要的系統(tǒng)——內(nèi)建測試(BIST,Built-In Self-Test)和內(nèi)建冗余分析(BIRA,Built-In Redundancy Analysis)兩個(gè)部分,而這兩部是在整個(gè)系統(tǒng)中,在不同的工作模式下工作:測試/修復(fù)模式和正常工作模式。當(dāng)在測試/修復(fù)模式下,系統(tǒng)上電啟動,BIST模塊開始對等待測試的存儲器進(jìn)行測試,在檢測到故障后,檢測模塊會把故障信號Fail給內(nèi)建冗余模塊發(fā)送,同時(shí)將故障地址送入BIRA模塊,BIST模塊暫停檢測。BIRA模塊接收到Fail信號后,對具體故障地址分析,對其地址判斷是否已經(jīng)保存在BIRA內(nèi)部存儲,如果未存儲,則在BIRA內(nèi)部存儲器的最末端保留該地址,并進(jìn)行冗余分配,修復(fù)完成之后啟動BIST繼續(xù)進(jìn)行測試;如果已經(jīng)把該故障地址保存,則繼續(xù)進(jìn)行BIST。在正常工作模式下,BIST電路處于不工作狀態(tài),要訪問的地址直接被送到BIRA模塊中,由BIRA模塊判斷是否是故障地址,如果是則進(jìn)行地址重映射,調(diào)用冗余存儲單元,如果不是則直接訪問正常存儲單元。
本文針對靜態(tài)隨機(jī)讀寫存儲器(static random access memory,SRAM)內(nèi)建自修復(fù)電路的研究,一般SRAM的存儲單元陣列是采用6管結(jié)構(gòu),其結(jié)構(gòu)模型如圖1所示。
圖1 SRAM的存儲單元結(jié)構(gòu)圖
行冗余、列冗余和塊冗余是最常用的冗余單元類型。基于冗余單位修復(fù)策略就是對存儲器中故障單元所在的整行、列或塊被一個(gè)冗余行、列或塊所代替。雖然對冗余資源的配置有很多算法,但是在故障修復(fù)效率的提高上,還是主要依靠冗余配置分析算法和冗余資源的類型、數(shù)量、修復(fù)策略。
在電路設(shè)計(jì)自修復(fù)的過程中,對電路的故障的修復(fù)率、算法的復(fù)雜度、性能的影響等指標(biāo)基本上不會有太多考慮。就拿二維冗余結(jié)構(gòu)修復(fù)存儲器來說,最優(yōu)的配置分析問題是一個(gè)NP完全性問題已被證明。在采用二維冗余修復(fù)方案的行塊和列塊結(jié)構(gòu),盡管故障的修復(fù)率提高了,但是它的算法的復(fù)雜度比較大,使得系統(tǒng)的穩(wěn)定性和可靠性降低。在研究中發(fā)現(xiàn),如果采用一維冗余結(jié)構(gòu)修復(fù)算法進(jìn)行故障修復(fù)的話,實(shí)現(xiàn)起來比較簡單而且直接、對系統(tǒng)的穩(wěn)定性影響不太大,然而在面對整行的或整列的修復(fù),這種方案的故障修復(fù)率明顯較低。為此,要尋找到了一種新型的冗余,所以提出了基于冗余行塊的修復(fù)策略,盡管它能夠很好地解決修復(fù)電路的面積開銷問題,但它的故障修復(fù)率仍然不高。
對上述問題的研究后,改進(jìn)冗余行塊的修復(fù)策略的做法是可行的,改進(jìn)后不僅彌補(bǔ)了在一維冗余修復(fù)策略中出現(xiàn)的修復(fù)率低的缺點(diǎn),同時(shí)也繼承了一維冗余修復(fù)策略大的優(yōu)點(diǎn)。改進(jìn)了的DWL修復(fù)策略,可以替代檢測到的任何故障單元。如果在檢測到的故障單元,而在行組(row bank)中沒有可利用的冗余行塊時(shí),行組地址會自動加1,用同樣的方式去判斷行組里是否能找到可利用的冗余塊,如果有則被用來修復(fù)故障單元,如果沒有,行組地址還會繼續(xù)自動加1,直到在行組塊中找不到任何可利用的冗余塊,再在容錯(cuò)系統(tǒng)的報(bào)告中顯示存儲器無法修復(fù)。改進(jìn)的基于DWL的替代方法硬件部分包括4根行組選線(rbs0~rbs3)和16根行選線(W0~W15),32根位選線,還有就是,其中有兩個(gè)冗余行,換句話說就是8個(gè)冗余行塊,如圖2所示,在下面的6個(gè)故障行塊中,故障部分(主存中的陰影部分)都成功被冗余行塊所替代。顯然,改進(jìn)后的DWL修復(fù)策略的替代方法使得故障修復(fù)率大大提升。
比如,用戶訪問存儲器時(shí),內(nèi)建自修復(fù)模塊會對輸入地址首先判斷該存儲單元是否為故障單元,如果是則該地址直接被輸入到CAM中,而相應(yīng)被冗余塊所替代的故障單元的也就是由冗余塊輸出,所以,修復(fù)后的存儲使得用戶訪問是冗余存儲區(qū)的讀寫操作。
圖2 故障行塊被冗余行塊所替代
任何一個(gè)存儲器的自修復(fù)系統(tǒng)設(shè)計(jì)在其內(nèi)部都包括內(nèi)建自修復(fù)模塊和內(nèi)建自測試兩部分的內(nèi)容。其實(shí),修復(fù)模塊是在自建測試電路的基礎(chǔ)上建立的,當(dāng)然,存儲器要做到自修復(fù)必須加入一些冗余行,這樣就使得主存儲器與冗余存儲區(qū)之間構(gòu)成了DWL結(jié)構(gòu)的硬件組成,從而完成了總體存儲器的自修復(fù)系統(tǒng)電路的設(shè)計(jì),同時(shí)這個(gè)電路具有了在線測試和離線修復(fù)存儲器的功能。若用戶訪問存儲器時(shí),內(nèi)建自修復(fù)模塊會對輸入地址首先判斷該存儲單元是否為故障單元,如果是則該地址直接被輸入到CAM中,而相應(yīng)被冗余塊所替代的故障單元的也就是由冗余塊輸出,所以,修復(fù)后的存儲使得用戶訪問是冗余存儲區(qū)的讀寫操作,從可靠性的角度來說是一種很不錯(cuò)的方法。
圖3中主要控制信號的含義描述如下:
(1) 在測試/修復(fù)模式下,ADDR表示MBIST檢測到的故障單元地址。在用戶模式下,ADDR表示用戶訪問主存儲器的存儲單元的地址。
(2)在用戶訪問模式下,對于HIT信號,作為一個(gè)判斷的訪問地址是否為故障地址,當(dāng)HIT=1時(shí),訪問的地址ADDR是故障地址,如果用戶要對該故障單元進(jìn)行讀寫操作,那么用戶最后訪問的是替代了的冗余塊,而不是故障單元,與此同時(shí),NF_ROW和NF_BANK會被設(shè)置為高阻態(tài),CAM模塊輸出的故障單元的重映射冗余單元地址是S_BANK和S_ADDR。在測試/修復(fù)模式下,HIT=1時(shí),表示故障存儲單元對應(yīng)的ROW_ADDR和ROW_BANK已經(jīng)檢測出來其存在故障,此時(shí)F_ROW和F_BANK置為高阻態(tài),以及CAM模塊不分配任何冗余單元;HIT=0時(shí),表示該故障單元是首次被檢測到,則需要CAM模塊通過分配一個(gè)冗余存儲單元重映射該故障單元。
圖3 SRAM存儲器的MBISR系統(tǒng)結(jié)構(gòu)
(3)片選信號CS,是當(dāng)用戶訪問存儲器時(shí),它決定用戶訪問的是主存儲器還是冗余塊。當(dāng)CS=0時(shí),用戶訪問主存儲器,反之,就訪問冗余存儲區(qū)。CS的電平值總是與HIT的電平值相反。
(4) MBIST控制器的輸出信號是TEST_STOP,當(dāng)TEST_STOP=1時(shí)表示內(nèi)建自測試過程結(jié)束,隨之自啟動MBISR的模塊,同時(shí)會設(shè)置REPAIR_START=1。
(5)當(dāng)存儲器被成功修復(fù)之后,RP_FINISH=1,同時(shí)會設(shè)置RP_FAIL=1。
其中按內(nèi)容尋址存儲器(content address memory,CAM)和故障位圖是在一個(gè)模塊中設(shè)計(jì)實(shí)現(xiàn)的。故障位圖是采用16×4的二維數(shù)組設(shè)計(jì)的,在設(shè)計(jì)中數(shù)組的個(gè)數(shù)正好要等于主存儲器的塊數(shù)。當(dāng)故障比較器的輸出結(jié)果為高電平時(shí),則可以判定輸入存儲單元是故障單元,此故障單元的行組地址和行地址分別被轉(zhuǎn)換成十進(jìn)制數(shù),與之相對應(yīng)的數(shù)組內(nèi)容就會被標(biāo)記為1。在修復(fù)過程中MBIRA模塊檢查故障位圖中的每個(gè)數(shù)組單元的值,如果數(shù)組等于1,則根據(jù)修復(fù)策略而分配一個(gè)冗余單元來修復(fù)這個(gè)故障單元。
2.3.1 實(shí)驗(yàn)平臺
對于本文所述的設(shè)計(jì)方法,在以Xilinx的Vetex2的FPGA為硬件的平臺上,通過軟件仿真的方式驗(yàn)證存儲器內(nèi)建自修復(fù)的功能特性。首先,采用FPGA的硬件描述語言VHDL編碼,之后采用Xilinx ISE集成的綜合工具XST和布局布線工具進(jìn)行綜合與布局布線。本文仿真工具采用的是ModelSim SE6.0a,靜態(tài)時(shí)序分析工具采用的是 Xilinx 的 Timing Analyzer。
2.3.2 仿真結(jié)果分析
通過對16×32bite的SRAM內(nèi)建自修復(fù)系統(tǒng)電路的實(shí)驗(yàn),驗(yàn)證了改進(jìn)的基于一維DWL修復(fù)策略的可行性和較高的故障修復(fù)率,本文中所有仿真結(jié)果的數(shù)據(jù)采用的都是十六進(jìn)制表示。
(1)基于編碼方式的SRAM隨機(jī)存儲器的時(shí)序仿真結(jié)果,使用的存儲器是可讀可寫的SRAM隨機(jī)存儲器,其中包括16×32bite主存儲器以及兩行冗余存儲區(qū)兩部分;與之相對應(yīng)的地址寬度分別是6位和3位,其中主存儲器的行組地址ROW_BANK寬度為2位,行地址ROW_ADDR寬度為4位,冗余存儲區(qū)冗余行組地址SPARE_ROW_BANK寬度為2位,冗余行地址SPARE_ROW寬度為1位。SRAM隨機(jī)存儲器的I/O信號分別各有5個(gè)。MBISR模塊輸出控制存儲器的信號是由片選信號CS控制,在片選信號CS=1,主存儲器可以被隨機(jī)訪問,片選信號CS=1時(shí),被訪問的是冗余存儲區(qū)。編碼方式的仿真結(jié)果由圖4所示。
圖4 基于編碼方式的SRAM的時(shí)序仿真結(jié)果
WR和RD信號是對SRAM存儲器的IO控制信號,都是高有效。通過仿真結(jié)果可以看到訪問存儲器的地址包括兩部分:行地址(row_addr)和行組地址(row_bank)。
(2)地址生成器的時(shí)序仿真
圖5所示的是基于可逆二進(jìn)制計(jì)數(shù)器設(shè)計(jì)的地址生成器的時(shí)序仿真結(jié)果。地址序列的變化規(guī)則是按照二進(jìn)制的遞增或遞減的形式變化的,即從“00000000B”到“11111111B”或者是從“11111111B”到“00000000B”。高4位代表行地址,低2位代表行組地址。
圖5 地址生成器的時(shí)序仿真圖
選擇信號ADDR_SEL=1時(shí),地址序列發(fā)生變化,反之保持不變。當(dāng)ADDR_SEL=1,UPDOWN=1(UPDOWN=0)控制地址的變化移動方向。ADDR_SEL和UPDOWN是由MBIST控制器控制輸出到地址生成器的信號。從仿真結(jié)果可以得出信號ROW_ADDR代表訪問存儲器的行地址選線和信號ROW_BANK代表行組地址選線,由此可知,此地址發(fā)生器能正確生成需要的地址。
(3) 地址生成器和MBIST控制器連接后的時(shí)序仿真
圖6所示的是MBIST控制器控制著R/W存儲器的控制信號、地址生成器輸出訪問存儲器地址以及整個(gè)測試電路的同步時(shí)序。MBIST控制器中的↑(r0,w1,r1)和?(w0)部分march元素連接地址生成器的仿真結(jié)果。
圖6 MBIST控制器和地址生成器連接后的部分時(shí)序仿真
從仿真結(jié)果可以看到MBIST控制器能夠正確地控制地址生成器的時(shí)序和March C+算法中的march元素,以完成存儲器的檢測。
(4)存儲器自修復(fù)系統(tǒng)電路修復(fù)結(jié)果的時(shí)序仿真
當(dāng)MBIST檢測到故障單元時(shí),會立即把故障地址寫入到故障位圖。同時(shí)MBIST模塊在完成測試后,會將test_stop信號輸出置為1,同時(shí)repair_start自動置1表示MBISR模塊的啟動。
圖7 存儲器的內(nèi)建自修復(fù)仿真波形
從仿真波形圖7得出,故障信號fault_count輸出值為3(MBIST檢測到有3個(gè)故障發(fā)生)。經(jīng)過MBIRA分析,判斷檢測到的故障存儲器是否可修復(fù),當(dāng)確定可修復(fù)時(shí),信號repair_fail將置0。在故障修復(fù)過程中,故障圖中記錄的故障存儲單元的地址是fault_bankaddr和fault_rowaddr。冗余單元的地址信號s_rowbank(兩位)和s_rowaddr(1位)是CAM完成把判斷檢測到的故障單元的地址重映射到冗余單元的地址。從仿真結(jié)果可以看出,本文的改進(jìn)DWL的修復(fù)算法能夠很好地完成存儲器的自修復(fù)。
(5)用戶訪問修復(fù)后存儲器的仿真
通過改進(jìn)存儲器的故障檢測和修復(fù),就是提高存儲器的可靠性以及電路性,從而使用戶能正常訪問此存儲器。圖8所示的是用戶訪問存儲器陣列后的時(shí)序仿真結(jié)果。
圖8 訪問修復(fù)后存儲器的仿真波形
當(dāng)用戶訪問到故障單元時(shí),CAM模塊就會自動被“擊中”,信號hit變?yōu)楦撸ㄐ盘杊it為高時(shí)表示訪問的是故障單元)、片選信號memory_cs被置‘0’,而且訪問故障單元(地址信號fault_rowaddr和fault_rowbank表示故障單元地址)被轉(zhuǎn)換到訪問冗余單元。但當(dāng)用戶的訪問地址被判斷為無故障單元地址時(shí),hit被置為低且片選信號memory_cs被置‘1’,直接訪問主存儲器。從圖8可以看出完成自修復(fù)后,該故障存儲器能被正常訪問,即對故障單元“13”、“22”、“33”的操作結(jié)果(即“07H”、“02H”、“07H”)完全正確,從而提高了該故障存儲器的可靠性和穩(wěn)定性。用戶對其它無故障存儲單元地址(“nf_rowaddr”和“nf_rowbank”)的訪問為正常存取操作主存儲器。從仿真結(jié)果可以看出對存儲器的部分存儲單元(包括故障單元)寫入訪問數(shù)據(jù)(n_din)時(shí),讀出結(jié)果(d_out)完全正確。
以下對實(shí)驗(yàn)結(jié)果進(jìn)行分析:
(1)MBIST模塊和CAM模塊的面積開銷評估
通過對電路的面積開銷、故障覆蓋率、對存儲器的性能影響、故障修復(fù)率等的分析,才能做出一個(gè)比較全面的評價(jià)。在對MBIST模塊的面積開銷是根據(jù)實(shí)驗(yàn)平臺所采用的集成的綜合工具XST統(tǒng)計(jì)實(shí)現(xiàn)MBIST電路所使用的等效與非門的個(gè)數(shù)和實(shí)現(xiàn)存儲器電路使用的等效與非門個(gè)數(shù)之比。其中的CAM模塊是基于SRAM存儲器設(shè)計(jì)的,目前一個(gè)標(biāo)準(zhǔn)的SRAM單元需要用6個(gè)晶體管,通過CAM模塊與主存儲器的容量之比就可以得到CAM模塊的面積開銷,計(jì)算公式為:
式(1)中的m,n是主存儲器的行數(shù)和列數(shù),x是主存儲器的行地址的寬度,a是整個(gè)存儲器的行組個(gè)數(shù),r是冗余存儲區(qū)的冗余行數(shù)。MBIST電路和MBISR中的CAM模塊的面積開銷(HO單位:%)如表1所示(其中rbs表示整個(gè)存儲器行組選線個(gè)數(shù)或行組的個(gè)數(shù))。
表1 MBIST和CAM模塊的面積開銷
從仿真結(jié)果分析可知:
第一,要設(shè)計(jì)大容量的SRAM可以通過設(shè)計(jì)MBIST電路和基于一維DWL的改進(jìn)的自修復(fù)算法來實(shí)現(xiàn)。
第二,存儲器的行組數(shù)與存儲器的面積開銷是成正比的,所以增加行組書就增加了存儲器的面積開銷,但是會提高故障修復(fù)率。所以本測試的方法,在大容量的SRAM存儲器中仿真效果會更加明顯。
(2)不同容量大小存儲器的各項(xiàng)重要指標(biāo)比較
通過測試電路的最大工作頻率、測試電路的最大組合路徑延遲、最小周期、4輸入LUT數(shù)目、SLICE寄存器數(shù)目、測試電路的綜合SLICE數(shù)目等重要指標(biāo)才能對不懂容量的存儲器的BIST電路作出更準(zhǔn)確的比較。表2給出了設(shè)計(jì)的SRAM存儲器自測試電路的最大工作頻率可達(dá)到282.366 MHz。當(dāng)然,存儲器的容量會影響到測試電路占有的SLICE數(shù)量與最大組合路徑延遲存,主要表現(xiàn)為儲器容量增加,存儲器的內(nèi)建自測試電路也會增加,同時(shí)最大組合路徑延遲也增加,但不會影響最小周期以及最大工作頻率。
表2 不同容量大小的MBIST的各項(xiàng)技術(shù)指標(biāo)
在實(shí)驗(yàn)中,被注入故障的存儲單元大約有0.58%,經(jīng)過修復(fù)后電路能夠正常工作,實(shí)驗(yàn)結(jié)果表明了改進(jìn)的修復(fù)策略已經(jīng)修復(fù)了所有的故障存儲單元,使得存儲器提高了電路的可靠性。在自修復(fù)的過程中,中斷修復(fù)進(jìn)程的訪問不會對存儲器的性能產(chǎn)生多少影響。
本文主要研究了SRAM存儲器的改進(jìn)的DWL 修復(fù)策略,在存儲器設(shè)計(jì)中,內(nèi)建自修復(fù)結(jié)構(gòu)是降低測試、制造成本、提高成品率的有效方法。但是在這個(gè)設(shè)計(jì)方案中沒有考慮地址重構(gòu)的延時(shí)問題,因此,在將來的內(nèi)建自修復(fù)結(jié)構(gòu)中時(shí)延的設(shè)計(jì)考慮是一個(gè)新的突破口。
[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]雷紹充,邵志標(biāo),梁峰.VLSI測試方法學(xué)和可測性設(shè)計(jì)[M].北京:電子工業(yè)出版社,2005:253-254,191-192.
[3]陸思安,何樂年,沈海斌.嵌入式存儲器內(nèi)建自測試的原理及實(shí)現(xiàn)[J].固體電子學(xué)研究與進(jìn)展,2004,24(2):205-208.
[4]吳志偉,鄒雪城,雷鑑銘,劉勇.嵌入式存儲器的內(nèi)建自修復(fù)設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2007(02).
[5]江建慧,朱為國.嵌入式存儲器的內(nèi)建自測試和內(nèi)建自修復(fù)[J].同濟(jì)大學(xué)學(xué)報(bào):自然科學(xué)版,2004(08).
[6]梁華國,蔣翠云.使用雙重種子壓縮的混合模式自測試[J].計(jì)算機(jī)研究與發(fā)展,2004(01).
[7]陸思安,何樂年,沈海斌,嚴(yán)曉浪.嵌入式存儲器內(nèi)建自測試的原理及實(shí)現(xiàn)[J].固體電子學(xué)研究與進(jìn)展,2004(02).
[8]檀彥卓,徐勇軍,韓銀和,李華偉,李曉維.面向存儲器核的內(nèi)建自測試[J];計(jì)算機(jī)工程與科學(xué),2005(04).
[9]林曉偉,鄭學(xué)仁,劉漢華,閭曉晨,萬艷.嵌入式存儲器的內(nèi)建自測試算法及測試驗(yàn)證[J].中國集成電路,2006(02).
[10]David Janas.下一代手機(jī)設(shè)計(jì)中的嵌入式存儲器[J].電子產(chǎn)品世界,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.