CRC校验
0赞
发表于 6/8/2014 2:11:06 PM
阅读(2566)
小试一下CRC校验的verilog实现,采用最stupid的直接法。
/*
date : 2014/06/06
designer : pengxiaoen
virsion : Altera-Modelsim 6.6d
function Straightforward CRC Implementation
*/
module CRC_stra (
clock ,
reset ,
and_crc_code
);
input clock,reset ;
output [13:0] and_crc_code ;
parameter un_crc_code = 10'b11_0101_1011, //10位 待测数据
gener_code = 5'b10011; //生成项
reg [3:0] cnt ; //计算次数 = 待测数据的位数 - 1
reg [4:0] crc_code ; //余数缓存器
reg [9:0] code_reg ; //待测数据缓存
always @ (posedge clock )
if(!reset)
begin
cnt <= 3'd0 ;
crc_code <= 5'd0 ;
code_reg <= un_crc_code ;
end
else
begin
if(cnt==0)
begin
cnt <= cnt + 4'd1;
code_reg <= code_reg<<1 ; //
crc_code <= {gener_code[3:0] ^ code_reg[8:5] ,code_reg[4]};
end
else if((cnt<=4'd8) &&(cnt))
begin
cnt <= cnt + 4'd1;
code_reg <= code_reg<<1 ;
if(crc_code[4])
crc_code <= {gener_code[3:0] ^ crc_code[3:0] ,code_reg[4]};
else
crc_code <= {crc_code[3:0], code_reg[4]};
end
else
begin
cnt = 4'd9;
end
end
assign and_crc_code = (cnt == 4'd9) ? {un_crc_code,crc_code[3:0]} : 14'dz;
endmodule
