胡 蝶,吳俊敏,2
?
一種結合硬件特征的并行內存故障檢測方案
胡 蝶1,吳俊敏1,2
(1. 中國科學技術大學計算機科學與技術學院,合肥 230027;2. 中國科學技術大學蘇州研究院,蘇州 215123)
針對March類內存檢測算法越來越復雜、檢測時間越來越長,且更適用于對嵌入式內存芯片的檢測等問題,提出一種結合硬件特征的并行內存故障檢測方案。該方案包括2種并行檢測方法:(1)根據DDR2的結構和工作原理設計的芯片級并行,可以并行檢測一個DDR2內部的多個內存芯片。(2)根據訪存控制器的結構和工作原理設計的訪存控制器級并行,可并行檢測多個DDR2內存條。對于芯片級并行,訪存帶寬越大,即并行檢測的芯片個數越多,并行效果越好,從1個芯片到并行檢測8個芯片,內存的檢測時間幾乎是呈線性遞減的。對于訪存控制器級并行,訪存控制器數量越多并行效果越好,從1個LMC到2個LMC,內存的檢測時間幾乎減少了一倍。實驗結果表明,2種并行檢測方法不僅能夠成倍加快檢測速度,而且更適用于用戶對內存的檢測。
故障模型;March算法;DDR2內存條;芯片級并行;訪存控制器級并行
內存故障可以簡化為以下5種故障模型:固定故障 (Stuck-at Fault, SAF)[1],轉換故障(Transition Fault, TF)[2],耦合故障(Coupling Fault, CF)[3],尋址故障(Address Decoder Fault, ADF)[4],數據保留故障(Data Retention Fault, DRF)[5]。
根據故障模型,人們設計出了許多March算法,如MATS、March X、March C、March A、March Y等。隨著存儲技術的不斷發展,內存芯片的密度越來越高,不僅耦合故障的發生概率越來越大,還出現了更難檢測的動態故障。為了滿足需求,人們又設計出了多種更復雜的March算法,如March SR[6]、March SS[6]、March DSS[7]、March AB[8]、March MSS[9]。這些復雜的March算法雖然能夠檢測多種故障類型,檢測時間卻成倍地增長。另外,這些算法都是被設計用來檢測一個內存芯片內部的單元是否存在故障,并且已存在大部分并行檢測算法[10]是從硬件方面設計的,更適用于對嵌入式內存芯片的檢測[11],并不適用于用戶。
針對以上問題,本文提出一種結合硬件特征的并行內存故障檢測方案,它能夠有效地解決上述2個問題:既可以成倍地降低March算法的檢測時間,又能讓用戶利用March算法在短時間內對內存進行檢測。該方案包含2種并行內存檢測方法:(1)根據DDR2的結構和工作原理而設計的芯片級并行;(2)根據訪存控制器的結構和工作原理而設計的訪存控制器級并行。
如圖1所示,內存條是由多個內存芯片構成的。內存芯片是由4個或8個邏輯bank(L-bank)組成。圖2是內存芯片的結構示意圖。邏輯bank[12](L-bank)是一張以內存單元為單位寫入的矩陣,每個內存單元稱之為cell,一個cell的大小為4/8/16位,即內存芯片的位寬。對于每個L-bank,只要指定一行(Row),再指定一列(Column),就可以定位到某個cell。在一個時鐘周期內,內存芯片只允許對一個L-bank進行操作,而不是對芯片內所有L-bank同時操作。L-bank的地址線是通用的,只要再有一個L-bank編號加以區別就可以了(L-bank 0~L-bank 3)。

圖1 內存芯片位寬為8位的DDR2結構

圖2 內存顆粒內部結構
目前,CPU與內存之間(就是CPU到DIMM槽)的接口位寬是64位,即一個物理bank(P-bank),這64位由多個內存芯片共同組成,例如位寬是8位的內存芯片,一個P-bank由8個內存芯片組成,如圖1所示。每次CPU與內存條交換64位的數據時,分別從所有的內存芯片中存取一個cell。
本文根據2個硬件特征設計了2種并行內存檢測方法:(1)根據DDR2的組成結構和工作原理并行檢測內存條中的多個內存芯片,這種檢測稱為芯片級并行;(2)根據訪存控制器的設計和工作原理并行檢測多個內存條,這種檢測稱為訪存控制器級并行。
雙列直插式存儲模塊(Dual-Inline-Memory-Modules, DIMM),負責訪存控制器與內存模塊之間的數據交換。DIMM提供了64位的數據通道,這64位數據分別來自同一個物理bank(P-bank)中的所有內存芯片,目前DDR2的P-bank通常由8個數據位寬是8位的內存芯片組成,所以每次讀/寫內存時,相當于從這8個內存芯片中分別讀/寫 1個字節的數據(即一個cell)。因此,在檢測內存時,以 64位為單位,每次讀/寫8個字節,并行檢測8個內存芯片,從而成倍地提高內存檢測的速度。
訪存操作每次處理的數據單元可以是一個字節,半個字和一個字。通常,一個字節是8位。對于32位機,一個字為32位,半字即16位。對于64位機,一個字為64位,半字即32位。因此,根據DDR2工作原理,當內存芯片位寬是8位時,32位機一次能夠并行讀/寫的內存芯片個數可以是1個、2個和4個;64位機一次能夠并行讀/寫的內存芯片個數可以是1個、2個、4個和8個。把這種一次并行讀/寫個芯片的檢測方法叫作-chip(s)并行,其中=2。
實驗環境是64位機,既可以采用32位模式,也可以采用64位模式。因此,可以研究1-chip并行、2-chips并行、4-chips并行和8-chips并行之間的關系。圖3是芯片級并行檢測算法流程。

圖3 芯片級并行檢測算法流程
多核體系結構的計算機一般會有2個或者2個以上訪存控制器(Local Memory Controller, LMC)。圖4是LMC的結構,LMC之間可以并行操作內存,因此,可以利用多個LMC并行檢測多個DDR2內存條。

圖4 內存控制器結構
這里根據Cavium Networks公司的MIPS多內核處理器CN54/5/6/7XX具體描述怎樣并行檢測。CN54/5/6/7XX有 2個訪存控制器(LMC),每個LMC支持4個DIMM,每個DIMM最大支持2 GB的內存條。CN54/5/6/7XX最大支持16 GB的內存。有49根地址線,只用最低34根地址線構成16 GB的地址空間。16 GB的內存安排如下:
DR0: 0x0 0000 0000 0000 to 0x0 0000 0FFF FFFF = low 256 MB
DR1: 0x0 0004 1000 0000 to 0x0 0004 1FFF FFFF = mid 256 MB
DR2: 0x0 0000 2000 0000 to 0x0 0003 FFFF FFFF = upper 15.5 GB
如圖5所示,34位地址的地址映射關系如下[13]:
第7位:當前讀/寫的字節位于哪一個訪存控制器。0:訪存控制器0,即LMC0;1:訪存控制器0,即LMC1。
第33位、第32位:當前讀/寫的字節位于哪一個DIMM。00:DIMM0;01:DIMM1;10:DIMM2;11:DIMM3。
第31位:當前讀/寫的字節位于哪一個Rank(物理bank)。0:Rank0,即物理bank0;1:Rank1,即物理bank1。
第2位~第0位:當前讀/寫的字節位于哪一個內存芯片上。000:內存芯片0;001:內存芯片1;010:內存芯片2;011:內存芯片3;100:內存芯片4;101:內存芯片5;110:內存芯片6;111:內存芯片7。
第10位~第8位:當前讀/寫的字節位于內存芯片的哪一個邏輯bank中。000:L-bank0;001:L-bank1;010:L-bank2;011:L-bank3;100:L-bank4;101:L-bank5;110:L-bank6;111:L-bank7。
第30位~第17位:當前讀/寫的字節所在邏輯bank內的行地址。
第16位~第11位和第6位~第3位:當前/讀寫的字節所在邏輯bank內的列地址。

圖5 34位地址的地址映射
從以上地址映射關系來看,不可以使用傳統的內存檢測方法,即按照地址順序依次檢測內存,必須按照地址的映射關系從新排序內存的地址順序來檢測內存。從新排序的思想就是:把每一個對應的地址塊按照所在位置左移,然后加起來,就是新的內存檢測的地址順序,如第7位是LMC,則把它左移7位。又因為一個周期內可以讀/寫 64位,即8個字節,這8個字節又分別來自不同的內存芯片,所以每次進行64位讀/寫,每次對8個內存芯片讀/寫一個字節,這樣可以結合芯片級并行,從而成倍地提高內存檢測速度。下列代碼是按照地址映射關系從新排序的內存檢測代碼,檢測流程如圖6所示。
If( coremask == 0) //核0檢測LMC0管理的內存
LMC = 0;
Else if( coremask == 1) //LMC1管理的內存核1檢測
LMC = 1;
For( DIMM = 0; DIMM <= 3; DIMM++ ) //選擇DIMM
For( Rank = 0; Rank <= 1; Rank++ ) //選擇物理bank
For( Chip = 0; Chip <= 7; Chip++ ) //選擇內存芯片
For( Bank = 0; Bank <= 7; Bank++ ) //選擇芯片內部的//L-bank
For( Row = 0; Row < 214; Row++ ) //選擇行 //地址
For( Col = 0; Col < 210; Col++ ) //列地址
{
Addr = (LMC<<7) + (DIMM<<32) + (Rank<<31) + Chip+ (Bank<<8) + (Row<<17) + ((Col&0xF)<<3) + ((Col&0x3F0)<< (11-4));
讀/寫64位即8個字節;
…
}

圖6 按照地址映射關系排序的并行檢測流程
本文實驗基于Cavium Networks公司的MIPS多內核處理器CN54/5/6/7XX。CN54/5/6/7XX配置了12個64位的CPU,2個訪存控制器(LMC),每個LMC支持4個DIMM,每個DIMM最大支持2 GB的內存條。CN54/5/6/7XX最大支持16 GB的內存。內存條規格如表1所示。

表1 內存條DDR2規格
實驗主要面向3個方向:(1)面向芯片級并行,實驗分析了1-chip并行、2-chips并行、4-chips并行和8-chips并行之間的關系;(2)面向訪存控制器級并行,由于實驗環境只提供了2個LMC,因此只比較了1-LMC并行和2-LMC并行;(3)結合芯片級并行和訪存控制器級并行,實驗分析了2種并行檢測方案結合的效果。
為了使實驗具有全面性,選擇了5種具有代表性的March算法,它們分別是:MATS, March X, March C, March SR和March SS。根據表2可知,它們的復雜度依次遞增,故障覆蓋率也隨之遞增[14]。

表2 實驗使用的5種算法
實驗對每一種算法分別采用1-chip、2-chips、4-chips和8-chips檢測200 MB內存所用的時間。其中,這200 MB位于同一個LMC管理下的同一個物理bank。在DDR2內部,這200 MB分別來自8個內存芯片,每個芯片25 MB。
圖7是1-chip、2-chips、4-chips和8-chips的檢測時間比較折線圖。無論是簡單算法還是復雜算法,從一個芯片到并行檢測8個芯片,內存的檢測時間幾乎是成線性遞減的。得出結論:對于芯片級并行,訪存帶寬越大并行效果越好。

圖7 芯片檢測時間比較
可以利用個訪存控制器同時并行檢測個DDR2內存條。實驗對各個算法分別采用1-LMC和2-LMC檢測200 MB內存的時間。其中,對于1-LMC,這200 MB位于同一個LMC(可以使LMC0或者LMC1)管理下的同一個物理bank。在DDR2內部,這200 MB分別來自8個內存芯片(每個芯片25 MB);對于2-LMC,這200 MB內存位于2個LMC(即LMC0和LMC1),每個LMC管理100 MB。
圖8是各算法采用1-LMC和2-LMC的檢測時間柱狀比較,一次訪存操作的內存位數分別為8位、16位、32位和64位。1-LMC表示200 MB內存位于同一個LMC管理下的同一個物理bank中的8個內存芯片,2-LMC表示 200 MB內存位于2個LMC,每個LMC管理100 MB。

圖8 各算法檢測時間比較
無論是簡單算法還是復雜算法,從1個LMC到2個LMC,內存檢測時間幾乎減少了一倍。得出結論:對于訪存控制器級并行,訪存控制器數量越多并行效果越好。
4.1節和4.2節的實驗表明,芯片級并行和訪存控制器級并行都可以有效加速內存檢測,如果把它們結合起來會達到更好的效果。根據圖9可知,對于任意算法都是64位的2-LMC檢測時間最少。2種方法結合會更有效地加快內存檢測速度。但是,在檢測同樣大小的內存時,訪存控制器級并行必須把內存分配到2個或更多的LMC上。

圖9 芯片級并行和訪存控制器級并行的比較
本文提出一種結合硬件特征的并行內存故障檢測方案,該方案是根據DDR2和訪存控制器的工作原理而設計的,從2個方面加快內存檢測速度,一個是芯片級并行,另一個是訪存控制器級并行。對于芯片級并行,訪存帶寬越大并行效果越好,從一個芯片到并行檢測8個芯片,內存的檢測時間幾乎是呈線性遞減的。對于訪存控制器級并行,訪存控制器數量越多并行效果越好,從1個LMC到 2個LMC,內存的檢測時間幾乎減少了一倍。若結合使用2種方法會得到更好的加速效果,但是,在檢測同樣大小的內存時,訪存控制器級并行必須把內存分配到2個或更多的LMC上。
[1] 任愛玲, 凌 明, 吳光林, 等. 一種用于嵌入式內存測試的高效診斷算法[J]. 應用科學學報, 2005, 23(2): 178-182.
[2] 石 磊, 王小力. 一種基于存儲器故障原語的March測試算法研究[J]. 微電子學, 2009, 39(2): 251-255.
[3] Hamdioui S, Al-Ars Z, Goor A J. Testing Static and Dynamic Faults in Random Access Memories[C]//Proc. of the 20th IEEE VLSI Test Symposium. [S. l.]: IEEE Press, 2002: 395-400.
[4] Irobi S, Al-Ars Z, Hamdioui S. Detecting Memory Faults in the Presence of Bit Line Coupling in SRAM Devices[C]//Proc. of IEEE International Test Conference. Austin, USA: IEEE Press, 2010: 1-10.
[5] Hamdioui S, Al-Ars Z, Goor A J, et al. Linked Faults in Random Access Memories: Concept, Fault Models, Test Algorithms, and Industrial Results[J]. Computer-aided Design of Integrated Circuits and Systems, 2004, 23(5): 737-757.
[6] Hamdioui S, Goor A J, Rogers M. March SS: A Test for All Static Simple RAM Faults[C]//Proc. of IEEE International Workshop on Memory Technology, Design and Testing. [S. l.]: IEEE Press, 2002: 95-100.
[7] Al-Harbi S M, Noor F, Al-Turjman F M. March DSS: A New Diagnostic March Test for All Memory Simple Static Faults[J]. IEEE Trans. on Computer-aided Design of Integrated Circuits and Systems, 2007, 26(9): 1713-1720.
[8] Bosio A, Carlo S D, Natale G D, et al. March AB, A State- of-the-art March Test for Realistic Static Linked Faults and Dynamic Faults in SRAMs[J]. Computers & Digital Techniques, 2007, 1(3): 237-245.
[9] Harutunvan G, Vardanian V A,Zorian Y. Minimal March Tests for Unlinked Static Faults in Random Access Memories[C]// Proc. of the 23rd IEEE VLSI Test Symposium. [S. l.] IEEE Press, 2005: 53-59.
[10] 高 劍. 存儲器并行測試方法[J]. 電子測試, 2009, (2): 47-49.
[11] 吳光林, 胡 晨, 李 銳, 等. 一種并行內建自測試嵌入式SRAM方案[J]. 電路與系統學報, 2003, 10(8): 51-56.
[12] Sharma A. 先進半導體存儲器——結構, 設計與應用[M]. 曹 瑩, 孫 磊, 伍 冬, 等, 譯. 北京: 電子工業出版社, 2005.
[13] Cavium Networks. Cavium Networks OCTEON Plus CN54/ 5/6/7XX Hardware Reference Manual[Z]. 2009.
[14] Benso A, Member S, Bosio A. March Test Generation Revealed[J]. IEEE Trans. on Computers, 2008, 57(12): 1704- 1713.
編輯 顧逸斐
A Parallel Memory Fault Detection Scheme Combined with Hardware Characteristic
HU Die1, WU Jun-min1,2
(1. School of Computer Science and Technology, University of Science and Technology of China, Hefei 230027, China; 2. Suzhou Institute for Advanced Study, University of Science and Technology of China, Suzhou 215123, China)
March algorithms are designed very complex, and they are designed to be used to test memory chips, does not apply to the user. In order to solve above problems, this paper presents a parallel memory test method which utilizes the hardware features. It includes two parallel methods: one is chips-level parallel method which is designed according to the working principle of DDR2, and it can detect several memory chips. The other is Local Memory Controller(LMC)-level parallel method which is designed according to the working principle of memory controller, and it can detect several DDR2 memories. For chips-level parallel method, if more chips can be tested, the test time is faster. From testing one chip to eight chips, the test time is almost linearly decreasing. For LMC-level method, if there are more LMCs, the time is faster. From one LMC to two LMCs, the test time is reduced by almost doubled. Experimental results show that this method can greatly reduce the test time of the two algorithms, while still allow users to test memory.
fault model; March algorithm; DDR2 memory bank; chips-level parallel; memory controller level parallel
1000-3428(2014)03-0310-05
A
TP306
國家自然科學基金資助項目(61272132);中央高校基本科研業務費專項基金資助項目(WK0110000020);中國科學院計算技術研究所國家重點實驗室開放基金資助項目(CARCH201204)。
胡 蝶(1987-),女,碩士研究生,主研方向:計算機內存測試技術;吳俊敏,副教授。
2012-12-19
2013-02-27 E-mail:hudie@mail.ustc.edu.cn
10.3969/j.issn.1000-3428.2014.03.066