55 lines
1.3 KiB
Verilog
55 lines
1.3 KiB
Verilog
//-----------------------------------------------------
|
|
// Design Name : serial_crc_ccitt
|
|
// File Name : serial_crc.v
|
|
// Function : CCITT Serial CRC
|
|
// Coder : Deepak Kumar Tala
|
|
//-----------------------------------------------------
|
|
module serial_crc_ccitt (
|
|
clk ,
|
|
reset ,
|
|
enable ,
|
|
init ,
|
|
data_in ,
|
|
crc_out
|
|
);
|
|
//-----------Input Ports---------------
|
|
input clk ;
|
|
input reset ;
|
|
input enable ;
|
|
input init ;
|
|
input data_in ;
|
|
//-----------Output Ports---------------
|
|
output [15:0] crc_out;
|
|
//------------Internal Variables--------
|
|
reg [15:0] lfsr;
|
|
//-------------Code Start-----------------
|
|
assign crc_out = lfsr;
|
|
// Logic to CRC Calculation
|
|
always @ (posedge clk)
|
|
if (reset) begin
|
|
lfsr <= 16'hFFFF;
|
|
end else if (enable) begin
|
|
if (init) begin
|
|
lfsr <= 16'hFFFF;
|
|
end else begin
|
|
lfsr[0] <= data_in ^ lfsr[15];
|
|
lfsr[1] <= lfsr[0];
|
|
lfsr[2] <= lfsr[1];
|
|
lfsr[3] <= lfsr[2];
|
|
lfsr[4] <= lfsr[3];
|
|
lfsr[5] <= lfsr[4] ^ data_in ^ lfsr[15];
|
|
lfsr[6] <= lfsr[5];
|
|
lfsr[7] <= lfsr[6];
|
|
lfsr[8] <= lfsr[7];
|
|
lfsr[9] <= lfsr[8];
|
|
lfsr[10] <= lfsr[9];
|
|
lfsr[11] <= lfsr[10];
|
|
lfsr[12] <= lfsr[11] ^ data_in ^ lfsr[15];
|
|
lfsr[13] <= lfsr[12];
|
|
lfsr[14] <= lfsr[13];
|
|
lfsr[15] <= lfsr[14];
|
|
end
|
|
end
|
|
|
|
endmodule
|