<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 使用面向FPGA的OpenCL設計兩百萬(wàn)點(diǎn)頻域濾波器

使用面向FPGA的OpenCL設計兩百萬(wàn)點(diǎn)頻域濾波器

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

摘要:快速傅里葉變換(FFT)是信號處理應用的基礎。供應商一直以來(lái)提供了運行良好的FFT庫,處理適配到片內存儲器中的大量數據。但是,如果數據規模太大,應該如何應對? 為解決這一問(wèn)題,設計人員現在必須要做出設計決定,這些決定互相糾纏在一起,例如,片內FFT內核的配置選擇,其數量,它們怎樣連接并訪(fǎng)問(wèn)外部存儲器,多個(gè)內核之間的同步等。分析所有這類(lèi)設計決定就是要能夠很好的結合現有產(chǎn)品,在HDL中編程,這會(huì )非常耗時(shí),而且帶來(lái)了性能問(wèn)題。采用等高級編程語(yǔ)言,能夠很快的完成系統設計分析。本文將研究在目前FPGA體系結構上實(shí)現1M和16M點(diǎn)數的,支持從每秒120到240百萬(wàn)采樣的不同采樣率。本文研究一個(gè)2M點(diǎn)數單精度的示例,該示例選擇作為其設計決定。假設讀者熟悉FPGA設計,掌握的基本概念。

本文引用地址:http://dyxdggzs.com/article/281882.htm

引言

  本文介紹構建一個(gè)百萬(wàn)點(diǎn)數單精度。這類(lèi)濾波器使用百萬(wàn)點(diǎn)數1D FFT,將每一個(gè)頻率和相位分量與用戶(hù)提供的數值相乘,使其輸入轉換到頻域,并通過(guò)FFT反變換,再把結果轉換回時(shí)域。在目前一代FPGA和兩個(gè)DDR3外部存儲器塊平臺上,對于兩百萬(wàn)點(diǎn)采樣,整個(gè)系統的性能總要求是每秒處理1.50億點(diǎn)(MSPS)。輸入和輸出通過(guò)萬(wàn)兆以太網(wǎng)直接傳送給FPGA。

  對于這一設計,本文選擇使用Altera OpenCL SDK,在安裝了Stratix V GSD8 FPGA的BittWare S5-PCIe-HQ電路板上運行FPGA編譯器。出于兩個(gè)原因,選用OpenCL而不是更底層的語(yǔ)言。第一個(gè)原因是設計幾百萬(wàn)點(diǎn)數的濾波器需要構建復雜而且非常高效的外部存儲器系統。采用底層設計工具,建立片內FFT或者進(jìn)行對角旋轉的獨立模塊相對簡(jiǎn)單(特別是因為所有FPGA供應商已經(jīng)提供了含有這類(lèi)模塊的庫)。但是,建立外部存儲器系統通常需要付出大量的HDL工作。由于在開(kāi)始時(shí)并不知道整個(gè)系統的配置,因此這特別難,在后面會(huì )看到。選擇OpenCL的第二個(gè)原因是通過(guò)主機控制FPGA邏輯。從開(kāi)始時(shí)就清楚兩個(gè)完整的幾百萬(wàn)點(diǎn)的FFT內核副本無(wú)法適配到一個(gè)器件中,因此,在獲得最終輸出之前,一組數據至少要通過(guò)FPGA邏輯兩次。協(xié)調這類(lèi)共享同時(shí)還要實(shí)現動(dòng)態(tài)修改數據規模、乘法系數,甚至完全修改FPGA功能等,這些工作最好留給CPU。為FPGA提供的OpenCL編譯器解決了所有這些難題——它開(kāi)發(fā)可定制的高效的外部存儲器系統,能夠精確地控制FPGA邏輯。

1 片內FFT

  假設已經(jīng)有一個(gè)FFT內核,處理的數據長(cháng)度完全能夠適配到FPGA中(將其稱(chēng)之為“片內FFT”),每一家FPGA供應商都會(huì )提供此類(lèi)內核。至少可以采用以下方式對這些內核配置參數:

  1. 數據類(lèi)型(定點(diǎn)或者單精度浮點(diǎn));2. 要處理的點(diǎn)數,N; 3.要并行處理的點(diǎn)數,POINTS;4. 動(dòng)態(tài)支持修改要處理的點(diǎn)數。

  有了這類(lèi)片內FFT內核后,需要兩個(gè)步驟來(lái)構建整個(gè)系統:開(kāi)發(fā)一個(gè)能夠處理幾百萬(wàn)點(diǎn)數的FFT內核,然后,把兩個(gè)這類(lèi)內核連接在一起,它們之間是復數乘法,從而建立完整的系統。

2 幾百萬(wàn)點(diǎn)FFT

  采用外部存儲來(lái)實(shí)現FFT的傳統方法是六步算法[1],把一個(gè)一維數組當做兩維來(lái)處理(2M = 2K x 1K),如圖1所示。

  圖1畫(huà)出了六步算法,顯示了單獨的計算內核以及外部存儲器緩沖?!矮@取”內核讀取來(lái)自外部存儲器的數據,以選擇對其進(jìn)行轉置,將其輸出至通道(在OpenCL 2.0術(shù)語(yǔ)中,也稱(chēng)之為“管道”)。在硬件中,以FIFO來(lái)實(shí)現通道,其深度由編譯器計算?!捌瑑?D FFT”是未經(jīng)修改的供應商的FFT內核,接收輸入,使用通道產(chǎn)生比特反轉輸出?!稗D置”是將從輸入通道讀取的數據轉置,可以選擇將其與特殊的旋轉因子相乘,以自然順序把輸出寫(xiě)入到外部存儲器。

  正如您從圖1中所看到的,數據兩次通過(guò)獲取→1D FFT→轉置(F1T)流水線(xiàn),產(chǎn)生最終輸出。留給第一個(gè)最重要的設計選擇——采用一個(gè)F1T流水線(xiàn)副本以節省面積,或者兩個(gè)副本以盡可能的提高吞吐量。

  在仿真器中對這一算法進(jìn)行原型設計,以便能夠正確的處理轉置地址以及旋轉因子。仿真器將OpenCL內核編譯至x86-64二進(jìn)制文件,可以運行在沒(méi)有FPGA的開(kāi)發(fā)板上。從仿真器到硬件編譯是比較簡(jiǎn)單的步驟——仿真器中功能正確的代碼在硬件中也是正確的,不需要仿真。出于性能和面積的原因,唯一要修改的是獲取和轉置內核所使用的本地存儲器系統。高效的轉置需要在本地存儲器中對數據POINTS列/行進(jìn)行緩沖。OpenCL編譯器分析您OpenCL代碼中對本地存儲器的所有訪(fǎng)問(wèn),并通過(guò)創(chuàng )建一個(gè)定制的片內存儲系統來(lái)優(yōu)化你的代碼。對于POINTS=4的情況,最初的轉置內核有四次寫(xiě)和四次讀操作。一個(gè)雙泵的片內RAM模塊最多可以服務(wù)四個(gè)獨立的申請,其中最多兩次寫(xiě)操作。為支持四次寫(xiě)和四次讀操作,需要復制片內存儲器,含有申請仲裁邏輯,導致面積增大,性能下降。當認識到可以通過(guò)修改寫(xiě)模式,來(lái)連續進(jìn)行所有四次寫(xiě)操作后,這四次寫(xiě)操作被OpenCL編譯器分成一組,成為一次寬寫(xiě)操作,這樣,只需要對本地存儲器系統訪(fǎng)問(wèn)五次:一次寫(xiě)操作,四次讀操作。進(jìn)行了這一修改后,編譯器自動(dòng)為構建一個(gè)小很多的五端口存儲器系統,在每一時(shí)鐘周期可以服務(wù)所有五個(gè)申請,不會(huì )出現停頓。

  設計被編譯到硬件中后,可以進(jìn)行性能測量。在FPGA上有一個(gè)F1T流水線(xiàn)副本,對于四百萬(wàn)點(diǎn)FFT,測得了POINTS=4時(shí),217 MSPS,POINTS=8時(shí),457 MSPS[2]。POINTS=8版本使用了兩次,因為這一配置中大量的片內模塊RAM和兩個(gè)副本無(wú)法適配。這就是要研究的第一個(gè)設計范圍——要并行處理的點(diǎn)數和面積。

3 全濾波器設計

  現在,有了一個(gè)幾百萬(wàn)點(diǎn)的FFT,準備好將整個(gè)設計合在一起。把兩個(gè)片外FFT連接在一起,得到圖2所示的流水線(xiàn)邏輯視圖。



上一頁(yè) 1 2 下一頁(yè)

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>