quick.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

   

space.gif

   

space.gif

  ../../images/main/bullet_green_ball.gif Parallel CRC

Below code is 16-bit CRC-CCITT implementation, with following features

   

space.gif

  • Width = 16 bits
  • Truncated polynomial = 0x1021
  • Initial value = 0xFFFF
  • Input data is NOT reflected
  • Output CRC is NOT reflected
  • No XOR is performed on the output CRC
   

space.gif


  1 //-----------------------------------------------------
  2 // Design Name : parallel_crc_ccitt
  3 // File Name   : parallel_crc.v
  4 // Function    : CCITT Parallel CRC
  5 // Coder       : Deepak Kumar Tala
  6 //-----------------------------------------------------
  7 module parallel_crc_ccitt (
  8 clk     ,
  9 reset   ,
 10 enable  ,
 11 init    , 
 12 data_in , 
 13 crc_out
 14 );
 15 //-----------Input Ports---------------
 16 input clk     ;
 17 input reset   ;
 18 input enable  ;
 19 input init    ;
 20 input [7:0] data_in ;
 21 //-----------Output Ports---------------
 22 output [15:0] crc_out;
 23 //------------Internal Variables--------
 24 reg [15:0]   crc_reg;
 25 wire [15:0]  next_crc;
 26 //-------------Code Start-----------------
 27 assign crc_out = crc_reg;
 28 // CRC Control logic
 29 always @ (posedge clk)
 30 if (reset) begin
 31   crc_reg <= 16'hFFFF;
 32 end else if (enable) begin
 33   if (init) begin
 34      crc_reg <= 16'hFFFF;
 35   end else begin
 36      crc_reg <= next_crc;
 37   end
 38 end
 39 // Parallel CRC calculation
 40 assign next_crc[0] = data_in[7] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[11];
 41 assign next_crc[1] = data_in[1] ^ crc_reg[5];
 42 assign next_crc[2] = data_in[2] ^ crc_reg[6];
 43 assign next_crc[3] = data_in[3] ^ crc_reg[7];
 44 assign next_crc[4] = data_in[4] ^ crc_reg[8];
 45 assign next_crc[5] = data_in[7] ^ data_in[5] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[9] ^ crc_reg[11];
 46 assign next_crc[6] = data_in[6] ^ data_in[1] ^ crc_reg[5] ^ crc_reg[10];
 47 assign next_crc[7] = data_in[7] ^ data_in[2] ^ crc_reg[6] ^ crc_reg[11];
 48 assign next_crc[8] = data_in[3] ^ crc_reg[0] ^ crc_reg[7];
 49 assign next_crc[9] = data_in[4] ^ crc_reg[1] ^ crc_reg[8];
 50 assign next_crc[10] = data_in[5] ^ crc_reg[2] ^ crc_reg[9];
 51 assign next_crc[11] = data_in[6] ^ crc_reg[3] ^ crc_reg[10];
 52 
 53 endmodule
You could download file parallel_crc.v here
   

space.gif

   

space.gif

   

space.gif

   

space.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

  

Copyright © 1998-2014

Deepak Kumar Tala - All rights reserved

Do you have any Comment? mail me at:deepak@asic-world.com