?? 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 + -