www.pudn.com > crc.rar > crc.v


module crc  (sample_clk,
             syn_global_reset,
             ena_crc,
             q_out_decode,
             q_to_encode_shiftregs,
             ena_crc_send,
             shift_crc_receive,
             crc_shift_1bit,
             receive_crc_check,
             crc_generate_sample,
             begin_encode,
             ena_regs_send,
             crc_out,
             crc_right);
//output ports modified to internal ports:crcreg
             
input sample_clk;
input syn_global_reset;

input ena_crc;


input q_out_decode;

input q_to_encode_shiftregs;


input ena_crc_send;

input receive_crc_check;

input shift_crc_receive;


input crc_shift_1bit;



input crc_generate_sample;
input begin_encode;

input ena_regs_send;

reg [0:15] crcreg;
output crc_out;

output crc_right;

wire xorr,xor4,xor11;
wire a;
wire crc_reg_right;

wire data;
assign data=(receive_crc_check)?q_out_decode:
                            (ena_regs_send)?q_to_encode_shiftregs:1'b0;

assign a=(~ena_crc_send)||receive_crc_check||ena_regs_send;
assign xorr=(a&crcreg[15])^data;
assign xor4=(a&xorr)^crcreg[4];
assign xor11=(a&xorr)^crcreg[11];



assign crc_reg_right=(crcreg==16'b1111_0000_1011_1000)?1'b1:1'b0;
assign crc_right=(ena_crc)?crc_reg_right:1'b0;


wire crcreg_move;
assign crcreg_move=shift_crc_receive||crc_shift_1bit||crc_generate_sample;

assign crc_out=crcreg[15];

//always@(posedge sample_clk)
//begin
//   if(crc_reg_right&&stop)
//     begin
//     crc_right<=1'b1;
//   end
// else
//    begin
//      crc_right<=1'b0;
//    end
//end

//always@(posedge sample_clk)
//begin
//  if(!crc_reg_right&&stop)
//    begin
//      crc_wrong<=1'b1;
//    end
//  else
//    begin
//      crc_wrong<=1'b0;
//    end
//end

wire set_to_origin;
assign set_to_origin=syn_global_reset||begin_encode;


always @(posedge sample_clk)
begin 
   if(set_to_origin)
     begin 
        crcreg[0:15]<=16'b1111_1111_1111_1111;
     end
   else if(crcreg_move)
     begin 
       crcreg[0]<=xorr;
       crcreg[1]<=crcreg[0];
       crcreg[2]<=crcreg[1];
       crcreg[3]<=crcreg[2];
       crcreg[4]<=crcreg[3];
       crcreg[5]<=xor4;
       crcreg[6]<=crcreg[5];
       crcreg[7]<=crcreg[6];
       crcreg[8]<=crcreg[7];
       crcreg[9]<=crcreg[8];
       crcreg[10]<=crcreg[9];
       crcreg[11]<=crcreg[10];
       crcreg[12]<=xor11;
       crcreg[13]<=crcreg[12];
       crcreg[14]<=crcreg[13];
       crcreg[15]<=crcreg[14]; 
     end
end
endmodule