CRC校驗原理和verilog實現方法(二)


1 前言

在 前面的博客  CRC校驗原理和verilog實現方法()  中,介紹了CRC校驗的原理和手動計算過程。本文說一下我在學習CRC校驗FPGA實現的一點心得體會。

2 線性反饋移位寄存器

線性反饋移位寄存器簡稱LFSR,用於產生可重復的偽隨機序列,也可用來實現CRC校驗。LFSR主要由觸發器(寄存器)、異或門以及反饋線路組成。

已知多項式,其中gn~g0 是系數,g0取值為1,其他系數可以是0或1。該多項式用二進制表示為,用LFSR表示為:

或者表示為:

第一種表示法為伽羅瓦LFSR,第二種表示法叫斐波那契LFSR。

可以看出,對於一個n次多項式,可以使用n-1個移位寄存器和最多n-2個異或門實現。LFSR可以實現模二除法。

3 模2除法與LFSR

把被除數的數據,從第一個寄存器的輸入端接入,就可以實現模二運算。

假如被除數是2位的數據S[1:0]=01b,多項式是10011b。CRC校驗里面,習慣省略最高位的1,多項式用0011b表示。那么S除以0011b的模二運算數字電路結構為: 

其中d1~d4是寄存器輸入;q1~q4是寄存器輸出。寄存器需要賦初值,一般賦全1或全0。

下面對模二運算的邏輯表達式進行推導。

首先MSB參與計算,此時:

d1=S[1]^q4;

d2= S[1]^q1^q4;

d3=q2;

d4=q3。

經過一次移位后:

q1=d1= S[1]^q4;

q2= d2= S[1]^q1^q4;

q3= d3=q2;

q4= d4=q3。

此時有:

d1=S[0]^q3;

d2= S[0]^ S[1]^q4^q3;

d3= S[1]^q1^q4;

d4= q2。

令c[3:0]={q4,q3,q2,q1},d[3:0]={d4,d3,d2,d1},那么d就是最終的運算結果表達式,如下

d[3]=c[1];

d[2]= S[1]^c[0]^c[3];

d[1]= S[0]^ S[1]^ c[3]^ c[2];

d[0]= S[0]^ c[2]。

令c的初值為0,則01b對0011b的模二除法的余數為0011b。

與手動計算進行對比,結果一致。

上述的被除數S可以換成任意位寬,推導過程一樣,當然S位寬越大,推導越復雜,最終的邏輯表達式也越復雜。

上面的邏輯表達式,用verilog異或邏輯很容易實現。

4 CRC校驗的verilog實現

知道如何用verilog實現模二除法,CRC校驗的實現就很容易了。但是CRC校驗模型一般會有一些特定要求,如輸入輸出翻轉、CRC寄存器初始值等。下一篇博客繼續分享。

 參考鏈接:

1、 https://blog.csdn.net/qq_44113393/article/details/89852994

2、 https://www.cnblogs.com/weijianlong/p/11947741.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM