module CRC8 ( input clk, input rst_n, input En, input Updata, input [7:0] Data, output reg Done, output reg [7:0] Out ); reg [7:0] crc = 8'h00; reg [7:0] d; reg [7:0] c; reg [7:0] newcrc; always @(posedge clk or negedge rst_n) begin if (!rst_n) begin crc <= 8'h00; Done <= 1'b0; Out <= 8'h00; end else begin if (En) begin if (Updata) begin d = Data; c = crc; newcrc[0] = d[0] ^ c[0]; newcrc[1] = d[1] ^ c[1]; newcrc[2] = d[2] ^ c[2]; newcrc[3] = d[3] ^ c[3]; newcrc[4] = d[4] ^ c[4]; newcrc[5] = d[5] ^ c[5]; newcrc[6] = d[6] ^ c[6]; newcrc[7] = d[7] ^ c[7]; crc = newcrc; Done = 1'b1; Out = crc; end Done = 1'b0; end else begin Done <= 1'b0; Out <= 8'h00; crc <= 8'h00; end end end endmodule
时间: 2023-06-04 18:09:07 浏览: 179
CRC计算 crc.c
5星 · 资源好评率100%
这是一个 Verilog HDL 的模块,实现了 CRC-8 校验算法。根据输入的时钟信号和复位信号,以及使能信号和需要校验的数据,计算得出校验结果并输出到模块的输出端口。具体实现方式是在时钟上升沿或复位信号下降沿时进行判断和计算,包括对使能信号和更新信号的处理,以及使用 XOR 运算计算新的校验值。
阅读全文