十六、基于FPGA的CRC校验设计实现

news2024/11/27 12:42:00

1,CRC校验

循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

2,CRC 多项式

多项式一般指输入数据异或的对象;其中相关参数还包括:初值,结果异或值,输入翻转,输出翻转。

初始值:计算之前给CRC赋初始值;

结果异或值:计算完CRC输出前;对CRC结果异或的参数值;

输入值反转:输入翻转指对输入输入按字节翻转;

输出值反转:对输出结果在CRC计算之后,异或之前整体翻转

一般常用的CRC多项式如下:

3 CRC逻辑设计实现

设计实现CRC-8 CRC-16 CRC-32位校验计算;下面分别介绍串行,并行的不同实现思路;

3.1 CRC串行实现

实现流程:

a, 输入数据 翻转控制;

b, 翻转后数据与CRC初值异或;8位直接异或;16位与32位先异或高8位;

c, 循环左移异或计算;8位左移8次;16位左移16次;32位左移32次;

16位;在左移8次后需要用异或结果的高8位异或原始数据的低8位;然后在继续左移运算

32位;在左移8,16,24位后用异或结果的高8位异或原始数据的次高8位,次低8位,低8位,然后再继续左移运算;

d, 对计算的CRC结果进行翻转处理;

e, 对输出的翻转数据进行异或数据处理;输出

(1)CRC-8位实现

module crc_8 #(
    parameter [7:0] CRC8_PARAM = 8'h07,//多项式
    parameter [7:0] CRC_INIT = 8'h00,
    parameter [7:0] DATA_XOROUT = 8'h55
)(
    input sys_clk,
    input sys_rst,
    input in_swap_en,
    input out_swap_en,
    input data_in_en,
    input [7:0] data_in,
    output data_out_en,
    output [7:0] data_out
 );
    
    wire [7:0] swap_data;
    reg [7:0] crc_reg = CRC_INIT;
    reg [7:0] crc_cnt = 0;
    reg data_out_en_reg = 0;
    reg [7:0] data_out_reg = 0;

    assign swap_data = in_swap_en ? {data_in[0],data_in[1],data_in[2],data_in[3],data_in[4],data_in[5],data_in[6],data_in[7]}:data_in;
                              
    always @ (posedge sys_clk) begin 
        if(sys_rst) begin 
            crc_reg <= CRC_INIT;
            crc_cnt <= 0;
            end 
        else if(data_in_en && crc_cnt == 0) begin 
            crc_reg <= swap_data^crc_reg; 
            crc_cnt <= 1; 
            end 
        else if(crc_cnt == 9) begin 
            crc_reg <= crc_reg;
            crc_cnt <= 0;
            end 
        else if(crc_cnt !=0) begin 
            crc_reg <= (crc_reg[7] == 0 ? crc_reg << 1 : (crc_reg << 1 ^ CRC8_PARAM));
            crc_cnt <= crc_cnt + 1;
            end 
        else begin 
            crc_reg <= crc_reg;
            crc_cnt <= 0;
            end 
    end    
    
    always @ (posedge sys_clk) begin 
        if(sys_rst) begin
            data_out_en_reg <= 0;
            data_out_reg <= 0;
            end 
        else if(crc_cnt == 9) begin 
            data_out_en_reg <= 1;
            data_out_reg <= out_swap_en ? {crc_reg[0],crc_reg[1],crc_reg[2],crc_reg[3],crc_reg[4],crc_reg[5],crc_reg[6],crc_reg[7]}:crc_reg;
            end 
        else begin 
            data_out_en_reg <= 0;
            data_out_reg <= data_out_reg;
            end 
    end     
    
    assign data_out_en = data_out_en_reg;
    assign data_out = data_out_reg ^ DATA_XOROUT;
    
endmodule

(2)CRC-16位实现

module crc_16 #(
    parameter [15:0] CRC16_PARAM = 16'h8005,
    parameter [15:0] CRC_INIT = 16'h0000,
    parameter [15:0] DATA_XOROUT = 16'hFFFF
)(
    input sys_clk,
    input sys_rst,
    input in_swap_en,
    input out_swap_en,
    input data_in_en,
    input [15:0] data_in,
    output data_out_en,
    output [15:0] data_out
 );
    
    wire [15:0] swap_data;
    reg [15:0] crc_reg = CRC_INIT;
    reg [7:0] crc_cnt = 0;
    reg data_out_en_reg = 0;
    reg [15:0] data_out_reg = 0;

    assign swap_data = in_swap_en ? {data_in[8],data_in[9],data_in[10],data_in[11],data_in[12],data_in[13],data_in[14],data_in[15],                                 
                                 data_in[0],data_in[1],data_in[2],data_in[3],data_in[4],data_in[5],data_in[6],data_in[7]}:data_in;
                              
    always @ (posedge sys_clk) begin 
        if(sys_rst) begin 
            crc_reg <= CRC_INIT;
            crc_cnt <= 0;
            end 
        else if(data_in_en && crc_cnt == 0) begin 
            crc_reg <={swap_data[15:8]^crc_reg[15:8],crc_reg[7:0]}; 
            crc_cnt <= 1; 
            end 
        else if(crc_cnt == 9) begin 
            crc_reg <={swap_data[7:0]^crc_reg[15:8],crc_reg[7:0]}; 
            crc_cnt <= crc_cnt + 1; 
            end 
        else if(crc_cnt == 18) begin 
            crc_reg <= crc_reg;
            crc_cnt <= 0;
            end 
        else if(crc_cnt !=0) begin// && shift_en == 0) begin 
            crc_reg <= (crc_reg[15] == 0 ? crc_reg << 1 : (crc_reg << 1 ^ CRC16_PARAM));
            crc_cnt <= crc_cnt + 1;
            end 
        else begin 
            crc_reg <= crc_reg;
            crc_cnt <= 0;
            end 
    end                        
    always @ (posedge sys_clk) begin 
        if(sys_rst) begin
            data_out_en_reg <= 0;
            data_out_reg <= 0;
            end 
        else if(crc_cnt == 18) begin 
            data_out_en_reg <= 1;
            data_out_reg <= out_swap_en ? {crc_reg[0],crc_reg[1],crc_reg[2],crc_reg[3],crc_reg[4],crc_reg[5],crc_reg[6],crc_reg[7],crc_reg[8],crc_reg[9],
                                 crc_reg[10],crc_reg[11],crc_reg[12],crc_reg[13],crc_reg[14],crc_reg[15]}:crc_reg;
            end 
        else begin 
            data_out_en_reg <= 0;
            data_out_reg <= data_out_reg;
            end 
    end     
    
    assign data_out_en = data_out_en_reg;
    assign data_out = data_out_reg ^ DATA_XOROUT;
    
endmodule

(3)CRC-32位实现

module crc_32 #(
    parameter [31:0] CRC32_PARAM = 32'h04C11DB7,
    parameter [31:0] CRC_INIT  = 32'hFFFFFFFF,
    parameter [31:0] DATA_XOROUT = 32'hFFFFFFFF
)(
    input sys_clk,
    input sys_rst,
    input in_swap_en,
    input out_swap_en,
    input data_in_en,
    input [31:0] data_in,
    output data_out_en,
    output [31:0] data_out
 );
    
    wire [31:0] swap_data;
    reg [31:0] crc_reg = CRC_INIT;
    reg [7:0] crc_cnt = 0;
    reg data_out_en_reg = 0;
    reg [31:0] data_out_reg = 0;

    assign swap_data = in_swap_en ? {data_in[24],data_in[25],data_in[26],data_in[27],data_in[28],data_in[29],data_in[30],data_in[31],  
                                 data_in[16],data_in[17],data_in[18],data_in[19],data_in[20],data_in[21],data_in[22],data_in[23],  
                                 data_in[8],data_in[9],data_in[10],data_in[11],data_in[12],data_in[13],data_in[14],data_in[15],                                 
                                 data_in[0],data_in[1],data_in[2],data_in[3],data_in[4],data_in[5],data_in[6],data_in[7]}:data_in;
                              
    always @ (posedge sys_clk) begin 
        if(sys_rst) begin 
            crc_reg <= CRC_INIT;
            crc_cnt <= 0;
            end 
        else if(data_in_en && crc_cnt == 0) begin 
            crc_reg <={swap_data[31:24]^crc_reg[31:24],crc_reg[23:0]}; 
            crc_cnt <= 1; 
            end 
        else if(crc_cnt == 9) begin 
            crc_reg <={swap_data[23:16]^crc_reg[31:24],crc_reg[23:0]}; 
            crc_cnt <= crc_cnt + 1; 
            end 
        else if(crc_cnt == 18) begin 
            crc_reg <={swap_data[15:8]^crc_reg[31:24],crc_reg[23:0]}; 
            crc_cnt <= crc_cnt + 1; 
            end 
        else if(crc_cnt == 27) begin 
            crc_reg <={swap_data[7:0]^crc_reg[31:24],crc_reg[23:0]}; 
            crc_cnt <= crc_cnt + 1; 
            end 
        else if(crc_cnt == 36) begin 
            crc_reg <= crc_reg;
            crc_cnt <= 0;
            end 
        else if(crc_cnt !=0) begin// && shift_en == 0) begin 
            crc_reg <= (crc_reg[31] == 0 ? crc_reg << 1 : (crc_reg << 1 ^ CRC32_PARAM));
            crc_cnt <= crc_cnt + 1;
            end 
        else begin 
            crc_reg <= crc_reg;
            crc_cnt <= 0;
            end 
    end                        
    always @ (posedge sys_clk) begin 
        if(sys_rst) begin
            data_out_en_reg <= 0;
            data_out_reg <= 0;
            end 
        else if(crc_cnt == 36) begin 
            data_out_en_reg <= 1;
            data_out_reg <= out_swap_en ? {crc_reg[0],crc_reg[1],crc_reg[2],crc_reg[3],crc_reg[4],crc_reg[5],crc_reg[6],crc_reg[7],
                                            crc_reg[8],crc_reg[9],crc_reg[10],crc_reg[11],crc_reg[12],crc_reg[13],crc_reg[14],crc_reg[15],
                                            crc_reg[16],crc_reg[17],crc_reg[18],crc_reg[19],crc_reg[20],crc_reg[21],crc_reg[22],crc_reg[23],
                                            crc_reg[24],crc_reg[25],crc_reg[26],crc_reg[27],crc_reg[28],crc_reg[29],crc_reg[30],crc_reg[31]}:crc_reg;
            end 
        else begin 
            data_out_en_reg <= 0;
            data_out_reg <= data_out_reg;
            end 
    end     
    
    assign data_out_en = data_out_en_reg;
    assign data_out = data_out_reg ^ DATA_XOROUT;
    
endmodule

3.2 CRC并行实现

并行实现需要在网站生成计算 代码:OutputLogic.com » CRC Generator

计算流程:

a, 输入数据 翻转控制;

b,使用生成逻辑代码进行计算;

c, 对计算的CRC结果进行翻转处理;

d, 对输出的翻转数据进行异或数据处理;输出

说明:生成代码中CRC初值都为FFFF;需要根据具体设计修改;翻转控制,结果异或值等需要根据设计处理。

(1)CRC-8位实现:

实现多项式: 1+x^4+x^5+x^8

CRC初始值: 0x00

输出结果异或值:0x00

输入值使能:使能

输出值使能:使能

module crc_8(
    input sys_clk,
    input sys_rst,
    
    input [7:0] data_in,
    input crc_en,
    output [7:0] crc_out
);

    wire [7:0] swap_in_data;
    wire [7:0] swap_out_data;
    reg [7:0] lfsr_q,lfsr_c;    
    
    assign swap_in_data = {data_in[0],data_in[1],data_in[2],data_in[3],data_in[4],data_in[5],data_in[6],data_in[7]};



    assign swap_out_data = {lfsr_q[0],lfsr_q[1],lfsr_q[2],lfsr_q[3],lfsr_q[4],lfsr_q[5],lfsr_q[6],lfsr_q[7]};

    assign crc_out = swap_out_data ^ 8'h00;
//----------------------------------------------------------------------------------------------------------------------------------------
    always @(*) begin
    
    lfsr_c[0] = lfsr_q[0] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[6] ^ swap_in_data[0] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[6];
    lfsr_c[1] = lfsr_q[1] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[7] ^ swap_in_data[1] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[7];
    lfsr_c[2] = lfsr_q[2] ^ lfsr_q[5] ^ lfsr_q[6] ^ swap_in_data[2] ^ swap_in_data[5] ^ swap_in_data[6];
    lfsr_c[3] = lfsr_q[3] ^ lfsr_q[6] ^ lfsr_q[7] ^ swap_in_data[3] ^ swap_in_data[6] ^ swap_in_data[7];
    lfsr_c[4] = lfsr_q[0] ^ lfsr_q[3] ^ lfsr_q[6] ^ lfsr_q[7] ^ swap_in_data[0] ^ swap_in_data[3] ^ swap_in_data[6] ^ swap_in_data[7];
    lfsr_c[5] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[3] ^ lfsr_q[6] ^ lfsr_q[7] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[3] ^ swap_in_data[6] ^ swap_in_data[7];
    lfsr_c[6] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4] ^ lfsr_q[7] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[4] ^ swap_in_data[7];
    lfsr_c[7] = lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[5] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[5];
    end // always

    always @(posedge sys_clk) begin
        if(sys_rst)
            lfsr_q <= {8{1'b0}};
        else if(crc_en) 
            lfsr_q <= lfsr_c;
        else 
            lfsr_q <= lfsr_q;
    end  
  
endmodule  

(2)CRC-16位实现:

实现多项式: 1+x^2+x^15+x^16

CRC初始值: 0x0000

输出结果异或值:0xFFFF

输入值使能:使能

输出值使能:使能

module crc_16(
    input sys_clk,
    input sys_rst,
    
    input [15:0] data_in,
    input crc_en,
    output [15:0] crc_out
);

    wire [15:0] swap_in_data;
    wire [15:0] swap_out_data;
    reg [15:0] lfsr_q,lfsr_c;    
    
    assign swap_in_data = {data_in[8],data_in[9],data_in[10],data_in[11],data_in[12],data_in[13],data_in[14],data_in[15],                                 
                         data_in[0],data_in[1],data_in[2],data_in[3],data_in[4],data_in[5],data_in[6],data_in[7]};



    assign swap_out_data = {lfsr_q[0],lfsr_q[1],lfsr_q[2],lfsr_q[3],lfsr_q[4],lfsr_q[5],lfsr_q[6],lfsr_q[7],
                            lfsr_q[8],lfsr_q[9],lfsr_q[10],lfsr_q[11],lfsr_q[12],lfsr_q[13],lfsr_q[14],lfsr_q[15]};

    assign crc_out = swap_out_data ^ 16'hFFFF;
//----------------------------------------------------------------------------------------------------------------------------------------
    always @(*) begin
    
    lfsr_c[0] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[15] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[10] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[13] ^ swap_in_data[15];
    lfsr_c[1] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[14] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[10] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[13] ^ swap_in_data[14];
    lfsr_c[2] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[14] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[14];
    lfsr_c[3] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[15] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[15];
    lfsr_c[4] = lfsr_q[2] ^ lfsr_q[3] ^ swap_in_data[2] ^ swap_in_data[3];
    lfsr_c[5] = lfsr_q[3] ^ lfsr_q[4] ^ swap_in_data[3] ^ swap_in_data[4];
    lfsr_c[6] = lfsr_q[4] ^ lfsr_q[5] ^ swap_in_data[4] ^ swap_in_data[5];
    lfsr_c[7] = lfsr_q[5] ^ lfsr_q[6] ^ swap_in_data[5] ^ swap_in_data[6];
    lfsr_c[8] = lfsr_q[6] ^ lfsr_q[7] ^ swap_in_data[6] ^ swap_in_data[7];
    lfsr_c[9] = lfsr_q[7] ^ lfsr_q[8] ^ swap_in_data[7] ^ swap_in_data[8];
    lfsr_c[10] = lfsr_q[8] ^ lfsr_q[9] ^ swap_in_data[8] ^ swap_in_data[9];
    lfsr_c[11] = lfsr_q[9] ^ lfsr_q[10] ^ swap_in_data[9] ^ swap_in_data[10];
    lfsr_c[12] = lfsr_q[10] ^ lfsr_q[11] ^ swap_in_data[10] ^ swap_in_data[11];
    lfsr_c[13] = lfsr_q[11] ^ lfsr_q[12] ^ swap_in_data[11] ^ swap_in_data[12];
    lfsr_c[14] = lfsr_q[12] ^ lfsr_q[13] ^ swap_in_data[12] ^ swap_in_data[13];
    lfsr_c[15] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[14] ^ lfsr_q[15] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[10] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[14] ^ swap_in_data[15];

    end // always

    always @(posedge sys_clk) begin
        if(sys_rst)
            lfsr_q <= {16{1'b0}};
        else if(crc_en) 
            lfsr_q <= lfsr_c;
        else 
            lfsr_q <= lfsr_q;
    end  
  
endmodule  

(3)CRC-32位实现:

实现多项式: 1+x^1+x^2+x^4+x^5+x^7+x^8+x^10+x^11+x^12+x^16+x^22+x^23+x^26+x^32

CRC初始值: 0xFFFFFFFF

输出结果异或值:0xFFFFFFFF

输入值使能:使能

输出值使能:使能


module crc_32(
    input sys_clk,
    input sys_rst,
    
    input [31:0] data_in,
    input crc_en,
    output [31:0] crc_out
);
    wire [31:0] swap_in_data;
    wire [31:0] swap_out_data;
    reg [31:0] lfsr_q,lfsr_c;    
    
    assign swap_in_data = {data_in[24],data_in[25],data_in[26],data_in[27],data_in[28],data_in[29],data_in[30],data_in[31],  
                             data_in[16],data_in[17],data_in[18],data_in[19],data_in[20],data_in[21],data_in[22],data_in[23],  
                             data_in[8],data_in[9],data_in[10],data_in[11],data_in[12],data_in[13],data_in[14],data_in[15],                                 
                             data_in[0],data_in[1],data_in[2],data_in[3],data_in[4],data_in[5],data_in[6],data_in[7]};



    assign swap_out_data = {lfsr_q[0],lfsr_q[1],lfsr_q[2],lfsr_q[3],lfsr_q[4],lfsr_q[5],lfsr_q[6],lfsr_q[7],
                                       lfsr_q[8],lfsr_q[9],lfsr_q[10],lfsr_q[11],lfsr_q[12],lfsr_q[13],lfsr_q[14],lfsr_q[15],
                                       lfsr_q[16],lfsr_q[17],lfsr_q[18],lfsr_q[19],lfsr_q[20],lfsr_q[21],lfsr_q[22],lfsr_q[23],
                                       lfsr_q[24],lfsr_q[25],lfsr_q[26],lfsr_q[27],lfsr_q[28],lfsr_q[29],lfsr_q[30],lfsr_q[31]};

    assign crc_out = swap_out_data ^ 32'hFFFFFFFF;
//----------------------------------------------------------------------------------------------------------------------------------------
    always @(*) begin
        lfsr_c[0] = lfsr_q[0] ^ lfsr_q[6] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[12] ^ lfsr_q[16] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[26] ^ lfsr_q[28] ^ lfsr_q[29] ^ lfsr_q[30] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[6] ^ swap_in_data[9] ^ swap_in_data[10] ^ swap_in_data[12] ^ swap_in_data[16] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[26] ^ swap_in_data[28] ^ swap_in_data[29] ^ swap_in_data[30] ^ swap_in_data[31];
        lfsr_c[1] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[9] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[24] ^ lfsr_q[27] ^ lfsr_q[28] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[9] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[13] ^ swap_in_data[16] ^ swap_in_data[17] ^ swap_in_data[24] ^ swap_in_data[27] ^ swap_in_data[28];
        lfsr_c[2] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[13] ^ lfsr_q[14] ^ lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[24] ^ lfsr_q[26] ^ lfsr_q[30] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[13] ^ swap_in_data[14] ^ swap_in_data[16] ^ swap_in_data[17] ^ swap_in_data[18] ^ swap_in_data[24] ^ swap_in_data[26] ^ swap_in_data[30] ^ swap_in_data[31];
        lfsr_c[3] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[14] ^ lfsr_q[15] ^ lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[25] ^ lfsr_q[27] ^ lfsr_q[31] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[10] ^ swap_in_data[14] ^ swap_in_data[15] ^ swap_in_data[17] ^ swap_in_data[18] ^ swap_in_data[19] ^ swap_in_data[25] ^ swap_in_data[27] ^ swap_in_data[31];
        lfsr_c[4] = lfsr_q[0] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[6] ^ lfsr_q[8] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[15] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[29] ^ lfsr_q[30] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[6] ^ swap_in_data[8] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[15] ^ swap_in_data[18] ^ swap_in_data[19] ^ swap_in_data[20] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[29] ^ swap_in_data[30] ^ swap_in_data[31];
        lfsr_c[5] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[10] ^ lfsr_q[13] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[24] ^ lfsr_q[28] ^ lfsr_q[29] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[10] ^ swap_in_data[13] ^ swap_in_data[19] ^ swap_in_data[20] ^ swap_in_data[21] ^ swap_in_data[24] ^ swap_in_data[28] ^ swap_in_data[29];
        lfsr_c[6] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[11] ^ lfsr_q[14] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[22] ^ lfsr_q[25] ^ lfsr_q[29] ^ lfsr_q[30] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[11] ^ swap_in_data[14] ^ swap_in_data[20] ^ swap_in_data[21] ^ swap_in_data[22] ^ swap_in_data[25] ^ swap_in_data[29] ^ swap_in_data[30];
        lfsr_c[7] = lfsr_q[0] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[5] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[10] ^ lfsr_q[15] ^ lfsr_q[16] ^ lfsr_q[21] ^ lfsr_q[22] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[28] ^ lfsr_q[29] ^ swap_in_data[0] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[5] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[10] ^ swap_in_data[15] ^ swap_in_data[16] ^ swap_in_data[21] ^ swap_in_data[22] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[28] ^ swap_in_data[29];
        lfsr_c[8] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[8] ^ lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[17] ^ lfsr_q[22] ^ lfsr_q[23] ^ lfsr_q[28] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[8] ^ swap_in_data[10] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[17] ^ swap_in_data[22] ^ swap_in_data[23] ^ swap_in_data[28] ^ swap_in_data[31];
        lfsr_c[9] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[9] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[18] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[29] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[9] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[13] ^ swap_in_data[18] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[29];
        lfsr_c[10] = lfsr_q[0] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[5] ^ lfsr_q[9] ^ lfsr_q[13] ^ lfsr_q[14] ^ lfsr_q[16] ^ lfsr_q[19] ^ lfsr_q[26] ^ lfsr_q[28] ^ lfsr_q[29] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[5] ^ swap_in_data[9] ^ swap_in_data[13] ^ swap_in_data[14] ^ swap_in_data[16] ^ swap_in_data[19] ^ swap_in_data[26] ^ swap_in_data[28] ^ swap_in_data[29] ^ swap_in_data[31];
        lfsr_c[11] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[9] ^ lfsr_q[12] ^ lfsr_q[14] ^ lfsr_q[15] ^ lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[20] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[28] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[9] ^ swap_in_data[12] ^ swap_in_data[14] ^ swap_in_data[15] ^ swap_in_data[16] ^ swap_in_data[17] ^ swap_in_data[20] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[28] ^ swap_in_data[31];
        lfsr_c[12] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[9] ^ lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[15] ^ lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[21] ^ lfsr_q[24] ^ lfsr_q[27] ^ lfsr_q[30] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[9] ^ swap_in_data[12] ^ swap_in_data[13] ^ swap_in_data[15] ^ swap_in_data[17] ^ swap_in_data[18] ^ swap_in_data[21] ^ swap_in_data[24] ^ swap_in_data[27] ^ swap_in_data[30] ^ swap_in_data[31];
        lfsr_c[13] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[10] ^ lfsr_q[13] ^ lfsr_q[14] ^ lfsr_q[16] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[22] ^ lfsr_q[25] ^ lfsr_q[28] ^ lfsr_q[31] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[10] ^ swap_in_data[13] ^ swap_in_data[14] ^ swap_in_data[16] ^ swap_in_data[18] ^ swap_in_data[19] ^ swap_in_data[22] ^ swap_in_data[25] ^ swap_in_data[28] ^ swap_in_data[31];
        lfsr_c[14] = lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[11] ^ lfsr_q[14] ^ lfsr_q[15] ^ lfsr_q[17] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[23] ^ lfsr_q[26] ^ lfsr_q[29] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[11] ^ swap_in_data[14] ^ swap_in_data[15] ^ swap_in_data[17] ^ swap_in_data[19] ^ swap_in_data[20] ^ swap_in_data[23] ^ swap_in_data[26] ^ swap_in_data[29];
        lfsr_c[15] = lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[12] ^ lfsr_q[15] ^ lfsr_q[16] ^ lfsr_q[18] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[24] ^ lfsr_q[27] ^ lfsr_q[30] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[12] ^ swap_in_data[15] ^ swap_in_data[16] ^ swap_in_data[18] ^ swap_in_data[20] ^ swap_in_data[21] ^ swap_in_data[24] ^ swap_in_data[27] ^ swap_in_data[30];
        lfsr_c[16] = lfsr_q[0] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[8] ^ lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[17] ^ lfsr_q[19] ^ lfsr_q[21] ^ lfsr_q[22] ^ lfsr_q[24] ^ lfsr_q[26] ^ lfsr_q[29] ^ lfsr_q[30] ^ swap_in_data[0] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[8] ^ swap_in_data[12] ^ swap_in_data[13] ^ swap_in_data[17] ^ swap_in_data[19] ^ swap_in_data[21] ^ swap_in_data[22] ^ swap_in_data[24] ^ swap_in_data[26] ^ swap_in_data[29] ^ swap_in_data[30];
        lfsr_c[17] = lfsr_q[1] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[9] ^ lfsr_q[13] ^ lfsr_q[14] ^ lfsr_q[18] ^ lfsr_q[20] ^ lfsr_q[22] ^ lfsr_q[23] ^ lfsr_q[25] ^ lfsr_q[27] ^ lfsr_q[30] ^ lfsr_q[31] ^ swap_in_data[1] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[9] ^ swap_in_data[13] ^ swap_in_data[14] ^ swap_in_data[18] ^ swap_in_data[20] ^ swap_in_data[22] ^ swap_in_data[23] ^ swap_in_data[25] ^ swap_in_data[27] ^ swap_in_data[30] ^ swap_in_data[31];
        lfsr_c[18] = lfsr_q[2] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[10] ^ lfsr_q[14] ^ lfsr_q[15] ^ lfsr_q[19] ^ lfsr_q[21] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[26] ^ lfsr_q[28] ^ lfsr_q[31] ^ swap_in_data[2] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[10] ^ swap_in_data[14] ^ swap_in_data[15] ^ swap_in_data[19] ^ swap_in_data[21] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[26] ^ swap_in_data[28] ^ swap_in_data[31];
        lfsr_c[19] = lfsr_q[3] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[11] ^ lfsr_q[15] ^ lfsr_q[16] ^ lfsr_q[20] ^ lfsr_q[22] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[27] ^ lfsr_q[29] ^ swap_in_data[3] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[11] ^ swap_in_data[15] ^ swap_in_data[16] ^ swap_in_data[20] ^ swap_in_data[22] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[27] ^ swap_in_data[29];
        lfsr_c[20] = lfsr_q[4] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[12] ^ lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[21] ^ lfsr_q[23] ^ lfsr_q[25] ^ lfsr_q[26] ^ lfsr_q[28] ^ lfsr_q[30] ^ swap_in_data[4] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[12] ^ swap_in_data[16] ^ swap_in_data[17] ^ swap_in_data[21] ^ swap_in_data[23] ^ swap_in_data[25] ^ swap_in_data[26] ^ swap_in_data[28] ^ swap_in_data[30];
        lfsr_c[21] = lfsr_q[5] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[13] ^ lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[22] ^ lfsr_q[24] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[29] ^ lfsr_q[31] ^ swap_in_data[5] ^ swap_in_data[9] ^ swap_in_data[10] ^ swap_in_data[13] ^ swap_in_data[17] ^ swap_in_data[18] ^ swap_in_data[22] ^ swap_in_data[24] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[29] ^ swap_in_data[31];
        lfsr_c[22] = lfsr_q[0] ^ lfsr_q[9] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[14] ^ lfsr_q[16] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[29] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[9] ^ swap_in_data[11] ^ swap_in_data[12] ^ swap_in_data[14] ^ swap_in_data[16] ^ swap_in_data[18] ^ swap_in_data[19] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[29] ^ swap_in_data[31];
        lfsr_c[23] = lfsr_q[0] ^ lfsr_q[1] ^ lfsr_q[6] ^ lfsr_q[9] ^ lfsr_q[13] ^ lfsr_q[15] ^ lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[29] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[1] ^ swap_in_data[6] ^ swap_in_data[9] ^ swap_in_data[13] ^ swap_in_data[15] ^ swap_in_data[16] ^ swap_in_data[17] ^ swap_in_data[19] ^ swap_in_data[20] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[29] ^ swap_in_data[31];
        lfsr_c[24] = lfsr_q[1] ^ lfsr_q[2] ^ lfsr_q[7] ^ lfsr_q[10] ^ lfsr_q[14] ^ lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[27] ^ lfsr_q[28] ^ lfsr_q[30] ^ swap_in_data[1] ^ swap_in_data[2] ^ swap_in_data[7] ^ swap_in_data[10] ^ swap_in_data[14] ^ swap_in_data[16] ^ swap_in_data[17] ^ swap_in_data[18] ^ swap_in_data[20] ^ swap_in_data[21] ^ swap_in_data[27] ^ swap_in_data[28] ^ swap_in_data[30];
        lfsr_c[25] = lfsr_q[2] ^ lfsr_q[3] ^ lfsr_q[8] ^ lfsr_q[11] ^ lfsr_q[15] ^ lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[21] ^ lfsr_q[22] ^ lfsr_q[28] ^ lfsr_q[29] ^ lfsr_q[31] ^ swap_in_data[2] ^ swap_in_data[3] ^ swap_in_data[8] ^ swap_in_data[11] ^ swap_in_data[15] ^ swap_in_data[17] ^ swap_in_data[18] ^ swap_in_data[19] ^ swap_in_data[21] ^ swap_in_data[22] ^ swap_in_data[28] ^ swap_in_data[29] ^ swap_in_data[31];
        lfsr_c[26] = lfsr_q[0] ^ lfsr_q[3] ^ lfsr_q[4] ^ lfsr_q[6] ^ lfsr_q[10] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[22] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[26] ^ lfsr_q[28] ^ lfsr_q[31] ^ swap_in_data[0] ^ swap_in_data[3] ^ swap_in_data[4] ^ swap_in_data[6] ^ swap_in_data[10] ^ swap_in_data[18] ^ swap_in_data[19] ^ swap_in_data[20] ^ swap_in_data[22] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[26] ^ swap_in_data[28] ^ swap_in_data[31];
        lfsr_c[27] = lfsr_q[1] ^ lfsr_q[4] ^ lfsr_q[5] ^ lfsr_q[7] ^ lfsr_q[11] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[29] ^ swap_in_data[1] ^ swap_in_data[4] ^ swap_in_data[5] ^ swap_in_data[7] ^ swap_in_data[11] ^ swap_in_data[19] ^ swap_in_data[20] ^ swap_in_data[21] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[29];
        lfsr_c[28] = lfsr_q[2] ^ lfsr_q[5] ^ lfsr_q[6] ^ lfsr_q[8] ^ lfsr_q[12] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[22] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[28] ^ lfsr_q[30] ^ swap_in_data[2] ^ swap_in_data[5] ^ swap_in_data[6] ^ swap_in_data[8] ^ swap_in_data[12] ^ swap_in_data[20] ^ swap_in_data[21] ^ swap_in_data[22] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[28] ^ swap_in_data[30];
        lfsr_c[29] = lfsr_q[3] ^ lfsr_q[6] ^ lfsr_q[7] ^ lfsr_q[9] ^ lfsr_q[13] ^ lfsr_q[21] ^ lfsr_q[22] ^ lfsr_q[23] ^ lfsr_q[25] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[28] ^ lfsr_q[29] ^ lfsr_q[31] ^ swap_in_data[3] ^ swap_in_data[6] ^ swap_in_data[7] ^ swap_in_data[9] ^ swap_in_data[13] ^ swap_in_data[21] ^ swap_in_data[22] ^ swap_in_data[23] ^ swap_in_data[25] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[28] ^ swap_in_data[29] ^ swap_in_data[31];
        lfsr_c[30] = lfsr_q[4] ^ lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[10] ^ lfsr_q[14] ^ lfsr_q[22] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[26] ^ lfsr_q[27] ^ lfsr_q[28] ^ lfsr_q[29] ^ lfsr_q[30] ^ swap_in_data[4] ^ swap_in_data[7] ^ swap_in_data[8] ^ swap_in_data[10] ^ swap_in_data[14] ^ swap_in_data[22] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[26] ^ swap_in_data[27] ^ swap_in_data[28] ^ swap_in_data[29] ^ swap_in_data[30];
        lfsr_c[31] = lfsr_q[5] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[11] ^ lfsr_q[15] ^ lfsr_q[23] ^ lfsr_q[24] ^ lfsr_q[25] ^ lfsr_q[27] ^ lfsr_q[28] ^ lfsr_q[29] ^ lfsr_q[30] ^ lfsr_q[31] ^ swap_in_data[5] ^ swap_in_data[8] ^ swap_in_data[9] ^ swap_in_data[11] ^ swap_in_data[15] ^ swap_in_data[23] ^ swap_in_data[24] ^ swap_in_data[25] ^ swap_in_data[27] ^ swap_in_data[28] ^ swap_in_data[29] ^ swap_in_data[30] ^ swap_in_data[31];
    end // always

    always @(posedge sys_clk) begin
        if(sys_rst)
            lfsr_q <= {32{1'b1}};
        else if(crc_en) 
            lfsr_q <= lfsr_c;
        else 
            lfsr_q <= lfsr_q;
    end  
  
endmodule  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/345435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【情人节用Compose给女神写个爱心动画APP】

情人节用Compose给女神写个爱心动画APP前言涉及知识点实现思路实现过程绘制爱心创建动画效果Preview预览效果完整源码彩蛋前言 前一阵子看电视里的学霸用代码写了个炫酷的爱心&#xff0c;网上有很多js和python的源码&#xff0c;复制粘贴就能拥有&#xff0c;但是Android的好…

重写-linux内存管理-伙伴分配器(一)

文章目录一、伙伴系统的结构二、初始化三、分配内存3.1 prepare_alloc_pages3.2 get_page_from_freelist3.2.1 zone_watermark_fast3.2.2 zone_watermark_ok3.2.3 rmqueue3.2.3.1 rmqueue_pcplist3.2.3.2 __rmqueue3.2.3.2.1 __rmqueue_smallest3.2.3.2.2 __rmqueue_fallback3.…

怎么代理微信小程序创业?

随着微信的兴起&#xff0c;小程序已经成为了人们生活中不可或缺的一部分。如果你想要创业的话&#xff0c;那么代理微信小程序是一个不错的选择。本文将为大家介绍怎么代理微信小程序创业。 一、什么是微信小程序 微信小程序是一款专为移动设备使用者而设计的应用。它通过扫…

javaEE 初阶 — 滑动窗口

文章目录滑动窗口1 滑动窗口下如何处理丢包TCP 工作机制&#xff1a;确认应答机制 超时重传机制 连接管理机制 滑动窗口 确认应答机制、超时重传机制、连接管理机制 都是给 TCP 的可靠性提供支持的。 虽然事变的比较可靠了&#xff0c;但是是有牺牲的&#xff0c;那就是传输…

黑马SpringCloud知识点和面试题

目录 一、微服务 1.1、微服务技术栈 1.2、微服务的介绍&#xff1a; 1.3、微服务技术对比 1.4、认识微服务-springcloud 1.4.1、springcloud和springboot的兼容性&#xff08;左边springcloud右边springboot版本&#xff09; 1.5、服务拆分&#xff0c;服务远程调用&…

数学建模美赛【LaTeX】公式、表格、图片

数学建模美赛【LaTeX】公式、表格、图片 1 宏包 \package{ } 就是在调用宏包&#xff0c;对计算机实在外行的同学姑且可以理解为工具箱。 每一个宏包里都定义了一些专门的命令&#xff0c;通过这些命令可以实现对于一类对象&#xff08;如数学公式等&#xff09;的统一排版&a…

opencv的TrackBar控件

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

HTML预格式化文本pre标签

文章目录参考white-spaceword-breakfont-family参考 https://blog.csdn.net/weixin_44368963/article/details/120054949 https://www.zhangxinxu.com/wordpress/2017/03/css-font-family-chinese-english/ pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留…

UG二次开发装配篇 添加/拖动/删除组件方法的实现

我们在UG装配的过程中&#xff0c;经常会遇到需要调整组件目录位置&#xff0c;在软件设计过程中可以通过在目录树里面拖动组件来完成。 那么&#xff0c;如果要用程序实现组件的移动/拖动&#xff0c;我们要怎么做呢&#xff1f; 本节就完成了添加/拖动/删除组件方法的实现&…

ZooKeeper集群搭建步骤

一、准备虚拟机准备三台虚拟机&#xff0c;对应ip地址和主机名如下&#xff1a;ip地址Hostname192.168.153.150ant163192.168.153.151ant164192.168.153.152ant165修改hostname&#xff0c;并使之生效[rootlocalhost /]# hostnamectl set-hostname zookeeper1 //修改hostname …

分享好玩的h5小游戏制作步骤_怎么做h5微信小游戏

近年来&#xff0c;市面上一直流行各种h5游戏&#xff0c;例如投票、答题、刮刮乐、大转盘等等等等&#xff0c;而且我在各种营销场景下经常看到它们的身影&#xff0c;是做促销&#xff0c;引流和宣传的神器之一&#xff01;那么&#xff0c;怎么做好玩的h5游戏&#xff1f;还…

网络安全-Nmap

网络安全-Nmap Nmap-号称诸神之眼 这个呢就是用来扫描网络端口的 Namp的工作原理很像一个雷达 做任何攻击之前&#xff0c;得先知道怎么去找破绽&#xff0c;而不是钢铁洪流&#xff0c;那个是不叫渗透了&#xff0c;叫硬钢。 咋用呢&#xff1f; 很简单 直接 nmap 后面跟网址…

Linux内核转储---kdump原理梳理

文章目录Kexec和Kdump设计的区别kexeckdumpKdump的执行流程kexec的实现用户空间kexec内核空间vmcoreKdump的实现可以分为两部分&#xff1a;内核和用户工具。内核提供机制&#xff0c;用户工具在这些机制上实现各种转储策略&#xff0c;内核机制对用户工具的接口是一个系统调用…

华为HCIE学习之Openstack Nova组件

文章目录一、openstack组成形式二、Nova的模块1、Nova-api功能2、Nova-scheduler功能3、Nova-conductor功能4、Nova-novncproxy5、Nova-compute三、nova中的一些概念 一、openstack组成形式 openstack由一个个组件组成&#xff0c;每个组件由一个个模块组成。 二、Nova的模块…

mac上安装redis的两种方法

mac上安装redis的两种方法1. 安装方式1->使用homebrew安装redis1.1 安装redis1.1.1 安装homebrew1.1.2 查看redis安装目录1.2 安装等简单命令1.3 启动等相关命令1.3.1 使用brew命令启动1.3.2 redis-cli连接redis服务1.3.3 使用配置文件启动1.42. 安装方式2->官网下载安装…

Spring Cloud之Zuul

目录 简介 Zuul中的过滤器 过滤器的执行流程 使用过滤器 route过滤器的默认三种配置 路由到服务 路由到url地址 转发给自己 自定义过滤器 简介 Zuul是Netflix开源的微服务网关&#xff0c;主要功能是路由转发和过滤器&#xff0c;其原理也是一系列filters&#xff0…

图文解说S参数(进阶篇)

S参数是RF工程师/SI工程师必须掌握的内容&#xff0c;业界已有多位大师写过关于S参数的文章&#xff0c;即便如此&#xff0c;在相关领域打滚多年的人&#xff0c; 可能还是会被一些问题困扰着。你懂S参数吗? 图文解说S参数&#xff08;基础篇&#xff09; 请继续往下看...台湾…

数据结构(三):集合、字典、哈希表

数据结构&#xff08;三&#xff09;一、集合&#xff08;Set&#xff09;1.封装一个集合类2.集合常见的操作&#xff08;1&#xff09;并集&#xff08;2&#xff09;交集&#xff08;3&#xff09;差集&#xff08;4&#xff09;子集二、字典&#xff08;Map&#xff09;三、…

Powershell Install SQL Server 2022

前言 SQL Server 2022 (16.x) 在早期版本的基础上构建,旨在将 SQL Server 发展成一个平台,以提供开发语言、数据类型、本地或云环境以及操作系统选项。 SQL Server Management Studio (SSMS) 是一种集成环境,用于管理从 SQL Server 到 Azure SQL 数据库的任何 SQL 基础结构…

nginx如何用html显示多个图片并加入播放链接

需求背景通过nginx来做个点播服务&#xff0c;ffmpeg截取视频中的某一帧作为视频的封面&#xff0c;前端页面展示这个封面&#xff0c;&#xff0c;并链接到对应的视频播放链接&#xff0c;加载播放器进行播放简单介绍一下ffmpeg截取视频中的某一帧的方式截取视频的第一帧&…