国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

LDPC譯碼器的Impulse C編程設(shè)計(jì)*

2010-09-26 04:28培1麗2韜2汪一鳴
電訊技術(shù) 2010年2期
關(guān)鍵詞:譯碼器譯碼C語(yǔ)言

張 培1,2,尚 麗2 ,劉 韜2,汪一鳴

(1. 江蘇省現(xiàn)代企業(yè)信息化應(yīng)用支撐軟件工程技術(shù)研發(fā)中心,江蘇 蘇州 215104;2. 蘇州職業(yè)大學(xué), 江蘇 蘇州 215104;3. 蘇州大學(xué),江蘇 蘇州 215021)

1 引 言

隨著FPGA平均門(mén)成本的下降,在基于FPGA的硬件平臺(tái)上開(kāi)發(fā)應(yīng)用程序成為高性能嵌入式系統(tǒng)設(shè)計(jì)者的一種新選擇。但是,由于過(guò)去割裂了硬件和軟件開(kāi)發(fā)工具、開(kāi)發(fā)方法之間的關(guān)系,在面向軟件應(yīng)用中的FPGA技術(shù),較之傳統(tǒng)處理器所具有的優(yōu)勢(shì)并沒(méi)有體現(xiàn)出來(lái)。

傳統(tǒng)的硬件描述語(yǔ)言(HDL)主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,對(duì)較為復(fù)雜的算法設(shè)計(jì)實(shí)現(xiàn)則支持不夠。面對(duì)當(dāng)今數(shù)字系統(tǒng)設(shè)計(jì)中涉及的越來(lái)越多、越來(lái)越復(fù)雜的算法描述和建模,開(kāi)始出現(xiàn)了描述硬件的C語(yǔ)言。對(duì)比相同功能的傳統(tǒng)硬件描述語(yǔ)言,大部分計(jì)算密集型的算法如果用C代碼描述,其硬件規(guī)模相對(duì)會(huì)較小,性能卻很接近。

Impulse C 語(yǔ)言是目前比較新的一種硬件C語(yǔ)言,是一種基于C語(yǔ)言的FPGA開(kāi)發(fā)語(yǔ)言,并且能夠很好地與VHDL語(yǔ)言相融合。Impulse C的目標(biāo)是允許C語(yǔ)言能被用來(lái)描述一個(gè)或多個(gè)處理單元(進(jìn)程),并且將這些處理單元連接,組成一個(gè)能夠?qū)崿F(xiàn)于硬件中的完整的并行應(yīng)用(如映射到FPGA的邏輯)。這種多進(jìn)程并行方法非常適用于基于FPGA的嵌入式系統(tǒng),也適用于很多與傳統(tǒng)的處理器相連接的FPGA模塊所組成的大型高性能計(jì)算平臺(tái)[1]。同時(shí),CoDeveloper設(shè)計(jì)平臺(tái)允許設(shè)計(jì)師開(kāi)發(fā)C語(yǔ)言算法,與HDL設(shè)計(jì)輸入相比,可以使FPGA設(shè)計(jì)過(guò)程更加快捷。

LDPC碼是一種新的高性能線性糾錯(cuò)碼,其譯碼復(fù)雜度低,且可實(shí)行并行操作,非常適合于FPGA的并行計(jì)算。因此,本文基于最新一代從Impulse C編程到硬件編譯的便捷技術(shù),提出了一種對(duì)LDPC碼譯碼器進(jìn)行FPGA設(shè)計(jì)的新方案。

2 LDPC碼譯碼器的設(shè)計(jì)

2.1 Impulse C編程模型

Impulse C編程模型如圖1所示,它是一個(gè)針對(duì)面向流的、軟硬件混合式應(yīng)用程序的通信順序進(jìn)程模型。從軟件到硬件編譯器的過(guò)程是實(shí)現(xiàn)快速開(kāi)發(fā)的關(guān)鍵,它保證了應(yīng)用程序直接編譯到FPGA。通過(guò)將C語(yǔ)言編譯導(dǎo)入現(xiàn)有設(shè)計(jì)流程,設(shè)計(jì)者能夠迅速創(chuàng)建和評(píng)估不同的軟硬件劃分策略,建立工作產(chǎn)品原型。

圖1 Impulse C編程模型Fig.1 Impulse C programming model

2.2 軟件設(shè)計(jì)

LDPC碼的譯碼算法有多種,為了在譯碼性能和復(fù)雜度之間達(dá)到更好的平衡,同時(shí)基于硬件實(shí)現(xiàn)方面的考慮,本設(shè)計(jì)選擇采用最小和算法(Min Sum Algorithm,MSA)[2-4],從而避免了進(jìn)行復(fù)雜的計(jì)算和查表,復(fù)雜度得到了明顯降低,而且譯碼性能也較好,適合硬件實(shí)現(xiàn)。其基本流程如圖2所示。

圖2 譯碼算法流程圖Fig.2 Decoding algorithm flow

Impulse C編程的核心是進(jìn)程和流。通信順序進(jìn)程編程模型是通過(guò)一組數(shù)據(jù)類型和內(nèi)部庫(kù)函數(shù)來(lái)實(shí)現(xiàn)的。這些庫(kù)函數(shù)用來(lái)在進(jìn)程之間進(jìn)行流和信號(hào)的數(shù)據(jù)通信,還可以將進(jìn)程分配到目標(biāo)編程平臺(tái)的實(shí)際硬件資源上??梢?jiàn),多個(gè)進(jìn)程之間的相互通信和同步主要通過(guò)數(shù)據(jù)流方式完成。如果一個(gè)應(yīng)用程序具有設(shè)計(jì)良好的流接口,那么當(dāng)它被映射到實(shí)際硬件和軟件時(shí),就能高效運(yùn)行。本次設(shè)計(jì)中讀取待譯碼數(shù)據(jù)的一段程序如下:

for ( i =0;i

{ pragma CO PIPELINE

if( co_stream_read(InDataF, &nSample, sizeof(float))==co_err_none);

IF_SIM(samplesread++;);

Lc[i] = nSample; }

這里使用了CO PIPELINE流水線指令,因?yàn)榱魉€技術(shù)允許循環(huán)的多重迭代并行執(zhí)行。假設(shè)N取1,若不使用流水線,處理100個(gè)數(shù)據(jù)需要200個(gè)時(shí)鐘周期?,F(xiàn)在使用流水線后,將產(chǎn)生一個(gè)二級(jí)流水線。當(dāng)?shù)谝粋€(gè)數(shù)據(jù)被讀進(jìn)來(lái)以后,第一級(jí)立刻開(kāi)始讀取第二個(gè)數(shù)據(jù),與此同時(shí),第二級(jí)使用剛讀進(jìn)來(lái)的數(shù)據(jù)進(jìn)行計(jì)算,這樣只需要101個(gè)周期就能處理100個(gè)輸入數(shù)據(jù)了??梢?jiàn),以數(shù)據(jù)流的形式來(lái)讀取數(shù)據(jù)和輸出數(shù)據(jù),應(yīng)用程序可以一邊從外部接收數(shù)據(jù),一邊處理數(shù)據(jù),效率更高,也能大大簡(jiǎn)化硬件軟件系統(tǒng)的設(shè)計(jì)和調(diào)試。

2.3 硬件實(shí)現(xiàn)

編譯器首先確定應(yīng)用中的硬件和軟件進(jìn)程,將相應(yīng)的循環(huán)轉(zhuǎn)化為等價(jià)的并行語(yǔ)句,再生成可仿真的HDL文件。底層模塊描述了原來(lái)用co_process_config聲明的硬件進(jìn)程,頂層實(shí)體引用了包含LDPC譯碼器實(shí)際功能的底層實(shí)體,這些功能是用寄存器傳輸級(jí)(RTL)代碼表示的。實(shí)際上,硬件生成器把每一個(gè)進(jìn)程當(dāng)作一個(gè)獨(dú)立的狀態(tài)機(jī)來(lái)實(shí)現(xiàn)。在LDPC譯碼算法的狀態(tài)機(jī)中,共有195個(gè)狀態(tài),分別描述譯碼算法的初始化和迭代部分,以及用來(lái)驅(qū)動(dòng)狀態(tài)機(jī)的時(shí)鐘邏輯。構(gòu)造規(guī)則(3,6)LDPC碼,取125×250的校驗(yàn)矩陣,將經(jīng)過(guò)AGWN信道后的數(shù)據(jù)作為譯碼前數(shù)據(jù),每次讀取一組250 bit數(shù)據(jù)進(jìn)行譯碼,共讀取10次。在CoDeveloper開(kāi)發(fā)環(huán)境下進(jìn)行桌面仿真,結(jié)果包含一個(gè)生產(chǎn)者測(cè)試進(jìn)程、一個(gè)代表LDPC碼譯碼算法的Impulse C進(jìn)程和一個(gè)消費(fèi)者測(cè)試進(jìn)程。數(shù)據(jù)流在系統(tǒng)各個(gè)不同進(jìn)程的流動(dòng)情況,以及譯碼輸出桌面仿真結(jié)果如圖3所示。

圖3 數(shù)據(jù)流在不同進(jìn)程的流動(dòng)及桌面仿真結(jié)果Fig.3 Data flow of the different process and the decoding output of the desktop simulation

最大迭代次數(shù)分別取5次和10次時(shí)的BER性能比較如圖4所示??梢?jiàn),由于迭代次數(shù)增多,在相同時(shí)間內(nèi)所得誤碼率明顯下降,這在一定程度上彌補(bǔ)了標(biāo)準(zhǔn)最小和算法由于采用近似計(jì)算而帶來(lái)的性能損失。

圖4 不同迭代次數(shù)下的性能比較Fig.4 Performance comparison with different iteration number

3 結(jié)果分析

本次設(shè)計(jì)中選用的FPGA芯片是XC2V2000-4-bf957,這是由于該芯片的片內(nèi)資源豐富,無(wú)需外部緩沖就可實(shí)現(xiàn)高速數(shù)據(jù)采集,而且適合進(jìn)行浮點(diǎn)運(yùn)算和數(shù)據(jù)存儲(chǔ)操作。當(dāng)時(shí)鐘頻率為50 MHz,迭代次數(shù)為10次,本設(shè)計(jì)耗費(fèi)了5 493個(gè)LUT,譯碼速率為10 Mbit/s, 功耗為367 mW。

基于傳統(tǒng)的HDL硬件描述方法,當(dāng)時(shí)鐘頻率為50 MHz,譯碼迭代次數(shù)為10次,文獻(xiàn)[5-7]分別采用3種不同的結(jié)構(gòu)在FPGA上實(shí)現(xiàn)了3種碼率為1/2的LDPC碼譯碼器芯片。其中,采用串行結(jié)構(gòu)實(shí)現(xiàn)的譯碼器耗費(fèi)了3 039個(gè)LUT,速率僅為1 Mbit/s。采用全并行結(jié)構(gòu)實(shí)現(xiàn)的譯碼器速率可達(dá)1 Gbit/s,卻是以增加極高的芯片復(fù)雜度為代價(jià)的。采用半并行結(jié)構(gòu)實(shí)現(xiàn)的譯碼器速率為54 Mbit/s,是譯碼速率和資源消耗的一種折中,但由于構(gòu)造方法的限制,現(xiàn)有的大多數(shù)LDPC碼并不適合采用半并行結(jié)構(gòu)。

譯碼器的譯碼速率和硬件資源消耗是考慮 LDPC 碼譯碼器硬件實(shí)現(xiàn)時(shí)兩個(gè)重要的因素,較高的譯碼速率往往意味著更大的資源消耗。對(duì)比相同功能的傳統(tǒng)硬件描述方法,在本設(shè)計(jì)中由于Impulse C庫(kù)可以有效地利用Streams-C編譯器提供的“流式編程”方法,芯片內(nèi)部并行譯碼結(jié)構(gòu)采用流水線結(jié)構(gòu),降低了邏輯單元的使用量,硬件規(guī)模相對(duì)較?。煌瑫r(shí),有些系統(tǒng)并不要求很高的譯碼速率,例如第三代移動(dòng)通信系統(tǒng)要求達(dá)到的最高譯碼速率為10 Mbit/s。

因而本設(shè)計(jì)實(shí)現(xiàn)的譯碼器占有較低的資源利用率,數(shù)據(jù)吞吐量也能夠滿足實(shí)際工程的需要,具有良好的工程應(yīng)用能力。

4 結(jié)論

本文基于Impulse C語(yǔ)言的FPGA編程技術(shù)的優(yōu)勢(shì),創(chuàng)建實(shí)現(xiàn)了一個(gè)面向數(shù)據(jù)流的LDPC譯碼硬件算法,為軟件工程師從C到開(kāi)發(fā)基于FPGA 的嵌入式硬件系統(tǒng)提供了一種快捷的新思路。面向FPGA性能,進(jìn)一步優(yōu)化Impulse C代碼,從而提高其糾錯(cuò)性能;采用系統(tǒng)級(jí)并行改善吞吐率,從而得到更高的譯碼速率以及更低的資源利用率將是下一步的研究方向。

參考文獻(xiàn):

[1] Davide Pellerin,Scott Thibault. Pratical FPGA Programming in C[M].New York: Prentice Hall PTR,2007:19-51.

[2] 朱嘉,張海濱,潘宇.一種低復(fù)雜度的LDPC碼迭代譯碼算法[J].電訊技術(shù),2006,46(5):94-97.

ZHU Jia, ZHANG Hai-Bin, Pan Yu. A Low-complexity Iterative Decoding Algorithm for LDPC Codes[J]. Telecommunication Engineering,2006,46(5):94-97.(in Chinese)

[3] 鄧炯.幾種LDPC碼的性能比較[J].電訊技術(shù),2009,49(5):82-85.

DENG Jiong. Performance Comparison of Several LDPC Codes[J]. Telecommunication Engineering,2009,49(5):82-85.(in Chinese)

[4] Thomas J Richardson,Rudiger L Urbanke.Efficient Encoding of Low-Density Parity-Check Codes[J].IEEE Transactions on Information Theory,2001,47(2):638-656.

[5] Levine B, Taylor R,Schmit H. Implementation of near Shannon limit error-correct codes using reconfigurable hardware[C]//Proceedings of IEEE Symposium on FCCM. Los Alamitos:IEEE,2000:217-226.

[6] Andrew J Blanksby,Chris J Howland. A 690mW 1Gbit/s 1024bit, rate-1/2 low-density parity-check code decoder[J].Journal of Solid-State Circuits,2002,37(3):404-412.

[7] Zhang T,Parhi K K. A 54Mbit/s (3, 6)-regular FPGA

LDPC decoder[C]//Proceedings of IEEE SIPS.[S.l.]:IEEE,2002:127-132.

猜你喜歡
譯碼器譯碼C語(yǔ)言
基于校正搜索寬度的極化碼譯碼算法研究
基于Visual Studio Code的C語(yǔ)言程序設(shè)計(jì)實(shí)踐教學(xué)探索
糾錯(cuò)模式可配置的NAND Flash BCH譯碼器設(shè)計(jì)
基于C語(yǔ)言的計(jì)算機(jī)軟件編程
跟蹤導(dǎo)練(一)5
高職高專院校C語(yǔ)言程序設(shè)計(jì)教學(xué)改革探索
從霍爾的編碼譯碼理論看彈幕的譯碼
LDPC 碼改進(jìn)高速譯碼算法
論子函數(shù)在C語(yǔ)言數(shù)據(jù)格式輸出中的應(yīng)用
HINOC2.0系統(tǒng)中高速LDPC譯碼器結(jié)構(gòu)設(shè)計(jì)
金门县| 临桂县| 临夏市| 桃园市| 洱源县| 烟台市| 磴口县| 中西区| 昌图县| 旺苍县| 馆陶县| 井冈山市| 彰化县| 木里| 洪泽县| 团风县| 老河口市| 平武县| 天等县| 平江县| 高邮市| 池州市| 玉田县| 上思县| 萝北县| 紫阳县| 济阳县| 赞皇县| 綦江县| 庄河市| 永川市| 微博| 浦城县| 双牌县| 祥云县| 延吉市| 博罗县| 耒阳市| 滕州市| 栖霞市| 桐乡市|