APP下载

DSP错误检测与纠正功能在基站中的应用

2014-03-12郑晓东杨润丰卞建勇卢芸

现代电子技术 2014年5期

郑晓东 杨润丰 卞建勇 卢芸

摘 要: 通信系统要求高稳定性,但外部恶劣的电磁环境会导致基带板所使用DSP中的存储器发生单粒子翻转(SEU),从而导致系统异常复位。针对该问题,着重介绍了如何应用DSP的错误检测与纠正(EDAC)功能,以及如何解决EDAC应用与cache操作之间的冲突。通过实际应用,基站出现SEU异常的机率明显降低,系统稳定性得到提高。

关键词: 错误检测与纠正; 单粒子翻转; 基带板; 高速缓存

中图分类号: TN710?34; TP368.1 文献标识码: A 文章编号: 1004?373X(2014)05?0047?03

0 引 言

目前无线通信应用极为广泛,为了提高通信质量和覆盖区域,需要在不同的地区建立基站。在一些电磁环境比较恶劣的地点[1],或者受外部辐射影响[2],基站中的一些大规模集成电路常常会受到干扰,导致不能正常工作。德州仪器(TI)C64x+DSP在通信系统的基带单板上具有广泛应用,在实际使用中,基带板偶尔会出现异常复位,通过排查发现其中有些复位的原因是由于程序空间或数据空间的某个位发生了翻转,导致指令改写或是所使用的数据错误,最终导致程序跑飞或资源冲突异常而复位。为了能够对位错误的异常进行检测和处理,引入了EDAC功能来提高系统的可靠性。

本文TI公司生产的C64x+系列DSP中的EDAC基本原理与其他芯片EDAC的实现原理相类似,均是以汉明码为基础实现纠检错功能[2?6],但也具有其自身的特点,首先对该DSP芯片的EDAC功能做一个简要介绍。

1 C64x+EDAC功能说明

EDAC是TI C64x+DSP提供的用来对L1P和L2空间进行错误检测和纠正的一项功能,该功能主要用来保护程序空间和不经常更新的数据空间。当对L1P、L2空间进行读操作时,可以通过该功能来检查此次读取的数据是否发生某位错误的异常。如果发生了,则该功能可以对L1P空间的1位翻转进行检测;对L2 空间的1位的翻转进行检测与纠正,但多位的翻转无法进行纠正,但是可以通过中断事件通知CPU,CPU采取相应的策略来降低基带单板复位的风险。

在DSP上电时EDAC功能是未使能的。当错误检测逻辑未使能时,对L1P、L2的写操作将导致相关的有效位(valid bit)被清0。可以通过对寄存器设置来使能L1P、L2的错误检测功能,同时也可以设置检测L2空间的范围。使能后,在写操作的地址为256 b对齐,且数据长度为256 b时,将更新位于L2 RAM中存储的校验位和有效位,如果写操作的数据小于256 b,则更新校验位RAM空间相应的有效位表明为“无效校验位” [7?8]。

DSP通过汉明码来检查256 b内的多位错误和纠正单位错误。在使能了EDAC功能后,CPU每次在对L1P、L2空间进行读操作时,都会进行错误检测,并且所有的读操作都是256 b对齐。但在通过DMA/IDMA对L1P进行读操作时,只有当读取的数据大小为256 b或256 b的整数倍时,才会进行EDAC的检测。图1是错误检测的逻辑,从该逻辑图中可以看到,错误检测时先将读到的256 b数据进行逐位异或计算的校验位与写操作时保存在L2 RAM中的校验位进行异或比较,然后与有效位进行与操作,即最终的结果是由有效位和校验位来共同决定的。

当在进行读取或DMA/IDMA读访问时检测到位翻转异常,则会输出相应的异常。L1P产生一种异常,L2空间能够产生两种异常,通过中断处理器交给CPU进行异常处理。

2 EDAC功能实现

在调试EDAC功能的过程中,发现会发生SEU错误误报的问题,通过定位和分析,确定与L2 cache 一致性(coherence)操作有关,通过与TI沟通,确认芯片的EDAC存在一个缺陷,最终TI发布了勘误表并给出了具体的原因和规避方法。

产生该问题的原因是:当L2在进行cache 一致性操作时,如果在操作完成之前,CPU的操作产生L1d cache victim,那么L1d victim操作会错误地将L1d EDAC的有效位置为1,导致CPU在从L1d进行读操作时EDAC会对L1d空间进行检测,而之前L1d空间并没有生成校验数据,从而使得EDAC错误的上报EDAC检测到异常(虽然EDAC文档中说其不监测L1D空间,但是EDAC相关的有效位,校验位仍存在,只是没有去使用)。如果在cache操作的过程中存在CPU的操作,或者在cache操作的时候有中断发生而进入中断响应函数,这些都会导致产生L1d cache victim[9]。

2.1 EDAC缺陷的规避方法

根据TI提供的解决方法和DSP使用cache的实际情况,通过以下方法来进行规避。首先在所有的cache操作之前进行中断屏蔽,其次使用cache操作的汇编函数来避免cache操作本身产生L1d victim。在使用中断屏蔽时,要注意cache操作的数据长度,如果数据长度过长的话,为了避免中断屏蔽时间过长,需要对cache维护的空间进行分段cache操作,然后对各个小段进行中断屏蔽,这样其他的中断仍可以在各个小段之间被响应。

2.2 EDAC功能初始化

在初始化过程中,基本过程为:

(1) 使用IDMA来擦除(scrub) L2 RAM空间,目的是将该空间对应的EDAC有效位设为0(因为此时EDAC功能还没有开启);

(2) 清除L1p、L2的EDAC错误状态;

(3) 使能EDAC,并且设置EDAC监测的L2 RAM范围;

(4) 再次通过IDMA来擦除L2 RAM空间,目的是生成有效位和校验位,第一次进行的操作由于还没有使能EDAC功能,因此有效位为0,这样就能保证EDAC使能后,第二次scrub操作时,由于有效位为0而不会进行EDAC的检测。如果仅仅是在EDAC使能后进行scrub操作,那么可能会由于某些地址的有效位为1(第一次为随机值)而产生校验错误。

(5) 再次清除EDAC错误状态;

注意:scrub的时候不要对L2 cache空间进行操作,同时配置检测空间时也不要配置L2 cache空间,cache空间EDAC会自动进行维护,不需要软件介入。

在初始化过程中可以利用TI CSL库中提供的EDAC相关的函数,例如CSL_edcDisable()、CSL_edcEnable()、CSL_edcPageEnable()等函数来提高软件开发速度。

2.3 EDAC中断处理

对于EDAC中断响应函数。EDAC会产生三种类型的事件,如表1所示,分别是L1p 1位翻转,L2 1位翻转以及L2 多位翻转,这三个事件可以通过ECM路由到同一个中断,或者每个事件直接路由到某个可屏蔽中断。这个可以根据实时性需要,以及当前剩余可用可屏蔽中断个数来决定。

下面说明各种类型EDAC异常的处理方式。

(1) 对于L2 多位翻转(机率很低),EDAC也无能为力,遇到这种情况,可以直接上报严重告警,并复位DSP来解决。

(2) 对于L1p 的1 b翻转,纠正过程是:首先清除掉EDAC的所有错误状态的标志位;然后进行纠正,由于通常L1p全部设置为cache空间,所以对于L1p的纠正,只需要进行cache的invalidate操作即可,即从L2的代码段空间重新读取正确的代码数据,invalidate操作的起始地址为EDAC检测到的错误地址,长度为L1p cache line。

(3)对于L2的1 b翻转,纠正过程是:首先清除掉EDAC的所有错误状态的标志位,如果对DSP代码段进行了内存保护,而纠正过程会有回写纠正的操作,则需要在纠正代码段之前先将当前检测到的错误地址所在页(page)的内存保护取消,然后进行纠正,纠正的操作很简单只要对错误地址进行“读—回写”操作,EDAC硬件模块就会自动完成,例如:EdacAddr是检测到的错误地址,32字节对齐的,则可以使用IDMA进行读写操作来进行纠正。

中断响应函数处理的速度越快越好,如果ISR消耗的时间过长,可能会对后续代码的运行造成影响。对于1位的错误其实完全可以不进中断来纠正原始的代码,因为在读取的时候发现的1位翻转在交给CPU的时候已经是纠正后正确的值了,如果需要纠正L2中的数据,那么可以在中断中post一个信号量,然后在CPU空闲的时候来纠正L2原始数据。

3 结 语

随着芯片集成度的增加,以及各类电子系统工作的电磁环境的日益恶化,各类芯片发生单粒子翻转错误的可能性也在增加。因此越来越多的高性能DSP提供了EDAC功能,但之前并未见应用DSP EDAC功能应用的介绍。该文针对TI DSP的EDAC功能给出了具体使用方法,并且对TI DSP EDAC功能的缺陷给出了规避方法。目前该功能已正式在基站的基带板中应用,在1 000多个基站出现SEU异常的次数由原来的每月1~2例,减少到6个月未发现1例,系统稳定性得到提高。

参考资料

[1] 李飞,张志敏,王岩飞.错误检测与纠正电路的设计与实现[J].单片机与嵌入式系统应用,2003(2):34?39.

[2] 张路,贺兴华,卢焕章.空间DSP加载系统可靠性设计[J].计算机工程,2010,36(5):15?17.

[3] 龚锐,陈微,刘芳,等.FT51:一种容软错误高可靠微控制器[J].计算机学报,2007,30(10):1662?1673.

[4] 薛挺,张开峰,张哲.基于汉明码的32位数据纠错电路设计[J].空间电子技术,2010(2):67?70.

[5] 林博.存储芯片纠检错电路设计与FPGA实现[D].哈尔滨:哈尔滨工业大学,2007.

[6] 陈微.高可靠性微处理器设计关键技术研究与实现[D].长沙:国防科学技术大学,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错误状态;

注意:scrub的时候不要对L2 cache空间进行操作,同时配置检测空间时也不要配置L2 cache空间,cache空间EDAC会自动进行维护,不需要软件介入。

在初始化过程中可以利用TI CSL库中提供的EDAC相关的函数,例如CSL_edcDisable()、CSL_edcEnable()、CSL_edcPageEnable()等函数来提高软件开发速度。

2.3 EDAC中断处理

对于EDAC中断响应函数。EDAC会产生三种类型的事件,如表1所示,分别是L1p 1位翻转,L2 1位翻转以及L2 多位翻转,这三个事件可以通过ECM路由到同一个中断,或者每个事件直接路由到某个可屏蔽中断。这个可以根据实时性需要,以及当前剩余可用可屏蔽中断个数来决定。

下面说明各种类型EDAC异常的处理方式。

(1) 对于L2 多位翻转(机率很低),EDAC也无能为力,遇到这种情况,可以直接上报严重告警,并复位DSP来解决。

(2) 对于L1p 的1 b翻转,纠正过程是:首先清除掉EDAC的所有错误状态的标志位;然后进行纠正,由于通常L1p全部设置为cache空间,所以对于L1p的纠正,只需要进行cache的invalidate操作即可,即从L2的代码段空间重新读取正确的代码数据,invalidate操作的起始地址为EDAC检测到的错误地址,长度为L1p cache line。

(3)对于L2的1 b翻转,纠正过程是:首先清除掉EDAC的所有错误状态的标志位,如果对DSP代码段进行了内存保护,而纠正过程会有回写纠正的操作,则需要在纠正代码段之前先将当前检测到的错误地址所在页(page)的内存保护取消,然后进行纠正,纠正的操作很简单只要对错误地址进行“读—回写”操作,EDAC硬件模块就会自动完成,例如:EdacAddr是检测到的错误地址,32字节对齐的,则可以使用IDMA进行读写操作来进行纠正。

中断响应函数处理的速度越快越好,如果ISR消耗的时间过长,可能会对后续代码的运行造成影响。对于1位的错误其实完全可以不进中断来纠正原始的代码,因为在读取的时候发现的1位翻转在交给CPU的时候已经是纠正后正确的值了,如果需要纠正L2中的数据,那么可以在中断中post一个信号量,然后在CPU空闲的时候来纠正L2原始数据。

3 结 语

随着芯片集成度的增加,以及各类电子系统工作的电磁环境的日益恶化,各类芯片发生单粒子翻转错误的可能性也在增加。因此越来越多的高性能DSP提供了EDAC功能,但之前并未见应用DSP EDAC功能应用的介绍。该文针对TI DSP的EDAC功能给出了具体使用方法,并且对TI DSP EDAC功能的缺陷给出了规避方法。目前该功能已正式在基站的基带板中应用,在1 000多个基站出现SEU异常的次数由原来的每月1~2例,减少到6个月未发现1例,系统稳定性得到提高。

参考资料

[1] 李飞,张志敏,王岩飞.错误检测与纠正电路的设计与实现[J].单片机与嵌入式系统应用,2003(2):34?39.

[2] 张路,贺兴华,卢焕章.空间DSP加载系统可靠性设计[J].计算机工程,2010,36(5):15?17.

[3] 龚锐,陈微,刘芳,等.FT51:一种容软错误高可靠微控制器[J].计算机学报,2007,30(10):1662?1673.

[4] 薛挺,张开峰,张哲.基于汉明码的32位数据纠错电路设计[J].空间电子技术,2010(2):67?70.

[5] 林博.存储芯片纠检错电路设计与FPGA实现[D].哈尔滨:哈尔滨工业大学,2007.

[6] 陈微.高可靠性微处理器设计关键技术研究与实现[D].长沙:国防科学技术大学,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错误状态;

注意:scrub的时候不要对L2 cache空间进行操作,同时配置检测空间时也不要配置L2 cache空间,cache空间EDAC会自动进行维护,不需要软件介入。

在初始化过程中可以利用TI CSL库中提供的EDAC相关的函数,例如CSL_edcDisable()、CSL_edcEnable()、CSL_edcPageEnable()等函数来提高软件开发速度。

2.3 EDAC中断处理

对于EDAC中断响应函数。EDAC会产生三种类型的事件,如表1所示,分别是L1p 1位翻转,L2 1位翻转以及L2 多位翻转,这三个事件可以通过ECM路由到同一个中断,或者每个事件直接路由到某个可屏蔽中断。这个可以根据实时性需要,以及当前剩余可用可屏蔽中断个数来决定。

下面说明各种类型EDAC异常的处理方式。

(1) 对于L2 多位翻转(机率很低),EDAC也无能为力,遇到这种情况,可以直接上报严重告警,并复位DSP来解决。

(2) 对于L1p 的1 b翻转,纠正过程是:首先清除掉EDAC的所有错误状态的标志位;然后进行纠正,由于通常L1p全部设置为cache空间,所以对于L1p的纠正,只需要进行cache的invalidate操作即可,即从L2的代码段空间重新读取正确的代码数据,invalidate操作的起始地址为EDAC检测到的错误地址,长度为L1p cache line。

(3)对于L2的1 b翻转,纠正过程是:首先清除掉EDAC的所有错误状态的标志位,如果对DSP代码段进行了内存保护,而纠正过程会有回写纠正的操作,则需要在纠正代码段之前先将当前检测到的错误地址所在页(page)的内存保护取消,然后进行纠正,纠正的操作很简单只要对错误地址进行“读—回写”操作,EDAC硬件模块就会自动完成,例如:EdacAddr是检测到的错误地址,32字节对齐的,则可以使用IDMA进行读写操作来进行纠正。

中断响应函数处理的速度越快越好,如果ISR消耗的时间过长,可能会对后续代码的运行造成影响。对于1位的错误其实完全可以不进中断来纠正原始的代码,因为在读取的时候发现的1位翻转在交给CPU的时候已经是纠正后正确的值了,如果需要纠正L2中的数据,那么可以在中断中post一个信号量,然后在CPU空闲的时候来纠正L2原始数据。

3 结 语

随着芯片集成度的增加,以及各类电子系统工作的电磁环境的日益恶化,各类芯片发生单粒子翻转错误的可能性也在增加。因此越来越多的高性能DSP提供了EDAC功能,但之前并未见应用DSP EDAC功能应用的介绍。该文针对TI DSP的EDAC功能给出了具体使用方法,并且对TI DSP EDAC功能的缺陷给出了规避方法。目前该功能已正式在基站的基带板中应用,在1 000多个基站出现SEU异常的次数由原来的每月1~2例,减少到6个月未发现1例,系统稳定性得到提高。

参考资料

[1] 李飞,张志敏,王岩飞.错误检测与纠正电路的设计与实现[J].单片机与嵌入式系统应用,2003(2):34?39.

[2] 张路,贺兴华,卢焕章.空间DSP加载系统可靠性设计[J].计算机工程,2010,36(5):15?17.

[3] 龚锐,陈微,刘芳,等.FT51:一种容软错误高可靠微控制器[J].计算机学报,2007,30(10):1662?1673.

[4] 薛挺,张开峰,张哲.基于汉明码的32位数据纠错电路设计[J].空间电子技术,2010(2):67?70.

[5] 林博.存储芯片纠检错电路设计与FPGA实现[D].哈尔滨:哈尔滨工业大学,2007.

[6] 陈微.高可靠性微处理器设计关键技术研究与实现[D].长沙:国防科学技术大学,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.