汪智杰,周治柱,2
(1.武汉邮电科学研究院,湖北武汉 430074;2.武汉光迅科技股份有限公司,湖北武汉 430205)
电网在运行过程中需要传输监测信号,由于电网监测信息传输环境的特殊性,长跨距显得尤为重要[1-2]。使用里德-索罗蒙(Reed-Solomone,RS)码能够降低收端的误码率[3-4],纠正突发或者连续的码元错误[5-7],提高信道容量[8],降低接收端光信噪比容限[9]。但由于专用RS 编译码器价格不菲,使用可编程逻辑门阵列(Field-Programmable Gate Array,FPGA)完成RS 码编译码器的设计,能够降低成本,使用灵活。
现有的RS 编译码器使用的FPGA 芯片一般为Xillix 和Altera 这两家公司产品,但近些年中国和美国的贸易摩擦越来越大,“中兴制裁”和“华为断供”的事件,警醒着我们核心技术必须要掌握在自己的手中,而电力通信系统更是需要自主可控。随着国产FPGA 的发展,部分国产FPGA 的性能已经满足RS 编译码器设计的基本需求。
文中以RS(255,239)为例,详细介绍了编码器和译码器的实现原理与模块设计,并设计了FPGA 板卡和长距传输测试系统,在安路最新推出的PH1A 100SFG676 芯片上完成了RS 编译码器的设计与应用,并且实现了信号在编译码器上千兆速率的传输。
RS 码的码元是k个信息元加上n-k个校验元的组合,所以RS 码的编码过程就是求解校验多项式的过程[10]。RS 码的码元均来自伽罗华域GF(2m)。对于码长为n=2m-1(m≥2)的RS(n,k)码,其信息元长度为k,校验段长度为n-k,可纠正t=(n-k)/2 个错误。RS 码的校验元求解方程[11]如式(1)所示:
由式(1)可知,校验元r(x)可由信息多项式f(x)乘以xn-k然后对生成多项式g(x)取余数得到。
由RS 码的编码原理可知,RS 码的编码电路是一条除法电路,常见的RS 码编码器结构框图如图1所示。
图1 中的g0、g1…g15为生成多项式的系数。编码电路的工作原理如下:
1)信息元输入时,SW1接到信息元一侧,SW2接到加法器一侧。
2)经过239 个时钟周期后除法器电路中的除法运算完成,SW2接到信号0 的一侧,SW1接到寄存器一侧。
3)再经过16 个时钟周期后,寄存器r0、r1…r15中的校验元全部输出,即得到编码后的255 个码元。
图1 中的主要资源消耗为乘法器,一般实现乘法器是利用两个元素相乘为元素幂指数相加的原理,先查找出两个元素的指数,然后指数相加对255取余,再通过计算后的指数来查找对应的元素。因此一个乘法器需要消耗三个查找表,非常占用资源。
由图1 可知,每一个乘法器的乘法因子中都有一个元素是确定的。通过多项式乘法展开后,合并相同次数项,即可将乘法转换为加法运算[12]。
RS(255,239)的生成多项式特征向量是已知的,设另一元素c(x)的特征向量为(c7,c6,…,c0),将两个多项式相乘,根据伽罗华域规则进行化简得到相乘后元素的特征向量。通过这种优化乘法模块的设计代替了查找表求积,减少了资源的消耗。
图2 是编码数据的仿真图,使用的时钟信号频率为125 MHz,为了方便观察,把输入的码元从1 开始累加到239 后开始输出校验元。从图2 可知,输出的16 个校验元为(37,133,225,126,37,59,132,133,56,168,179,4,9,99,79,148)。
RS 译码一般使用时域译码,时域译码一般采用伯克利-梅西(Berlekamp-Massey,BM)算法或者欧几里得算法[13],BM 算法具有消耗资源少、速度快等优点。该文采用的是BM 算法改进后的无逆伯克利-梅西(imversionless Berlekamp-Massey,iBM)算法。
RS 码的译码步骤如下:
1)接收码元R(x)进入伴随式模块计算伴随式。
2)通过计算出的伴随式求解错误位置多项式和错误值多项式。
3)计算错误位置和错误值。
4)通过得到的错误位置和错误值求解正确码元。
RS(255,239)的伴随式如式(2)所示:
其中,系数sj可以展开为式(3):
在计算伴随式系数sj过程中复用16 个单元来同时计算16 个伴随式,以减少译码时间。伴随式模块框图如图3 所示。
初始化后寄存器D 清零,接收码元依次输入伴随式计算电路,255 个时钟周期后输出16 个伴随式,如果输出的16 个伴随式系数为零,则没有误码;否则就出现了误码,需进行纠错处理。
求解出2t个伴随式后,开始计算错误位置多项式σ(x),错误位置多项式系数使用iBM 算法迭代求解。
改进后的iBM 算法步骤[14-16]如下:1)初始状态的条件如下:
2)根据下面各环节公式依次进行循环迭代,每次迭代后k加1,当k=2t-1 时完成迭代,完成一组码元的纠错:
Chien 搜索模块的目的是通过代入法求解错误位置多项式的根,从而得到接收码元中的错误码元位置。直接求解位置多项式比较复杂,现在一般采用的是中国科学家钱闻天提出的Chien 搜索算法。Chien 搜索模块框图如图4 所示。
设错误值多项式为ω(x),记ω(x)为:
在求解出σ(x)后,将错误位置多项式与伴随式相乘得到错误值多项式:
因为S(x)和σ(x)的最高次幂均为t,所以ω(x)的最高次幂为x2t。直接求解错误值多项式复杂度高,一般使用Forney 公式来求解错误值,如式(6)所示:
完成设计后,使用Modelsim 仿真软件进行仿真,仿真图像如图5所示。为了方便观察,将编码器的输出送入译码器的输入并且在第1,2,3,4,5,8,9,10位添加噪声,从图5中可见,出现错误后error_index 指示信号拉高,同时error信号输出求解得到的噪声值,error信号和data_out 信号异或后得到译码的数据correct_data。从仿真波形上看,能够纠正最多8个错误码元,满足预期设计目标。通过流水线设计解码速率能够达到1 Gbit/s,初步满足业务信号传输速率的要求。
为了验证编译码器的设计效果和对系统性能的提升程度,设计了一个长距传输测试平台进行验证。长距传输测试平台包含了误码仪、功率放大器(Booster Amplifier,BA)、前置放大器(Pre-Amplifier,PA)、电可调光衰(Electronic Variable Optical Attenuators,EVOA)和FPGA 板卡。测试FPGA 系统示意框图如图6所示。
在实际测试环境中,由于没有足够长的光纤,所以测试系统通过调整光衰值的大小来模拟不同光纤长度带来的衰减,测试编码的增益效果。图6 中RS 编译码器位于介质访问控制层(Medium Access Control Layer,MAC)和端口物理层(Port Physical Layer,PHY)中间,并对MAC 层产生的校验码进行纠错,这样能够进一步提升系统的性能。
FPGA 板卡最重要的是供电部分设计也就是电源模块的设计。PH1A100SFG676 芯片内部需要提供1.8 V、0.9 V 以及3.3 V 三种类型的电压来给FPGA芯片内部不同区域供电。为了降低外部供电设备的复杂程度,使用的外部电源统一为12 V,通过矽力杰的SY8386AQQC 降压芯片以及外围分压电路输出3.3 V、1.8 V 及0.9 V 电压。
图7所示为12 V转3.3 V的FPGA供电转换电路。设计的FPGA 板卡如图8 所示。
由于G.652 的光纤固定损耗为0.18 dB/km,所以模拟长度为245 km 的光纤只需要将光衰值设置为34.1 dB。设置好各项参数后,误码仪测试结果如图9所示。在1010个以太网报文中未发现丢包,误码率为0,基本满足千兆速率传输要求。
基于国产安路PH1A100SFG676 芯片,该文设计并应用了RS(255,239)编码器和译码器,降低了系统误码率,提升系统性能并且传输速率能够达到千兆。所有芯片及器件全部选用国产器件,初步满足电网业务信号低误码率的传输要求。对通信速率要求不是很高并且需要长距传输的行业,该文提供了一种国产化替代的可能性。