mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			54 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
 |