基于cpld与fpga的循环码编与译码器的建模与设计内容摘要:

() 00011010011010()0110100()1101000()x g xx g xGx g xgx    ( x)= ( ) 根据生成矩阵,我们利用循环码自生的循环性,可以方便的实现编码器。 仍然 以( 7,4)循环码为例,若输入信息码元为 3( ) 1u x x ,则: 7 4 3 3 6 2 3( ) ( 1 ) m o d ( 1 )nkx u x x x x x x x x x         因此,码多项式为 : 2 7 4 3 2 3 6( ) ( ) ( ) ( 1 )nkc x r x x u x x x x x x x x x          其中 2()r x x x 为信息码元置为高位后整除生成多项式后的余式,它正好对应于校验序列。 因此对应的输出码字为: (0111001)c ,其中最右边的 4位为信息元。 循环码编码器的结构可用图。 XXX 10 D 0 D 1 D 2门输 入 u ( x )21输 出 码 字 图 循环码编码器原理 利用该结构进行编码的过程如下: 3 级移位寄存器初值为 000,这时门选 为 通,信息组以 30,...,uu次序分两路输入,一路直接输出,另一路送入 g(x)除法电路。 经过 4 次移位后,信息组全部输出。 另一路则将全部信息元 送入 到 除法电路,并完成除法运算,这是移位寄存器中的状态就是码的监督元 0 1 2( , , )c c c。 输出开关倒向第二个支路,经 3次移位后,移位器由监督元跟在信息元后依次输出编码码字 C。 重复上述过程进行下一组信息码元编码。 根据以上思路,设计编码器源代码如下。 其中输入和输出码元均采用并行方式。 ( 7,4)循环码编码器代码: 主模块代码: Module cycle(c,u,clk)。 output[6:0] c。 //c为编码输出码字, c[0]~c[3]为信息码元, c[4]~c[6]为监督码元 input [3:0] u。 input clk。 reg[2:0] i。 reg d0,d1,d2,temp。 reg[6:0] c。 always @(posedge clk) XXX 11 begin d0=0。 d1=0。 d2=0。 //初始化 for(i=0。 i4。 i=i+1) //该 for循环计算码组的前 4个 码元 begin c[i]=u[i]。 temp=d2^c[i]。 d2=d1。 d1=d0^temp。 d0=temp。 end for(i=4。 i7。 i=i+1) //该 for循环计算码组的后 3个码元 begin c[i]=d2。 d2=d1。 d1=d0。 d0=0。 end end endmodule 测试模块代码: module test。 // Inputs reg [3:0] u。 reg clk。 // Outputs wire [6:0] c。 // Instantiate the Unit Under Test (UUT) cycle uut ( .c(c), XXX 12 .u(u), .clk(clk) )。 initial begin // Initialize Inputs u = 0。 clk = 0。 end always 10 clk=!clk。 always@(posedge clk) begin u=u+439。 b0011。 end endmodule 采用 ModelSim SE软件进行仿真,得到下面的波形图: 图 循环码编码器仿真时序图 循环码译码器 由于循环码的任一多项式 T( x) 均能被 g(x)整除,因此可以利用接收到的码组 y(x)去除以生成多项式 g(x)来检错。 若码元无错,则 y(x)可被 g(x)整除,余项为零。 若 y(x)有错,整除后的余项不为零。 若要进一步纠错,可利用伴随子和错误图样的关系。 XXX 13 ( 7,4)循环码可以纠正码字 7个码元中的任何单个错误,利用伴随子进行 纠错的过程如表 所示。 表 g(x)生成( 7, 4)循环 码纠错过程 错误图样 e(x) 伴随子 s(x) 伴随矢量 012sss 移位次数 I 移位后伴随子矢量012sss 6e 21x 101 0 101 5e 21 xx 111 1 101 4e 2xx 011 2 101 3e 21x 110 3 101 2e 2x 001 4 101 1e x 010 5 101 0e 1 100 6 101 由表 ,若错误图样 6()ex x ,即 6x 位置上有错,则接收矢量 y(x)全部进入伴随式寄存器后,伴随式为( 101)。 检测到这种伴随式说明 6y 上的数据必须纠正。 如果某个单个错误出现在 ix 位置,则 y(x)进入伴随式寄存器后,伴随式经过 i次移位仍然是( 101)。 且缓存器输出的接收数据是一个错误数据,所以译码时只需要检测 ( 101)伴随式。 根据上述分析,利用接收码字中单个错误出现在首位的错误图样及相应的伴随式,设计译码器的原理框图如图。 s 0 s 1 s 27 级 缓 存 器接 收 码 字y ( x )e输 出 码字 XXX 14 图 循环码译码器原理图 译码器的工作步骤如下: 将移位寄存器清零。 接收码字 y分两路进入译码器(高次项在前),一路进入缓存器,另一路进入伴随式计算电路,并分别计算 s0、 s s2值。 在输出 c的同时, s0、 s s2依次循环移位。 若无错,则错误检测电路无输出;若有错,则错误检测电路输出为 “ 1”。 它与 y 中相应错误位进行 模 2 运算 (异或),纠错后输出。 同时该纠错信号也送到伴随式计算电路对寄存器清 0(见图 )。 其 Verilog源程序如下所示: (7,4)循环码纠错译码器 译码器主模块代码如下: module decoder(c,y,clk)。 output[6:0] c。 //c为输出码字, c[6]为高次项 input[6:0] y。 //y为接收码字, y[6]为高次项 input clk。 reg[6:0] c,c_buf,buffer。 reg temp。 reg s0,s1,s2。 reg e。 //伴随式电路寄存器 integer i。 //错误检测输出信号 always @ (posedge clk) begin s0=0。 s1=0。 s2=0。 //初始化 temp=0。 buffer=y。 //接收码字移入缓存 for(i=6。 i=0。 i=i1) //接收码字进入除法电路 begin e=s0amp。 (~ s1)amp。 temp。 temp=s2。 XXX 15 s2=s1。 s1=s0^temp。 s0=y[i]^temp^e。 end for (i=6。 i=0。 i=i1) //输出纠错译码后的码字 begin e=s0amp。 (~ s1)amp。 temp。 temp=s2。 s2=s1。 s1=s0^temp。 s0=temp^e。 c_buf[i]=buffer[i]^e。 if(e==1) //若出错,对缓存进行清零 begin s0=0。 s1=0。 s2=0。 end end end always @ (posedge clk) begin c=c_buf。 end endmodule module test。 译码器测试模块代码: // Inputs reg [6:0] y。 reg clk。 XXX 16 // Outputs wire [6:0] c。 // Instantiate the Unit Under Test (UUT) decoder uut ( .c(c), .y(y), .clk(clk) )。 initial begin // Initialize Inputs y = 0。 clk = 0。 150 y=839。 b0110100。 100 y=839。 b0010111。 100 y=839。 b0011010。 100 y=839。 b0010111。 100 y=839。 b0001101。 100 y=839。 b0010111。 100 y=839。 b0100011。 100 y=839。 b0010111。 100 y=839。 b0010111。 100 y=839。 b0110100。 end always 50 clk=!clk。 endmodule /译码器的设计 一 系统构成 系统构成框图如图 : 图 故该系统的信号流程为: ( 1)由信号发生器产生输入串行测试数据; ( 2)再将该数据经串 /并变换为并行的数据字; ( 3)然后将此数据字编码产生对应的并行码字; XXX 17 ( 4)将并行码字经并 /串变换产生发送码流; ( 5)将接收码流经串 /并变换产生接收码字; ( 6)将接收码字译码产生对应的并行数据字; ( 7)将并行数据字经并 /串变换产生接收数据流。 故可将整个系统分为以下七个模块: ( 1)控制时钟模块 如图 时钟的模块图, 图 图 图 在该模块中,产生所需要的:输入数据时钟、传输码元时钟、传输码字时钟。 输入数据时钟:如上图 6中的 clk7;传输码元时钟:如下图中的 clk4 传输码字时钟:如上图 6中的 clk28。 由上图 7可知, 3个需要的时钟信号按照 4位数据对应的 7位码的要求被准确产生。 ( 2)信号发生器模块 该模块产生一串行的伪随机码流 c, 作为测试输入数据,其时钟 clk7为输入数据时钟。 如下图 信号发生器的模块图,图 图 图 信号发生器的时序仿真 图 控制时钟的模块图 XXX 18 上图 c即为所产生的伪随机码流,且从上图可知,该码流符合作测试输入数据的要求。 ( 3)串 /并变换器与并 /串变换器模块 A. 串 /并变换器有 2 个:一个为对输入数据的串 /并变换,如下图 所示串 /并变换器 1的时序仿真,图 /并变换器 1的模块图 图 10串 /并变换器 1的时序仿真 图 /并变换器 1的模块图 由上图可知,从输入 din 到输出 dout,该模块实现了 1 位到 4 位的串 /并变换,只是存在 1 个码字周期的延时。 其中 clk7,clk28分别为输入数据时钟和码字时钟。 另一个为接收码流的串 /并变换: 如下图 /并变换器 2的时序仿真,图 /并变换器 2的模块图 图 /并变 换器 2的时序仿真 图 /并变换器 2的模块图 由上图可知,从输入 din 到输出 dout,该模块同样实现了 1位到 7位的串 /并变换,只是存在 1个码字周期的延时。 其中 clk7,clk28分别为接收码元时钟和码字时钟。 B. 并 /串变换器也有 2个: 一。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。