| //----------------------------------------------------- |
| // 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 |