📄 crc16bits.v
字号:
//-----------------------------------------------------------------------------------
//16位循环冗余校验码芯片设计
//输入:data_in:原始数据.
// crc_in:CRC校验的生成多项式.
// EN:输出使能信号.
//-----------------------------------------------------------------------------------
module CRC16bits(EN, crc_in, data_in, crc_out, valid);
input [15:0] crc_in;
input [7:0] data_in;
input EN;
output [15:0] crc_out;
output valid;
reg [15:0] crc_out;
reg valid;
always @ (crc_in or data_in or EN)
begin
if(EN == 1)
begin
valid = 1'b0;
crc_out[0] = data_in[7] ^ data_in[6] ^ data_in[5] ^ data_in[4] ^ data_in[3] ^
data_in[2] ^ data_in[1] ^ data_in[0] ^ crc_in[8] ^ crc_in[9] ^
crc_in[10] ^ crc_in[11] ^ crc_in[12] ^ crc_in[13] ^
crc_in[14] ^ crc_in[15];
crc_out[1] = data_in[7] ^ data_in[6] ^ data_in[5] ^ data_in[4] ^ data_in[3] ^ data_in[2] ^
data_in[1] ^ crc_in[9] ^ crc_in[10] ^ crc_in[11] ^
crc_in[12] ^ crc_in[13] ^ crc_in[14] ^ crc_in[15];
crc_out[2] = data_in[1] ^ data_in[0] ^ crc_in[8] ^ crc_in[9];
crc_out[3] = data_in[2] ^ data_in[1] ^ crc_in[9] ^ crc_in[10];
crc_out[4] = data_in[3] ^ data_in[2] ^ crc_in[10] ^ crc_in[11];
crc_out[5] = data_in[4] ^ data_in[3] ^ crc_in[11] ^ crc_in[12];
crc_out[6] = data_in[5] ^ data_in[4] ^ crc_in[12] ^ crc_in[13];
crc_out[7] = data_in[6] ^ data_in[5] ^ crc_in[13] ^ crc_in[14];
crc_out[8] = data_in[7] ^ data_in[6] ^ crc_in[0] ^ crc_in[14] ^ crc_in[15];
crc_out[9] = data_in[7] ^ crc_in[1] ^ crc_in[15];
crc_out[10] = crc_in[2];
crc_out[11] = crc_in[3];
crc_out[12] = crc_in[4];
crc_out[13] = crc_in[5];
crc_out[14] = crc_in[6];
crc_out[15] = data_in[7] ^ data_in[6] ^ data_in[5] ^ data_in[4] ^ data_in[3] ^ data_in[2] ^
data_in[1] ^ data_in[0] ^ crc_in[7] ^ crc_in[8] ^ crc_in[9] ^
crc_in[10] ^ crc_in[11] ^ crc_in[12] ^ crc_in[13] ^
crc_in[14] ^ crc_in[15];
end
else
begin
crc_out[15:0] = 4'H0000;
valid = 1'b1;
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -