简单串行CRC的verilog实现
CRC(Cyclic Redundancy Check,循环冗余校验)是数据传输中常用的一种差错控制编码方式,针对要发送的数据帧,使用一些特定的多项式可以计算出CRC校验结果,CRC校验结果和原始数据一起传输到接收端。
本例基于LSFR建立一个多项表达式为x8+x2+x+1的CRC算法,步骤如下:
a.计算CRC之前,CRC寄存器初始化为一个已知的值(初始值),接收端的CRC校验电路的初始值要使用和发送端相同的初始值。
b.当最后一个数据比特到达时,CRC内部存储的就是最后的校验结果
c.在最后一个数据比特发出后,储存在寄存器中的CRC校验结果逐比特输出,直至最后一个比特。校验结果紧跟在用户数据后面输出。
LSFR的多项表达式含义详解见https://blog.csdn.net/qq_44113393/article/details/89852994
CRC算法图如下:
其CRC寄存器代码如下,CRC的初始值设为8’hFF
module CRC8_CCITT
(clk,reset,
din,
init_crc,
calc_crc,
crc_out);
input clk,reset;
input din;
input [7:0]init_crc;
input calc_crc;
output [7:0] crc_out;
parameter CRC_INIT_VALUE = 8'hFF;
reg [7:0]crcreg,crcreg_nxt;
wire [7:0] newcrc;
wire [7:0] crc_out