目录
CRC码简介
CRC校验码生成步骤
CRC码生成多项式
CRC校验码Verilog实现
CRC即循环冗余校验,是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定
CRC码简介
CRC码是由2部分组成的,前部分是信息码,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的 r=n-k bit即为校验位
比如(7,3)码:110 0111 前三位110为信息码,后四位0111为校验码
设待传送的k位信息码()则对应的多项式为:
其中,=0或1,x的幂次对应于各码元的位置。
如 表示 1001 0110
CRC校验码生成步骤
(1)将M(x)左移r=n-k位,即M(x)乘以得到
(2)将除以生成多项式g(x),得余式r(x)。r(x)为CRC校验码多项式,对应r位校验码元
(3)生成码字:
下面是一个例子:
这块的模2除法是按位异或:如果除完之后余数为1 ,则除数上1 ,把被除数按位异或,结果为余数
CRC码生成多项式
国际上通行的生成多项式:
一般g(x)位数越高,检测能力越强
CRC校验码Verilog实现
假设信息码8位,生成码CRC-CCITT 文章来源:https://www.toymoban.com/news/detail-400525.html
按照CRC校验码生成步骤操作即可,代码如下: 文章来源地址https://www.toymoban.com/news/detail-400525.html
module CRC(
input clk ,
input rst ,
input [7:0] data,//信息码8位
output reg [15:0] crc//crc校验码
);
wire [15:0] crc_temp;//crc校验结果寄存器
reg [23:0] temp ;//移位数据用于除法运算
parameter gx=17'b1_0001_0000_0010_0001;//生成多项式
always@(posedge clk)begin
if(rst)begin
crc<=16'd0;
temp<={data[8:0],16'b0};
end
else begin//(模2除法求余数)
if(temp[23]==1'd1)begin //高位为1 进行异或
temp[23:7]<=temp[23:7]^gx;//从高到低依次取17位(和gx同位宽)进行异或
end
else if(temp[22]==1'd1)begin
temp[22:6]<=temp[22:6]^gx;
end
else if(temp[21]==1'd1)begin
temp[21:5]<=temp[21:5]^gx;
end
else if(temp[20]==1'd1)begin
temp[20:4]<=temp[20:4]^gx;
end
else if(temp[19]==1'd1)begin
temp[19:3]<=temp[19:3]^gx;
end
else if(temp[18]==1'd1)begin
temp[18:2]<=temp[18:2]^gx;
end
else if(temp[17]==1'd1)begin
temp[17:1]<=temp[17:1]^gx;
end
else if(temp[16]==1'd1)begin
temp[16:0]<=temp[16:0]^gx;
end
else begin
crc<=temp[15:0];//取出余数
end
end
end
assign crc_temp={data[8:0],crc[15:0]};
endmodule
到了这里,关于CRC校验码详解+Verilog实现(含代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!