基於FPGA的循環冗餘校驗碼設計

2021-01-11 電子產品世界

     在現代數字通信中,要求信息在傳輸過程中造成的數字差錯必須足夠低。但由於通信信道存在噪聲和傳輸特性不 理想等原因造成了信號
的碼間串擾,導致信息在傳輸過程產 生差錯。為了最大限度地保證通信過程中信息的完整性,需 要採用信道編碼技術對可能發生的差錯進行有效地控制,而 循環冗餘校驗碼就是其中一個最有效的編碼技術。

本文引用地址:http://www.eepw.com.cn/article/201703/344838.htm


1  循環冗餘校驗碼基本思想
循環冗餘校驗碼是一種校錯能力很強且使用非常廣泛 的差錯檢驗方法。循環冗餘校驗碼採用在發送的有用碼後面 加入校驗碼來實現數字通信傳輸過程中數據的差錯檢測,通 常的構成可以描述為:K位的有效信息數據串和R位的循環 冗餘校驗碼並在一起傳輸。
1.1 循環冗餘校驗碼生成基本原理
循環冗餘校驗碼(亦稱CRC碼)在通信信號校錯裡廣泛使 用。其基本原理是,在發送端:將要發送的數據串序列當作 一個多項式T(x)的係數(比如,多項式為T(x)=x5+x3+x+1,則 此多項式的係數就為101011,同時可以自定義一個k次冪的 稱為生成多項式的多項式G(x),為了使原來的數據串序列在 後面加入校驗碼,就必須使其向左移,所以用Xk乘以T(x), 根據對二進位乘法的理解,得到的T(x)Xk,能起到把T(x) 原有數據串序列向左移動k位的結果。為了得到校驗碼,用 G(x)作除數,T(x)Xk作被除數,相除得到一個餘數多項式 R(x)。然後將餘數多項式R(x)並在待發送的數據串序列後 面,把這串新的數據串序列作為發送序列發送。在接收端: 再次使用自定義的生成多項式G(x)去除接收到的數據串序列多項式,如果相除所得到的餘數多項式和在發送端計算得到的餘數多項式相同,則表示信號傳輸正常,沒有出現差錯;
如果兩者不相同,就表明信號傳輸錯誤,就必須檢查各方面 因素,重新發送信息,直到兩者相同為止。為了更直觀地說明循環冗餘校驗碼的生成過程、校驗 過程,以8位的有效信息數據串和4位的循環冗餘校驗碼並在 一起傳輸為例。

生成過程:

(1)假設要發送的數據串序列為11011101。

(2)自定義的生成多項式G
(x)=x4+x3+x+1,其中k=4,相對應的序列為11011。
(3)把待發送的數據串序列向左移動4位,後面補0,從 而得到新的數據串序列為110111010000。
(4)使用模2除法,用生成多項式序列去除新生成的數據 串序列。即

這樣得到了餘數多項式R(x)對應序列為1010。
( 5 ) 將 餘 數 多 項 式 R ( x ) 對 應 序 列 並 到 新 數 據 串 序 列 後 面 , 得 到 帶 有 循 環 冗 餘 校 驗 碼 的 數 據 串 序 列 :
110111011010。 校驗過程: 假 如 信 息 在 傳 輸 過 程 中 沒 有 受 到 影 響 而 發 生 錯 誤 的話,接收到的帶有循環冗餘校驗碼的數據串序列必定可以被 在發送端所自定義的生成多項式整除,也就是:

1.2  生成多項式的注意事項 (1)生成多項式的最高位和最低位必須為1。 (2)當所要傳輸的數據序列任何一位發生錯誤時,用生
成多項式做模2除法(即加法不進位,減法不借位,實際上就 是數字邏輯裡的「異或」操作)後要使相除後的餘數不為0。 (3)對於不同的位產生錯誤時,要使餘數也不同。
(4)對餘數繼續做模2除法時,要使餘數循環。

2  Verilog HDL核心程序
2.1  Verilog HDL實現循環冗餘校驗碼的生成代碼

其中DXS表示生成多項式PROCESS(clk,rst_n )
VARIABLE dzl: STD_LOGIC_VECTOR(16 DOWNTO 0); VARIABLE sdzl:     S T D _ L O G I C _ V E C T O R ( 1 1
DOWNTO 0); BEGIN
IF (clk'event and clk='1') THEN IF    rst_n='0' THEN hsd_r<='0';
dcrco_r<=B"0_0000_0000_0000_0000"; ELSIF    dload='1'  THEN
dzl   :=sdata&'0'&'0'&'0'&'0'&'0';
sdzl  :=sdata;
IF dzl(16)='1' THEN
dzl(16 DOWNTO 11):=dzl(16 DOWNTO 11) XOR DXS; END IF;
IF dzl(15)='1' THEN
dzl(15 DOWNTO 10):=dzl(15 DOWNTO 10) XOR DXS; END IF;
IF dzl(14)='1' THEN
dzl(14 DOWNTO 9):=dzl(14 DOWNTO 9) XOR DXS; END IF;
IF dzl(5)='1' THEN

圖1  循環冗餘校驗碼的生成、校驗仿真
dzl(5 DOWNTO 0):=dzl(5 DOWNTO 0) XOR DXS; END IF;
dcrco_r<=sdzl & dzl(4 DOWNTO 0);

hsd_r<='1'; ELSE hsd_r<='0'; END IF; END IF;
END PROCESS;
2.2  循環冗餘校驗碼的校驗代碼

PROCESS(clk,rst_n)

VARIABLE rdzl:     STD_LOGIC_VECTOR(16 DOWNTO 0); BEGIN
IF (clk'event and clk='1') THEN IF rst_n='0'    THEN
rd_r    <=X"000";

dfsh_r    <='0';

err_r <='0';

ELSIF    hrecv='1'  THEN

rdcrc_r    <=datacrci;

rdzl         :=datacrci(16 DOWNTO 0); IF    rdzl(16)='1'     THEN
rdzl(16 DOWNTO 11):=rdzl(16 DOWNTO 11) XOR DXS; END IF;
IF    rdzl(15)='1'     THEN

rdzl(15 DOWNTO 10):=rdzl(15 DOWNTO 10) XOR DXS; END IF;
IF    rdzl(14)='1'     THEN

rdzl(14 DOWNTO 9):=rdzl(14 DOWNTO 9) XOR DXS; END IF;
IF rdzl(5)='1' THEN

rdzl(5 DOWNTO 0):=rdzl(5 DOWNTO 0) XOR DXS; END IF;
IF    rdzl(5 DOWNTO 0)="000000"
THEN

rd_r    < = r d c r c _ r ( 1 6DOWNTO 5);
dfsh_r    <='1';

err_r<='0'; ELSE rd_r<=X"000"; err_r<='1'; END IF;
ELSE dfsh_r<='0'; END IF; END IF;
END PROCESS;
對循環冗餘校驗碼的生成和校驗進行了功能仿真,結 果如圖1所示。

3  循環冗餘校驗碼的應用
由於循環冗餘校驗碼強大的校驗能力,在不同領域, 循環冗餘校驗碼的生成多項式位數也不同,根據IEEE官方 文件顯示,為了更好地保證校驗可靠度,現在的位數越來越 大,目前最長的循環冗餘校驗碼已達到160位。下面簡單介 紹幾種常見的循環冗餘校驗碼及其應用領域。
(1)USB接口用CRC5。對應的標準生成多項式:
P(x) = x5 + x2 + 1 (2)ATM協議等用CRC8。對應的標準生成多項式:P(x) = x8 + x2 + x + 1 (3)文件傳輸通信協議,X25協議等用CRC16。對應的標
準生成多項式:
P(x) = x16 + x12 + x5 + 1 (4)IEEE802.3標準用CRC32。對應的標準生成多項式: P(x) = x32 + x26 + x23 + x22 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2
+ x + 1
(5)ISO 3309規定的CRC64。對應的生成多項式:
P(x) =x64 + x62 + x57 + x55 + x54 + x53 + x52 + x47 + x46 + x45 + x40
+ x39 + x38 + x37 + x35 + x33 + x32 + x31 + x29 + x27 + x24 + x23 + x22 + x21 +
x19 + x17 + x13 + x12 + x10 + x9 + x7 + x4 + x + 1

4  結語
循 環 冗 餘 校 驗 碼 已 經 成 為 各 行 各 業 通 信 校 驗 中 最 普 遍的校驗方式。本設計將循環冗餘校驗碼的生成與校驗過 程進行細緻的分析,最終採用Altera公司開發的FPFA晶片 EP1C12Q240C8進行結果驗證。實驗表明FPGA在實現循環 冗餘校驗碼方面有著簡單高效的優勢。在未來實現更多位的 循環冗餘校驗中有著更深遠的用途。


相關焦點

  • 基於FPGA的無損圖像壓縮系統設計
    編者按:  摘要:本文簡要介紹了圖像壓縮的重要性和常用的無損圖像壓縮算法,分析了快速高效無損圖像壓縮算法(FELICS)的優勢,隨後詳細分析了該算法的編碼步驟和硬體實現方案,最後公布了基於該方案的FPGA性能指標。
  • 基於FPGA的RCN226絕對式編碼器通信接口設計
    本文研製了一種用於交流伺服系統中的基於FPGA的絕對式編碼器智能接口,實現與絕對式編碼器的雙工通信,接收高速數據流,同時在FPGA內部開闢RAM空間,將收到的編碼器數據存入RAM中,DSP可以以訪問內存的方式讀取數據,提高了工作速度。同時,該接口還具有奇偶校驗等糾錯功能,完全可以替代廠家提供的接收晶片,大幅度降低了產品成本。
  • 基於FPGA高精度浮點運算器的FFT設計與仿真
    摘要 基於IEEE浮點表示格式及FFT算法,提出一種基2FFT的FPGA方法,完成了基於FPGA高精度浮點運算器的FFT的設計。利用VHDL語言描述了蝶形運算過程及地址產生單元,其仿真波形基本能正確的表示輸出結果。
  • 基於DSP和FPGA的機器人聲控系統設計與實現
    系統硬體分為語音信號的採集和播放,基於dsp的語音識別,fpga動作指令控制、步進電機及其驅動、dsp外接快閃記憶體晶片,jtag口仿真調試和鍵盤控制幾個部分。語音信號特徵向量採用mel頻率倒譜係數mfcc(mel frequency cepstrum coeficient的提取,mfcc參數是基於人的聽覺特性的,他利用人聽覺的臨界帶效應[3],採用mel倒譜分析技術對語音信號處理得到mel倒譜係數矢量序列,用mel倒譜係數表示輸入語音的頻譜。
  • 千兆乙太網MAC的FPGA實現與設計
    設計。幀結尾的數據是根據CRC電路計算生成的校驗碼。  2.3 乙太網的FCS處理  校驗位的FCS即為循環冗餘碼CRC,它的編碼詳細過程是,根據數據流M的長度和特性,選擇長度為n次的特徵多項式,在數據流M之後添加n個0,作為被除數除以由特徵多項式構成的(n+1)bit的二進位數列P,得到商Q以及除數R,除數R為n bit,將R作為冗餘碼添加在M之後發送出去。
  • 基於FPGA IP核的FFT實現
    1 算法原理 FFT算法是基於離散傅立葉變換(DFT),如式(1)和式(2):本文引用地址:http://www.eepw.com.cn/article/188835.htm 其中一類FFT算法為庫利一圖基(Cooley-Tukey)基r按頻率抽選(DIF)法,將輸入序列循環分解為N/r個長度為r的序列,並需要logr N級運算。算法的核心操作是蝶型運算,蝶型運算的速度直接影響著整個設計的速度。 基4頻域抽取FFT算法是指把輸出序列X(k)按其除4的餘數不同來分解為越來越短的序列,實現x(n)的DFT算法。
  • 基於FPGA的LDPC編碼設計
    在通信系統中糾錯碼被用來提高信道傳輸的可靠性和功率利用率,低密度奇偶校驗碼LDPC(Low Density Parity Check code)是目前性能最好的糾錯碼,最初由GaUager提出,
  • 基於FPGA的極化碼的SCL解碼算法研究
    極化碼被嚴格證明有以下兩個特性:一是基於信道極化現象存在;二是在碼長為無限長時,其信道容量可達香農極限。相比於經典的Turbo碼與LDPC碼,極化碼具有更低的誤碼率和複雜度以及更高的吞吐率[2-3]。 極化碼的解碼算法研究近年來發展迅速,其中成為研究熱點的連續刪除(Successive Cancellation,SC)解碼算法的基本思想是通過對信息位的比特似然概率值的判斷來進行解碼。
  • 基於fpga二維小波變換核的實時可重構電路
    項目背景及可行性分析本文引用地址:http://www.eepw.com.cn/article/266432.htm  2.1 項目名稱及摘要:  基於fpga二維小波變換核的實時可重構電路  現場可編程門陣列為可進化設計提供了一個理想的模板
  • 基於Spartan-6 FPGA的Sinc3 Filter設計
    濾波器相關文章:濾波器原理 fpga相關文章:fpga是什麼 濾波器相關文章:濾波器原理 電源濾波器相關文章:電源濾波器原理
  • 基於FPGA的巴特沃茲IIR數字帶通濾波器設計
    由圖1可見,系統的上、下邊帶分別為150Hz和30Hz,滿足系統設計要求。4.FPGA設計4.1 濾波器的結構同一系統函數的IIR濾波器可以用不同的結構來實現,如直接I型、直接II型(典範型)、級聯型和並聯型。不同的結構有不同的特點,為便於硬體實現及容易確定數據位數,本文選用直接I型這一結構形式。系統的直接I型結構如圖2所示。
  • 基於FPGA+MATLAB的串行多階FIR濾波器設計
    摘要 FIR濾波器的設計分為濾波器係數計算和濾波器結構的具體兩個部分。2 使用MatIab Fdatool設計FIR濾波器FDATool(Fliter Design & Analysis Tool)是Matlab信號處理工具箱專用的濾波器設計分析工具,操作簡單、靈活,可採用多種方法設計FIR和IIR濾波器。在Matlab命令窗口輸入FDATool後回車就會彈出FDATool界面。
  • Axure設計:獲取大小寫字母及數字圖形校驗碼
    實現效果校驗碼隨機顯示,包含0-9的數字,a-z的小寫字母,A-Z的大寫字母;點擊「驗證碼區域」或「看不清,換一張」文本時,刷新校驗碼;校驗碼輸入為空時,點擊「提交驗證」,彈出內容為「校驗碼不能為空!」
  • 奇偶校驗碼,奇偶校驗碼原理是什麼?
    打開APP 奇偶校驗碼,奇偶校驗碼原理是什麼? 佚名 發表於 2010-03-17 17:39:12 奇偶校驗碼,奇偶校驗碼原理是什麼?奇偶校驗碼是奇校驗碼和偶校驗碼的統稱,是一種最基本的檢錯碼。它是由n-1位信息元和1位校驗元組成,可以表示成為(n,n-1)。
  • 基於FPGA與有限狀態機的高精度測角系統的設計與實
    1 方案設計1.1 系統組成雷射跟蹤測量系統的核心處理模塊主要由ARM處理器,FPGA組成。為了充分利用ARM9微處理器的運算能力和FPGA的高速邏輯處理能力,在設計中對功能的實現進行了劃分。ARM9 用於運動控制平臺的控制並且與FPGA一起形成一個完整的應用平臺。
  • 一種基於FPGA的全光纖電流互感器控制電路設計
    本文利用FPGA來實現精密時序控制的同時,實現非常複雜的信號處理算法,並以FPGA為核心器件完成光纖電流互感器信號檢測和控制電路設計,利用該電路控制光纖電流互感器傳感頭進行電流測試和標定。試驗結果表明,系統控制精度達到0.2 S級測量準確度的要求。
  • 一種基於FPGA的實時紅外圖像預處理方法
    針對這一問題,提出一種基於FPGA的實時紅外圖像預處理方法。該方法採用了流水線技術來並行完成非均勻校正、空間濾波、直方圖統計等多個紅外圖像預處理算法,對系統結構進行了改進和優化。經過實驗測試驗證,該方法合理可行,能夠實時高效地完成紅外圖像預處理任務。與DSP圖像預處理系統相比可以節約將近50%的處理時間。
  • 基於FPGA的複數浮點協方差矩陣實現
    最終導致FPGA器件資源枯竭,無法實現設計。為了保證算法的實現,必須對中間運算數據進行截斷,將每次累加的結果除2(可以通過移位運算來實現),以避免溢出。 此外,在應用MUSIC算法時,各種計算都是複數運算。
  • 基於FPGA的結構光圖像中心線提取
    利用現場可編程門陣列器件(FPGA)的流水線技術以及並行技術的硬體設計來完成運算,保證了光條紋中心點的實時準確提取。實驗表明採用FPGA 實現圖像處理的專用算法能滿足圖像數據進行實時準確提取的要求。利用現場可編程門陣列器件(FPGA)的流水線技術以及並行技術的硬體設計來完成運算,保證了光條紋中心點的實時準確提取。實驗表明採用FPGA 實現圖像處理的專用算法能滿足圖像數據進行實時準確提取的要求。
  • 基於FPGA的伺服驅動器分周比設計與實現
    為此提出一種基於FPGA的整數分周比實現方法。該方法邏輯結構簡單,配置靈活,易於擴展,具有很高的實用價值。  1 電子齒輪比與分周比  電子齒輪比與分周比是數控工具機和數控加工中心中一個很重要的概念。 fpga