CRC16、扰码、解扰码器并行方案原理和VerilogHDL程序设计解读.pdf

上传人:tbuqq 文档编号:4933814 上传时间:2020-01-14 格式:PDF 页数:15 大小:1.09MB
返回 下载 相关 举报
CRC16、扰码、解扰码器并行方案原理和VerilogHDL程序设计解读.pdf_第1页
第1页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《CRC16、扰码、解扰码器并行方案原理和VerilogHDL程序设计解读.pdf》由会员分享,可在线阅读,更多相关《CRC16、扰码、解扰码器并行方案原理和VerilogHDL程序设计解读.pdf(15页珍藏版)》请在三一文库上搜索。

1、课 程 设 计 课程名称现代通信原理与技术课程设计 题目名称CRC16 、扰码/ 解扰码器并行方 案原理和 Verilog HDL程序设计 2013 年 10 月 25 日 1 目录 一、 CRC16并行算法原理 二、 CRC16并行算法的Verilog HDL程序设计 三、扰码 / 解扰码器并行算法原理 四、扰码 / 解扰码器并行算法的Verilog HDL程序设计 五、参考文献 2 一、CRC16 并行算法原理 1、CRC编码原理 在数字通信中, 可能会因为各种原因导致数据在传输过程中或接收时发生错误,为了保 证数据传输的可靠性和数据校验的高效性,常常采用一些差错控制方法。冗余校验(CRC

2、 ) 就是一种被广泛采用的差错控制方法和数据编码方法。 它具有编码和解码方法简单,剪错和纠错能力强等特点,能有效地对数据进行编码,并 可以显著的提高系统的剪错能力,从而保证数据的可靠性和正确性,因此在大多数的以太网 协议中都采用了CRC 的校验来进行差错控制。 CRC主要有两种, 即非标准的由用户定义的CRC的生成多项式和国际标准化组织规定的 标准的生成多项式。其中第二中应用广泛,国际标准化组织规定的几种主要常见的CRC 如表 所示。 CRC编码是根据CRC检验原理得出的一种编码方法,其基本思想是: 利用线性编码理论, 在发送方向根据要传输的K位二进制序列, 以一定的规则产生r 位校验用的监督

3、吗 (CRC 码) , 并附在信息位之后,构成一个新的二进制代码序列共n=k+r 位。在接收方, 则根据信息码和 CRC 码之间的规则进行校验,以确定传输中是否出现错误。 对一个数据进行编码,就是原始数据通过某种算法,得到一个新的数据。而这个新的数 据与原始数据有着固定的内在联系。通过把原始数据和新的数据组合在一起形成新的数据, 因此这个数据具有自我校验的能力。将原始数据表示为P (x) ,它是一个n 阶多项式表示为; 式子中,为数据位; x 为伪变量,用指明各位间的排列位置。 在对这个数据进行编码的时,CRC生成多项式G (x) ,并在带编码的二进制多项式P ( x) 的末尾添加r 个 0,

4、这样对应的二进制多项式升幂为。再用生成多项式G(x)去除 ,求得余数为r-1 阶的二进制多项式R(x) 。R(x)即为所求的CRC校验码多项式。 最后用以模 2 的方法减去R (x) ,则对应的二进制序列就是包含了CRC 校验码的待发 送字符串,也就是编码后的数据。 3 式中: Q(x)是商多项式; R(x) 是余数多项式; T(x) 是编码后的数据。 2、CRC_16并行算法原理 在利用 CRC_16串行编码电路对输入进行编码时,它的输入数据是串行输入的,因此数 据传输效率低, 它的运算速度的提高完全依赖于系统时钟频率的提高,不能满足现在的低功 耗下的数据快速传输,如果将数据进行并行处理,就

5、可以在较低的时钟频率下快速的处理数 据,因此,本次设计采用并行的CRC_16 。 最常见的 CRC校验码电路采用的是线性反馈寄存器LFSR实现,对于CRC_16 ,其生成多 项式为, 所以对应的系数016 为: :1010000000000011 , 由此可以得到CRC_16 编码电路结构图,如图所示。 从图中可以看出,各位移位寄存器当前存储的数据为CRC余数值, 16 个 D 触发器输出 从 右 至 左 依 次 为。 输 入 的 信 息 码 元 为I。 令 表示编码以为寄存器当前所处的状态,I=I0 I1.I7表示第1 至第 8 个时钟的信息码元输入,向量表示编码器的下一个状态, D(8)

6、表示第 8 个时钟周期后CRC编码器中移位寄存器所处的状态,则设计8bit并行的 CRC 逻辑编码器就是找出函数关系。 第 1 个时钟周期后的编码寄存器状态为: 4 可以将以上表达式组成矩阵乘法,有: 其中, 第 2 个时钟周期后的编码寄存器状态为: 以此类推则有: 假设用 crc_reg15:0表示移位寄存器初始状态,crc_in8:0表示并行输 入的 8bit数据, crc_reg815:0表示 8bit并行编码后的移位寄存器状态,则 5 3、CRC_16并行仿真输出波形 如图所示是CRC_16 并行编码电路测试程序的仿真结果,输入信号时crc_in ,没有完全 输入编码器是, 输入信号c

7、rc_in作为 crc_out端口输出数据; 当 d_finish信号为高电平指 示数据输入完成时,将线性移位寄存器crc_reg中的校验位并行8 位输出到 crc_out端口。 由图可以看出输入信号与输出存在一个时钟周期的延时。 二、CRC16 并行算法的 Verilog HDL程序设计 1、CRC_16校验码的并行编码程序 module CRC_16(clk,rst,load,d_finish,crc_in,crc_out); input clk,rst; input load; / 开始编码信号 input d_finish; / 编码结束信号 input 7:0 crc_in; /编码

8、器并行8bit数据输入 output 7:0 crc_out; /编码器并行8bit数据输出 reg 7:0 crc_out; /数据输出寄存器 reg 15:0 crc_reg; /编码器移位寄存器 reg 1:0 count; 6 reg 1:0 state; wire 15:0 next_crc_reg; /移位寄存器输入变量 parameter idle = 2b00; parameter compute = 2b01; parameter finish = 2b10; / 寄存器输出和寄存器初始状态以及输入码字组合逻辑关系 assign next_crc_reg0 = (crc_in

9、7:0) (crc_reg15:8); assign next_crc_reg1 = (crc_in6:0) (crc_reg15:9); assign next_crc_reg2 = crc_in7 crc_in6 crc_reg9 crc_reg8; assign next_crc_reg3 = crc_in6 crc_in5 crc_reg10 crc_reg9; assign next_crc_reg4 = crc_in5 crc_in4 crc_reg11 crc_reg10; assign next_crc_reg5 = crc_in4 crc_in3 crc_reg12 crc_

10、reg11; assign next_crc_reg6 = crc_in3 crc_in2 crc_reg13 crc_reg12; assign next_crc_reg7 = crc_in2 crc_in1 crc_reg14 crc_reg13; assign next_crc_reg8 = crc_in1 crc_in0 crc_reg15 crc_reg14 crc_reg0; assign next_crc_reg9 = crc_in0 crc_reg15 crc_reg1; assign next_crc_reg14:10 = crc_reg6:2; assign next_cr

11、c_reg15 = (crc_in7:0) (crc_reg15:7); always (posedge clk or negedge rst) begin if(!rst) begin state = idle; count = 2b00; end else begin case(state) idle : begin if(load) state = compute; else state = idle; end compute : begin if(d_finish) state = finish; else state = compute; end finish : begin if(

12、count = 2) begin state = idle; end else begin 7 count = count + 1; state = finish; end end endcase end end always (posedge clk or negedge rst) begin if(!rst) begin crc_reg15:0 = 16b0000_0000_0000_0000; end else begin case(state) idle : begin /寄存器装初值状态 crc_reg15:0 = 16b0000_0000_0000_0000; end comput

13、e : begin /编码计算状态 crc_reg15:0 = next_crc_reg15:0; crc_out7:0 = crc_in7:0; end finish : begin /编码结束状态 crc_reg15:0 = crc_reg7:0,8b0000_0000; crc_out7:0 = crc_reg15:8; end endcase end end Endmodule 2、CRC_16仿真测试文件程序 module CRC_16_test; reg clk; reg rst; reg load; reg d_finish; reg 7:0 crc_in; wire 7:0 c

14、rc_out; parameter clk_period = 40; initial begin #clk_period clk = 1; #clk_period rst = 0; #clk_period rst = 1; #clk_period crc_in7:0 = 8b1010_1010; /输入待编码数据 8 #clk_period load = 1; #clk_period load = 0; #clk_period d_finish = 0; #(10*clk_period) d_finish = 1; #clk_period d_finish = 0; end always #(

15、clk_period/2) clk = clk; always #(clk_period) crc_in7:0 = crc_in7:0; /输入待编码数据 CRC_16 u1(.clk(clk), .rst(rst), .load(load), .d_finish(d_finish), .crc_in(crc_in), .crc_out(crc_out); Endmodule 三、扰码 / 解扰码器并行算法原理 1、扰码 / 解扰码器并行算法原理 在数字通信系统中,若经常出现长的 “0”或“1”系列, 将会影响位同步的建立和保持。 为了解决这个问题以及限制电路中存在的不同程度的非线性特性对其他

16、电路通信造成的串 扰,要求数字信号的最小周期足够长。将数字信号变成具有近似于白噪声统计特性的数字序 列即可满足要求,这通常用加扰来实现。而所谓加扰,就是不用增加冗余而扰乱信号,改变 数字信号统计特性,使其具有近似白噪声统计特性的一种技术。这种扰乱是有规律可循的, 因此也是可以解除的。 扰码的作用就是对输入的信号进行随机化处理,以减少数据的连0 连 1 数目,确保接收 端的位同步提取,并同时扩展基带信号频率,起到加密效果。 这种加扰的基础建立在伪随机 序列理论的基础上,其工作原理就是在发送端用加扰来改变原来数字的统计特性,而在接收 端用解扰器恢复原始的数字信号。 扰码产生是通过循环移位寄存器来实

17、现的,而扰码生成多项式决定循环移位寄存器的结 构。这次设计以ITU-T 推荐的 SDH (同步数字体系)使用的扰码生成多项式: X 7 + X 6 + 1 设扰码的输入数字序列为tk ,输出为 Sk ;解码器的输入为Sk ,输出为 rk 。 扰码器的输入和输出序列关系为: 解扰码器的输入和输出序列关系为: 2、并行加扰器设计 在高速的数据传输过程中,为了满足数据高速处理的需要,一般扰码器和解码器通常采 用并行的方式来实现。并行扰码的原理基于特征多项式X 7 + X6 + 1,加扰器电路结构如图所 示。 9 假设每个触发器的输出端分别是假设为 最低位触发器的输入,那么每个触发器的关系如下 : 令

18、 i=7 以及 i=6 代入上式可得: 对于上述的几个关系式可以用矩阵乘法来表示。 对于 8 位并行扰码,需要知道( N+8 )时刻输出相对于N时刻的关系,在上 式中令 经过计算可得: 10 即 上述式子就是并行扰码的理论基础。 根据上述式子,假设并行8 位输入数据为scram_in7:0,扰码器的并行8 位输出数据 为 scram_out7:0,shift_reg6:0,是加扰器的移位寄存器的初始状态加扰器复位后初 始状态一般为shift_reg6:0=7b111_1111,则可以得并行8 位数据输入后加扰器输出数 据和加扰器输入数据以及移位寄存器初始状态的关系式: 3、并行解扰器设计 并行

19、加扰器电路设计原理和并行加电路设计原理一样,如图所示为解扰码器 的电路图: 11 解扰器电路结构 假 设 解 扰 器 电 路 输 入 时descram_in7:0, 解 码 电 路 输 出 是 descram_out7:0,移位寄存器是shift_ren7:0,可以根据并行扰码的推导 方法导出解扰器输出和解扰器输入以及移位寄存器初始状态的逻辑关系式: 4、仿真输出波形 如图所示是并行加扰/ 解扰器的仿真输出波形,从图中可以看出测试文件输入初始为 00000001 的 8 位数据, 每来一个时钟该数据加1,该数据经过加扰器并行扰码后将数据送给 并行解码器解扰,加扰器的输出作为解扰器的输入,由图中

20、可以看出,连 0 和连 1 的个数最 多 8 个,同时加扰器输入数据与解扰器输出数据相同,只差一个时钟周期的运算延时。 四、扰码 / 解扰码器并行算法的Verilog HDL程序设计 1、扰码器的程序 module parallel_scrambler(clk, rst_n, scram_in, scram_out); input clk,rst_n; /rst_n为复位信号,低电平有效 input 7:0 scram_in; /扰码数据输入 output 7:0 scram_out; /扰码数据输出 12 reg 7:0 shift_reg; /反馈移位寄存器 /输出的反馈异或关系 assi

21、gn scram_out7:0 = shift_reg 7:0; always (posedge clk or negedge rst_n) begin if(!rst_n) /已将 rst改为 !rst(考虑到可综合性问题) shift_reg = 8b1111_1111; else begin /寄存器反馈异或关系 shift_reg7:2 = shift_reg6:1 shift_reg5:0 scram_in7:2; shift_reg1 = shift_reg0 shift_reg6 shift_reg5 scram_in7 scram_in1; shift_reg0 = shift

22、_reg6 shift_reg4 scram_in7 scram_in6 scram_in0; end end Endmodule 2、解扰码器的程序 module parallel_decrambler(clk,rst_n,descram_in,descram_out); input clk,rst_n; /rst_n为复位信号,低电平有效 input 7:0 descram_in; /扰码数据输入 output 7:0 descram_out; /扰码数据输出 reg 6:0 shift_reg; /反馈移位寄存器 assign descram_out7:2 = shift_reg6:1

23、shift_reg5:0 descram_in7:2; assign descram_out1 = shift_reg0 descram_in7 descram_in1; assign descram_out0 = descram_in7 descram_in6 descram_in0; always(posedge clk or negedge rst_n)begin if(!rst_n) /已将 rst改为 !rst(考虑到可综合性问题) shift_reg 6:0 = 7b111_1111; else begin shift_reg6:0 = descram_in6:0; end end

24、 Endmodule 3、测试文件的Verilog HDL程序 module parallel_scram_test; reg clk; reg rst_n; reg 7:0 scram_in;/扰码器的输入端 wire 7:0 scram_out; /既是扰码器的输出端,也是解扰器的输入端 wire 7:0 descram_out; /解扰器的输出端 parameter period = 20; initial begin clk = 1; 13 rst_n = 0; /已将 rst_n = 1改为 rst_n = 0 scram_in7:0 = 8b000_0001; #period rs

25、t_n = 1; /已将 rst_n = 0改为 rst_n = 1 end /根据第 8 章,伪随机序列产生的原理,产生一个伪随机的序列作为加扰器的输入 数据, /该伪随机序列的生成多项式为x8 + x4 + x3 + x2 + 1 always #(period/2) clk =clk; always (posedge clk) begin scram_in 7:0 = scram_in7:0+1; end /加扰、解扰器模块调用 parallel_scrambler u1 (.clk(clk), .rst_n(rst_n), .scram_in(scram_in), .scram_out(scram_out); parallel_decrambler u2 (.clk(clk), .rst_n(rst_n), .descram_in(scram_out), .descram_out(descram_out); endmodule 五、参考文献 现代通信原理 ,樊昌信,人民邮电出版社 基于 Verilog HDL的通信系统设计 ,陈曦,中国水利水电出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1