//
// CRC.V
//
// This module calculates the 32-bit CRC code. 
// The module is general purpose and can be used any where.
// The polynomial is (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32)
// Interfaces with the Receiver and the Transmitter module.
// The CRC calculated is same as that of the 
// IEEE-802 LANs and the X3T9.5 FDDI.
// 
[Up: alhamdulillah C1]
module crcIndex( 
			//Inputs
			reset_n, 
			BCLK, 
			D, //Input Data
			crc_in, // signal to indicate that the data is available on D bus
			//Outputs
			Calc_CRC// Calculated CRC bus, updated after each crc_in 		
		   );

input BCLK, reset_n, crc_in;
input [31:0] D;

output [31:0]Calc_CRC;
wire [31:0]Calc_CRC;

reg [15:0]C1;// C1 and C2 are 16 bits registers to form a 32-bit word of 
reg [15:0]C2;//calculated CRC. This was done as Altera has some problem with 32-bit registers


assign Calc_CRC={C1, C2}; 
//     C1  :    C2
//31     16:15      0

always@(negedge reset_n or negedge BCLK)
begin
   if(!reset_n)
   begin
     C1<=16'hFFFF; //The algorithm implemented requires that the initial value be all ones
     C2<=16'hFFFF;
   end

	else if(crc_in)
	begin
//These equations are used to calculate the CRC word. The equations are generated by the 
//CRC-tool avialable at www.easics.com

C2[0] <= D[31] ^ D[30] ^ D[29] ^ D[28] ^ D[26] ^ D[25] ^ D[24] ^ 
                D[16] ^ D[12] ^ D[10] ^ D[9] ^ D[6] ^ D[0] ^ C2[0] ^ 
                C2[6] ^ C2[9] ^ C2[10] ^ C2[12] ^ C1[0] ^ C1[8] ^ C1[9] ^ 
                C1[10] ^ C1[12] ^ C1[13] ^ C1[14] ^ C1[15];
C2[1] <= D[28] ^ D[27] ^ D[24] ^ D[17] ^ D[16] ^ D[13] ^ D[12] ^ 
                D[11] ^ D[9] ^ D[7] ^ D[6] ^ D[1] ^ D[0] ^ C2[0] ^ C2[1] ^ 
                C2[6] ^ C2[7] ^ C2[9] ^ C2[11] ^ C2[12] ^ C2[13] ^ C1[0] ^ 
                C1[1] ^ C1[8] ^ C1[11] ^ C1[12];
C2[2] <= D[31] ^ D[30] ^ D[26] ^ D[24] ^ D[18] ^ D[17] ^ D[16] ^ 
                D[14] ^ D[13] ^ D[9] ^ D[8] ^ D[7] ^ D[6] ^ D[2] ^ 
                D[1] ^ D[0] ^ C2[0] ^ C2[1] ^ C1[2] ^ C2[6] ^ C2[7] ^ C2[8] ^ 
                C2[9] ^ C2[13] ^ C2[14] ^ C1[0] ^ C1[1] ^ C1[2] ^ C1[8] ^ 
                C1[10] ^ C1[14] ^ C1[15];
C2[3] <= D[31] ^ D[27] ^ D[25] ^ D[19] ^ D[18] ^ D[17] ^ D[15] ^ 
                D[14] ^ D[10] ^ D[9] ^ D[8] ^ D[7] ^ D[3] ^ D[2] ^ 
                D[1] ^ C2[1] ^ C1[2] ^ C2[3] ^ C2[7] ^ C2[8] ^ C2[9] ^ C2[10] ^ 
                C2[14] ^ C2[15] ^ C1[1] ^ C1[2] ^ C1[3] ^ C1[9] ^ C1[11] ^ 
                C1[15];
C2[4] <= D[31] ^ D[30] ^ D[29] ^ D[25] ^ D[24] ^ D[20] ^ D[19] ^ 
                D[18] ^ D[15] ^ D[12] ^ D[11] ^ D[8] ^ D[6] ^ D[4] ^ 
                D[3] ^ D[2] ^ D[0] ^ C2[0] ^ C2[2] ^ C2[3] ^ C2[4] ^ C2[6] ^ 
                C2[8] ^ C2[11] ^ C2[12] ^ C2[15] ^ C1[2] ^ C1[3] ^ C1[4] ^ 
                C1[8] ^ C1[9] ^ C1[13] ^ C1[14] ^ C1[15];
C2[5] <= D[29] ^ D[28] ^ D[24] ^ D[21] ^ D[20] ^ D[19] ^ D[13] ^ 
                D[10] ^ D[7] ^ D[6] ^ D[5] ^ D[4] ^ D[3] ^ D[1] ^ D[0] ^ 
                C2[0] ^ C2[1] ^ C2[3] ^ C2[4] ^ C2[5] ^ C2[6] ^ C2[7] ^ C2[10] ^ 
                C2[13] ^ C1[3] ^ C1[4] ^ C1[5] ^ C1[8] ^ C1[12] ^ C1[13];
C2[6] <= D[30] ^ D[29] ^ D[25] ^ D[22] ^ D[21] ^ D[20] ^ D[14] ^ 
                D[11] ^ D[8] ^ D[7] ^ D[6] ^ D[5] ^ D[4] ^ D[2] ^ D[1] ^ 
                C2[1] ^ C1[2] ^ C2[4] ^ C2[5] ^ C2[6] ^ C2[7] ^ C2[8] ^ C2[11] ^ 
                C2[14] ^ C1[4] ^ C1[5] ^ C1[6] ^ C1[9] ^ C1[13] ^ C1[14];
  C2[7] <= D[29] ^ D[28] ^ D[25] ^ D[24] ^ D[23] ^ D[22] ^ D[21] ^ 
                D[16] ^ D[15] ^ D[10] ^ D[8] ^ D[7] ^ D[5] ^ D[3] ^ 
                D[2] ^ D[0] ^ C2[0] ^ C1[2] ^ C2[3] ^ C2[5] ^ C2[7] ^ C2[8] ^ 
                C2[10] ^ C2[15] ^ C1[0] ^ C1[5] ^ C1[6] ^ C1[7] ^ C1[8] ^ 
                C1[9] ^ C1[12] ^ C1[13];
    C2[8] <= D[31] ^ D[28] ^ D[23] ^ D[22] ^ D[17] ^ D[12] ^ D[11] ^ 
                D[10] ^ D[8] ^ D[4] ^ D[3] ^ D[1] ^ D[0] ^ C2[0] ^ C2[1] ^ 
                C2[3] ^ C2[4] ^ C2[8] ^ C2[10] ^ C2[11] ^ C2[12] ^ C1[1] ^ 
                C1[6] ^ C1[7] ^ C1[12] ^ C1[15];
    C2[9] <= D[29] ^ D[24] ^ D[23] ^ D[18] ^ D[13] ^ D[12] ^ D[11] ^ 
                D[9] ^ D[5] ^ D[4] ^ D[2] ^ D[1] ^ C2[1] ^ C2[2] ^ C2[4] ^ 
                C2[5] ^ C2[9] ^ C2[11] ^ C2[12] ^ C2[13] ^ C1[2] ^ C1[7] ^ 
                C1[8] ^ C1[13];
C2[10] <= D[31] ^ D[29] ^ D[28] ^ D[26] ^ D[19] ^ D[16] ^ D[14] ^ 
                 D[13] ^ D[9] ^ D[5] ^ D[3] ^ D[2] ^ D[0] ^ C2[0] ^ C2[2] ^ 
                 C2[3] ^ C2[5] ^ C2[9] ^ C2[13] ^ C2[14] ^ C1[0] ^ C1[3] ^ 
                 C1[10] ^ C1[12] ^ C1[13] ^ C1[15];
  C2[11] <= D[31] ^ D[28] ^ D[27] ^ D[26] ^ D[25] ^ D[24] ^ D[20] ^ 
                 D[17] ^ D[16] ^ D[15] ^ D[14] ^ D[12] ^ D[9] ^ D[4] ^ 
                 D[3] ^ D[1] ^ D[0] ^ C2[0] ^ C2[1] ^ C2[3] ^ C2[4] ^ C2[9] ^ 
                 C2[12] ^ C2[14] ^ C2[15] ^ C1[0] ^ C1[1] ^ C1[4] ^ C1[8] ^ 
                 C1[9] ^ C1[10] ^ C1[11] ^ C1[12] ^ C1[15];
    C2[12] <= D[31] ^ D[30] ^ D[27] ^ D[24] ^ D[21] ^ D[18] ^ D[17] ^ 
                 D[15] ^ D[13] ^ D[12] ^ D[9] ^ D[6] ^ D[5] ^ D[4] ^ 
                 D[2] ^ D[1] ^ D[0] ^ C2[0] ^ C2[1] ^ C1[2] ^ C2[4] ^ C2[5] ^ 
                 C2[6] ^ C2[9] ^ C2[12] ^ C2[13] ^ C2[15] ^ C1[1] ^ C1[2] ^ 
                 C1[5] ^ C1[8] ^ C1[11] ^ C1[14] ^ C1[15];
    C2[13] <= D[31] ^ D[28] ^ D[25] ^ D[22] ^ D[19] ^ D[18] ^ D[16] ^ 
                 D[14] ^ D[13] ^ D[10] ^ D[7] ^ D[6] ^ D[5] ^ D[3] ^ 
                 D[2] ^ D[1] ^ C2[1] ^ C1[2] ^ C2[3] ^ C2[5] ^ C2[6] ^ C2[7] ^ 
                 C2[10] ^ C2[13] ^ C2[14] ^ C1[0] ^ C1[2] ^ C1[3] ^ C1[6] ^ 
                 C1[9] ^ C1[12] ^ C1[15];
    C2[14] <= D[29] ^ D[26] ^ D[23] ^ D[20] ^ D[19] ^ D[17] ^ D[15] ^ 
                 D[14] ^ D[11] ^ D[8] ^ D[7] ^ D[6] ^ D[4] ^ D[3] ^ 
                 D[2] ^ C1[2] ^ C2[3] ^ C2[4] ^ C2[6] ^ C2[7] ^ C2[8] ^ C2[11] ^ 
                 C2[14] ^ C2[15] ^ C1[1] ^ C1[3] ^ C1[4] ^ C1[7] ^ C1[10] ^ 
                 C1[13];
    C2[15] <= D[30] ^ D[27] ^ D[24] ^ D[21] ^ D[20] ^ D[18] ^ D[16] ^ 
                 D[15] ^ D[12] ^ D[9] ^ D[8] ^ D[7] ^ D[5] ^ D[4] ^ 
                 D[3] ^ C2[3] ^ C2[4] ^ C2[5] ^ C2[7] ^ C2[8] ^ C2[9] ^ C2[12] ^ 
                 C2[15] ^ C1[0] ^ C1[2] ^ C1[4] ^ C1[5] ^ C1[8] ^ C1[11] ^ 
                 C1[14];
    C1[0] <= D[30] ^ D[29] ^ D[26] ^ D[24] ^ D[22] ^ D[21] ^ D[19] ^ 
                 D[17] ^ D[13] ^ D[12] ^ D[8] ^ D[5] ^ D[4] ^ D[0] ^ 
                 C2[0] ^ C2[4] ^ C2[5] ^ C2[8] ^ C2[12] ^ C2[13] ^ C1[1] ^ 
                 C1[3] ^ C1[5] ^ C1[6] ^ C1[8] ^ C1[10] ^ C1[13] ^ C1[14];
    C1[1] <= D[31] ^ D[30] ^ D[27] ^ D[25] ^ D[23] ^ D[22] ^ D[20] ^ 
                 D[18] ^ D[14] ^ D[13] ^ D[9] ^ D[6] ^ D[5] ^ D[1] ^ 
                 C2[1] ^ C2[5] ^ C2[6] ^ C2[9] ^ C2[13] ^ C2[14] ^ C1[2] ^ 
                 C1[4] ^ C1[6] ^ C1[7] ^ C1[9] ^ C1[11] ^ C1[14] ^ C1[15];
    C1[2] <= D[31] ^ D[28] ^ D[26] ^ D[24] ^ D[23] ^ D[21] ^ D[19] ^ 
                 D[15] ^ D[14] ^ D[10] ^ D[7] ^ D[6] ^ D[2] ^ C1[2] ^ 
                 C2[6] ^ C2[7] ^ C2[10] ^ C2[14] ^ C2[15] ^ C1[3] ^ C1[5] ^ 
                 C1[7] ^ C1[8] ^ C1[10] ^ C1[12] ^ C1[15];
    C1[3] <= D[29] ^ D[27] ^ D[25] ^ D[24] ^ D[22] ^ D[20] ^ D[16] ^ 
                 D[15] ^ D[11] ^ D[8] ^ D[7] ^ D[3] ^ C2[3] ^ C2[7] ^ 
                 C2[8] ^ C2[11] ^ C2[15] ^ C1[0] ^ C1[4] ^ C1[6] ^ C1[8] ^ 
                 C1[9] ^ C1[11] ^ C1[13];
    C1[4] <= D[30] ^ D[28] ^ D[26] ^ D[25] ^ D[23] ^ D[21] ^ D[17] ^ 
                 D[16] ^ D[12] ^ D[9] ^ D[8] ^ D[4] ^ C2[4] ^ C2[8] ^ 
                 C2[9] ^ C2[12] ^ C1[0] ^ C1[1] ^ C1[5] ^ C1[7] ^ C1[9] ^ 
                 C1[10] ^ C1[12] ^ C1[14];
    C1[5] <= D[31] ^ D[29] ^ D[27] ^ D[26] ^ D[24] ^ D[22] ^ D[18] ^ 
                 D[17] ^ D[13] ^ D[10] ^ D[9] ^ D[5] ^ C2[5] ^ C2[9] ^ 
                 C2[10] ^ C2[13] ^ C1[1] ^ C1[2] ^ C1[6] ^ C1[8] ^ C1[10] ^ 
                 C1[11] ^ C1[13] ^ C1[15];
    C1[6] <= D[31] ^ D[29] ^ D[27] ^ D[26] ^ D[24] ^ D[23] ^ D[19] ^ 
                 D[18] ^ D[16] ^ D[14] ^ D[12] ^ D[11] ^ D[9] ^ D[0] ^ 
                 C2[0] ^ C2[9] ^ C2[11] ^ C2[12] ^ C2[14] ^ C1[0] ^ C1[2] ^ 
                 C1[3] ^ C1[7] ^ C1[8] ^ C1[10] ^ C1[11] ^ C1[13] ^ C1[15];
    C1[7] <= D[31] ^ D[29] ^ D[27] ^ D[26] ^ D[20] ^ D[19] ^ D[17] ^ 
                 D[16] ^ D[15] ^ D[13] ^ D[9] ^ D[6] ^ D[1] ^ D[0] ^ 
                 C2[0] ^ C2[1] ^ C2[6] ^ C2[9] ^ C2[13] ^ C2[15] ^ C1[0] ^ 
                 C1[1] ^ C1[3] ^ C1[4] ^ C1[10] ^ C1[11] ^ C1[13] ^ C1[15];
    C1[8] <= D[30] ^ D[28] ^ D[27] ^ D[21] ^ D[20] ^ D[18] ^ D[17] ^ 
                 D[16] ^ D[14] ^ D[10] ^ D[7] ^ D[2] ^ D[1] ^ C2[1] ^ 
                 C1[2] ^ C2[7] ^ C2[10] ^ C2[14] ^ C1[0] ^ C1[1] ^ C1[2] ^ 
                 C1[4] ^ C1[5] ^ C1[11] ^ C1[12] ^ C1[14];
    C1[9] <= D[31] ^ D[29] ^ D[28] ^ D[22] ^ D[21] ^ D[19] ^ D[18] ^ 
                 D[17] ^ D[15] ^ D[11] ^ D[8] ^ D[3] ^ D[2] ^ C1[2] ^ 
                 C2[3] ^ C2[8] ^ C2[11] ^ C2[15] ^ C1[1] ^ C1[2] ^ C1[3] ^ 
                 C1[5] ^ C1[6] ^ C1[12] ^ C1[13] ^ C1[15];
    C1[10] <= D[31] ^ D[28] ^ D[26] ^ D[25] ^ D[24] ^ D[23] ^ D[22] ^ 
                 D[20] ^ D[19] ^ D[18] ^ D[10] ^ D[6] ^ D[4] ^ D[3] ^ 
                 D[0] ^ C2[0] ^ C2[3] ^ C2[4] ^ C2[6] ^ C2[10] ^ C1[2] ^ 
                 C1[3] ^ C1[4] ^ C1[6] ^ C1[7] ^ C1[8] ^ C1[9] ^ C1[10] ^ 
                 C1[12] ^ C1[15];
    C1[11] <= D[29] ^ D[27] ^ D[26] ^ D[25] ^ D[24] ^ D[23] ^ D[21] ^ 
                 D[20] ^ D[19] ^ D[11] ^ D[7] ^ D[5] ^ D[4] ^ D[1] ^ 
                 C2[1] ^ C2[4] ^ C2[5] ^ C2[7] ^ C2[11] ^ C1[3] ^ C1[4] ^ 
                 C1[5] ^ C1[7] ^ C1[8] ^ C1[9] ^ C1[10] ^ C1[11] ^ C1[13];
    C1[12] <= D[30] ^ D[28] ^ D[27] ^ D[26] ^ D[25] ^ D[24] ^ D[22] ^ 
                 D[21] ^ D[20] ^ D[12] ^ D[8] ^ D[6] ^ D[5] ^ D[2] ^ 
                 C1[2] ^ C2[5] ^ C2[6] ^ C2[8] ^ C2[12] ^ C1[4] ^ C1[5] ^ 
                 C1[6] ^ C1[8] ^ C1[9] ^ C1[10] ^ C1[11] ^ C1[12] ^ C1[14];
    C1[13] <= D[31] ^ D[29] ^ D[28] ^ D[27] ^ D[26] ^ D[25] ^ D[23] ^ 
                 D[22] ^ D[21] ^ D[13] ^ D[9] ^ D[7] ^ D[6] ^ D[3] ^ 
                 C2[3] ^ C2[6] ^ C2[7] ^ C2[9] ^ C2[13] ^ C1[5] ^ C1[6] ^ 
                 C1[7] ^ C1[9] ^ C1[10] ^ C1[11] ^ C1[12] ^ C1[13] ^ C1[15];
    C1[14] <= D[30] ^ D[29] ^ D[28] ^ D[27] ^ D[26] ^ D[24] ^ D[23] ^ 
                 D[22] ^ D[14] ^ D[10] ^ D[8] ^ D[7] ^ D[4] ^ C2[4] ^ 
                 C2[7] ^ C2[8] ^ C2[10] ^ C2[14] ^ C1[6] ^ C1[7] ^ C1[8] ^ 
                 C1[10] ^ C1[11] ^ C1[12] ^ C1[13] ^ C1[14];
    C1[15] <= D[31] ^ D[30] ^ D[29] ^ D[28] ^ D[27] ^ D[25] ^ D[24] ^ 
                 D[23] ^ D[15] ^ D[11] ^ D[9] ^ D[8] ^ D[5] ^ C2[5] ^ 
                 C2[8] ^ C2[9] ^ C2[11] ^ C2[15] ^ C1[7] ^ C1[8] ^ C1[9] ^ 
                 C1[11] ^ C1[12] ^ C1[13] ^ C1[14] ^ C1[15];

 
     end
end

endmodule


This page: Maintained by: firewire@linklayercontroller.com
Created:Sun Mar 11 19:19:08 2001
From: /mnt/c/windows/desktop/floppy/commen~1/crc.v

Verilog converted to html by v2html 6.0 (written by Costas Calamvokis).Help