3.1CRC校验码产生器
首先,n位的data要发送过去,crc校验码的目的是检测接收到的data是不是准确的。
比如选择16位的crc来校验,比如采用这个标准的
这个生成多项式转换成二进制就是10001000000100001,这是除数。
在n位后面加上17-1位的0,保证data的最后一位也可以进行除法
用n+16位的新data除以这个17位的除数,余数就是CRC校验码,加在原来n位的data后面发送过去,在接收端同样除以这个除数,如果余数是0,则传送的数据正确,如果余数不是0,则余数表示多少,出错的位数就是对应的位数。比如最后余数是8,表示传送过来的data第8位出错了。
但是代码还是看不懂,这里是两种方法,串行crc16和并行crc16
串行crc16
module CRC16 (reset,clk,soc,data,crc_out);
input reset;
input clk;
input soc;
input data;
output [15:0] crc_out;
reg [15:0] crc_out;
reg temp;
integer i,j,k,l;
parameter delay=1;
always @ (posedge reset or posedge clk)
begin
if(reset)
crc_out<=#delay 16&