摘要
为解决纳米级SRAM(100 nm以内工艺)在航天工程应用中出现的多位翻转问题,依据纳米级SRAM的翻转特性,在传统串行编译码的基础上优化改进,采用并行编译码的方式,实现了基于RS(12,8,4)码的纳米级SRAM的加固方法,在单时钟节拍内实现编译码输出。以FPGA为平台,验证该加固方法的延时和纠错能力。测试结果表明:与Xilinx自带的可检二纠一汉明码的块RAM相比,本文提出的方法访问延时相近,但纠错能力是汉明码的5~8倍;与FUEC-QUAEC、CLC等编译码方法相比,将连续5 bit翻转错误的纠正率提高到100%。采用并行编译码实现的基于RS(12,8,4)码加固方法可用于纳米级SRAM抗多位翻转加固,以较小的延时代价实现纠正一个码字(48 bit)内任意两个符号(最多8 bit)内的错误,可完全纠正空间单粒子环境中出现的单个字内连续5 bit翻转的错误。该加固方法可扩展应用到CPU外部存储器的访问控制以及CPU内部cache的加固,以解决现有航天处理器采用检二纠一码无法纠正其cache多位翻转错误的问题。
Abstract
In order to solve the issue of multi-bit upset in nano-scale SRAM (processes below 100 nm) in aerospace applications, this study optimizes and improves traditional serial encoding and decoding methods based on multi-bit upset (MBU) characteristics of nano-scale SRAM. A parallel encoding and decoding approach is employed to implement a reinforcement method based on RS(12,8,4) code, enabling encoding and decoding outputs within one single clock cycle. The effectiveness of this reinforcement method in terms of delay and error correction capability is validated based on an FPGA platform. The test results show that, compared to the built-in Hamming code of Xilinx Block RAM, the proposed method has an equivalent output delay but with 5 to 8 times greater error detecting and correcting capability than those of Hamming code. Furthermore, when compared to encoding and decoding methods such as FUEC-QUAEC, CLC, the correction rate for consecutive 5-bit upset errors is elevated to 100%. Using parallel coding and decoding method, the implemented RS(12,8,4) code is effective for reinforcing multi-bit upset in nano-scale SRAM. At a minimum latency cost, it allows for the correction of any two symbols (up to 8 bits) within a single codeword (48 bits), fully correcting errors involving consecutive 5-bit upset within a single word in space radiation environment. The proposed MBU reinforcement method can be extended to external memory control interface or internal cache of CPUs addressing the issue of multi-bit upset errors in caches of existing aerospace processors that rely on single-error correction codes.
Keywords
空间辐射环境及单粒子效应是影响星上产品特别是SRAM可靠性的重要因素。文献[1-4]通过实验发现,在180~20 nm CMOS SRAM中多位翻转概率随着器件工艺尺寸的减小呈增大趋势。多位翻转错误无法采用传统的检二纠一算法规避,从而更易引发数据及系统错误。因此,在纳米工艺下,单粒子引发的多位翻转错误成为航天应用中必须要解决的问题。
为实现对单粒子翻转错误的免疫或者减缓,通常从工艺、底层电路、体系结构3个层次对RAM进行加固。
65 nm工艺下,全耗尽绝缘体上硅(fully depleted silicon-on-insulator,FD-SOI)SRAM的多位翻转(multi-bit upset,MBU)错误率仅为体硅工艺SRAM的三分之一到五分之一[5-6]。但受限于FD-SOI工艺的高昂成本,航天应用较少。
在电路级,通过抗单粒子翻转的双互锁存储单元(dual interlocked storage cell,DICE)触发器或位交错技术进行加固。DICE触发器和位交错技术对单位翻转具有很好的预防和纠错能力。但随着翻转阈值减小及电荷共享效应的出现,为纠正更多错误,位交错复杂度大增。同时,由于敏感节点距离靠近,DICE触发器结构对于小尺寸电路也会无效,依然会产生多位翻转[7]。
在体系结构级,检纠错码可实现对错误纠正而无需改变器件的工艺和底层电路,是这一层级常用的单粒子翻转错误减缓技术。扩展汉明码可检两位错误,纠正一位错误。奇偶校验可检测多位错误,但不能纠正。这两种编码因其实现电路简单且延时可控,被广泛用于航天SRAM接口,以及宇航处理器内cache的检纠错。如AT697F、BM8303、LS1E300等宇航处理器的存储器访问接口均采用汉明码和奇偶校验码。然而,随着集成电路发展到纳米级,以上编码均不能解决SRAM或CPU 内部cache在轨出现的多位翻转问题。
文献[8-9]分别针对3 bit连续错误和3 bit随机错误,提出了MBEC和SEC-DAEC-TAEC码。这两种编码在纠错能力提升的同时,冗余位数和传统检二纠一码保持一致。文献[10]采用RM(2,5)对FPGA的块RAM进行加固,可检测和纠正不超过3 bit的错误。文献[11]提出的矩阵码FUEC-QUAEC最高可纠正4 bit连续错误。文献[12]提出了两种低冗余的SRAM多位翻转纠错码,在32 bit信息位情况下,其码率(信息位长度/码字长度)分别高达72.7%和78.0%,最多可纠正4 bit连续错误。文献[13]提出一种扩展汉明码和奇偶校验的组合码(CLC码),该编码对4、5 bit均有一定的纠错能力。文献[14]提出了改进的矩阵码FUEC-QUAEC,该编码对连续4 bit错误实现100%纠正。此外,对连续5 bit错误纠正率达到60.8%。但以上研究对单个字内的连续5 bit错误不能实现100%纠正。文献[15-16]介绍了可单拍内实现的RS(8,4,4)码,该码可纠正信息域5 bit连续错误,但其码率仅为50%,冗余资源占用率较高。然而,为达到较小的译码延时,其中仅实现了信息域或校验域的两个符号错误的纠正,对于同时发生在信息域和校验域两个符号的错误无法纠正。
针对以上问题,本文通过研究纳米级SRAM多位翻转的特性,基于检纠错码的方法,在较小延时与资源占用率的情况下实现对纳米级SRAM的多位翻转的检测和纠正。
1 纳米级SRAM多位翻转特性
工艺尺寸的减小导致产生单粒子翻转所需的临界电荷减少,使得纳米级SRAM的存储单元更易翻转。另外,伴随粒子入射过程中产生的电荷共享效应也是导致多位翻转的一个主要原因[17]。研究人员通过重离子试验测试获得90和65 nm的多位翻转图样,如图1[17-18]所示。其中,深色为翻转位。
图190和65 nm SRAM多位翻转图样
Fig.1MCU patterns in 90 and 65 nm SRAM
依据惯例,定义MCU(multi-cell upset)为一次单粒子事件中产生的多个单元的翻转,MBU为一次单粒子事件中在一个字内产生的多位翻转。从试验结果可知,纳米级SRAM多位翻转的特性如下:
1)多位翻转成簇状排列。
2)单行(列)不大于5 bit,同时可能出现多行翻转的情况,累计多达10 bit。
由以上特性可知,针对当前纳米级SRAM,需要能够检测和纠正单个字内至少5 bit连续错误才可以保证单次访问SRAM数据的正确性。因此,本文将针对5 bit连续翻转错误,研究基于RS(12,8,4)码的检纠错编译码实现方法。
2 RS(12,8,4)编译码的FPGA实现
RS码是由Reed和Solomon于1960年提出的建立在伽罗华域GF(2m)上的2m进制BCH码,被广泛用于通信和数据存储系统的差错控制,其原理参见文献[19]。本文在传统编译码实现方式上进行优化改进,研究可用于纠正宇航用纳米级SRAM多位翻转的RS(12,8,4)码。该码字由12个符号构成,每个符号4 bit,码字总长48 bit,信息域32 bit,冗余校验域16 bit。
2.1 并行编码实现
依据RS编译码原理,在GF(24)上实现k个信息符号,可纠正t个符号的RS(n,k,2t)码,每个符号4 bit。设信息多项式m(x)=mk-1xk-1+···+m1x+m0,若取生成多项式为g(x)=(x+α)(x+α2)(x+α3)···(x+α2t),其系统码多项式为c(x)=m(x)xn-k+ r(x),由此可得冗余校验多项式为r(x)=[m(x)xn-k]mod(g(x))。
RS编码电路是k级移位寄存器的乘加过程,需要k个时钟周期。在通信传输领域,可接受一定的延时,但在数字控制领域,CPU访问控制延时越小,访问速率越高。因此,需要将编译码延时控制在一个时钟周期内。为减少编码延时,采用并行编码实现,将码多项式表示为
(1)

(2)
式中:M为信息多项式的系数矩阵,其元素均为伽罗华域GF(24)中的元素;G为生成矩阵;I为k阶单位矩阵;P为生成冗余校验位的校验矩阵。
并行编码主要通过两步实现。1)预先计算P值并存入FPGA,供编码过程中直接调用。2)根据伽罗华域的乘加运算法则,将乘加运算简化为加法和异或两种运算,并利用FPGA的并发特性,直接调用P矩阵并行运算。通过以上两步,将编码模块由原来的k级移位寄存器及乘加运算在两级LUT延时范围内实现,实现单时钟节拍的编码输出。
对于RS(12,8,4)码,根据本原多项式p(x)=x4+x+1,可生成伽罗华域GF(24)上的所有16个元素。采用生成多项式g(x)=(x+α)(x+α2)(x+α3)(x+α4),并通过长除法运算可求得P为

(3)
信息M(x)与P乘加运算后便可输出冗余信息R(x),完成编码。RS(12,8,4)码符号排列如图2所示。其中,SY0~SY11表示编码后的一个符号。
图2RS(12,8,4)码符号排列
Fig.2Symbol arrangement of RS (12, 8, 4) code
2.2 并行译码实现
RS码传统译码过程共分为4个步骤[19],如图3所示。
图3RS码传统译码过程
Fig.3Traditional decoding process for RS code
传统译码采用Berlekamp(BM)或欧几里得算法计算错误位置多项式,通过钱搜索算法求错误位置,采用Forney公式求取错误估值,并获得错误图样,最后纠正输出。欧几里得算法相比BM算法已简化许多,但仍然需要进行多次的除法迭代。另外,欧几里得算法还需要使用除法运算所得的余式Z(ρ)0(x)计算错误估值。传统译码过程均为串行操作,且除法迭代复杂并不适合FPGA运算。为方便FPGA并行计算,缩短译码延时,本文针对译码过程进行以下5项改进。
改进1 预先存储用于计算伴随式S及校验码差值deltaS的矩阵到FPGA,简化计算。
改进2 根据deltaS将错误分为无误、错误均在校验域、错误在校验域和信息域3类。
改进3 推导错误位置多项式的一般表达式,免去迭代运算,便于FPGA并行计算。
BCH码的译码过程即为求解主方程σ(x)S(x)≡Z0(x)mod x2t的过程。欧几里得算法的核心是通过除法迭代的方法求S(x)和x2t的最大公因式,从而求得错误位置多项式 σ(x)和错误估值Z0(x)。σ(x)的根的倒数即为错误位置。
按照欧几里得译码算法[19],可以将除法余式表达为
(4)
递推关系为:
(5)
(6)
(7)
初值。
在第i次除法迭代中,用除以,得到商式 qi(x)和余式。利用递推关系计算 σ(i)(x)。当迭代进行到第ρ步时,若满足式(8),则迭代停止。
(8)
式中为 的次数。此时,。
若错误个数小于等于t,则一定存在满足式(8)的ρ,且ρ≤t。由此便可得到错误位置多项式 σ(x)=σ(ρ)(x)。
对于RS(12,8,4)码,t=2。因此,当最多有两个符号错误时,只需进行最多两次除法迭代即可求得 σ(ρ)(x),计算过程如下:
当S4≠0时,执行以下迭代运算。
1)令。
2)除以得:
(9)
(10)
故,,不满足式(8),继续迭代。
3)除以得
(11)
由于本算法不需要求错误估值,因此免去的计算。
式(11)即为RS(12,8,4)码的错误位置多项式的一般表达式。求式(11)的根等价于求式(12)的根。本文定义式(12)为等价错误位置多项式。
(12)
当S4=0时,重复迭代1)、2)、3)可推导出等价错误位置多项式为
(13)
该结果与式(12)中S4=0所得结果一致。
因此,可将错误位置多项式简化为σ(x)=Ax2+Bx+C,其中A、B、C为伴随矩阵S的函数。采用FPGA的译码实现时,A、B、C的值均可通过伽罗华域中两级乘加运算并行计算获得,省去了迭代计算过程,从而减少了运算延时。
改进4 计算错误图样的一般表达式,将错误位置代入后直接求取错误图样,免去计算余式Z(ρ)0(x)后再运算的过程。其推导过程如下:
设编码后的系统码多项式为c(x)=c11x11+···+c1x+c0,错误多项式为 e(x)=e11x11+···+e1x+e0,传输读回的数据为y(x)=e(x)+c(x),其系数可表示为
(14)
重新计算y(x)中信息位的校验值和冗余校验值的差值,可得ΔSj,可表示为

(15)
式中:j=0,1,2,3;HT=[PT|I4×4], I为4阶单位矩阵。
根据错误分类,考虑以下4种情况:
1)有两个错误且均在信息域,分别设为em、en。根据矩阵乘法,将其代入式(15)得
(16)
两个未知数4个方程,任意取两个可求em、en。联合前两个方程求解得:
2)有两个错误。一个在信息域,另一个在校验域,分别设为em、er,其中r=0,1,2,3。将其代入式(15),得到两个方程组:
(17)
(18)
解方程组可得
er为冗余校验域错误图样,因此无需计算。
3)仅有一个错误且在信息域时,可求解
4)没有错误或所有错误均在冗余域。此时无需计算,直接输出32 bit信息位。
通过以上方法优化错误多项式及错误估值的求解,实现RS(12,8,4)的FPGA并行化译码,减少串行译码带来的延时。
在航天工程中,信息域和校验域分别存储在两个不同的SRAM片内,其物理位置不相邻。由单粒子翻转特性可知,一次单粒子事件导致SRAM一个字内的翻转位呈簇状排列,即翻转位相邻。因此,在实际工程应用中,信息域和校验域不会同时出错。为进一步减小译码延时,可针对此特殊情况进行第5项改进。
改进5 免去错误的精确位置计算,简化错误位置和错误图样的计算逻辑。
如图2所示,RS(12,8,4)系统码由8个信息符号和4个校验符号组成。在传统译码中,计算错误在12个符号中的精确位置后方可根据错误估值计算错误图样。本文在前4项改进的基础上,将错误位置划分为[SY0,SY1,SY2,SY3]、[SY4,SY5,SY6,SY7]、[SY6,SY7,SY8,SY9]、[SY8,SY9,SY10,SY11]4个区域。根据错误相邻的规则,错误一定位于这4个区域之一。
对于在校验域[SY0,SY1,SY2,SY3]的错误无需译码。其余3类,每类均有4个符号。设可能的错误值分别为em、en、 ek、et,错误图样采用式(19)求解,其推导过程与式(16)相同。
(19)
由m,n,k,t∈{4,5,6,7}或m,n,k,t∈{6,7,8,9}或m,n,k,t∈{8,9,10,11}代入式(19)得到3组方程。每组均为4个方程4个未知数,可求唯一解。由于免去错误的精确位置计算,译码延时被进一步减小。优化后的译码模块功能结构如图4所示。
图4优化后的译码模块功能结构
Fig.4Functional structure of optimized decoding module
为方便后续比较,将经过前4项改进后实现的FPGA译码模块命名为RS12_8_4,经所有5项改进后实现的译码模块命名为RS12_8_4_sp。
2.3 纠错能力及性能
如前所述,RS(12,8,4)码由12个符号组成,高32 bit为信息域,低16 bit为冗余校验域。图5为错误模式的16进制表示,共计78类。其中,F表示一个错误符号,代表了一个符号内任意位翻转的情况(共计15种)。
图5错误模式的16进制表示
Fig.5Error data mode in Hexadecimal
采用Modelsim仿真注入错误模式数据,对所有78类错误进行了验证。验证结果显示,译码后数据和原始数据一致,编码和译码正确无误。
由于单个字内的5 bit连续错误一定分布在两个符号内,属于RS(12,8,4)的检纠错范围。因此,RS(12,8,4)对5 bit连续错误可实现100%纠正。
与汉明码、CLC[13]、FUEC-QUAEC[14]相比,本文实现的RS(12,8,4)码纠错能力提升至5 bit连续错误的100%纠正,6~8 bit连续错误纠正率分别提高至76.7%、52.3%、26.8%。连续错误纠正率对比如图6所示。另外,在综合纠错能力和码率方面,本文实现的RS(12,8,4)码也具有一定的优势,比较结果见表1。
图6连续错误的纠正率对比
Fig.6Comparison of correction rates for burst error
表1不同类型纠错码的码率和纠错能力对比
Tab.1Comparison of code rates and error correction capabilities of different error correction codes
调用Xilinx自带汉明码的块RAM模块测试,并与采用本文实现的RS(12,8,4)码加固的块RAM模块进行对比,其延时相近,约为15 ns。针对航天应用的特殊情况,若采用改进的RS12_8_4_sp加固后,其延时缩短至11.657 ns。
根据RS12_8_4_sp的实现原理,其无法纠正同时出现在信息域和校验域的错误。但在32 bit的信息域,依然对5 bit连续错误可100%纠正,6~8 bit连续错误的纠正率分别为77.8%、53.8%、28.0%。对校验域的任意两个符号(最多8 bit)的错误可实现100%纠正。
根据文献[3],90和65 nm工艺SRAM多位翻转比例分别为5%和55%,且多位翻转均为2~5 bit错误,未发现6 bit及以上的错误。依据文献[20],65 nm SRAM器件在轨单粒子翻转率R为1.29×10-6/(bit·d)。对于65 nm工艺,容量为1 Mbit的SRAM,若采用汉明码进行加固,其平均无不可纠正错误的运行时间约为1.34 d,即。若采用本文实现的方法加固,则可纠正SRAM在轨运行期间产生的所有多位翻转错误,确保其长期稳定地运行。
3 应用扩展
本文提出的检纠错码实现方法可用于纳米级SRAM和纳米级FPGA中的块RAM加固,亦可扩展应用到FPGA或CPU对外部存储器的控制逻辑的加固。该加固方法可替代现有CPU存储控制器的检二纠一加固方法,以解决传统扩展汉明码无法纠正多位翻转的问题。同样,在访问频率要求不大于80 MHz的处理器cache中加入RS(12,8,4)纠错码,可极大地提升处理器cache的纠错率。在现有的工艺尺寸下可解决宇航CPU cache中的多位翻转问题。
4 结论
1)通过研究纳米级SRAM在空间辐照环境中多位翻转特性,实现了一种可检测和纠正5 bit连续错误的RS(12,8,4)码。通过优化改进传统串行编译码,采用并行编译码的方法在单时钟节拍内完成编译码输出,降低了编码和译码的延时。
2)结合航天工程应用中信息域和校验域通常存储在不同的SRAM颗粒的情况,在确保纠正率100%的情况下,针对信息域5 bit连续错误实现的编译码可进一步降低延时。
3)采用并行编译码实现的RS(12,8,4)检纠错码具有较强的纠错能力,对更小尺寸工艺的SRAM可能出现的6~8 bit连续错误纠正率分别为77.8%、53.8%、28.0%。
4)从冗余信息占用率角度分析,与具有同等纠错能力的采用RS(8,4,4)检纠错实现方法相比,本文实现的编译码具有较高的码率,即同样的纠错能力所耗费的冗余信息更少。

