一、crc校驗碼的產生原理
迴圈冗餘編碼(crc)是二進位制通訊系統中一種常用的差錯檢測方法,它是通過在原始資料後面新增冗餘校驗碼來實現檢測差錯的目的。crc編碼的基本原理就是:crc可由原始資料流的二進位制去除以一稱作為生成多項式的常數,將得到的商拋棄,餘數加到原始資料流二進位制數的後面得到,在接收端,用接收的資料再去除以該生成多項式,如果餘數為0則校驗通過,否則校驗不通過。
這裡我們採用crc16編碼作為典型例子進行講解,首先我們先講解一下二進位制數的多項式表示,二進位制數可以表示成多項式的係數,如10 0100 0101用多項式就可以表示成:
國際上對於不同型別的crc校驗編碼是有相應的國際標準的,比如crc8,crc16,在這些標準中對除數(或者叫做生成多項式)都有明確的規定,我們只需要查閱相關標準手冊,然後根據相應的生成多項式編碼實現不同型別的crc校驗碼,這裡以crc16為例,crc16的生成多項式可以表示為:
該生成多項式對應的線性反饋移位暫存器可以表示為:
圖中的crc[0]-crc[15]分別代表crc16校驗碼的第0-15位,data表示輸入資料流,待校驗碼生成完畢之後,將16位校驗碼加到輸入資料流的末尾就得到了生成的傳送序列,圖中的資料運算為異或操作,通過如上圖所示的線性移位暫存器就實現了除法操作。
二、crc16的verilog實現
編碼如下:
module crc16_para (
//system signals
input sclk ,
input s_rst_n ,
// input [7:0] data ,
output reg [15:0] out
);reg [15:0] crc16_out ;
reg [15:0] crc_reg ;
reg temp;
integer i,j,m,n ;
always @ (posedge sclk or negedge s_rst_n) begin
if(s_rst_n == 1'b0)
crc16_out<=16'b0;
else
crc16_out<=crc_reg;
endalways @ (crc16_out or data) begin
crc_reg=crc16_out;
for (i = 7; i >= 0; i = i - 1)
begin
temp=data[i]^crc_reg[15];
for (j = 15; j > 12; j = j - 1)
begin
crc_reg[j]=crc_reg[j-1];
endcrc_reg[12]=temp^crc_reg[11];
for (m = 11; m >5 ; m = m - 1)
begin
crc_reg[m]=crc_reg[m-1];
endcrc_reg[5]=temp^crc_reg[4];
for (n = 4; n >0 ; n = n - 1)
begin
crc_reg[n]=crc_reg[n-1];
endcrc_reg[0]=temp^0;
endout=crc_reg;
endendmodule
testbench如下:
`timescale 1ns/1ps
module tb ();
reg sclk;
reg s_rst_n;
reg [7:0] data ;
wire [15:0] out ;
initial
begin
sclk=1'b1;
s_rst_n=1'b1;
data=8'b1011_0110;
#5 s_rst_n=1'b0;
#5 s_rst_n=1'b1;
endalways #5 sclk=~sclk;
crc16_para crc16_para_instance(
//system signals
.sclk(sclk),
.s_rst_n(s_rst_n),
.data(data),
.out(out)
);endmodule
modelsim**結果:
crc計算器計算結果:
由兩圖中結果比較可知,計算結果正確,校驗通過。
常用校驗碼(奇偶校驗碼 海明校驗碼 CRC校驗碼)
一 奇偶校驗碼 二 海明校驗碼 三 crc校驗碼 計算機系統執行時,各個部之間要進行資料交換.交換的過程中,會有發生誤碼的可能 即0變成1或1變成0 由於計算機的儲存是通過二進位制 來實現的的,誤碼會導致儲存的內容發生改變。為確保資料在傳送過程正確無誤,常使用檢驗碼.我們常使用的檢驗碼有三種.分別是...
CRC校驗碼之模二演算法
最近複習計算機網路相關的知識,學到crc校驗碼時用到了模二除法,於是在回過頭去重新溫習了一下模二演算法 模2運算是一種二進位制演算法,crc校驗技術中的核心部分。與四則運算相同,模2運算也包括模2加法 模2減法 模2乘法 模2除法四種二進位制運算。與四則運算不同的是模2運算不考慮進製和借位,模2算術...
常用校驗碼(奇偶校驗,海明校驗,CRC)學習總結
因為在資料訪問和傳送的過程中,由於元器件或者噪音的干擾等原因會出現錯誤,這個時候我們就需要採取相應的措施,發現並糾正錯誤,對於錯誤的檢測和校正,大多採取 冗餘校驗 的思想,即除原資料外,額外增加若干位編碼,這些新增的 稱為校驗位。若干位 組成的乙個字稱為碼字,而兩個碼字具有不同 的位數為這兩個碼字的...