鄭曉亮 戴瀾
【摘要】存儲器內置自測試是嵌入式存儲器測試的一種極為重要的方法,本文以ROM測試作為研究的對象。而CRC碼(循環(huán)校驗碼)是一種在實際通信中應用很廣泛的差錯控制編碼,具有很強的檢錯能力,可以很好的完成Rom內容的校驗測試。本文把CRC串行運算方法作為依據(jù),連續(xù)完成8bit串行運算作為一個單元,實現(xiàn)了8bitCRC并行運算,并通過邏輯推理和運算,給出了Verilog HDL語言的邏輯表達式。最后,基于CRC算法提出了一種Rom測試的設計方案。
【關鍵詞】CRC;ROM;BIST;Verilog HDL
引言?
隨著soc技術的不斷發(fā)展,嵌入式存儲器所占的面積也已經(jīng)超過了60%以上。因為存儲器的單元排列非常緊密,導致產生的故障類型多種多樣,并且嵌入式存儲器比邏輯模塊具有更高的復雜度和更多的共用信號,所以產生故障的可能性就更高。這種趨勢不但增加軟硬件協(xié)同設計的難度,而且在芯片的成品率控制和故障檢測方面也引發(fā)了新的技術難題??焖俣咝У貙Υ鎯ζ鳒y試,是批量存儲器測試的一個重要課題[1]。
內建自測試已被認為是用于嵌入式存儲器測試的一種極為重要的方法。存儲器內置自測試(BIST)是 SoC 設計中用來測試嵌入式存儲器的標準技術,它以合理的面積開銷來對單個嵌入式存儲器進行徹底的測試[2][3]。內建自測試即芯片內部自行測試,是可測性的一種實現(xiàn)方式。
論文對ROM測試的方法進行研究,以CRC-CCITT校驗算法作為基礎,用CRC校驗的方式完成ROM內容的校驗,并設計RomBist電路。
1.CRC校驗算法
循環(huán)校驗碼(CRC碼),是數(shù)據(jù)通信領域中最常用的一種差錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。CRC校驗碼的基本思想是利用線性編碼理論,在發(fā)送方根據(jù)要傳送的k位二進制碼序列,以一定的規(guī)則產生一個校驗用的監(jiān)督碼(既CRC碼)r位,并附在信息后邊,構成一個新的二進制碼序列數(shù)共(k+r)位,最后發(fā)送出去。在接收端,則根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進行檢驗,以確定傳送中是否出錯。下表列出了一些常見于標準的CRC多項式[4][5][6]。
表1 常見標準CRC
名稱 生成多項式 簡記式 應用舉例
CRC-4 X4+X1+1 3 ITU G 704
CRC-12 X12+X11+X3+X+1
CRC-16 X16+X15+X+1 8005 IBM SDLC
CRC-CCITT X16+X12+X5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 X32+X26+X23+…+X2+X+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP- FCS
CRC-32C X32+X28+X27+…+X8+X6+1 1EDC6F41 SCTP
2.8位并行CRC算法
CRC-CCITT算法的多項式為X^16+X^12+X^5+1,計算CRC實際上是將數(shù)據(jù)通過線性反饋移位寄存器,所有數(shù)據(jù)移入后CRC寄存器的值即為16位CRC。原理如下圖所示,其中C15-C0為線性反饋移位寄存器R15-R0的初始值,數(shù)據(jù)按位移入CRC線性移位寄存器,CRC移位寄存器的依次右移一位,移出位C0與新移入的數(shù)據(jù)D0異或作為R15寄存器的新值,C11、C0與D0異或的值作為R10寄存器的新值,C4、C0與D0異或的值作為R3寄存器的新值,依次類推完成CRC運算(見圖1)。
ROM存儲器是按照byte操作,每次讀取1byte數(shù)據(jù)(8bit數(shù)據(jù)),需要把上述串行移位運算轉化為并行運算,相當于一次并行運算就得到了串行移位運算時需要8bit移位所得的結果。每個時鐘完成8bit數(shù)據(jù)的CRC值計算,下一個8bit數(shù)據(jù)到來時,把上一個8bit數(shù)據(jù)的CRC值C15-C0作為初值,繼續(xù)完成并行CRC計算,即每次處理1byte),如表1所示。
串并行運算推移圖中,Ri為CRC移位寄存器(R0為低位),Ci為CRC移位寄存器的初值(C0為低位),Di為輸入數(shù)據(jù)(D0為低位),Xi=Di^Ci,同一欄中數(shù)據(jù)的關系是異或。可得表2——8位并行計算的CRC16邏輯關系式。
表2 8位并行計算的CRC16邏輯關系式
R0=C8^X4^X0 R8=X0^X5^X1
R1=C9^X5^X1 R9=X1^X6^X2
R2=C10^X6^X2 R10=X2^X7^X3
R3=C11^X0^X7^X3 R11=X3
R4=C12^X1 R12=X4^X0
R5=C13^X2 R13=X5^X1
R6=C14^X3 R14=X6^X2
R7=C15^X4^X0 R15=X7^X3
3.Verilog HDL邏輯表達式
使用Verilog HDL硬件描述語言實現(xiàn)上述算法,設:
crc_low[7:0]為低8位移位寄存器R7~R0;
crc_high[7:0]為高8位移位寄存器R15~R8;
t_rom_d[7:0]為8位輸入數(shù)據(jù)D7~D0。
crc_cal[7:0]為8位中間變量寄存器[7]。
由8位并行CRC16邏輯關系式可知,寄存器中的值為Xi和Ci的組合,首先,利用Xi<=Di^Ci的關系,得出X7~X0。
crc_cal[7:0]<=crc_low[7:0]^t_rom_d[7:0];
crc_cal[7:0] X7 X6 X5 X4 X3 X2 X1 X0
其次,根據(jù)R15~R12,R10~R7,R3~R0可知,Xi^X(i+4)成對出現(xiàn)。
crc_cal[7:4]<=crc_cal[7:4]^crc_cal[3:0]
crc_cal[7:0] X7^X3 X6^X2 X5^X1 X4^X0 X3 X2 X1 X0
可以推導出crc_low[7:0]和crc_high[7:0]的表達式,如下所示。
crc_low[7:4]<=crc_high[7:4]^crc_cal[4:1];
crc_low[3]<=crc_high[3]^crc_cal[0]^crc_cal[7];
crc_low[2:0]<=crc_high[2:0]^crc_cal[6:4];
crc_high[7:3] <= crc_cal[7:3];
crc_high[2:0]<=crc_cal[2:0]^crc_cal[7:5];
4.Rom Bist設計
只讀存儲器ROM(Read only Memory)。只讀存儲器是能對其存儲的內容讀出,而不能對其重新寫入的存儲器。這種存儲器一旦存入了原始信息后,在程序執(zhí)行過程中,只能將內部信息讀出,而不能隨意重新寫入新的信息去改變原始信息。因此,通常用它存放固定不變的程序、常數(shù)以及漢字字庫,甚至用于操作系統(tǒng)的固化。芯片電源掉電后,存儲器數(shù)據(jù)不丟失。存儲器中的數(shù)據(jù)在wafer制造時利用光刻工藝掩膜(mask)進行編程,一旦制造完成,其內容不能被改變。
圖2 Rom Bist 結構圖
芯片收到ROM測試命令后,接收外部輸入16位數(shù)據(jù)Date[15:0]作為CRC校驗的標準值。TE_RomBist信號被置為1,ROMbist開始工作,Done信號置為0,F(xiàn)ail信號置為1,產生ROM的地址、片選信號和讀寫使能信號,讀取ROM內容進行CRC校驗運算,CRC寄存器初始值為16hFFFF,ROM中所有數(shù)據(jù)校驗運算完畢后,使用運算結果crc_low和crc_high,與標準值進行對比,把Done信號置為1,表示測試結束,對比成功,F(xiàn)ail置為0,通過ROM測試,對比不成功,F(xiàn)ail信號置為1,測試失敗。
5.結論
論文通過對CRC校驗算法的研究,完了串行CRC校驗到并行CRC校驗的轉化,使用Verilog HDL硬件描述語言完成了算法的實現(xiàn),得到了CRC校驗算法的邏輯表達式,可以在一個時鐘周期完成8bit CRC并行運算。并給出了一種RomBist電路的方案,實現(xiàn)了基于CRC校驗算法的RomBist設計。
參考文獻
[1]徐金榮.基于BIST的嵌入式存儲器可測性設計研究[D].北京交通大學碩士學位論文,2008:12-25.
[2]姚俊.基于BIST的嵌入式存儲器可測性設計算法研究[D].哈爾濱工程大學碩士學位論文,2007:13-21
[3]李文琦.高性能MemoryBIST設計實例[D].上海交通大學碩士學位論文,2007:3-5.
[4]朱榮華.一種CRC 并行計算原理及實現(xiàn)方法[J].電子學報,1999,27(4):143-145.
[5]李永忠.通用并行CRC 計算原理及其硬件實現(xiàn)方法[J].西北民族學院學報:自然科學版,2002,23(1):33-37.
[6]黃維超,劉橋,黃初華.基于Verilog的CRC并行實現(xiàn)[J].微計算機信息,2009,25(10):112-113.
[7]夏寧聞.Verilog數(shù)字系統(tǒng)設計教程(第二版)[M].北京:北京航空航大人學出版社,2008:26-49.