新聞中心

EEPW首頁 > 設(shè)計應(yīng)用 > 使用面向FPGA的OpenCL設(shè)計兩百萬點頻域濾波器

使用面向FPGA的OpenCL設(shè)計兩百萬點頻域濾波器

作者:Dmitry Denisenko 時間:2015-11-09 來源:電子產(chǎn)品世界 收藏
編者按:快速傅里葉變換(FFT)是信號處理應(yīng)用的基礎(chǔ)。FPGA供應(yīng)商一直以來提供了運行良好的FFT庫,處理適配到FPGA片內(nèi)存儲器中的大量數(shù)據(jù)。但是,如果數(shù)據(jù)規(guī)模太大,應(yīng)該如何應(yīng)對? 為解決這一問題,F(xiàn)PGA設(shè)計人員現(xiàn)在必須要做出設(shè)計決定,這些決定互相糾纏在一起,例如,片內(nèi)FFT內(nèi)核的配置選擇,其數(shù)量,它們怎樣連接并訪問外部存儲器,多個內(nèi)核之間的同步等。分析所有這類設(shè)計決定就是要能夠很好的結(jié)合現(xiàn)有產(chǎn)品,在HDL中編程,這會非常耗時,而且?guī)砹诵阅軉栴}。采用OpenCL等高級編程語言,能夠很快的完成系統(tǒng)設(shè)計分析。本

除了復(fù)制一個片外FFT計算流水線,還將以下部件加入到系統(tǒng)中:

本文引用地址:http://m.butianyuan.cn/article/281882.htm

  1. 頻域的復(fù)數(shù)乘法被加入到第三個F1T模塊中。coef緩沖保存了兩百萬復(fù)數(shù)乘法系數(shù)。

  2. 增加了I/O輸入和I/O輸出內(nèi)核,對萬兆以太網(wǎng)通道上的外部存儲器負(fù)載進行逼真的建模 。采用這些內(nèi)核,能夠繼續(xù)純軟件開發(fā),在內(nèi)核計算流水線完全優(yōu)化好之后,再集成以太網(wǎng)通道。I/O輸入內(nèi)核在每一時鐘周期產(chǎn)生一個采樣,I/O輸出每一時鐘周期占用一個采樣。

  正如片外FFT試驗所示,只能適配兩個F1T模塊,采用POINTS=4。因此,要完成全部計算,數(shù)據(jù)要通過硬件兩次。對于2M點數(shù),系統(tǒng)總吞吐量只有120 MSPS,低于目標(biāo)150 MSPS。通過把數(shù)據(jù)長度減小到1M點,能夠適配POINTS=8版本,吞吐量達(dá)到198 MSPS。這表明,只要能夠讓POINTS=8版本適配2M點數(shù),就還能提高性能!

  在圖2中,找出全流水線的優(yōu)化結(jié)構(gòu)是整個設(shè)計過程的下一步。首先能夠提高的是去掉tmp3緩沖。兩邊都以同樣的方式訪問它(轉(zhuǎn)置寫和讀操作)。因此,可以通過通道把第二和第三個F1T模塊直接連接起來。這要求轉(zhuǎn)置內(nèi)核將其輸出寫入到外部存儲器中,或者通道中,獲取內(nèi)核也是相似的修改。這類修改是由主機動態(tài)控制的,因此,可以使用獲取內(nèi)核的一個物理例化。注意,這改變了與外部存儲器的連接。但是,根本不用對此擔(dān)心——編譯器已經(jīng)為系統(tǒng)生成了高效的定制外部存儲器互聯(lián)。

  進一步的改進是,把第二個轉(zhuǎn)置“T”從寫到tmp1改為從tmp1讀(tmp1中的數(shù)據(jù)以不同的方式存儲,但是效果一樣)。這樣,轉(zhuǎn)置就不需要本地存儲器緩沖了。

  原來是通過兩級來實現(xiàn)轉(zhuǎn)置的:第一,所需的數(shù)據(jù)被裝入到本地存儲器中,然后,使用轉(zhuǎn)置地址從本地存儲器讀取。為高效的使用這類流水線,編譯器自動將本地存儲器系統(tǒng)的緩沖加倍。以這種方式,流水線的裝入部分能夠?qū)?shù)據(jù)裝入到一個副本中,而讀部分能夠從另一副本讀取以前的數(shù)組。自動雙緩沖非常適合的轉(zhuǎn)置算法,但是太昂貴了。相反,重新編寫轉(zhuǎn)置內(nèi)核。這一內(nèi)核只需要一個緩沖,支持同時讀寫多個數(shù)據(jù)點。對這一轉(zhuǎn)置內(nèi)核的介紹已經(jīng)超出了本文的范圍。

  經(jīng)過以上修改后,能夠采用POINTS=8配置適配2M點的FFT,吞吐量達(dá)到164 MSPS。

4 調(diào)度

  只能適配F1T的兩個副本。圖3顯示了怎樣調(diào)度數(shù)據(jù)流,以便完全利用流水線。注意,在穩(wěn)定狀態(tài)下,流水線交替處理第二和第三組數(shù)據(jù),不需要額外的緩沖。由CPU上運行的主程序控制這種調(diào)度,使用動態(tài)分析工具進行驗證。

5 緩沖分配

  在系統(tǒng)中,主程序控制了包含那個緩沖區(qū)的DDR塊。DDR塊只要不是同時讀寫,在讀操作或者寫操作時的效率最高,因此,在兩個DDR塊之間按以下原則來分配5個緩沖:

  ? DDR塊#0分配input和tmp2。

  ? DDR塊#1分配tmp1、coef和out。

  給DDR塊分配一個緩沖就是在OpenCL主程序中修改一行代碼。編譯器和底層平臺完成其他任務(wù)。能夠自動完成這一過程,在2-DDR和4-DDR電路板上進行了試驗,為每一塊電路板找到緩沖到存儲器塊的最佳映射。

6 結(jié)論

  在本文中,介紹了怎樣使用為提供的Altera OpenCL SDK,設(shè)計2M點數(shù)。使用軟件類型的仿真對所有功能進行了驗證。每一個硬件編譯都能夠正確工作。并沒有打開硬件仿真器,也不用擔(dān)心時序收斂問題。

參考文獻:

  [1]D. H. Bailey. FFTs in external of hierarchical memory Proc. of ACM/IEEE Conf. on Supercomputing’89 (SC89), 1989, 234-242

  [2]FFT (1D) Off-Chip Design Example.[EB/OR] https://www.altera.com/support/support-resources/design-examples/design-software/opencl/fft-1d-offchip.html


上一頁 1 2 下一頁

關(guān)鍵詞: FPGA 頻域濾波器 OpenCL 201511

評論


相關(guān)推薦

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

關(guān)閉