FPGA IMPLEMENT 1Gb/10Gb ETH(一.4)

FCS/CRC代码实现:

原文链接:https://blog.csdn.net/qq_34070723/article/details/89736772


/*************************LFSR实现方法**************************/
module CRC_Gen(
    input            rst_n,     /*async reset,active low*/
    input            clk,     /*clock input*/
    input     [7:0]  data, /*parallel data input pins */
    input            data_valid, /* data valid,start to generate CRC, active high*/
    output reg[15:0] crc
);
 
integer i;
reg feedback;
reg [15:0] crc_tmp;
/*
*  sequential process
*/
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n) 
        crc <= 16'b0;          /*触发器中的初始值十分重要 */
    else if(data_valid==1'b0)
        crc <= 16'b0;
    else
        crc <= crc_tmp;
end
 
/*
*   combination process
*/
always@( data or crc)
begin
    crc_tmp = crc;
    for(i=7; i>=0; i=i-1)
    begin
        feedback    = crc_tmp[15] ^ data[i];
        crc_tmp[15]  = crc_tmp[14];
        crc_tmp[14]  = crc_tmp[13];
        crc_tmp[13]  = crc_tmp[12];
        crc_tmp[12]  = crc_tmp[11] ^ feedback;
        crc_tmp[11]  = crc_tmp[10] ;
        crc_tmp[10]  = crc_tmp[9];
        crc_tmp[9]   = crc_tmp[8];
        crc_tmp[8]   = crc_tmp[7];
        crc_tmp[7]   = crc_tmp[6];
        crc_tmp[6]   = crc_tmp[5];
        crc_tmp[5]   = crc_tmp[4] ^ feedback;
        crc_tmp[4]   = crc_tmp[3];
        crc_tmp[3]   = crc_tmp[2];
        crc_tmp[2]   = crc_tmp[1];
        crc_tmp[1]   = crc_tmp[0];
        crc_tmp[0]   = feedback;
     end
end
 
endmodule
 
/************************testbench**************************/
initial 
begin
    clk=0;
    rst_n=0;
    data=8'b0;
    data_valid=0;
    #100 rst_n=1;
    data =8'b10110110;      data_valid=1;#10 data_valid=0; 
    #100 data =8'b01001100; data_valid=1;#10 data_valid=0; 
    #100 data =8'b10110011; data_valid=1;#10 data_valid=0; 
    #100 data =8'b01001001; data_valid=1;#10 data_valid=0;      
    #100 data =8'b10101010; data_valid=1;#10 data_valid=0; 
end
 
always #5 clk=~clk;
 
 CRC_Gen   U0(
   .clk(clk),
   .rst_n(rst_n),
   .data(data),
   .data_valid(data_valid),
   .crc(crc)
    );
endmodule
————————————————
版权声明:本文为CSDN博主「king阿金」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34070723/article/details/89736772

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值