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