Nios SoC系統中的BCH編解碼IP核的設計
循環(huán)碼是最重要的一類(lèi)線(xiàn)性分組糾錯碼,而B(niǎo)CH碼又是目前發(fā)現的性能很好且應用廣泛的循環(huán)碼,它具有嚴格的代數理論,對它的理論研究也非常透徹。BCH碼的實(shí)現途徑有軟件和硬件兩種。軟件實(shí)現方法靈活性強且較易實(shí)現,但硬件實(shí)現方法的工作速度快,在高數據速率和長(cháng)幀應用場(chǎng)合時(shí)具有優(yōu)勢。FPGA(現場(chǎng)可編程門(mén)陣列)為DSP算法的硬件實(shí)現提供了很好的平臺,但如果單獨使用一片FPGA實(shí)現BCH編解碼,對成本、功耗和交互速度都不利。最新的SoC(片上系統)設計方法可以很好地解決這個(gè)問(wèn)題。
本文基于A(yíng)ltera公司的Nios軟核+可編程資源的SoC平臺設計了BCH編解碼IP核,這樣,在Nios系統中可以將BCH碼作為一種片內資源進(jìn)行調用,在工程設計上具有積極的意義。
1 BCH碼
BCH碼于1960年前后發(fā)明,可以糾檢多個(gè)錯誤。通常的二進(jìn)制BCH碼元是取自加羅瓦域GF(2m)。對于參數m和可糾錯碼元數目t,BCH碼的碼長(cháng)為n=2m-1,對于m≥3,t<2m-1的BCH碼,監督碼元數目n-k=mt;dmin≥2t+1。同時(shí),BCH碼元多項式的根為GF(2m)中的元素α,α3,…,α2t+1。例如一個(gè)m=6,t=3的BCH碼,其參數為:n=63,n-k=18,dmin=7。這就構成了可以糾正3個(gè)錯誤的(63,45)BCH碼。
BCH碼基于加羅瓦域,BCH編解碼的運算也是域內的閉合運算。加羅瓦有限域產(chǎn)生于一個(gè)本原多項式,GF(2m)有限域內有2m個(gè)元素。以GF(23)域為例,它的本原多項式p(x)假定為p(x)=x3+x+1,基本元素α定義為p(x)=0的根,GF(23)中的元素可以計算如下:
BCH碼的編碼取決于其生成多項式,令φ2i-1(x)是加羅瓦域元素α2i-1的最小多項式,則可以糾正t個(gè)錯誤的BCH碼的生成多項式為:
有了生成多項式,BCH編碼與普通的循環(huán)碼編碼相同,使用除法電路可以實(shí)現。一個(gè)復雜度較低的BCH譯碼算法對于BCH碼的應用有著(zhù)重要的意義。BCH譯碼可以分為伴隨式計算和Berlekamp迭代譯碼兩部分。設接收碼元多項式為r(x),由于生成多項式的性質(zhì),如果傳輸過(guò)程中信道沒(méi)有引入錯誤,α,α2,α3,…,α2t應是r(x)的根。因此,伴隨式計算即將加羅瓦域中的元素代入接收碼元多項式,如果所有伴隨式結果都為0,則說(shuō)明沒(méi)有錯誤,否則就有錯誤。如果只使用BCH碼進(jìn)行檢錯,則譯碼過(guò)程就結束了。
伴隨式計算結束后,如果有錯,首先需要計算錯誤位置多項式δ(x),譯碼的核心主要集中在這一步上。Berlekamp迭代算法不僅求解了錯誤位置多項式的關(guān)鍵方程,而且運算速度快,可以說(shuō)它解決了BCH碼譯碼的工程實(shí)用問(wèn)題。其次,使用錢(qián)搜索找出δ(x)的根,即錯誤位置。最后,由于是二進(jìn)制編碼,只需把相應位置的碼元取反就完成了整個(gè)譯碼過(guò)程。
2 BCH編解碼IP核的設計
2.1 整體設計及CPU接口
在NiosⅡ系統中,平臺免費提供了各種常用接口IP核以及對這些外設的驅動(dòng)程序包,例如UART接口、Flash接口等。作為一個(gè)自行設計的IP核,需要掛接在NiosⅡ系統的Avalon總線(xiàn)上。這個(gè)過(guò)程使用Sopc Builder工具中的Interface t0 user logic模塊可以方便地進(jìn)行設計。NiosⅡ處理器和BCH IP核之間通過(guò)Avalon總線(xiàn)使用寄存器映射方式進(jìn)行交互。圖1是整個(gè)IP核的實(shí)現方框圖。
其中與NiosⅡ的接口分為控制接口和數據接口兩部分??刂平涌诎◤臀?、編解碼控制、存儲器狀態(tài)報告和編解碼狀態(tài)報告等。數據接口為FPGA內部的RAM,分為發(fā)送和接收兩部分,它在NiosⅡ中映射成存儲空間。在NiosⅡ和BCH碼IP核之
2.2 BCH編碼
BCH碼屬于系統碼,其編碼與一般循環(huán)碼的編碼形式基本相同,即為信息碼元多項式與生成多項式之間的除法電路實(shí)現。除法電路采用帶反饋的移位寄存器完成。信息碼元發(fā)送完后,寄存器內存儲的就是監督碼元,再接著(zhù)發(fā)送即可。其中反饋抽頭連接為生成多項式控制。其基本結構見(jiàn)圖2。
信息碼元首先從數據緩存中被讀出,然后通過(guò)并/串變換進(jìn)入編碼器后,一方面直接輸出,同時(shí)送入除法電路,當信息碼元輸入結束后,開(kāi)關(guān)進(jìn)行相應的變換,存在寄存器中的監督碼元輸出。圖3為(31,16)BCH編碼的RTL(寄存器傳輸級)仿真結果。
2.3 BCH譯碼
前面已經(jīng)介紹了BCH迭代譯碼的基本步驟。譯碼過(guò)程中的運算都為有限域運算,在運算過(guò)程中經(jīng)常計算加羅瓦域的元素是不明智的,查表實(shí)現是通用的方法。例如GF(23)中,可以設計表1所示的表格來(lái)實(shí)現域元素的查找,同時(shí),運算中還經(jīng)常需要通過(guò)元素值反查元素類(lèi)型,因此需要設計兩張表格來(lái)正向和反向查找。圖1中的GF域查表RAM模塊就完成了這個(gè)功能。通過(guò)以上查表方法可以輕松實(shí)現有限域的加、減和乘運算。
首先進(jìn)行伴隨式計算,在設計中利用片內較高的工作頻率和FPGA的并發(fā)實(shí)現優(yōu)勢,同時(shí)完成所有伴隨式的計算。圖4為伴隨式計算的RTL仿真結果,當傳輸引入錯誤后,伴隨式相或的結果Data_Out輸出高電平,表示需要進(jìn)行糾錯。
然后進(jìn)行迭代譯碼,迭代過(guò)程可以通過(guò)表2表示。其中μ為算法迭代的次數,第1次為了表示方便,可以認為初始值是0。δμ(x)就是錯誤位置多項式。dμ是一種差值,用于運算。ιμ是第μ次運算時(shí)δμ(x)的多項式階數,2μ-ιμ是運算中應用的變量。
算法流程步驟如下:
a) 按如上μ為0和-1/2時(shí)初始化各個(gè)變量。
b) 如果dμ=0,此時(shí),則往下進(jìn)行。
c) 如果dμ≠0,則尋找以前運算的某一行ρ,其具有2μ-ιμ最大(正值),且dρ≠0。
此時(shí),
如果μ=t-1,則算法結束。
d)ιμ+1=deg(δμ+1(x)),即δμ+1(x)的多項式階數。
e) dμ+1 =s2μ+3+δ1μ+1s2μ+2+δ2μ+1s2μ+1+…+δLμ+1s2μ+3-L,其中,L為ιμ+1,δu(x)的第i階系數。
f) 增加μ,從步驟b開(kāi)始。
得到錯誤多項式后,通過(guò)錢(qián)搜索和取反即可完成整個(gè)譯碼工作。
3 結束語(yǔ)
SoC技術(shù)以其低成本、低功耗和小體積已經(jīng)成為電子設計領(lǐng)域的一個(gè)重要發(fā)展方向。BCH碼是一種經(jīng)典的分組糾錯碼,在通信系統中應用較為廣泛。通過(guò)這兩者的結合,本文設計的BCH碼IP核嵌入NiosSoC中,使得BCH編解碼在單片系統中可以自由調用,對SoC中的應用軟件而言,調用接口簡(jiǎn)單,IP核屏蔽了所有算法細節。同時(shí),由于采用硬件實(shí)現,具有高速、穩定的特點(diǎn)。
評論