CRC24循环冗余校验码的FPGA实现
生活随笔
收集整理的這篇文章主要介紹了
CRC24循环冗余校验码的FPGA实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ? ? ?CRC即循環(huán)冗余校驗碼(Cyclic Redundancy Check[1] ):是數(shù)據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據傳輸檢錯功能,對數(shù)據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執(zhí)行類似的算法,以保證數(shù)據傳輸?shù)恼_性和完整性。
//1+x^2+x^22+x^23+x^24;module crc(input [7:0] data_in,input crc_en,output [23:0] crc_out,input rst,input clk);reg [23:0] lfsr_q,lfsr_c;assign crc_out = lfsr_q;always @(*) beginlfsr_c[0] = lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[22] ^ lfsr_q[23] ^ data_in[0] ^ data_in[1] ^ data_in[3] ^ data_in[4] ^ data_in[6] ^ data_in[7];lfsr_c[1] = lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[23] ^ data_in[1] ^ data_in[2] ^ data_in[4] ^ data_in[5] ^ data_in[7];lfsr_c[2] = lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[23] ^ data_in[0] ^ data_in[1] ^ data_in[2] ^ data_in[4] ^ data_in[5] ^ data_in[7];lfsr_c[3] = lfsr_q[17] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[21] ^ lfsr_q[22] ^ data_in[1] ^ data_in[2] ^ data_in[3] ^ data_in[5] ^ data_in[6];lfsr_c[4] = lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[22] ^ lfsr_q[23] ^ data_in[2] ^ data_in[3] ^ data_in[4] ^ data_in[6] ^ data_in[7];lfsr_c[5] = lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[23] ^ data_in[3] ^ data_in[4] ^ data_in[5] ^ data_in[7];lfsr_c[6] = lfsr_q[20] ^ lfsr_q[21] ^ lfsr_q[22] ^ data_in[4] ^ data_in[5] ^ data_in[6];lfsr_c[7] = lfsr_q[21] ^ lfsr_q[22] ^ lfsr_q[23] ^ data_in[5] ^ data_in[6] ^ data_in[7];lfsr_c[8] = lfsr_q[0] ^ lfsr_q[22] ^ lfsr_q[23] ^ data_in[6] ^ data_in[7];lfsr_c[9] = lfsr_q[1] ^ lfsr_q[23] ^ data_in[7];lfsr_c[10] = lfsr_q[2];lfsr_c[11] = lfsr_q[3];lfsr_c[12] = lfsr_q[4];lfsr_c[13] = lfsr_q[5];lfsr_c[14] = lfsr_q[6];lfsr_c[15] = lfsr_q[7];lfsr_c[16] = lfsr_q[8];lfsr_c[17] = lfsr_q[9];lfsr_c[18] = lfsr_q[10];lfsr_c[19] = lfsr_q[11];lfsr_c[20] = lfsr_q[12];lfsr_c[21] = lfsr_q[13];lfsr_c[22] = lfsr_q[14] ^ lfsr_q[16] ^ lfsr_q[17] ^ lfsr_q[19] ^ lfsr_q[20] ^ lfsr_q[22] ^ lfsr_q[23] ^ data_in[0] ^ data_in[1] ^ data_in[3] ^ data_in[4] ^ data_in[6] ^ data_in[7];lfsr_c[23] = lfsr_q[15] ^ lfsr_q[16] ^ lfsr_q[18] ^ lfsr_q[19] ^ lfsr_q[21] ^ lfsr_q[22] ^ data_in[0] ^ data_in[2] ^ data_in[3] ^ data_in[5] ^ data_in[6];end // alwaysalways @(posedge clk, posedge rst) beginif(rst) beginlfsr_q <= {24{1'b1}};endelse beginlfsr_q <= crc_en ? lfsr_c : lfsr_q;endend // always endmodule // crc| ? |
總結
以上是生活随笔為你收集整理的CRC24循环冗余校验码的FPGA实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于GRNN神经网络的数字预失真系统的F
- 下一篇: 5.MATLAB路径管理