鄭曉東 楊潤豐 卞建勇 盧蕓
摘 要: 通信系統(tǒng)要求高穩(wěn)定性,但外部惡劣的電磁環(huán)境會導(dǎo)致基帶板所使用DSP中的存儲器發(fā)生單粒子翻轉(zhuǎn)(SEU),從而導(dǎo)致系統(tǒng)異常復(fù)位。針對該問題,著重介紹了如何應(yīng)用DSP的錯誤檢測與糾正(EDAC)功能,以及如何解決EDAC應(yīng)用與cache操作之間的沖突。通過實際應(yīng)用,基站出現(xiàn)SEU異常的機率明顯降低,系統(tǒng)穩(wěn)定性得到提高。
關(guān)鍵詞: 錯誤檢測與糾正; 單粒子翻轉(zhuǎn); 基帶板; 高速緩存
中圖分類號: TN710?34; TP368.1 文獻標(biāo)識碼: A 文章編號: 1004?373X(2014)05?0047?03
0 引 言
目前無線通信應(yīng)用極為廣泛,為了提高通信質(zhì)量和覆蓋區(qū)域,需要在不同的地區(qū)建立基站。在一些電磁環(huán)境比較惡劣的地點[1],或者受外部輻射影響[2],基站中的一些大規(guī)模集成電路常常會受到干擾,導(dǎo)致不能正常工作。德州儀器(TI)C64x+DSP在通信系統(tǒng)的基帶單板上具有廣泛應(yīng)用,在實際使用中,基帶板偶爾會出現(xiàn)異常復(fù)位,通過排查發(fā)現(xiàn)其中有些復(fù)位的原因是由于程序空間或數(shù)據(jù)空間的某個位發(fā)生了翻轉(zhuǎn),導(dǎo)致指令改寫或是所使用的數(shù)據(jù)錯誤,最終導(dǎo)致程序跑飛或資源沖突異常而復(fù)位。為了能夠?qū)ξ诲e誤的異常進行檢測和處理,引入了EDAC功能來提高系統(tǒng)的可靠性。
本文TI公司生產(chǎn)的C64x+系列DSP中的EDAC基本原理與其他芯片EDAC的實現(xiàn)原理相類似,均是以漢明碼為基礎(chǔ)實現(xiàn)糾檢錯功能[2?6],但也具有其自身的特點,首先對該DSP芯片的EDAC功能做一個簡要介紹。
1 C64x+EDAC功能說明
EDAC是TI C64x+DSP提供的用來對L1P和L2空間進行錯誤檢測和糾正的一項功能,該功能主要用來保護程序空間和不經(jīng)常更新的數(shù)據(jù)空間。當(dāng)對L1P、L2空間進行讀操作時,可以通過該功能來檢查此次讀取的數(shù)據(jù)是否發(fā)生某位錯誤的異常。如果發(fā)生了,則該功能可以對L1P空間的1位翻轉(zhuǎn)進行檢測;對L2 空間的1位的翻轉(zhuǎn)進行檢測與糾正,但多位的翻轉(zhuǎn)無法進行糾正,但是可以通過中斷事件通知CPU,CPU采取相應(yīng)的策略來降低基帶單板復(fù)位的風(fēng)險。
在DSP上電時EDAC功能是未使能的。當(dāng)錯誤檢測邏輯未使能時,對L1P、L2的寫操作將導(dǎo)致相關(guān)的有效位(valid bit)被清0??梢酝ㄟ^對寄存器設(shè)置來使能L1P、L2的錯誤檢測功能,同時也可以設(shè)置檢測L2空間的范圍。使能后,在寫操作的地址為256 b對齊,且數(shù)據(jù)長度為256 b時,將更新位于L2 RAM中存儲的校驗位和有效位,如果寫操作的數(shù)據(jù)小于256 b,則更新校驗位RAM空間相應(yīng)的有效位表明為“無效校驗位” [7?8]。
DSP通過漢明碼來檢查256 b內(nèi)的多位錯誤和糾正單位錯誤。在使能了EDAC功能后,CPU每次在對L1P、L2空間進行讀操作時,都會進行錯誤檢測,并且所有的讀操作都是256 b對齊。但在通過DMA/IDMA對L1P進行讀操作時,只有當(dāng)讀取的數(shù)據(jù)大小為256 b或256 b的整數(shù)倍時,才會進行EDAC的檢測。圖1是錯誤檢測的邏輯,從該邏輯圖中可以看到,錯誤檢測時先將讀到的256 b數(shù)據(jù)進行逐位異或計算的校驗位與寫操作時保存在L2 RAM中的校驗位進行異或比較,然后與有效位進行與操作,即最終的結(jié)果是由有效位和校驗位來共同決定的。
當(dāng)在進行讀取或DMA/IDMA讀訪問時檢測到位翻轉(zhuǎn)異常,則會輸出相應(yīng)的異常。L1P產(chǎn)生一種異常,L2空間能夠產(chǎn)生兩種異常,通過中斷處理器交給CPU進行異常處理。
2 EDAC功能實現(xiàn)
在調(diào)試EDAC功能的過程中,發(fā)現(xiàn)會發(fā)生SEU錯誤誤報的問題,通過定位和分析,確定與L2 cache 一致性(coherence)操作有關(guān),通過與TI溝通,確認芯片的EDAC存在一個缺陷,最終TI發(fā)布了勘誤表并給出了具體的原因和規(guī)避方法。
產(chǎn)生該問題的原因是:當(dāng)L2在進行cache 一致性操作時,如果在操作完成之前,CPU的操作產(chǎn)生L1d cache victim,那么L1d victim操作會錯誤地將L1d EDAC的有效位置為1,導(dǎo)致CPU在從L1d進行讀操作時EDAC會對L1d空間進行檢測,而之前L1d空間并沒有生成校驗數(shù)據(jù),從而使得EDAC錯誤的上報EDAC檢測到異常(雖然EDAC文檔中說其不監(jiān)測L1D空間,但是EDAC相關(guān)的有效位,校驗位仍存在,只是沒有去使用)。如果在cache操作的過程中存在CPU的操作,或者在cache操作的時候有中斷發(fā)生而進入中斷響應(yīng)函數(shù),這些都會導(dǎo)致產(chǎn)生L1d cache victim[9]。
2.1 EDAC缺陷的規(guī)避方法
根據(jù)TI提供的解決方法和DSP使用cache的實際情況,通過以下方法來進行規(guī)避。首先在所有的cache操作之前進行中斷屏蔽,其次使用cache操作的匯編函數(shù)來避免cache操作本身產(chǎn)生L1d victim。在使用中斷屏蔽時,要注意cache操作的數(shù)據(jù)長度,如果數(shù)據(jù)長度過長的話,為了避免中斷屏蔽時間過長,需要對cache維護的空間進行分段cache操作,然后對各個小段進行中斷屏蔽,這樣其他的中斷仍可以在各個小段之間被響應(yīng)。
2.2 EDAC功能初始化
在初始化過程中,基本過程為:
(1) 使用IDMA來擦除(scrub) L2 RAM空間,目的是將該空間對應(yīng)的EDAC有效位設(shè)為0(因為此時EDAC功能還沒有開啟);
(2) 清除L1p、L2的EDAC錯誤狀態(tài);
(3) 使能EDAC,并且設(shè)置EDAC監(jiān)測的L2 RAM范圍;
(4) 再次通過IDMA來擦除L2 RAM空間,目的是生成有效位和校驗位,第一次進行的操作由于還沒有使能EDAC功能,因此有效位為0,這樣就能保證EDAC使能后,第二次scrub操作時,由于有效位為0而不會進行EDAC的檢測。如果僅僅是在EDAC使能后進行scrub操作,那么可能會由于某些地址的有效位為1(第一次為隨機值)而產(chǎn)生校驗錯誤。
(5) 再次清除EDAC錯誤狀態(tài);
注意:scrub的時候不要對L2 cache空間進行操作,同時配置檢測空間時也不要配置L2 cache空間,cache空間EDAC會自動進行維護,不需要軟件介入。
在初始化過程中可以利用TI CSL庫中提供的EDAC相關(guān)的函數(shù),例如CSL_edcDisable()、CSL_edcEnable()、CSL_edcPageEnable()等函數(shù)來提高軟件開發(fā)速度。
2.3 EDAC中斷處理
對于EDAC中斷響應(yīng)函數(shù)。EDAC會產(chǎn)生三種類型的事件,如表1所示,分別是L1p 1位翻轉(zhuǎn),L2 1位翻轉(zhuǎn)以及L2 多位翻轉(zhuǎn),這三個事件可以通過ECM路由到同一個中斷,或者每個事件直接路由到某個可屏蔽中斷。這個可以根據(jù)實時性需要,以及當(dāng)前剩余可用可屏蔽中斷個數(shù)來決定。
下面說明各種類型EDAC異常的處理方式。
(1) 對于L2 多位翻轉(zhuǎn)(機率很低),EDAC也無能為力,遇到這種情況,可以直接上報嚴重告警,并復(fù)位DSP來解決。
(2) 對于L1p 的1 b翻轉(zhuǎn),糾正過程是:首先清除掉EDAC的所有錯誤狀態(tài)的標(biāo)志位;然后進行糾正,由于通常L1p全部設(shè)置為cache空間,所以對于L1p的糾正,只需要進行cache的invalidate操作即可,即從L2的代碼段空間重新讀取正確的代碼數(shù)據(jù),invalidate操作的起始地址為EDAC檢測到的錯誤地址,長度為L1p cache line。
(3)對于L2的1 b翻轉(zhuǎn),糾正過程是:首先清除掉EDAC的所有錯誤狀態(tài)的標(biāo)志位,如果對DSP代碼段進行了內(nèi)存保護,而糾正過程會有回寫糾正的操作,則需要在糾正代碼段之前先將當(dāng)前檢測到的錯誤地址所在頁(page)的內(nèi)存保護取消,然后進行糾正,糾正的操作很簡單只要對錯誤地址進行“讀—回寫”操作,EDAC硬件模塊就會自動完成,例如:EdacAddr是檢測到的錯誤地址,32字節(jié)對齊的,則可以使用IDMA進行讀寫操作來進行糾正。
中斷響應(yīng)函數(shù)處理的速度越快越好,如果ISR消耗的時間過長,可能會對后續(xù)代碼的運行造成影響。對于1位的錯誤其實完全可以不進中斷來糾正原始的代碼,因為在讀取的時候發(fā)現(xiàn)的1位翻轉(zhuǎn)在交給CPU的時候已經(jīng)是糾正后正確的值了,如果需要糾正L2中的數(shù)據(jù),那么可以在中斷中post一個信號量,然后在CPU空閑的時候來糾正L2原始數(shù)據(jù)。
3 結(jié) 語
隨著芯片集成度的增加,以及各類電子系統(tǒng)工作的電磁環(huán)境的日益惡化,各類芯片發(fā)生單粒子翻轉(zhuǎn)錯誤的可能性也在增加。因此越來越多的高性能DSP提供了EDAC功能,但之前并未見應(yīng)用DSP EDAC功能應(yīng)用的介紹。該文針對TI DSP的EDAC功能給出了具體使用方法,并且對TI DSP EDAC功能的缺陷給出了規(guī)避方法。目前該功能已正式在基站的基帶板中應(yīng)用,在1 000多個基站出現(xiàn)SEU異常的次數(shù)由原來的每月1~2例,減少到6個月未發(fā)現(xiàn)1例,系統(tǒng)穩(wěn)定性得到提高。
參考資料
[1] 李飛,張志敏,王巖飛.錯誤檢測與糾正電路的設(shè)計與實現(xiàn)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2003(2):34?39.
[2] 張路,賀興華,盧煥章.空間DSP加載系統(tǒng)可靠性設(shè)計[J].計算機工程,2010,36(5):15?17.
[3] 龔銳,陳微,劉芳,等.FT51:一種容軟錯誤高可靠微控制器[J].計算機學(xué)報,2007,30(10):1662?1673.
[4] 薛挺,張開峰,張哲.基于漢明碼的32位數(shù)據(jù)糾錯電路設(shè)計[J].空間電子技術(shù),2010(2):67?70.
[5] 林博.存儲芯片糾檢錯電路設(shè)計與FPGA實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007.
[6] 陳微.高可靠性微處理器設(shè)計關(guān)鍵技術(shù)研究與實現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2006.
[7] Texas Instruments. Error detection and correction (EDC) mechanism of C64x+ memories [M]. USA: Texas Instruments, 2010.
[8] Texas Instruments. TMS320C66x DSP CorePac user′s guide [EB/OL]. [[2011?07?07].] http://www.ti.com/lit/ug/sprugw0b/sprugw0b.
[9] Texas Instruments. TMS320TCI6487/8 digital signal processor silicon revisions 2.1, 2.0, 1.3, 1.2, 1.1, 1.0 [EB/OL]. [2011?03?12].http://www.ti.com/lit/er/sprz248h/sprz248h.pdf.
(5) 再次清除EDAC錯誤狀態(tài);
注意:scrub的時候不要對L2 cache空間進行操作,同時配置檢測空間時也不要配置L2 cache空間,cache空間EDAC會自動進行維護,不需要軟件介入。
在初始化過程中可以利用TI CSL庫中提供的EDAC相關(guān)的函數(shù),例如CSL_edcDisable()、CSL_edcEnable()、CSL_edcPageEnable()等函數(shù)來提高軟件開發(fā)速度。
2.3 EDAC中斷處理
對于EDAC中斷響應(yīng)函數(shù)。EDAC會產(chǎn)生三種類型的事件,如表1所示,分別是L1p 1位翻轉(zhuǎn),L2 1位翻轉(zhuǎn)以及L2 多位翻轉(zhuǎn),這三個事件可以通過ECM路由到同一個中斷,或者每個事件直接路由到某個可屏蔽中斷。這個可以根據(jù)實時性需要,以及當(dāng)前剩余可用可屏蔽中斷個數(shù)來決定。
下面說明各種類型EDAC異常的處理方式。
(1) 對于L2 多位翻轉(zhuǎn)(機率很低),EDAC也無能為力,遇到這種情況,可以直接上報嚴重告警,并復(fù)位DSP來解決。
(2) 對于L1p 的1 b翻轉(zhuǎn),糾正過程是:首先清除掉EDAC的所有錯誤狀態(tài)的標(biāo)志位;然后進行糾正,由于通常L1p全部設(shè)置為cache空間,所以對于L1p的糾正,只需要進行cache的invalidate操作即可,即從L2的代碼段空間重新讀取正確的代碼數(shù)據(jù),invalidate操作的起始地址為EDAC檢測到的錯誤地址,長度為L1p cache line。
(3)對于L2的1 b翻轉(zhuǎn),糾正過程是:首先清除掉EDAC的所有錯誤狀態(tài)的標(biāo)志位,如果對DSP代碼段進行了內(nèi)存保護,而糾正過程會有回寫糾正的操作,則需要在糾正代碼段之前先將當(dāng)前檢測到的錯誤地址所在頁(page)的內(nèi)存保護取消,然后進行糾正,糾正的操作很簡單只要對錯誤地址進行“讀—回寫”操作,EDAC硬件模塊就會自動完成,例如:EdacAddr是檢測到的錯誤地址,32字節(jié)對齊的,則可以使用IDMA進行讀寫操作來進行糾正。
中斷響應(yīng)函數(shù)處理的速度越快越好,如果ISR消耗的時間過長,可能會對后續(xù)代碼的運行造成影響。對于1位的錯誤其實完全可以不進中斷來糾正原始的代碼,因為在讀取的時候發(fā)現(xiàn)的1位翻轉(zhuǎn)在交給CPU的時候已經(jīng)是糾正后正確的值了,如果需要糾正L2中的數(shù)據(jù),那么可以在中斷中post一個信號量,然后在CPU空閑的時候來糾正L2原始數(shù)據(jù)。
3 結(jié) 語
隨著芯片集成度的增加,以及各類電子系統(tǒng)工作的電磁環(huán)境的日益惡化,各類芯片發(fā)生單粒子翻轉(zhuǎn)錯誤的可能性也在增加。因此越來越多的高性能DSP提供了EDAC功能,但之前并未見應(yīng)用DSP EDAC功能應(yīng)用的介紹。該文針對TI DSP的EDAC功能給出了具體使用方法,并且對TI DSP EDAC功能的缺陷給出了規(guī)避方法。目前該功能已正式在基站的基帶板中應(yīng)用,在1 000多個基站出現(xiàn)SEU異常的次數(shù)由原來的每月1~2例,減少到6個月未發(fā)現(xiàn)1例,系統(tǒng)穩(wěn)定性得到提高。
參考資料
[1] 李飛,張志敏,王巖飛.錯誤檢測與糾正電路的設(shè)計與實現(xiàn)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2003(2):34?39.
[2] 張路,賀興華,盧煥章.空間DSP加載系統(tǒng)可靠性設(shè)計[J].計算機工程,2010,36(5):15?17.
[3] 龔銳,陳微,劉芳,等.FT51:一種容軟錯誤高可靠微控制器[J].計算機學(xué)報,2007,30(10):1662?1673.
[4] 薛挺,張開峰,張哲.基于漢明碼的32位數(shù)據(jù)糾錯電路設(shè)計[J].空間電子技術(shù),2010(2):67?70.
[5] 林博.存儲芯片糾檢錯電路設(shè)計與FPGA實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007.
[6] 陳微.高可靠性微處理器設(shè)計關(guān)鍵技術(shù)研究與實現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2006.
[7] Texas Instruments. Error detection and correction (EDC) mechanism of C64x+ memories [M]. USA: Texas Instruments, 2010.
[8] Texas Instruments. TMS320C66x DSP CorePac user′s guide [EB/OL]. [[2011?07?07].] http://www.ti.com/lit/ug/sprugw0b/sprugw0b.
[9] Texas Instruments. TMS320TCI6487/8 digital signal processor silicon revisions 2.1, 2.0, 1.3, 1.2, 1.1, 1.0 [EB/OL]. [2011?03?12].http://www.ti.com/lit/er/sprz248h/sprz248h.pdf.
(5) 再次清除EDAC錯誤狀態(tài);
注意:scrub的時候不要對L2 cache空間進行操作,同時配置檢測空間時也不要配置L2 cache空間,cache空間EDAC會自動進行維護,不需要軟件介入。
在初始化過程中可以利用TI CSL庫中提供的EDAC相關(guān)的函數(shù),例如CSL_edcDisable()、CSL_edcEnable()、CSL_edcPageEnable()等函數(shù)來提高軟件開發(fā)速度。
2.3 EDAC中斷處理
對于EDAC中斷響應(yīng)函數(shù)。EDAC會產(chǎn)生三種類型的事件,如表1所示,分別是L1p 1位翻轉(zhuǎn),L2 1位翻轉(zhuǎn)以及L2 多位翻轉(zhuǎn),這三個事件可以通過ECM路由到同一個中斷,或者每個事件直接路由到某個可屏蔽中斷。這個可以根據(jù)實時性需要,以及當(dāng)前剩余可用可屏蔽中斷個數(shù)來決定。
下面說明各種類型EDAC異常的處理方式。
(1) 對于L2 多位翻轉(zhuǎn)(機率很低),EDAC也無能為力,遇到這種情況,可以直接上報嚴重告警,并復(fù)位DSP來解決。
(2) 對于L1p 的1 b翻轉(zhuǎn),糾正過程是:首先清除掉EDAC的所有錯誤狀態(tài)的標(biāo)志位;然后進行糾正,由于通常L1p全部設(shè)置為cache空間,所以對于L1p的糾正,只需要進行cache的invalidate操作即可,即從L2的代碼段空間重新讀取正確的代碼數(shù)據(jù),invalidate操作的起始地址為EDAC檢測到的錯誤地址,長度為L1p cache line。
(3)對于L2的1 b翻轉(zhuǎn),糾正過程是:首先清除掉EDAC的所有錯誤狀態(tài)的標(biāo)志位,如果對DSP代碼段進行了內(nèi)存保護,而糾正過程會有回寫糾正的操作,則需要在糾正代碼段之前先將當(dāng)前檢測到的錯誤地址所在頁(page)的內(nèi)存保護取消,然后進行糾正,糾正的操作很簡單只要對錯誤地址進行“讀—回寫”操作,EDAC硬件模塊就會自動完成,例如:EdacAddr是檢測到的錯誤地址,32字節(jié)對齊的,則可以使用IDMA進行讀寫操作來進行糾正。
中斷響應(yīng)函數(shù)處理的速度越快越好,如果ISR消耗的時間過長,可能會對后續(xù)代碼的運行造成影響。對于1位的錯誤其實完全可以不進中斷來糾正原始的代碼,因為在讀取的時候發(fā)現(xiàn)的1位翻轉(zhuǎn)在交給CPU的時候已經(jīng)是糾正后正確的值了,如果需要糾正L2中的數(shù)據(jù),那么可以在中斷中post一個信號量,然后在CPU空閑的時候來糾正L2原始數(shù)據(jù)。
3 結(jié) 語
隨著芯片集成度的增加,以及各類電子系統(tǒng)工作的電磁環(huán)境的日益惡化,各類芯片發(fā)生單粒子翻轉(zhuǎn)錯誤的可能性也在增加。因此越來越多的高性能DSP提供了EDAC功能,但之前并未見應(yīng)用DSP EDAC功能應(yīng)用的介紹。該文針對TI DSP的EDAC功能給出了具體使用方法,并且對TI DSP EDAC功能的缺陷給出了規(guī)避方法。目前該功能已正式在基站的基帶板中應(yīng)用,在1 000多個基站出現(xiàn)SEU異常的次數(shù)由原來的每月1~2例,減少到6個月未發(fā)現(xiàn)1例,系統(tǒng)穩(wěn)定性得到提高。
參考資料
[1] 李飛,張志敏,王巖飛.錯誤檢測與糾正電路的設(shè)計與實現(xiàn)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2003(2):34?39.
[2] 張路,賀興華,盧煥章.空間DSP加載系統(tǒng)可靠性設(shè)計[J].計算機工程,2010,36(5):15?17.
[3] 龔銳,陳微,劉芳,等.FT51:一種容軟錯誤高可靠微控制器[J].計算機學(xué)報,2007,30(10):1662?1673.
[4] 薛挺,張開峰,張哲.基于漢明碼的32位數(shù)據(jù)糾錯電路設(shè)計[J].空間電子技術(shù),2010(2):67?70.
[5] 林博.存儲芯片糾檢錯電路設(shè)計與FPGA實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007.
[6] 陳微.高可靠性微處理器設(shè)計關(guān)鍵技術(shù)研究與實現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2006.
[7] Texas Instruments. Error detection and correction (EDC) mechanism of C64x+ memories [M]. USA: Texas Instruments, 2010.
[8] Texas Instruments. TMS320C66x DSP CorePac user′s guide [EB/OL]. [[2011?07?07].] http://www.ti.com/lit/ug/sprugw0b/sprugw0b.
[9] Texas Instruments. TMS320TCI6487/8 digital signal processor silicon revisions 2.1, 2.0, 1.3, 1.2, 1.1, 1.0 [EB/OL]. [2011?03?12].http://www.ti.com/lit/er/sprz248h/sprz248h.pdf.