并行 CRC 多项式

问题描述 投票:0回答:1

我想为 CRC_8_ATM 多项式编写一个并行 CRC。我找到了多项式 = 0x1021 的code,但我不明白 XOR 位置以及为什么它们是这样的,以便我可以将其更改为我想要的多项式

assign crc_out = crc_reg;
// CRC Control logic
always @ (posedge clk)
if (reset) begin
  crc_reg <= 16'hFFFF;
end else if (enable) begin
  if (init) begin
     crc_reg <= 16'hFFFF;
  end else begin
     crc_reg <= next_crc;
  end
end
// I do not understand this part
assign next_crc[0] = data_in[7] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[11];
assign next_crc[1] = data_in[1] ^ crc_reg[5];
assign next_crc[2] = data_in[2] ^ crc_reg[6];
assign next_crc[3] = data_in[3] ^ crc_reg[7];
assign next_crc[4] = data_in[4] ^ crc_reg[8];
assign next_crc[5] = data_in[7] ^ data_in[5] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[9] ^ crc_reg[11];
assign next_crc[6] = data_in[6] ^ data_in[1] ^ crc_reg[5] ^ crc_reg[10];
assign next_crc[7] = data_in[7] ^ data_in[2] ^ crc_reg[6] ^ crc_reg[11];
assign next_crc[8] = data_in[3] ^ crc_reg[0] ^ crc_reg[7];
assign next_crc[9] = data_in[4] ^ crc_reg[1] ^ crc_reg[8];
assign next_crc[10] = data_in[5] ^ crc_reg[2] ^ crc_reg[9];
assign next_crc[11] = data_in[6] ^ crc_reg[3] ^ crc_reg[10];

verilog crc
1个回答
0
投票

您正在寻找具有截断多项式

0x07
的非反射CRC的操作如下,其中
c
是前一个CRC值和数据字节的异或,并且
cp
(“c素数”) "),是下一个 CRC 值:

    assign cp[0] = c[0] ^ c[6] ^ c[7];
    assign cp[1] = c[0] ^ c[1] ^ c[6];
    assign cp[2] = c[0] ^ c[1] ^ c[2] ^ c[6];
    assign cp[3] = c[1] ^ c[2] ^ c[3] ^ c[7];
    assign cp[4] = c[2] ^ c[3] ^ c[4];
    assign cp[5] = c[3] ^ c[4] ^ c[5];
    assign cp[6] = c[4] ^ c[5] ^ c[6];
    assign cp[7] = c[5] ^ c[6] ^ c[7];
© www.soinside.com 2019 - 2024. All rights reserved.