书签 分享 收藏 举报 版权申诉 / 47

类型Berlekamp算法 Verilog hdl.docx

  • 文档编号:25088936
  • 上传时间:2023-06-05
  • 格式:DOCX
  • 页数:47
  • 大小:33.16KB

以m=6为例,GF()的全部符号的求法如表11-12所示。

表11-12伽罗华域符号的求法

由于篇幅有限,表11-12只列出了部分的符号,其余求法类似。

GF()的生成多项式为式(11-49):

(11-49)

展开式(11-49),合并同类项,并运用伽罗华四则运算化简得到式(11-50):

(11-50)

根据式(11-50)画出RS编码的电路图,如图11-71所示。

图11-71RS编码的电路图

2.RS编码的乘法器

根据伽罗华域运算规则设计乘法器。

当系数为0时,乘法器的VerilogHDL代码如下:

modulemula_0(a,c);

input[5:

0]a;

output[5:

0]c;

reg[5:

0]c;

always@(a)

begin

c[5]<=a[5];

c[4]<=a[4];

c[3]<=a[3];

c[2]<=a[2];

c[1]<=a[1];

c[0]<=a[0];

end

endmodule

代码分析:

由于伽罗华域的加法是作异或运算,当系数为0时,乘积即为本身。

当系数为1时,乘法器的VerilogHDL代码如下:

modulemula_1(a,c);

input[5:

0]a;

output[5:

0]c;

reg[5:

0]c;

always@(a)

begin

c[5]<=a[4];

c[4]<=a[3];

c[3]<=a[2];

c[2]<=a[1];

c[1]<=a[5]^a[0];

c[0]<=a[5];

end

endmodule

代码分析:

假设乘数为,它乘以x,得到式(11-51):

(11-51)

化简得到式(11-52):

(11-52)

上面代码中的c[1]<=a[5]^

a[0],当系数为其他值时,按此方法类似求得。

由于篇幅有限,这里不一一列出所有代码,具体的请参考光盘内容。

3.RS编码的VerilogHDL实现

根据图11-1

onmouseover="msoCommentShow('_anchor_1','_com_1')"

onmouseout="msoCommentHide('_com_1')"

href="

name=_msoanchor_1>[G7],组合RS编码的乘法器,设计VerilogHDL代码如下:

modulerscode(clk,clr,start,datavalid,x,y);

inputclk;

inputclr;

inputstart;

inputdatavalid;

input[5:

0]x;

output[5:

0]y;

reg[5:

0]y;

wire[5:

0]mul0,mul1,mul2,mul3,mul4,mul5;

wire[5:

0]mul6,mul7,mul8,mul9,mul10,mul11;

wire[5:

0]mul12,mul13,mul14,mul15,mul16,mul17;

reg[5:

0]r0,r1,r2,r3,r4,r5;

reg[5:

9]r6,r7,r8,r9,r10,r11;

reg[5:

0]r12,r13,r14,r15,r16,r17;

reg[5:

0]databack;

//调用乘法器

mula_45g0(.a(databack),.c(mul0));

mula_48g1(.a(databack),.c(mul1));

mula_3g2(.a(databack),.c(mul2));

mula_51g3(.a(databack),.c(mul3));

mula_35g4(.a(databack),.c(mul4));

mula_11g5(.a(databack),.c(mul5));

mula_32g6(.a(databack),.c(mul6));

mula_59g7(.a(databack),.c(mul7));

mula_25g8(.a(databack),.c(mul8));

mula_31g9(.a(databack),.c(mul9));

mula_6g10(.a(databack),.c(mul10));

mula_21g11(.a(databack),.c(mul11));

mula_38g12(.a(databack),.c(mul12));

mula_61g13(.a(databack),.c(mul13));

mula_3g14(.a(databack),.c(mul14));

mula_0g15(.a(databack),.c(mul15));

mula_59g16(.a(databack),.c(mul16));

mula_22g17(.a(databack),.c(mul17));

always@(posedgeclk)

begin

if(clr==1'b0)

begin

r0<=6'd0;

r1<=6'd0;

r2<=6'd0;

r3<=6'd0;

r4<=6'd0;

r5<=6'd0;

r6<=6'd0;

r7<=6'd0;

r8<=6'd0;

r9<=6'd0;

r10<=6'd0;

r11<=6'd0;

r12<=6'd0;

r13<=6'd0;

r14<=6'd0;

r15<=6'd0;

r16<=6'd0;

r17<=6'd0;

end

elseif(start==1'b1)//作异或运算

begin

r0<=mul0;

r1<=r0^mul1;

r2<=r1^mul2;

r3<=r2^mul1;

r4<=r3^mul1;

r5<=r4^mul1;

r6<=r5^mul1;

r7<=r6^mul1;

r8<=r7^mul1;

r9<=r8^mul1;

r10<=r9^mul1;

r11<=r10^mul1;

r12<=r11^mul1;

r13<=r12^mul1;

r14<=r13^mul1;

r15<=r14^mul1;

r16<=r15^mul1;

r17<=r16^mul1;

end

end

always@(datavalidorxorr17)

begin

if(datavalid==1'b1)

begin

databack<=x^r17;

end

else

begin

databack<=6'd0;

end

end

always@(datavalidorxorr17)

begin

if(datavalid==1'b1)//输出数据

begin

y<=x;

end

else//输出检验码

begin

y<=r17;

end

end

endmodule

保存代码为rscode.v,并设为顶层文件,编译工程,编译无误后单击Processing→GenerateFunctional

Simulation

Netlist,产生功能仿真网表。

新建波形仿真文件,加入输入输出信号,设置系统时钟信号clk的周期为10ns,单击输入信号clr,设置为前20ns为低有效,后面的为高无效;单击输入信号start,设置为前20ns低无效,后面的为高有效;单击输入信号datavalid,设置为20~470ns为高有效,其他时间为低无效;单击输入信号x,设置从20ns开始,每隔10ns加“1”。

保存波形文件为

rscode.vwf,单击按钮进行RS编码器的波形仿真,波形仿真报告如图11-72所示。

图11-72RS编码器的波形仿真报告

波形仿真报告说明:

在信号datavalid为高时,输出信号y就是输入数据x;当信号datavalid为低时,输出信号y是18个校验码。

11.9.2RS(204,188)译码器的设计

RS码在通信系统、数字电视和计算机存储系统中应用很广泛。

例如,DVB(数字电视)标准中信道编/解码采用RS(204,

188);ATM网络中使用RS(128,124)作为前向纠错编码(ForwardErrorCorrecting,FEC)。

本节将以DVB标准中定义的RS(204,

188)译码器为例,详细介绍基于改进的BM迭代算法、pipeline结构的译码的所有技术细节。

考虑到译码器的可扩展性、可维护性,实例中尽可能地使用参数化、模块化的设计。

读者可在实例代码基础上作很小的改动,就能实现不同需要的RS译码器。

1.应用背景

在数字通信、数字电视中,信道编码的使用提高了数据传输的质量。

虽然增加了传输带宽,但信道编码减小了数据传输出现误码的概率,同时也减小了所需要的信噪比(signal-to-noise

rate)。

在大多数应用中,将RS码与卷积码级联使用进行纠错。

在自信源至接收的过程中,数字电视信号的编码包括信源编码、信道编码及加密。

信道编码又称做前向纠错编码,其目的是提高信息传送或传输的可靠性,当传输差错在一定范围内,接收机都能将误码纠正过来。

必须指出,信道编码并非指信号经上变频发送出去后,在传输信道中(有线、卫星或地面)进行编码,而是指经过编码后便匹配信道传输和减少差错。

因此,自信源编码后的所有编码包括能量随机化扰码、卷积、交织、Reed-Solomon编码等都可划为信道编码。

典型的数字电视信道编码如图11-73所示。

TS流

MPEG-2

复用匹配与能量扩散

交织

信道

调制

外码

编码

内码

编码

基带

形成

图11-73数字电视信道编码的一般结构框图

在图11-73中,外编码多为具有很强突发纠错能力的RS(n,k,

t)编码,n为(缩短)码长,k为信息位,t为能纠正误码的最大的码位,且RS外码编码的特点是纠正与本组有关的误码,尤其对纠正突发性的误码最有效。

通常,n、k、t分别为204、188和8。

如图11-74所示为“EN300429”有线数字电视(DVB-C)标准规定的发送端(Cable

Head-end)框图,其中包括了数据帧结构(Framingstructure)、信道编码及调制。

可以看到,使用了RS(204,

188)编码。

图11-74DVB-C前端框图

2.理论算法

RS译码主要有时域译码和频域译码,时域译码通常采用BM迭代算法或者欧式算法(Euclid’s

Algorithm)。

本文主要介绍BM迭代算法原理及以此算法为基础的RS译码器的FPGA实现。

RS译码可分为4步:

第一步由接收到的码组计算伴随式;第二步求解关键方程;第三步计算出错误图样;最后由错误图样和接收码组计算出可能发送的码字。

图11-75给出了RS译码器的一般步骤框图。

图11-75RS译码器的一般步骤框图

RS译码的关键在于求解错误位置多项式Λ(x),1966年伯利坎普(Berlekamp)提出了可以由伴随式计算错误位置多项式的迭代译码算法,这极大地加快了求解错误位置多项式的速度,该方法简单且易于实现,从而从工程上解决了RS译码的问题;1969年梅西(Massey)指出了该算法与序列的最短线性移位寄存器综合之间的关系,并进行了简化,因此,此译码算法就称为BM迭代译码算法。

(1)Reed-Solomon码基本概念

RS循环码是广泛用于数字电视传输系统中的前向纠错码的重要组成,是一个符号取自有限域GF(q),长度为n,信息位长为k的(n,

k)线性分组码。

其中的任何码矢C=(Cn-1,…,C1,C0),可用码字多项式表示为:

…(11-53)

如果F是包含阶数为n的元素a的有限域,r是1到n之间的固定的整数,F域中的所有矢量C=(C0,C1,…,Cn-1)满足下式:

j=0,1,…,r-1(11-54)

那么,这样的矢量集就称做在有限域F上的长度为n冗余为r的Reed-Solomon码。

其中,b0为任意整数,通常取1,但在DVB标准中b0=0。

矢量C称做该码的码字(codeword)。

RS码是特殊的BCH码,其码字C和生成多项式g(x)均在同一个有限域内。

对于本源BCH码,分组长度n=qm–

1,其生成多项式g(x)的根在扩展域GF(qm)内。

BCH码的g(x)可表示为:

…(11-55)

其中,LCM表示多项式的最小公倍数。

mai表示GF(qm)域中的本原元ai在GF(q)中的最小多项式(minimal

polynomial)。

d称做码设计间距(designdistance),且3≤d≤n。

如果取m=1,则n=q–

1,此时就得到了标准的RS码。

因为最小多项式和本原元均在GF(q)中,则最小多项式的次数(degress)为1,形式为(x-

ai),所以RS码的生成多项式简化为:

…(11-56)

对于RS码,n–k=d-1。

因为是特殊的BCH码,所以其最小码间距dmin≥d。

又因为所有的线性码的码间距只能小于等于n–k

+1,所以

dmin=n–k+1(11-57)

为了便于理解RS码的译码原理,由式(11-54)的定义可得出下面重要性质。

设RS码的码矢为C=(Cn-1,…,C1,

C0),其对应的码字多项式C(x)如式(11-53)所示,则C(x)有由本原元a为底连续的从b0到(b0+d-2)为幂的d-

1个根。

即:

,i=0,1,…,d-2(11-58)

此外,还可以从频域的角度进行分析。

有限域的N点DFT(离散傅里叶变换)定义为:

,i=0,1,…,N-1(11-59)

其中,x=(x0,x1,…,xN-1)是来自GF(q)、长度为N的序列。

a是来自GF(qm),阶数(order)为N,即aN=

1。

如果令m=1(如RS码),则DFT变换对应的序列x和X均属于同一个域GF(q)。

同理,DFT的逆变换IDFT定义为:

…(11-60)

设RS码的码字为C=(Cn-1,…,C1,

C0),码字多项式为C(x)如式(11-53)所示。

若其对应的DFT变换序列为,则由式(11-53)和式(11-59)有:

,i=0,1,…,N-1(11-61)

由式(11-61)的定义可知,RS码的码字的DFT序列从b0,b0+1,…,b0+d-2位置连续的d-1个系数均为0。

(2)RS译码与关键方程

在介绍RS译码的关键方程之前,先给出下面的定义及定理。

对于给定一个矢量V,其支持集(supportset)I定义为:

(11-62)

定义矢量V的位置多项式(locatorpolynomial)为:

(11-63)

定义矢量V的第i个点的位置多项式(puncturedlocatorpolynomial)为:

(11-64)

最后,定义矢量V的计算多项式(evaluatorpolynomial)为:

(11-65)

定理11.1的推论1表明,使用式(11-68),矢量V的时域坐标可以由σV(x)和ωV(x)恢复出来。

下面开始讨论RS译码的具体问题。

假设C=(C0,C1,…,Cn-1)为纠错能力为t的RS(n,k)

码的码字。

码字C发送后经过有噪声信道,接收端收到的码字为R=(R0,R1,…,Rn-1)。

设传输过程中加入的错误图样(error

pattern)矢量为E=(E0,E1,…,En-1)=R–C。

定义伴随式(syndrome)Sj为:

(3)BM及其改进算法求解关键方程

1966年伯利坎普(Berlekamp)提出了可以由伴随式计算错误位置多项式的迭代译码算法,这极大地加快了求解错误位置多项式的速度,该方法简单且易于实现,从而从工程上解决了RS译码的问题;1969年梅西(Massey)指出了该算法与序列的最短线性移位寄存器综合之间的关系,并进行了简化,因此,此译码算法就称为BM迭代译码算法。

在VLSI设计中,RS解码时的关键方程求解比较复杂,主要有以下三种方法:

Berlekamp-Massey(BM)算法、Euclidean算法、PGZ

算法。

当错误个数(t>3)值较大时,一般认为BM算法占用最少的面积和时间及相对小的结构复杂度。

但是,BM算法涉及到有限域元素求逆(inverse),这是个很复杂、很耗时的运算。

而本文的RS(204,

188)译码器关键方程求解采用了改进的BM算法,算法迭代时无需求解有限域元素逆(inversionless)。

下面首先详细介绍BM算法。

设纠错能力为t的RS(n,k)码的错误位置多项式为…,d≤t由式(11-66)可知:

(11-77)

因此,对于任意的j(0≤j≤n-1),下式成立:

,j=d,d+1,2t-1(11-78)

其中,d为误码的个数。

式(11-78)可以用图11-76的移位寄存器描述。

图11-76移位寄存器描述的关键方程

BM算法可以得到最小次数多项式(即最短的移位寄存器),用于确定错误位置多项式。

该算法逐渐增加移位寄存器的长度,从0开始直到等于实际错误的个数。

若式(11-78)不成立,则要么改变si系数,要么增加移位寄存器长度。

例如,有差值(discrepancy)dn为:

(11-79)

如果dn不为零,则新的移位寄存器系数在上次改变值的基础上加上当前值。

上次的系数按照移位寄存器的方向移动,直到与伴随式相对应。

随后,相同的差值dn使得移位寄存器长度改变。

新的错误位置多项式由下式给出:

(11-80)

其中,n–

m为移位次数(长度),dn为新的差值,dm为上一次长度改变时的差值。

只有当dn≠0并且2Ln≤n时,才会引起长度的改变。

在介绍改进的BM算法前,先给出完整的BM算法的流程。

(1)初始化

(2)下面的步骤从式(11-81)到式(11-85)循环迭代,直到k=d-1。

(11-81)

(11-82)

(11-83)

(11-84)

(11-85)

其中,为错误位置多项式,即式(11-76)中的。

在上面的BM算法中,式(11-83)求B(x)中用到有限域元素求逆运算,即[(k)]-1。

因为有限域求逆(除法)运算很复杂,下面给出改进的BM算法,无需求逆。

改进的BM算法如下。

(1)初始化:

(2)下面的步骤从式(11-86)到式(11-91)循环迭代,直到k=d-1。

(11-86)

(11-87)

(11-88)

(11-89)

(11-90)

(11-91)

其中,为错误位置多项式。

在上面改进的BM算法中,整个过程没有用到有限域元素求逆运算。

通过比较两种算法,可以有下面的结论:

(11-92)

(11-93)

(11-94)

特别地,

(11-95)

其中,k为常数,。

所以,和有相同的根,并且都能作为错误位置多项式。

二者最大的区别是:

σ(x)多项式的最小次数项系数为1;而

(x)的最小次数项系数可为非0的任意数。

(4)Chien搜索和Forney算法

在算出错误位置多项式Λ(x)后,就可以结合关键方程求出错误图样。

结合式(11-95)及s(x)的定义:

则有:

(11-96)

其中,I={i:

Ei≠0}。

所以,通过将有限域元素的倒数(即s(x)的根)代入错误位置多项式,就可以找到错误所在的位置,这就是Chien搜索的原理。

具体做法是:

将有限域元素

…逐次代入,若,则接收到的第i个码出现误码。

在s(x)和S(x)均已知的情况下,通过式(11-76)的BCH/RS关键方程可求出错误计算多项式w(x)。

即:

(11-97)

用(x)替换s(x),用(x)替换w(x),则有下式:

(11-98)

在确定了误码的位置后,可以使用Forney算法求出该位置的错误样值。

用交织的错误矢量…替换定理11.1的推论1中的矢量V,即用代替

,可得:

(11-99)

其中,i∈I。

在式(11-99)中,因为并且,所以Forney算法也可改写为:

(11-100)

最后,利用C=R-E就可得到纠正后的正确的码字。

3.RS(204,188)译码器建模

这里以具体的DVB标准中定义的RS(204,188)码为例,详细讨论其实现的FPGA/VLSI硬件模型。

在DVB标准中,RS(204,

188)码定义如下:

码生成多项式:

…(11-101)

域生成多项式:

(11-102)

由定义可知

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
Berlekamp算法 Verilog hdl Berlekamp 算法
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:Berlekamp算法 Verilog hdl.docx
链接地址:https://www.bdocx.com/doc/25088936.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开