繁体中文
高级搜索
 
首页 | 电子技术应用 | 行业最新动态 | 行业最新产品 | 软件资料下载 | 电路图纸欣赏 | 博客文章精选 | 电子精品论坛 | 电子技术贴吧

当前位置:首页 >> 电子技术应用 >> 网络与通信-应用 >> 以太网帧的校验和是用什么算法生成的?
以太网帧的校验和是用什么算法生成的?
作者:   来源:中国电子技术信息网 发表时间:2006-11-30  字号:  
以太网帧的校验和是用什么算法生成的?



标准的CRC生成式

`define CRC_INIT_VALUE (32'hFFFF_FFFF)

`define CRC_IDLE  (2'b00)

`define CRC_RUN   (2'b01)

`define CRC_STOP  (2'b11)



module crc_gen (

  compute_crc,

  data,

  clk,

  reset_n,

  crc

  );



input compute_crc;

input [3:0] data;

input clk;

input reset_n;

output [3:0] crc;



reg [1:0] state_crc;

reg [31:0] crc_buffer;

reg [2:0] crc_end;



function [31:0] count_crc; // the first serial data bit is d [0]

input [3:0] d;

input [31:0] c;

reg [31:0] new_crc;

begin

  new_crc[0] = d[3] ^ c[28];

  new_crc[1] = d[2] ^ d[3] ^ c[28] ^ c[29];

  new_crc[2] = d[1] ^ d[2] ^ d[3] ^ c[28] ^ c[29] ^ c[30];

  new_crc[3] = d[0] ^ d[1] ^ d[2] ^ c[29] ^ c[30] ^ c[31];

  new_crc[4] = d[0] ^ d[1] ^ d[3] ^ c[0] ^ c[28] ^ c[30] ^ c[31];

  new_crc[5] = d[0] ^ d[2] ^ d[3] ^ c[1] ^ c[28] ^ c[29] ^ c[31];

  new_crc[6] = d[1] ^ d[2] ^ c[2] ^ c[29] ^ c[30];

  new_crc[7] = d[0] ^ d[1] ^ d[3] ^ c[3] ^ c[28] ^ c[30] ^ c[31];

  new_crc[8] = d[0] ^ d[2] ^ d[3] ^ c[4] ^ c[28] ^ c[29] ^ c[31];

  new_crc[9] = d[1] ^ d[2] ^ c[5] ^ c[29] ^ c[30];

  new_crc[10] = d[0] ^ d[1] ^ d[3] ^ c[6] ^ c[28] ^ c[30] ^ c[31];

  new_crc[11] = d[0] ^ d[2] ^ d[3] ^ c[7] ^ c[28] ^ c[29] ^ c[31];

  new_crc[12] = d[1] ^ d[2] ^ d[3] ^ c[8] ^ c[28] ^ c[29] ^ c[30];

  new_crc[13] = d[0] ^ d[1] ^ d[2] ^ c[9] ^ c[29] ^ c[30] ^ c[31];

  new_crc[14] = d[0] ^ d[1] ^ c[10] ^ c[30] ^ c[31];

  new_crc[15] = d[0] ^ c[11] ^ c[31];

  new_crc[16] = d[3] ^ c[12] ^ c[28];

  new_crc[17] = d[2] ^ c[13] ^ c[29];

  new_crc[18] = d[1] ^ c[14] ^ c[30];

  new_crc[19] = d[0] ^ c[15] ^ c[31];

  new_crc[20] = c[16];

  new_crc[21] = c[17];

  new_crc[22] = d[3] ^ c[18] ^ c[28];

  new_crc[23] = d[2] ^ d[3] ^ c[19] ^ c[28] ^ c[29];

  new_crc[24] = d[1] ^ d[2] ^ c[20] ^ c[29] ^ c[30];

  new_crc[25] = d[0] ^ d[1] ^ c[21] ^ c[30] ^ c[31];

  new_crc[26] = d[0] ^ d[3] ^ c[22] ^ c[28] ^ c[31];

  new_crc[27] = d[2] ^ c[23] ^ c[29];

  new_crc[28] = d[1] ^ c[24] ^ c[30];

  new_crc[29] = d[0] ^ c[25] ^ c[31];

  new_crc[30] = c[26];

  new_crc[31] = c[27];

  count_crc = new_crc;

end

endfunction



assign crc [3] = ~ crc_buffer [28];

assign crc [2] = ~ crc_buffer [29];

assign crc [1] = ~ crc_buffer [30];

assign crc [0] = ~ crc_buffer [31];



always @(posedge clk or negedge reset_n)

  if (!reset_n)

    state_crc <= `CRC_IDLE;

  else 

    case (state_crc)

      `CRC_IDLE  : if (compute_crc)

                     begin

                       state_crc <= `CRC_RUN;

                       crc_buffer <= count_crc (data,`CRC_INIT_VALUE);

                     end

                   else

                     begin

                       state_crc <= `CRC_IDLE;

                       crc_buffer <= 32'h0000_0000;

                       crc_end <= 3'd0;

                     end

      `CRC_RUN   : if (!compute_crc)

                     begin

                       state_crc <= `CRC_STOP;

                       crc_buffer <= crc_buffer << 4;

                     end

                   else

                     begin

                       state_crc <= `CRC_RUN;

                       crc_buffer <= count_crc (data,crc_buffer);

                     end

      `CRC_STOP  : if (crc_end == 3'd6)

                   begin

                     state_crc <= `CRC_IDLE;

                     crc_buffer <= 32'h0000_0000;

                   end

                   else

                   begin

                     state_crc <= `CRC_STOP;

                     crc_buffer <= crc_buffer << 4;

                     crc_end <= crc_end   1'b1;

                   end

    endcase



endmodule

!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: 以太网接入技术
  • 下一篇: 家用802.11b无线网络解决方案

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备05071687号  电子技术精品网