Berlekamp算法 Verilog hdl.docx
- 文档编号:25088936
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:47
- 大小:33.16KB
Berlekamp算法 Verilog hdl.docx
《Berlekamp算法 Verilog hdl.docx》由会员分享,可在线阅读,更多相关《Berlekamp算法 Verilog hdl.docx(47页珍藏版)》请在冰豆网上搜索。
Berlekamp算法Veriloghdl
第11章数字通信与控制设计实例
11.9RS编码器、译码器设计实例
RS编码器是ReedSolomon编码器的简称,它是目前最有效、应用最广泛的差错控制编码方法之一。
它是1960年由Iring
Reed和Gus
Solomon首先构造出来的一种BCH码,既能纠错随机误码又能纠错突发性误码,在数据通信、电视传输、数据存储等领域得到广泛应用。
11.9.1RS编码器的设计
下面简要介绍RS编码的基本原理,并以RS(63,45)为例,介绍RS编码的VerilogHDL语言设计过程。
1.RS编码的代数知识
数据的多项式表示:
可以把二进制数表示为一个多项式。
例如,二进制数“110010”,可以表示为以下多项式:
(11-48)
表11-11部分本原多项式
2
3
4
5
6
7
8
以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 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)