版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11.9.2 RS(204,译码器的设计RS数字电视)准中信道编/解码采用RS(204,188);ATM网络中使用RS(128,124)作为前向纠错编码ForwardErrorCorrecting,FE。本节将以DVB标准中定义的RS(204,BMpipeline结构的译码的所有技术细节。考虑到译码器的可扩展性、可维护性,实例中尽可能RS译码器。应用背景(signal-to-noiserat。在大多数应用中,将RS码与卷积码级联使用进行纠错。接收机都能将误码纠正过来。必须指出,信道编码并非指信号经上变频发送出去后,在传输信道中(有线、卫星或地面Reed-Solomon编码等都可划为信道编码。典型的数字电11-73所示。在图11-73中,外编码多为具有很强突发纠错能力的RS(n,k,t)编码,n为(缩短)码长,k为信息位,t为能纠正误码的最大的码位,且RS外码编码的特点是纠正与本组有关的误码,尤其对纠正突发性的误码最有效。通常,n、k、t分别为204、188和8。11-74"EN300(Cable框图,其中包括了数据帧结构(Framingstructure、信道编码及调制。可以看到,使用了RS(204,编码。其中,RS(204,188)码定义如下。理论算法RS译码主要有时域译码和频域译码BM迭代算法或者欧式算(Euclid'sAlgorithBM迭代算法原理及以此算法为基础的RS译码器的FPGARS4步:第一步由接收到的码组计算伴随式;第二步求解关键方程;第三步计算出错误图样;最后由错误图样和接收码组计算出可能发送的码字。图11-75给出了RS译码器的一般步骤框图。RSΛ(x),1966年伯利坎普(Berlekamp)提出了可以由伴随式计算错误位置多项式的迭代译码算法,这极大地加快了求解错误位置多项式的速度,该方法简单且易于实现,从而从工程上解决了RS译码的问题;1969年梅西算法就称为BM迭代译码算法。(1)Reed-Solomon码基本概念RSk(n,C=(Cn-1,…,C1,C0),可用码字多项式表示为:同理,DFT的逆变换IDFT定义为:如果通过接收到的R求出伴随式S,能够解出关键方程,然后又解出(x)和(x)容易地恢复错误图样EChien搜索及Forney算法用于恢复过计算C=R-,就得到了发送码字。下面将介绍关键方程的求解。(3)BM及其改进算法求解关键方程1966年伯利坎普(Berlekamp)年梅西指出了该算法与序列的最短线性移位寄存器综合之间的关系,并进行了简化,因此,此译码算法就称为BM迭代译码算法。在VLSI设计中,RS解码时的关键方程求解比较复杂,主要有以下三种方法:Berlekamp-Massey(BM)算法、EuclideanPGZ(t>3)般认为BM算法涉及到有限inversRS(204,188译码器关键方程求解采用了改进的BM算法,算法迭代时无需求解有限域元素逆inversionles先详细介绍BM算法。3.RS(204,码器建模这里以具体的DVB标准中定义的RS(204,FPGA/VLSI模型。在DVB标准中,RS(204,码定义如下:在图11-82中,"Pow"模块表示生成根i的幂次i,"Exp"表示查表求i的幂,"Inv"用查找表求?(-i)的逆。程序说明本部分将给出RS(204,188)译码器的VerilogHDL程序代码,其中RS码的生成多项式g(x)为:8ForneyChien搜索等模块并行工作。在经过243个字节的固有延需额外的握手控制信号。者参阅。下面首先给出伴随式计算模块程序,如下所示。moduleSCalculate(clk,init,sc_done,r,s_out);parameter t=8, 纠错能3. N=204,//N-RS码长度4. m=8;//m-GF(2m)扩展域input clk,init;input[m-1:0] r;output[m-1:0] s_out;output sc_done; 9.10.reg[m-1:0]s[t*2:1],s_latched[t*2:1];11.wire[m-1:0]r_a[t*2-1:0];integer counter;always@(posedgeclk)begin:SC_BLOCKintegerj;if((init)||(counter==N))beginfor(j=1;j<=t*2;j=j+1)锁存上一帧数据的伴随式,开始新的计算s_latched[j]<=18.19.for(j=1;j<=t*2;j=j+1)20.s[j]<=r;21.counter<=1;22.end23.elseif(counter<=N-1)begin24.for(j=1;j<=t*2;j=j+1)25.s[j]<=r^r_a[j-1];26.counter<=counter+1;27.end28.end29./*下面是有限域的常数乘法器的例化*/30.ff_const_mulr_x_a0(.din(s[1]),.dout(r_a[0]));//a^031.ff_const_mulr_x_a1(.din(s[2]),.dout(r_a[1]));//a^132.ff_const_mulr_x_a2(.din(s[3]),.dout(r_a[2]));//a^233.ff_const_mulr_x_a3(.din(s[4]),.dout(r_a[3]));//a^334.ff_const_mulr_x_a4(.din(s[5]),.dout(r_a[4]));//a^435.ff_const_mulr_x_a5(.din(s[6]),.dout(r_a[5]));//a^536.ff_const_mulr_x_a6(.din(s[7]),.dout(r_a[6]));//a^637.ff_const_mulr_x_a7(.din(s[8]),.dout(r_a[7]));//a^738.ff_const_mulr_x_a8(.din(s[9]),.dout(r_a[8]));//a^839.ff_const_mulr_x_a9(.din(s[10]),.dout(r_a[9]));//a^940.ff_const_mulr_x_a10(.din(s[11]),.dout(r_a[10]));//a^1041.ff_const_mulr_x_a11(.din(s[12]),.dout(r_a[11]));//a^1142.ff_const_mulr_x_a12(.din(s[13]),.dout(r_a[12]));//a^1243.ff_const_mulr_x_a13(.din(s[14]),.dout(r_a[13]));//a^1344.ff_const_mulr_x_a14(.din(s[15]),.dout(r_a[14]));//45.ff_const_mulr_x_a15(.din(s[16]),.dout(r_a[15]));//46.defparamr_x_a0.CONST=15'h4405,r_x_a1.CONST=15'h6202,47. r_x_a2.CONST=15'h7101,r_x_a3.CONST=15'h3880,48.r_x_a4.CONST=15'h1C40, r_x_a5.CONST=15'h0E20,49. r_x_a6.CONST=15'h4710, r_x_a7.CONST=15'h2388,50.r_x_a8.CONST=15'h11C4,51. r_x_a9.CONST=15'h48E2,r_x_a10.CONST=15'h2471,52. r_x_a11.CONST=15'h5238,53.r_x_a12.CONST=15'h691C,r_x_a13.CONST=15'h748E,54.r_x_a14.CONST=15'h3A47,55. r_x_a15.CONST=15'h1D23;56./*sc_done信号,指示后续电路进行新的计算*/reg sc_done;integershift_count;always@(posedgeclk)beginif(counter==N)beginsc_done<=1;shift_count<=1;endelsebeginsc_done<=0;if((0<shift_count)&&(shift_count<=t*2))beginshift_count<=shift_count+1;endelseshift_count<=0;end74.//移位输出伴随式reg[m-1:0]s_out;always@(shift_count)beginif((0<shift_count)&&(shift_count<=t*2))s_out=s_latched[shift_count];elses_out=0;83.84.endmodule对上面的程序有如下的说明。"init"信号是一个包(204)信号。因为RS码的b0=Sj0开始直到1511-7。即:因为整个译码器采用流水线结构,所以在伴随式计算完后,产生一个时钟周期有效的"sc_done"信号,用以启动后续电路进行新的计算。由于在BM算法中,用到了(x)和S(x)Sj串行输出。接下来,给出BM算法求错误位置多项式(x)的程序代码1. //*****************************************2. // 改进的BM算法3. //*****************************************moduleBMA(S,clk,kes_init,kes_done,Lmd0,Lmd1,Lmd2,Lmd3,Lmd4,Lmd5,Lmd6,Lmd7,Lmd8,L,s_out);parameter t=8,N=204, m=8;input clk,kes_init;input[m-1:0]S;output[m-1:0]L,Lmd0,Lmd1,Lmd2,Lmd3,Lmd4,Lmd5,Lmd6,Lmd7,Lmd8;output[m-1:0]s_out;output 12.reg [m-1:0]L;13.reg[m-1:0]B[t:0]; 即所求的错误多项式reg[m-1:0]T[t:0],gamma,delta,16.reg[m-1:0]SSR[t*2:1];wire[m-1:0]S_B[t:0]; //Productof(S*B)integer counter;19.reg[m-1:0] s_latched[t*2:1];reg comput,kes_done;always@(posedgeclk)begin:BM_BLOCKintegerj;if(kes_init)begin 初始化变量delta<=0;25.for(j=2;j<=t*2;j=j+1)26.SSR[j]<=0;27.SSR[1]<=S;counter<=0;endelseif(counter==t*2-1)begin31.delta<=((S_B[0]^S_B[1])^(S_B[2]^S_B[3]))^((S_B[4]^S_B[5])32. ^(S_B[6]^S_B[7]))^S_B[8]; 的值33.for(j=1;j<=t*2-1;j=j+1)34.SSR[j+1]<=SSR[j];35.SSR[1]<=S;for(j=1;j<=t*2;j=j+1) 锁存输入的伴随式序列s_latched[j]<=SSR[j];counter<=counter+1;endelseif(counter<=t*2)begin41.delta<=((S_B[0]^S_B[1])^(S_B[2]^S_B[3]))^((S_B[4]^S_B[5])42. ^(S_B[6]^S_B[7]))^S_B[8]; Δ43.for(j=1;j<=t*2-1;j=j+1)44.SSR[j+1]<=SSR[j];45.SSR[1]<=S;counter<=counter+1;endend49.//S(x)*B(x)50.FF_MulS_x_B0(.B(SSR[1]),.A(B[0]),.P(S_B[0]));51.FF_MulS_x_B1(.B(SSR[2]),.A(B[1]),.P(S_B[1]));52.FF_MulS_x_B2(.B(SSR[3]),.A(B[2]),.P(S_B[2]));53.FF_MulS_x_B3(.B(SSR[4]),.A(B[3]),.P(S_B[3]));54.FF_MulS_x_B4(.B(SSR[5]),.A(B[4]),.P(S_B[4]));55.FF_MulS_x_B5(.B(SSR[6]),.A(B[5]),.P(S_B[5]));56.FF_MulS_x_B6(.B(SSR[7]),.A(B[6]),.P(S_B[6]));57.FF_MulS_x_B7(.B(SSR[8]),.A(B[7]),.P(S_B[7]));58.FF_MulS_x_B8(.B(SSR[9]),.A(B[8]),.P(S_B[8]));59.wire[m-1:0]gamma_B[t:0]; //Productofγ*B(x)wire[m-1:0]delta_T[t-1:0]; //ProductofΔ*T(x)always@(negedgeclk)begin:LABLEintegerj;if(kes_init)beginfor(j=1;j<=t;j=j+1)begin66.B[j]<=0;T[j]<=0;67.end68.B[0]<=1;T[0]<=1;69.L<=0; k<=0; gamma<=1;endelseif(comput)beginB[0]<=gamma_B[0]; B(x)73.for(j=0;j<t;j=j+1)74.B[j+1]<=gamma_B[j+1]^delta_T[j];75.76.if((delta)&&((L<<1)<=k))begin //Condition77.for(j=0;j<=t;j=j+1)78.T[j]<=B[j]; //T[x]=B[x]79.L<=k+1-L;gamma<=delta; //γ=Δendelsebeginfor(j=0;j<t;j=j+1)begin84.T[j+1]<=T[j]; //T[x]=x*T[x];85.end86.T[0]<=0;87.end88.k<=k+1;endend//γ*B(x)FF_Mulgamma_x_B0(.A(gamma),.B(B[0]),.P(gamma_B[0]));FF_Mulgamma_x_B1(.A(gamma),.B(B[1]),.P(gamma_B[1]));FF_Mulgamma_x_B2(.A(gamma),.B(B[2]),.P(gamma_B[2]));FF_Mulgamma_x_B3(.A(gamma),.B(B[3]),.P(gamma_B[3]));FF_Mulgamma_x_B4(.A(gamma),.B(B[4]),.P(gamma_B[4]));FF_Mulgamma_x_B5(.A(gamma),.B(B[5]),.P(gamma_B[5]));FF_Mulgamma_x_B6(.A(gamma),.B(B[6]),.P(gamma_B[6]));FF_Mulgamma_x_B7(.A(gamma),.B(B[7]),.P(gamma_B[7]));FF_Mulgamma_x_B8(.A(gamma),.B(B[8]),.P(gamma_B[8]));101.//Δ*T(x)FF_Muldelta_x_T0(.A(delta),.B(T[0]),.P(delta_T[0]));FF_Muldelta_x_T1(.A(delta),.B(T[1]),.P(delta_T[1]));FF_Muldelta_x_T2(.A(delta),.B(T[2]),.P(delta_T[2]));FF_Muldelta_x_T3(.A(delta),.B(T[3]),.P(delta_T[3]));FF_Muldelta_x_T4(.A(delta),.B(T[4]),.P(delta_T[4]));FF_Muldelta_x_T5(.A(delta),.B(T[5]),.P(delta_T[5]));FF_Muldelta_x_T6(.A(delta),.B(T[6]),.P(delta_T[6]));FF_Muldelta_x_T7(.A(delta),.B(T[7]),.P(delta_T[7]));111.always@(counter)beginif((0<counter)&&(counter<=t*2))comput=1;elsecomput=0;118.integershift_count;always@(posedgeclk)beginif(counter==t*2-1)beginkes_done<=1;shift_count<=1;endelsebeginkes_done<=0;if((0<shift_count)&&(shift_count<=t*2))beginshift_count<=shift_count+1;endelseshift_count<=0;end134.reg[m-1:0]s_out;always@(shift_count)beginif((0<shift_count)&&(shift_count<=t*2))s_out=s_latched[t*2-shift_count+1];elses_out=0;142.assignLmd0=B[0];assignLmd1=B[1];assignLmd2=B[2];assignLmd3=B[3];assignLmd4=B[4];assignLmd5=B[5];assignLmd6=B[6];assignLmd7=B[7];assignLmd8=B[8];endmodule关于改进的BM算法,对程序说明如下。^的计算公式:为了在求出值后,能马上用于计算(k+1),程序中用到了反相时钟,即在时钟上升沿计算,在时钟下降沿计算(k+1)。模块也是串行输出伴随式序列,以便后面的卷积求和。下面的程序代码完成了Forney算法,包括错误计算多项式(x)的计算。1. //******************************************2. //计算:Eiα^i*Ω(α^-i)/Λ`(α^-i)3. //******************************************moduleerror_valuator(clk,init,s,Lmd0,Lmd1,Lmd2,Lmd3,Lmd4,Lmd5,Lmd6,Lmd7,Lmd8,ErrorValue);parameter t=8,N=204, m=8;input clk,init;input[m-1:0]s,Lmd0,Lmd1,Lmd2,Lmd3,Lmd4,Lmd5,Lmd6,Lmd7,Lmd8;output[m-1:0]ErrorValue;11.12./*计算:Ω(x)=Λ(x)*S(x)(modx^2t)*/reg[m-1:0]OmegaC[t*2-1:0],SyndromeSR[t+1:1],LmdC[t:0];wire[m-1:0]sLmdC[t:0];integer counter1;always@(posedgeclk)begin:OMEGA_COEEFICIENTintegerj;if(init)begin19.for(j=2j<=t+1j=j+1)//加载伴随式序列(12t)SyndromeSR[j]<=0;SyndromeSR[1]<=s;//Λ(x)的系数LmdC[0]<=Lmd0;LmdC[1]<=Lmd1;LmdC[2]<=Lmd2;LmdC[3]<=Lmd3;LmdC[4]<=Lmd4;LmdC[5]<=Lmd5;LmdC[6]<=Lmd6;LmdC[7]<=Lmd7;LmdC[8]<=Lmd8;for(j=0j<=t*2-1j=j+1) //OmegaC[j]寄存器OmegaC[j]<=0;counter1<=1;endelseif((0<counter1)&&(counter1<=t*2))begin31.for(j=1;j<=t;j=j+1)SyndromeSR[j+1]<=SyndromeSR[j];SyndromeSR[1]<=s;34.for(j=0;j<t*2-1;j=j+1)OmegaC[j]<=OmegaC[j+1];OmegaC[t*2-1]<=(sLmdC[0]^sLmdC[1])^(sLmdC[2]^sLmdC[3])^(sLmdC[4]^sLmdC[5])^(sLmdC[6]^sLmdC[7])^sLmdC[8];counter1<=counter1+1;endelsecounter1<=0;endFF_Muls_x_Lmdc0(.A(SyndromeSR[1]),.B(LmdC[0]),.P(sLmdC[0]));44.FF_Muls_x_Lmdc1(.A(SyndromeSR[2]),.B(LmdC[1]),.P(sLmdC[1]));45.FF_Muls_x_Lmdc2(.A(SyndromeSR[3]),.B(LmdC[2]),.P(sLmdC[2]));46.FF_Muls_x_Lmdc3(.A(SyndromeSR[4]),.B(LmdC[3]),.P(sLmdC[3]));47.FF_Muls_x_Lmdc4(.A(SyndromeSR[5]),.B(LmdC[4]),.P(sLmdC[4]));48.FF_Muls_x_Lmdc5(.A(SyndromeSR[6]),.B(LmdC[5]),.P(sLmdC[5]));49.FF_Muls_x_Lmdc6(.A(SyndromeSR[7]),.B(LmdC[6]),.P(sLmdC[6]));50.FF_Muls_x_Lmdc7(.A(SyndromeSR[8]),.B(LmdC[7]),.P(sLmdC[7]));51.FF_Muls_x_Lmdc8(.A(SyndromeSR[9]),.B(LmdC[8]),.P(sLmdC[8]));52.53.regComput_Err; //Ω(a^-i)计算的控制信号54.always@(counter1)begin55.if(counter1==(t*2+1))Comput_Err=1;else Comput_Err=0;58.59.//Ω(a^-i),i203~060.reg[m-1:0]OmegaIR[t*2-1:0],OmegaA;61.wire[m-1:0]aOmegaIR[t*2-1:1],a52OmegaC[t*2-1:1];62.always@(posedgeclk)begin:OMEGA_ALPHA63.integerj;64.if(Comput_Err)begin65.for(j=1j<=t*2-1j=j+1) //OmegaIR[j]迭代寄存器66.OmegaIR[j]<=a52OmegaC[j];67.OmegaIR[0]<=OmegaC[0];68.end69.elsebegin //Ω(a^-i)70.for(j=1;j<=t*2-1;j=j+1)71.OmegaIR[j]<=aOmegaIR[j];72.OmegaIR[0]<=OmegaIR[0];73.end74.end75.ff_const_mula1_x_OmegaIR1(.din(OmegaIR[1]),76..dout(aOmegaIR[1]));//a^1*Ω177.ff_const_mula2_x_OmegaIR2(.din(OmegaIR[2]),78..dout(aOmegaIR[2]));//a^2*Ω279.ff_const_mula3_x_OmegaIR3(.din(OmegaIR[3]),80. .dout(aOmegaIR[3])); //a^3*Ω381.82.483.84.585.86.687.88.789.90.891.92.993.94.
ff_const_mula4_x_OmegaIR4(.din(OmegaIR[4]),.dout(aOmegaIR[4])); //a^4*Ωff_const_mula5_x_OmegaIR5(.din(OmegaIR[5]),.dout(aOmegaIR[5])); //a^5*Ωff_const_mula6_x_OmegaIR6(.din(OmegaIR[6]),.dout(aOmegaIR[6])); //a^6*Ωff_const_mula7_x_OmegaIR7(.din(OmegaIR[7]),.dout(aOmegaIR[7])); //a^7*Ωff_const_mula8_x_OmegaIR8(.din(OmegaIR[8]),.dout(aOmegaIR[8])); //a^8*Ωff_const_mula9_x_OmegaIR9(.din(OmegaIR[9]),.dout(aOmegaIR[9])); //a^9*Ωff_const_mula10_x_OmegaIR10(.din(OmegaIR[10]),.dout(aOmegaIR[10])); //a^10*Ω1095.ff_const_mula11_x_OmegaIR11(.din(OmegaIR[11]),96. .dout(aOmegaIR[11])); //a^11*Ω1197.ff_const_mula12_x_OmegaIR12(.din(OmegaIR[12]),98. .dout(aOmegaIR[12])); //a^12*Ω1299.ff_const_mula13_x_OmegaIR13(.din(OmegaIR[13]),100..dout(aOmegaIR[13]));//a^13*Ω13101.ff_const_mula14_x_OmegaIR14(.din(OmegaIR[14]),102..dout(aOmegaIR[14]));//a^14*Ω14103.ff_const_mula15_x_OmegaIR15(.din(OmegaIR[15]),104..dout(aOmegaIR[15]));//a^15*Ω15defparama1_x_OmegaIR1.CONST=15'h6202,a2_x_OmegaIR2.CONST=15'h7101,107.,a3_x_OmegaIR3.CONST=15'h3880,a4_x_OmegaIR4.CONST=15'h1C40108.a5_x_OmegaIR5.CONST=15'h0E20,a6_x_OmegaIR6.CONST=15'h4710,109.a7_x_OmegaIR7.CONST=15'h2388,a8_x_OmegaIR8.CONST=15'h11C4,110.a9_x_OmegaIR9.CONST=15'h48E2,a10_x_OmegaIR10.CONST=15'h2471,a11_x_OmegaIR11.CONST=15'h5238,a12_x_OmegaIR12.CONST=15'h691C,a13_x_OmegaIR13.CONST=15'h748E,a14_x_OmegaIR14.CONST=15'h3A47,a15_x_OmegaIR15.CONST=15'h1D23;114.115.ff_const_mula52_x_OmegaC1(.din(OmegaC[1]),116. .dout(a52OmegaC[1])); //a^52*Ω1117.ff_const_mul118.*Ω2a52_x_OmegaC2(.din(OmegaC[2]),.dout(a52OmegaC[2]));//a^104119.ff_const_mula52_x_OmegaC3(.din(OmegaC[3]),120..dout(a52OmegaC[3]));//a^156*Ω3121.ff_const_mula52_x_OmegaC4(.din(OmegaC[4]),122..dout(a52OmegaC[4]));//a^208*Ω4123.ff_const_mula52_x_OmegaC5(.din(OmegaC[5]),124..dout(a52OmegaC[5]));//a^260*Ω5125.ff_const_mula52_x_OmegaC6(.din(OmegaC[6]),126..dout(a52OmegaC[6]));//a^312*Ω6127.ff_const_mula52_x_OmegaC7(.din(OmegaC[7]),128..dout(a52OmegaC[7]));//a^364*Ω7129.ff_const_mul130.*Ω8a52_x_OmegaC8(.din(OmegaC[8]),.dout(a52OmegaC[8]));//a^416131.ff_const_mula52_x_OmegaC9(.din(OmegaC[9]),132..dout(a52OmegaC[9]));//a^468*Ω9133.ff_const_mula52_x_OmegaC10(.din(OmegaC[10]),134..dout(a52OmegaC[10]));//a^520*Ω10135.ff_const_mula52_x_OmegaC11(.din(OmegaC[11]),136..dout(a52OmegaC[11]));//a^572*Ω11137.ff_const_mula52_x_OmegaC12(.din(OmegaC[12]),138..dout(a52OmegaC[12]));//a^624*Ω12139.ff_const_mula52_x_OmegaC13(.din(OmegaC[13]),140..dout(a52OmegaC[13]));//a^676*Ω13141.ff_const_mula52_x_OmegaC14(.din(OmegaC[14]),142..dout(a52OmegaC[14]));//a^728*Ω14143.ff_const_mula52_x_OmegaC15(.din(OmegaC[15]),144..dout(a52OmegaC[15]));//a^780*Ω15145.defparam146.a52_x_OmegaC1.CONST=15'h6D41,a52_x_OmegaC2.CONST=15'h0D84,147.a52_x_OmegaC3.CONST=15'h1BB9,a52_x_OmegaC4.CONST=15'h1F55,148.a52_x_OmegaC5.CONST=15'h0E20,a52_x_OmegaC6.CONST=15'h6B6A,149.a52_x_OmegaC7.CONST=15'h3C6C,a52_x_OmegaC8.CONST=15'h3CDD,150.a52_x_OmegaC9.CONST=15'h14FA,a52_x_OmegaC10.CONST=15'h2471,151.a52_x_OmegaC11.CONST=15'h535B,a52_x_OmegaC12.CONST=15'h39E3,a52_x_OmegaC13.CONST=15'h7DE6, a52_x_OmegaC14.CONST=15'h10A7,a52_x_OmegaC15.CONST=15'h1D23;154.155./*计算:Λ'(α^-i)*/156.reg[m-1:0]DifLmdIR[3:0],DifLmdA;157.wire[m-1:0]aDifLmdIR[3:1],a52LmdC[3:1];always@(posedgeclk)beginif(Comput_Err)begin //Λ'(x)的系数DifLmdIR[0]<=LmdC[1]; DifLmdIR[1]<=a52LmdC[1];DifLmdIR[2]<=a52LmdC[2];DifLmdIR[3]<=a52LmdC[3];endelsebegin //Λ'(α^-i)DifLmdIR[1]<=aDifLmdIR[1];DifLmdIR[2]<=aDifLmdIR[2];DifLmdIR[3]<=aDifLmdIR[3];endendff_const_mula2_x_DifLmdIR1(.din(DifLmdIR[1]),.dout(aDifLmdIR[1])); //a^2*Ω1ff_const_mula4_x_DifLmdIR2(.din(DifLmdIR[2]),.dout(aDifLmdIR[2])); //a^4*Ω1ff_const_mula6_x_DifLmdIR3(.din(DifLmdIR[3]),.dout(aDifLmdIR[3])); //a^6*Ω1175.defparam176.a2_x_DifLmdIR1.CONST=15'h7101, a4_x_DifLmdIR2.CONST=15'h1C40,177.a6_x_DifLmdIR3.CONST=15'h4710;178.179.ff_const_mula52_x_LmdC3(.din(LmdC[3]),180..dout(a52LmdC[1]));//a^104*Ω1181.ff_const_mula52_x_LmdC5(.din(LmdC[5]),182..dout(a52LmdC[2]));//a^208*Ω2183.ff_const_mula52_x_LmdC7(.din(LmdC[7]),184. .dout(a52LmdC[3])); //a^312*Ω3defparama52_x_LmdC3.CONST=15'h0D84,a52_x_LmdC5.CONST=15'h1F55,a52_x_LmdC7.CONST=15'h6B6A;188./*α^ii*/reg[m-1:0]ExpIndex;always@(posedgeclk)beginif(Comput_Err)ExpIndex<=N-1;else ExpIndex<=ExpIndex-1;195.always@(posedgeclk)beginOmegaA<=(OmegaIR[0]^OmegaIR[1])^(OmegaIR[2]^OmegaIR[3])^(OmegaIR[4]^OmegaIR[5])^(OmegaIR[6]^OmegaIR[7])^(OmegaIR[8]^OmegaIR[9])^(OmegaIR[10]^OmegaIR[11])^(OmegaIR[12]^OmegaIR[13])^(OmegaIR[14]^OmegaIR[15]);DifLmdA<=DifLmdIR[0]^DifLmdIR[1]^DifLmdIR[2]^DifLmdIR[3];203.204.//计算:α^i*Ω(α^-i)wire[m-1:0]AlphaPower,OmegaAlpha;FF_Mul_ROmega_x_AlphaPower(.clk(clk),.A(OmegaA),.B(AlphaPower),.P(OmegaAlpha));211.//计算Ei=α^i*Ω(α^-i)/Λ'(α^-i)-i)wire[m-1:0]InvDifLmdA;FF_Mul_ROmegaAlpha_x_InvDifC(.clk(clk),.A(OmegaAlpha),.B(InvDifLmdA),.P(ErrorValue));//InversionofΛ'(α^-i)rom_inv DifC_Inv(.clock(clk),.address(DifLmdA),.q(InvDifLmdA));//查表求α^i的幂rom_powerlpha_Power(.clock(clk),.address(ExpIndex),.q(AlphaPower));223.224.endmodule对程序说明如下:下面的VerilogHDL代码实现了Chien搜索功能。1. //******************************************2. // Chien搜索模块3. //******************************************4.moduleChienSearch(clk,init,5.Lmd0,Lmd1,Lmd2,Lmd3,Lmd4,Lmd5,Lmd6,Lmd7,Lmd8,6.Err_Indicator);7.8.9.
Lmd8;
parameter t=8,N=204,m=8,Delay_Length=18;input clk,init;input[m-1:0] Lmd0,Lmd1,Lmd2,Lmd3,Lmd4,Lmd5,Lmd6,Lmd7,output Err_Indicator;reg Err_Indicator;reg[m-1:0] LmdIR[t:0]; //迭代寄存wire[m-1:0] LmdIR_a[t:1],a52Lmd[t:1];always@(posedgeclk)begin:CHEIN_SEARCHintegerj;if(init)beginfor(j=1;j<=t;j=j+1)LmdIR[j]<=a52Lmd[j];LmdIR[0]<=Lmd0;endelsebeginfor(j=1;j<=t;j=j+1)LmdIR[j]<=LmdIR_a[j];LmdIR[0]<=LmdIR[0];endendff_const_mulLmdIR_x_a1(.din(LmdIR[1]),.dout(LmdIR_a[1]));//LmdIR1*a^1ff_const_mulLmdIR_x_a2(.din(LmdIR[2]),.dout(LmdIR_a[2]));//LmdIR2*a^2ff_const_mulLmdIR_x_a3(.din(LmdIR[3]),.dout(LmdIR_a[3]));//LmdIR3*a^3ff_const_mulLmdIR_x_a4(.din(LmdIR[4]),.dout(LmdIR_a[4]));//LmdIR4*a^
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国新能源汽车充电设施行业供需分析投资价值规划分析报告
- 2026中国智能家电配件行业市场现状发展及投资评估规划研究报告
- 2026生物技术行业市场深度研究及投资前景展望分析研究报告
- 2026山东科技行业风险投资趋势研究及投资融资策略分析报告
- 2026年甘肃省庆阳市高考冲刺模拟生物试题含解析
- 2026中国智能抄表系统行业市场供需分析及投资评估规划分析研究报告
- 2026生物制药行业发展前景与投资机遇分析
- 2026马其顿农业资源开发现状市场分析竞争格局投资评估规划研究报告
- 2026轻工业品市场分析与发展前景深度研究
- 康复治疗学专升本试题及答案
- 内蒙古自治区乌兰察布市2026年初一入学数学分班考试真题含答案
- 2026中国资源循环集团电池有限公司招聘4人备考题库及答案详解(易错题)
- 2026年卫星低轨星座建设项目可行性研究报告
- 2026年高考语文全国二卷真题卷及答案
- 人工智能时代的教育变革
- (英语)英语动词常见题型及答题技巧及练习题(含答案)
- 工程造价专业数字化教学改革研究
- 信访干部业务知识培训课件
- 2025外研社小学英语四年级上册单词表(带音标)
- WST368-2025医院空气净化管理标准培训
- 康复知识培训课件
评论
0/150
提交评论