CRC校验码详解+Verilog实现(含代码)

目录

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位信息码(m_{k-1},m_{k-2},..,m_{2},m_{1})则对应的多项式为:

M(x)=m_{k-1}x^{k-1}+m_{k-2}x^{k-2}+...+m_{1}x+m_{0}

 其中,m_{i}=0或1,x的幂次对应于各码元的位置。

M(x)=x^{7}+x^{4}+x^{2}+x 表示 1001 0110

CRC校验码生成步骤

(1)将M(x)左移r=n-k位,即M(x)乘以x^{n-k}得到x^{n-k}\cdot M(x)

(2)将x^{n-k}\cdot M(x)除以生成多项式g(x),得余式r(x)。r(x)为CRC校验码多项式,对应r位校验码元

(3)生成码字:S(x)=x^{n-k}M(x)+r(x)

下面是一个例子: 

 这块的模2除法是按位异或:如果除完之后余数为1 ,则除数上1 ,把被除数按位异或,结果为余数

 CRC码生成多项式

国际上通行的生成多项式:

 一般g(x)位数越高,检测能力越强

 CRC校验码Verilog实现

假设信息码8位,生成码CRC-CCITT 

按照CRC校验码生成步骤操作即可,代码如下: 

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值