常用電路設計之CRC校驗碼產生器的設計

2021-09-29 21:46:29 字數 2512 閱讀 4617

一、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)學習總結

因為在資料訪問和傳送的過程中,由於元器件或者噪音的干擾等原因會出現錯誤,這個時候我們就需要採取相應的措施,發現並糾正錯誤,對於錯誤的檢測和校正,大多採取 冗餘校驗 的思想,即除原資料外,額外增加若干位編碼,這些新增的 稱為校驗位。若干位 組成的乙個字稱為碼字,而兩個碼字具有不同 的位數為這兩個碼字的...