<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于FPGA的RS(255,239)編譯碼器設(shè)計

          基于FPGA的RS(255,239)編譯碼器設(shè)計

          作者: 時間:2017-06-04 來源:網(wǎng)絡(luò) 收藏

          (Reed-Solomon)編碼是一種具有較強糾錯能力的多進制BCH編碼,其既可糾正隨機錯誤,又可糾正突發(fā)錯誤。廣泛應(yīng)用于通信和存儲系統(tǒng),為解決高速存儲器中數(shù)據(jù)可靠性的問題,文中提出了編碼的實現(xiàn)方法,并對編碼進行了時序仿真。仿真結(jié)果表明,該譯碼器可實現(xiàn)良好的糾錯功能。

          本文引用地址:http://www.ex-cimer.com/article/201706/348684.htm


          RS(Reed-Solomon)碼是差錯控制領(lǐng)域中的一種重要線性分組碼,既能糾正隨機錯誤,又能糾正突發(fā)錯誤,且由于其出色的糾錯能力,已被NASA、ESA、CCSDS等空間組織接受,用于空間信道糾錯。本文研究了RS碼的實現(xiàn)方法,并基于Xilinx的芯片Spartan-6 XC6SLX45完成了RS的設(shè)計,同時對其進行了仿真和在線調(diào)試,并給出了功能仿真圖和測試結(jié)果。時序仿真結(jié)果表明,該能實現(xiàn)預(yù)期功能。

          1 RS編碼的實現(xiàn)方法

          RS碼是一種多進制BCH(Bose-Chaudhuri-Hocquenghem)碼,在給定每個碼字所具有多少冗余量的情況下,RS碼具有極大的最小距離。即RS碼的最小距離d、信息長度k以及碼字長度n滿足d=n-k+1.而RS(255 239)碼是在伽羅華(Galois Field)GF(28)中運算得到的,編碼器實現(xiàn)的關(guān)鍵是伽羅華域乘法器的設(shè)計。設(shè)計中的乘法是2個有限域中元素的指數(shù)相加與255取模。GF(28)編碼參數(shù)如下:碼長n=255;信息位個數(shù)k=239;校驗位r=n-k=16;糾錯能力t=8;碼距d=17.生成多項式為



          根據(jù)式(3)畫出RS編碼的電路圖,如圖1所示。



          圖1 RS編碼的電路圖


          n-k級RS編碼器主要由一組線性反饋移位和控制電路組成,其是n-k=16級編碼器,亦是線性反饋的反饋系數(shù),reg16的值與當前輸入的信息碼元異或得到的結(jié)果即為feedback寄存器的值。

          編碼步驟:

          步驟1將所有寄存器清零,開關(guān)放到1上,則239個信息碼元一邊依次進入除法電路,一邊依次輸出。

          步驟2當最后一個信息碼進入電路后,將開關(guān)放到2上,第一個校驗位輸出。

          步驟3校驗碼按時鐘節(jié)拍載入寄存器,并依次輸出。當最后一個校驗位輸出時,編碼結(jié)束。

          2 RS編碼的仿真結(jié)果及分析

          設(shè)計的RS(255 239)編碼器使用Verilog HDL對整個模型進行描述,以Xilinx 芯片Spartan-6XC6SLX45為硬件平臺進行實現(xiàn),并利用ISim仿真工具對RS編碼進行仿真。



          圖2 RS編碼器的 波形仿真圖


          設(shè)計的RS(255,239)編碼器,信息位239位編碼為0,1,2,…,238,則16位校驗位的值為58,236,152,44,88,31,20,168,121,60,32,10,191,166,4,101.設(shè)計的RS(255,239)編碼器的仿真圖如圖2所示,當DI_VAL=0時,輸出239個信息位;當DI_VAL=1時,輸出16個校驗位。該編碼器實現(xiàn)了預(yù)期的編碼功能。

          3 RS譯碼的實現(xiàn)方法

          RS譯碼主要有時域譯碼和頻域譯碼,時域譯碼一般采用BM迭代算法或歐式算法(Euclids Algorithm)。RS譯碼中最重要的環(huán)節(jié)是求解關(guān)鍵方程,歐式算法在求解關(guān)鍵方程時需進行多項式次數(shù)的判斷,因此造成硬件電路復(fù)雜,譯碼速度下降,BM迭代算法具有快速、消耗資源少、控制電路較為簡單等優(yōu)點。文中改進后的BM迭代原理及以該算法為基礎(chǔ)的RS譯碼器的實現(xiàn)。RS譯碼可分為4步:(1)由接收到的碼組計算伴隨式。(2)求關(guān)鍵方程。(3)計算出錯誤圖樣。(4)由錯誤圖樣和接收碼組計算出可能發(fā)送的碼字。圖3給出了RS譯碼器的一般步驟框圖。



          圖3 RS譯碼器的一般步驟框圖


          以上運算均可用流水線結(jié)構(gòu)硬件實現(xiàn)。



          圖4 伴隨式求解框圖


          初始化時,所有寄存器置零。經(jīng)255個周期,接收完所有255個符號后,便可得到全部16個伴隨式。因整個譯碼器采用流水線結(jié)構(gòu),所以在伴隨式計算完后,產(chǎn)生一個時鐘周期有效的“sc_done”信號,用以啟動后續(xù)電路進行新的計算。由于在BM模塊中,用到了A(x)與S的卷積求和,因此本模塊將計算出的伴隨式序列串行輸出。

          關(guān)鍵方程的計算采用BM算法,BM算法不僅在RS碼的譯碼中起著關(guān)鍵作用,且也是目前已知的求序列線性復(fù)雜度最快且最佳的方法之一。該算法采用規(guī)整的脈動陣列,硬件實現(xiàn)更為方便。通過求解關(guān)鍵方程,得到A0~A8,其為后續(xù)的Chien搜索模塊提供了參數(shù)。



          圖5 chien搜索模塊框圖


          圖6 譯碼的詳細過程框圖


          該過程完全實現(xiàn)流水線結(jié)構(gòu),其中包括伴隨式計算、關(guān)鍵方程求解、Chien搜索、Forney算法等模塊并行工作。在經(jīng)過295個固有延遲后,每個時鐘周期均可連續(xù)輸出經(jīng)校正的碼字。

          4 RS譯碼的仿真結(jié)果及分析

          因設(shè)計的譯碼器最大糾錯能力為8個符號,該文設(shè)定錯誤情況是第140位到第147位全錯,正確值為140,141,142,143,144,145,146,147,錯誤值為5,11,56,98,35,15,132,159,圖7是輸入到譯碼器中含8個連續(xù)錯誤碼字的255位編碼序列,圖8是譯碼器輸出全部糾錯以后的編碼序列,由ISim仿真波形圖可知,Err_Indicator表示錯誤標志,設(shè)計的譯碼器能實現(xiàn)最大的糾錯能力。


          圖7 譯碼器輸入時序圖

          圖8 譯碼器輸出時序圖


          5結(jié)束語

          文中闡述了RS(255,239)編譯碼器的設(shè)計原理,并對編碼器給出了在ISim中的時序仿真結(jié)果,其結(jié)果證明了該編碼器設(shè)計的正確性。而在對譯碼器的設(shè)計中,假定出現(xiàn)連續(xù)8個誤碼的情況,并用ISim對所設(shè)計的譯碼器進行驗證,由時序仿真結(jié)果表明,設(shè)計的RS(255,239)譯碼器能實現(xiàn)最大的糾錯能力。設(shè)計的RS(255,239)編譯碼器達到了預(yù)定的目標,且該編譯碼器可應(yīng)用于數(shù)據(jù)通信和數(shù)據(jù)存儲系統(tǒng)的差錯控制中。



          關(guān)鍵詞: 編譯碼器 寄存器 RS FPGA

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();