CRC16扰码解扰码器并行方案原理和Verilog HDL程序设计解读Word格式文档下载.docx
- 文档编号:13808301
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:15
- 大小:565.94KB
CRC16扰码解扰码器并行方案原理和Verilog HDL程序设计解读Word格式文档下载.docx
《CRC16扰码解扰码器并行方案原理和Verilog HDL程序设计解读Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《CRC16扰码解扰码器并行方案原理和Verilog HDL程序设计解读Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
其中第二中应用广泛,国际标准化组织规定的几种主要常见的CRC如表所示。
CRC编码是根据CRC检验原理得出的一种编码方法,其基本思想是:
利用线性编码理论,在发送方向根据要传输的K位二进制序列,以一定的规则产生r位校验用的监督吗(CRC码),并附在信息位之后,构成一个新的二进制代码序列共n=k+r位。
在接收方,则根据信息码和CRC码之间的规则进行校验,以确定传输中是否出现错误。
对一个数据进行编码,就是原始数据通过某种算法,得到一个新的数据。
而这个新的数据与原始数据有着固定的内在联系。
通过把原始数据和新的数据组合在一起形成新的数据,因此这个数据具有自我校验的能力。
将原始数据表示为P(x),它是一个n阶多项式表示为;
式子中,为数据位;
x为伪变量,用指明各位间的排列位置。
在对这个数据进行编码的时,CRC生成多项式G(x),并在带编码的二进制多项式P(x)的末尾添加r个0,这样对应的二进制多项式升幂为。
再用生成多项式G(x)去除,求得余数为r-1阶的二进制多项式R(x)。
R(x)即为所求的CRC校验码多项式。
最后用以模2的方法减去R(x),则对应的二进制序列就是包含了CRC校验码的待发送字符串,也就是编码后的数据。
式中:
Q(x)是商多项式;
R(x)是余数多项式;
T(x)是编码后的数据。
2、CRC_16并行算法原理
在利用CRC_16串行编码电路对输入进行编码时,它的输入数据是串行输入的,因此数据传输效率低,它的运算速度的提高完全依赖于系统时钟频率的提高,不能满足现在的低功耗下的数据快速传输,如果将数据进行并行处理,就可以在较低的时钟频率下快速的处理数据,因此,本次设计采用并行的CRC_16。
最常见的CRC校验码电路采用的是线性反馈寄存器LFSR实现,对于CRC_16,其生成多项式为,所以对应的系数0—16为:
:
1010000000000011,由此可以得到CRC_16编码电路结构图,如图所示。
从图中可以看出,各位移位寄存器当前存储的数据为CRC余数值,16个D触发器输出从右至左依次为。
输入的信息码元为I。
令表示编码以为寄存器当前所处的状态,I=[I0I1...I7]表示第1至第8个时钟的信息码元输入,向量表示编码器的下一个状态,D(8)表示第8个时钟周期后CRC编码器中移位寄存器所处的状态,则设计8bit并行的CRC逻辑编码器就是找出函数关系。
第1个时钟周期后的编码寄存器状态为:
可以将以上表达式组成矩阵乘法,有:
其中,
第2个时钟周期后的编码寄存器状态为:
以此类推则有:
假设用crc_reg[15:
0]表示移位寄存器初始状态,crc_in[8:
0]表示并行输入的8bit数据,crc_reg8[15:
0]表示8bit并行编码后的移位寄存器状态,则
3、CRC_16并行仿真输出波形
如图所示是CRC_16并行编码电路测试程序的仿真结果,输入信号时crc_in,没有完全输入编码器是,输入信号crc_in作为crc_out端口输出数据;
当d_finish信号为高电平指示数据输入完成时,将线性移位寄存器crc_reg中的校验位并行8位输出到crc_out端口。
由图可以看出输入信号与输出存在一个时钟周期的延时。
1、CRC_16校验码的并行编码程序
moduleCRC_16(clk,rst,load,d_finish,crc_in,crc_out);
inputclk,rst;
inputload;
//开始编码信号
inputd_finish;
//编码结束信号
input[7:
0]crc_in;
//编码器并行8bit数据输入
output[7:
0]crc_out;
//编码器并行8bit数据输出
reg[7:
//数据输出寄存器
reg[15:
0]crc_reg;
//编码器移位寄存器
reg[1:
0]count;
0]state;
wire[15:
0]next_crc_reg;
//移位寄存器输入变量
parameteridle=2'
b00;
parametercompute=2'
b01;
parameterfinish=2'
b10;
//寄存器输出和寄存器初始状态以及输入码字组合逻辑关系
assignnext_crc_reg[0]=(^crc_in[7:
0])^(^crc_reg[15:
8]);
assignnext_crc_reg[1]=(^crc_in[6:
9]);
assignnext_crc_reg[2]=crc_in[7]^crc_in[6]^crc_reg[9]^crc_reg[8];
assignnext_crc_reg[3]=crc_in[6]^crc_in[5]^crc_reg[10]^crc_reg[9];
assignnext_crc_reg[4]=crc_in[5]^crc_in[4]^crc_reg[11]^crc_reg[10];
assignnext_crc_reg[5]=crc_in[4]^crc_in[3]^crc_reg[12]^crc_reg[11];
assignnext_crc_reg[6]=crc_in[3]^crc_in[2]^crc_reg[13]^crc_reg[12];
assignnext_crc_reg[7]=crc_in[2]^crc_in[1]^crc_reg[14]^crc_reg[13];
assignnext_crc_reg[8]=crc_in[1]^crc_in[0]^crc_reg[15]^crc_reg[14]^crc_reg[0];
assignnext_crc_reg[9]=crc_in[0]^crc_reg[15]^crc_reg[1];
assignnext_crc_reg[14:
10]=crc_reg[6:
2];
assignnext_crc_reg[15]=(^crc_in[7:
7]);
always@(posedgeclkornegedgerst)begin
if(!
rst)begin
state<
=idle;
count<
=2'
end
elsebegin
case(state)
idle:
begin
if(load)
state<
=compute;
else
end
compute:
if(d_finish)
=finish;
finish:
if(count==2)begin
end
elsebegin
count<
=count+1;
endcase
end
if(!
crc_reg[15:
0]<
=16'
b0000_0000_0000_0000;
begin//寄存器装初值状态
crc_reg[15:
begin//编码计算状态
=next_crc_reg[15:
0];
crc_out[7:
=crc_in[7:
begin//编码结束状态
={crc_reg[7:
0],8'
b0000_0000};
=crc_reg[15:
8];
Endmodule
2、CRC_16仿真测试文件程序
moduleCRC_16_test;
regclk;
regrst;
regload;
regd_finish;
wire[7:
parameterclk_period=40;
initialbegin
#clk_periodclk=1;
#clk_periodrst=0;
#clk_periodrst=1;
#clk_periodcrc_in[7:
0]=8'
b1010_1010;
//输入待编码数据
#clk_periodload=1;
#clk_periodload=0;
#clk_periodd_finish=0;
#(10*clk_period)d_finish=1;
always#(clk_period/2)clk=~clk;
always#(clk_period)crc_in[7:
0]=~crc_in[7:
CRC_16u1(.clk(clk),
.rst(rst),
.load(load),
.d_finish(d_finish),
.crc_in(crc_in),
.crc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CRC16扰码解扰码器并行方案原理和Verilog HDL程序设计解读 CRC16 扰码解扰码器 并行 方案 原理 Verilog HDL 程序设计 解读
![提示](https://static.bdocx.com/images/bang_tan.gif)
链接地址:https://www.bdocx.com/doc/13808301.html