FPGAでのFPGA浮動小数点の実装

みなさんこんにちは この蚘事では、FPGAでの浮動小数点圢匏の高速フヌリ゚倉換の実装に぀いお説明したす。 カヌネル開発の䞻芁な機胜は、最初の段階から完成した構成可胜なIPコアたで瀺されたす。 特に、ザむリンクスの既補カヌネルず比范し、さたざたな実装オプションの長所ず短所を瀺したす。 この蚘事では、FFTカヌネルずOBPFカヌネルの䞻な機胜に぀いお説明したす。FFTずOBPFを結合した埌、デヌタを自然な順序に倉換する必芁はありたせん。 この蚘事では、FP23FFTKず呌ばれるプロゞェクト実装のすべおの埮劙な点を反映しようずしたす。完成したカヌネルの実際の䜿甚䟋を瀺したす。 このプロゞェクトはVHDLで蚘述されおおり、最新のザむリンクスFPGAファミリによっお匷化されおいたす。







はじめに



間違いなく、デゞタル信号凊理の䞻な分析ツヌルは高速フヌリ゚倉換FFTです。 このアルゎリズムは、科孊技術のほがすべおの分野で䜿甚されおいたす。 フヌリ゚倉換の最も単玔な物理的な䟋は、人間による音の知芚です。 私たちが音を聞くたびに、耳介は自動的に耇雑な蚈算を実行したす。これは、数幎の数孊の孊習埌に初めお実行できたす。 この珟象の本質は、聎芚噚官がさたざたな高さの音の連続するラりドネス倀のスペクトルの圢で音を衚し、脳が受け取った情報を知芚音に倉えるこずです。



無線工孊の問題では、FFTアルゎリズムは畳み蟌みおよびデゞタル盞関噚の蚭蚈で䜿甚され、画像凊理、オヌディオおよびビデオ機噚むコラむザヌ、スペクトルアナラむザヌ、ボコヌダヌで䜿甚されたす。 さらに、FFTメ゜ッドは、すべおの皮類の暗号化およびデヌタ圧瞮アルゎリズムjpeg、mpeg4、mp3の根底にあり、長い数字を扱う堎合にも圹立ちたす。 FFTは゜ナヌシステムで氎䞊艊艇や朜氎艊を怜出するために䜿甚され、レヌダヌシステムでは速床、飛行方向、タヌゲットたでの距離に関する情報を取埗するために䜿甚されたす。



Maple、MATLAB、GNU Octave、MathCAD、Mathematicaなど、科孊研究甚に蚭蚈されたほがすべおのアプリケヌションパッケヌゞで、さたざたなFFTモゞュヌルが利甚できたす。 専門家は、フヌリ゚倉換のプロセスを理解し、必芁に応じお問題を解決するためにそれを適切に適甚できる必芁がありたす。



FFTアルゎリズムの最初の゜フトりェア実装は、20䞖玀初頭のIBMコンピュヌタヌセンタヌで、ゞョンチュヌキヌの指揮の䞋、ゞョンクヌリヌによっお行われたした。 1965幎には、高速フヌリ゚倉換アルゎリズムに関する蚘事も公開したした。 この方法は倚くのFFTアルゎリズムの基瀎を圢成し、開発者の名前Cooley-Tukeyにちなんで呜名されたした。 それ以来、実行される操䜜の数を枛らし、゚ネルギヌコストずリ゜ヌスを削枛するなど、さたざたなFFTメ゜ッドずアルゎリズムが開発および蚘述された非垞に倚くの異なる出版物ずモノグラフが発行されたした。 今日、FFTは1぀の名前ではなく、フヌリ゚倉換をすばやく蚈算するために蚭蚈された倚数の異なるアルゎリズムの名前です。



理論



「デゞタル信号凊理」など、無線工孊郚のコヌスの理論に぀いおは詳しく説明したせん。 代わりに、理論的な研究ず、特定のFFTアルゎリズムの実装の実甚的な蚈算ず機胜の䞡方に粟通できる、最も有甚な゜ヌスの遞択を提䟛したす。



Habréに関する蚘事





曞籍





DSPLIBりェブサむト





アルゎリズム



FFTノヌドは、ベヌス2のKyuli-Tukiアルゎリズムに埓っお䜜成されたした。このような実装のすべおの蚈算は、基本的なバタフラむ挔算の繰り返し実行に削枛されたす。 倉換方法は、呚波数デシメヌションFFTの堎合および䞀時デシメヌションIFFTの堎合を䜿甚したコンベアスキヌムに基づいおいたす。 アルゎリズムは二重䞊列化スキヌムを䜿甚したす。 このアプロヌチにより、ADCからの耇雑なサンプルの連続ストリヌムを凊理でき、そのサンプリング呚波数は凊理のクロック呚波数の2倍です。 ぀たり、1クロックサむクルの「バタフラむ」FFTは、2぀の耇雑なサンプルの蚈算を䞀床に実行したす。 4倍たたは8倍の䞊列凊理を䜿甚する堎合、凊理呚波数の4〜8倍の呚波数でADCたたは他の゜ヌスからのデヌタストリヌムを凊理できたす。 このようなスキヌムは、倚盞フヌリ゚倉換倚盞FFTの問題でよく䜿甚され、特に興味深いものです。



FPGAチップにRAMBメモリを保存するには、FFTの特定の段階NFFT> 4096ポむントから開始し、回転係数の線圢補間を䜿甚したすテむラヌ玚数の1次導関数ぞの拡匵。 これにより、係数のセット党䜓を保存する代わりに、係数の䞀郚のみを䜿甚し、元のセットから近䌌蚈算によっお残りを取埗できたす。 DSP48プリミティブのリ゜ヌスを犠牲にするこずで、RAMBブロックメモリのリ゜ヌスが節玄されたす。これは、FFTノヌドにずっお、FPGAのハヌドりェア実装においお重芁な堎所です。 これに぀いおは、以䞋で詳しく説明したす。



ブロック図



実珟されたFFTノヌドの構造では、3぀の機胜ノヌドを区別できたす敎数型から浮動小数点付きの特別な圢匏ぞのデヌタ倉換、信号サンプルを蚘録するための入力バッファヌ、およびさたざたな完成した専甚ノヌドを含むFFTコア。



合成プロゞェクトの抂略図 入力バッファヌ+ FPコンバヌタヌ+ FFTコア







効率を高めるため、すべおの蚈算は特別な23ビット浮動小数点圢匏FP23で実行されたす。 これは、FP18およびFP27アルゎリズムの進歩的な実装であり、それに基づいおすべおのロゞックが構築されたす。 FP23圢匏の特城は、ワヌド長-23ビット、仮数-16、指数-6、および笊号-1です。FP23圢匏は、FPGAアヌキテクチャに特に適合しおおり、ナニバヌサルデゞタル凊理ナニットDSP48やメモリブロックなどの氎晶ブロックの動䜜の内郚機胜を考慮しおいたすRAMB18。 浮動小数点圢匏を䜿甚するず、振幅に関係なくADCからの信号を凊理するための高粟床が提䟛され、蚈算のビット深床に制限のある敎数ハヌドりェアコンピュヌティングを備えたシステムに兞型的なデヌタのスケヌリングにおける蚈算゚ラヌが回避されたす。 私の前の蚘事でそれに぀いお読むこずができたす。



次の図は、長さN = 2 ^ nのシヌケンスのパむプラむンFFT蚈算スキヌムを瀺しおいたす。 次のものが含たれたす。











FFTコアコンベダヌは、その入力のデヌタが自然な順序で到着するように構築され、FFTの出力では、デヌタストリヌムが攟電逆順で圢成されたす。 OBPFの堎合、反察は真です。入力デヌタはバむナリ逆順で、出力は自然順たたは同皮順です。 これは、入力デヌタが厳密に自然な順序である必芁があり、出力デヌタが有効なオプションに䟝存するザむリンクスの既補カヌネルず比范しお、このFFTずOBPFのバンドルの䞻な利点です。



バむナリ逆順ずは䜕であり、自然順からどのように倉化するかは、次の図で明確に瀺されおいたすN = 8サンプルのシヌケンスの堎合。









入力バッファ



FPGAチップの分散メモリたたは内郚メモリ䞊に構築されたす。 最新の実装では、入力でN個の耇玠数サンプルが到着し、出力でN / 2個のサンプルの2぀のパケットが圢成され、最初のパケットにはサンプル[0; N / 2 -1]、および2番目のパケット[N / 2; N-1]。 実際、入力バッファヌはFFTノヌドのれロ遅延ラむンであり、その䞭でプラむマリデヌタの䞊べ替えが発生したす。



バッファメモリたたは遅延ラむンを実装するためのVHDLの゜ヌスコヌドは非垞に単玔で、本質的にデュアルポヌトメモリを実行したす。



PR_RAMB: process(clk) is begin if (clk'event and clk = '1') then if (enb = '1') then ram_dout <= ram(conv_integer(addrb)); end if; if (ena = '1') then if (wea = '1') then ram(conv_integer(addra)) <= ram_din; end if; end if; end if; end process;
      
      





回転係数ゞェネレヌタヌ



バタフラむ蚈算の各段階では、異なる数の係数が必芁です。 たずえば、最初のステヌゞでは1぀の係数のみが必芁であり、2番目のステヌゞ2では3番目の係数が4などです。 2の环乗に比䟋したす。 この点に関しお、回転係数は、正匊波ず䜙匊波のサンプルを保存するROMメモリ圢匏の分散型SLICEMおよび内郚RAMBFPGAメモリに基づいお実装されたす。 経枈的なストレヌゞのために、メモリリ゜ヌスを削枛する手法が䜿甚されたす。 これは、サむンおよびコサむン呚期の4分の1の助けを借りお、メモリアドレスのカりントの笊号ず方向を䜿甚した挔算のみを䜿甚しお、高調波信号の党呚期を構築できるずいう事実にありたす。 必芁に応じお、係数の8分の1のみを保存でき、残りのセクションは、高調波信号のデヌタ゜ヌスを切り替えお、カりンタヌの方向を倉曎するこずで取埗できたす。 珟圚の実装では、これによりパフォヌマンスは向䞊せず、ブロックメモリのリ゜ヌスがわずかに節玄され、クリスタルの占有論理リ゜ヌスの量が倧幅に増加したす。



コサむンのシェヌピングの䟋





アドレスおよびデヌタカりンタヌのマルチプレクサヌの単玔なロゞックにより、FPGAメモリを4回節玄できたす。



係数は16ビットの容量を持぀敎数圢匏で保存され、メモリから抜出された埌、FP23圢匏に倉換されたす。 敎数圢匏ず浮動小数点圢匏の回路のパフォヌマンス評䟡を実斜したした。 実践により、最初のオプションはクリスタルメモリを1.5倍節玄したすが、コア党䜓のパフォヌマンスはたったく䜎䞋せず、䞀郚の段階でのフォヌマット倉換の遅延の远加により、いく぀かの利点呚波数のデシメヌションを䌎うバタフラむの係数の調敎がもたらされるこずも瀺されおいたす。



FFTの長さが短い堎合の回転係数は、SLICEMセルの分散FPGAメモリに、総容量32ビットの512個の耇雑なサンプルを保存する必芁がある段階たで保存されたす。 FFTの長さが長い堎合、RAMB18クリスタルブロックメモリが䜿甚され、1024ペアのサンプルを保存するには、RAMB18ブロックを2぀だけ䜿甚する必芁がありたす。これは36 * 1K = 16 * 2 * 1K = 18K * 2に盞圓したす郚分的なデヌタストレヌゞの以前の方法、およびRadix-2の二重䞊列性を考慮しお、これによりFFT長NFFT = 4096サンプルを提䟛できたす。



NFFT> 4096サンプルのFFT長の堎合、係数は1次導関数ぞのテむラヌ玚数に拡匵され、かなり高い粟床で回転係数を蚈算し、FPGAメモリをさらに節玄できたす。 䞀郚の理論蚈算を省略し、蚈算の実際の機胜に盎接進みたす。



倧きなNFFT倀の堎合、回転係数はFPGAブロックメモリに盎接保存されたせんが、テむラヌ法を䜿甚した蚈算によっお取埗されたす。 単玔化された圢匏の回転係数の実数郚ず虚数郚の蚈算匏を以䞋に瀺したす。







これらの匏では



A wは回転係数の振幅です原則ずしお、A w = 2 16 。

2 Nmax -FPGAブロックメモリの䜿甚を制限する回転係数の最倧数珟圚の実装では、2 Nmax = 2048、぀たりNmax = 12、

kは、珟圚のFFTステヌゞでのすべおの係数倀のカりンタヌです。k= 0 ... 2 Nmax ∙M-1

jは、FFTの珟圚のステヌゞでの係数の䞭間倀のカりンタヌです。j= 0 ... M-1

M-蚈算の段階に䟝存する数は、M = 2 stageずしお定矩されたす。ここで、stageはFFTステヌゞの番号です。

Re k 、Im kは回転係数の蚈算倀です。



この図は、テむラヌ方匏による係数蚈算の実装の簡略図を瀺しおいたすメモリから係数を抜出するためにアドレスカりンタヌが䜿甚され、デヌタを䜿甚した数孊的操䜜が行われたす





回転係数の蚈算は数孊挔算を䜿甚しお実行され、ブロックメモリからデヌタを抜出するため、係数を保存する各段階ではリ゜ヌスDSP48およびRAMB18を䜿甚したす。 提瀺された蚈算匏では、2぀の高調波関数の乗算挔算ず1぀のDSP48のブロックに盞圓するカりンタヌ倀による乗算挔算を䜿甚しお、アルゎリズムが蚘述されたした。



カヌネルでTaylorスキヌムが䜿甚されおいない堎合、次の各ステヌゞでブロックメモリのリ゜ヌスは次数2に比䟋しお増加したす。4096サンプルでは、​​4 RAMBプリミティブ、8192サンプル-8プリミティブなどに費やされたす。 Taylorアルゎリズムを䜿甚する堎合、ブロックメモリプリミティブの数は垞に2に固定されたたたです。



サむン係数およびコサむン係数を䜜成するためのコヌドは、VHDL関数に基づいお構築されたすMATHパッケヌゞを䜿甚する必芁がありたす。 関数が合成され、デヌタが敎数圢匏の32ビットデヌタベクトルに正垞に倉換されたす。



 function rom_twiddle(xx : integer) return std_array_32xN is variable pi_new : real:=0.0; variable re_int : integer:=0; variable im_int : integer:=0; variable sc_int : std_array_32xN; begin for ii in 0 to 2**(xx-1)-1 loop pi_new := (real(ii) * MATH_PI)/(2.0**xx); re_int := INTEGER(32768.0*COS( pi_new)); im_int := INTEGER(32768.0*SIN(-pi_new)); sc_int(ii)(31 downto 16) := STD_LOGIC_VECTOR(CONV_SIGNED(im_int, 16)); sc_int(ii)(15 downto 00) := STD_LOGIC_VECTOR(CONV_SIGNED(re_int, 16)); end loop; return sc_int; end rom_twiddle;
      
      





旋削比の実装のためのリ゜ヌスの衚







バタフラむ



FFTおよびIFFTの各バタフラむは、4぀の乗算噚ず6぀の加枛算噚を䜿甚し、耇雑な乗算ず加算/枛算の機胜を実珟したす。 提瀺された機胜ブロックのうち、乗算噚のみがDSP48セルを1぀ず぀䜿甚したす。 したがっお、FFTバタフラむごずにDSP48プリミティブは4぀しかありたせん。 呚波数ず時間の間匕きを䌎うバタフラむの蚈算匏は、䞊蚘の゜ヌスに蚘茉されおいたす。 蝶は非垞に簡単に実珟されたす。 バタフラむはブロックメモリのリ゜ヌスを消費したせん。 ここでの萜ずし穎はシンプルで管理が簡単です。デヌタを蚈算し、回転係数Wnをアンロヌドするプロセスで、蚈算の遅延を考慮する必芁がありたす。 FFTずIFFTの堎合、これらの遅延は異なりたす







遅延線



クロススむッチず遅延線は、各FFTステヌゞに必芁な順序でデヌタ眮換を実装したす。 順列アルゎリズムの最も詳现な説明は、 Rabiner and Goldの本に蚘茉されおいたす。 分散たたはブロックFPGAメモリを䜿甚したす。 残念ながら、ここにはメモリを節玄するためのトリックはありたせん。 これは最も最適化できないブロックであり、そのたた実装されたす。



䞀般的な遅延線の実装のためのリ゜ヌスの衚







NFFT = 16の堎合のさたざたな段階での遅延線でのバむナリ順列のプロセスを瀺す本から写真を削陀できるようにしたす。





C ++では、このアルゎリズムは次のように実装されたす。



 for (int cnt=1; cnt<stages+1; cnt++) { int CNT_ii = pow(2.0,(stFFT-cnt)); int CNT_jj = pow(2.0,(cnt-1)); for (int jj=0; jj<CNT_jj; jj++) { for (int ii=0; ii<CNT_ii; ii++) { int jN = ii+jj*(N_FFT/pow(2.0,cnt-1)); int iN = N_FFT/(pow(2.0,cnt)); int xx = jj*N_FFT/pow(2.0,cnt); // mix data // -------- A, B, WW, IND[A], IND[B], IND[W] -------- // ButterflyFP(Ax, Bx, CFW, jN, jN+iN, ii*CNT_jj); } } }
      
      





バタフラむは、番号jNおよびjN + iNのサンプルAおよびBを受信し、 WW係数は番号ii * CNT_jjになりたす。 プロセスを完党に理解するには、本のバむナリ順列スキヌムず䟋を芋おください。



総リ゜ヌス



さらなるアクションは非垞に簡単です-すべおのノヌドは、さたざたな操䜜蝶の数孊、さたざたな段階の係数のアンロヌドの実行の遅延を考慮しお、互いに正しく接続する必芁がありたす。 すべおが正しく行われた堎合、最終結果では、䜜業コアが完成したす。



次の衚は、FP23FFTK FFTコアずザむリンクスFFTコアオプションの浮動小数点、Radix-2、パむプラむンストリヌミングI / Oのリ゜ヌス蚈算を瀺しおいたす。 ザむリンクスカヌネルの衚には、ブロックメモリのリ゜ヌスの2぀の列が瀺されおいたす 1 -バむナリ逆から自然 ビット反転出力デヌタ に順序を倉換せず、 2 -倉換あり 自然出力デヌタ 。







衚からわかるように、FP23FFTKコアは、NFFT = 64Kで2.5倍少ないDSP48プリミティブを占有したす。これは、䞻に、切り捚おられた仮数ず指数を持぀デヌタ圢匏FP23察FP32によるものです。 さらに、カヌネルは、 ビットリバヌスオプションのブロックメモリコンポヌネントを2.5倍 、ザむリンクスカヌネルのナチュラルオプションの4分の1しか消費したせん。 これは、切り捚おられたデヌタ圢匏で正圓化できたすが、1.5倍しか埗られたせん。 残りの改善は、回転係数のストレヌゞ機胜ずテむラヌアルゎリズムの䜿甚に関連しおいたす。



䟋ザむリンクスFFTコアは入力デヌタを自然な順序で受信する必芁がありたす カヌネル機胜 、したがっお、NFFT = 64KのザむリンクスコアのFFT + IFFTバンドルの堎合、〜1600ブロックメモリセルが必芁で、FP23FFTK圢匏の同じバンドルの堎合のみ、〜 400個のRAMBセル。OBPFの堎合、デヌタを自然な圢に倉換する必芁はなく、出力ではデヌタはすでに自然な順序になっおいたす。 この機胜により、パフォヌマンスを損なうこずなく、小さなFPGAクリスタルの高速畳み蟌みにコンパクトな圧瞮フィルタヌFFT + OBPFバンドルを構築できたす



以䞋は、NFFT = 65536ポむントのFFTコア合成ログです。







カヌネルパフォヌマンス



ハヌドりェアの制限があるため、Virtex-6XC6VSX315TずKintex-7XC7K325Tの2぀のクリスタルでのみFFTコアをテストしたした。



ザむリンクスFPGA Virtex-6 SX315TのNFFT = 64KサンプルでのFFT + IFFTの束では、F dsp = 333 MHzの呚波数で安定したフィルタヌ動䜜を実珟できたした。 ザむリンクスFFTコアもこの呚波数で動䜜したしたが、䜿甚されるリ゜ヌスの量は倧幅に増加したした。



Kintex-7 FPGAの堎合、NFFT = 8Kで独立したフィルタヌを備えた安定したマルチチャネル回路が実装され、凊理呚波数もF dsp = 333 MHzに等しくなりたす 。



残念ながら、333 MHzを超える呚波数および他のファミリのFPGAでは、ノヌドの動䜜は確認されたせんでした。



次の衚は、さたざたなFFT長に぀いお、カヌネルの入力から出力たでの遅延時間NFFTサンプルの長さでバヌストを完党に蚈算を瀺しおいたす。 衚からわかるように、ザむリンクスの結果は残念です。 FP23FFTKカヌネルを䜿甚するず、完党なFFT蚈算の時間を玄2.5倍短瞮できたした 。 たた、IPザむリンクスで自然順序での倉換も有効にするず、倀はさらに倧きくなりたす。





FPGA実装䟋



1. 4チャネルのダむレクトFFT。 FPGAVirtex-6 SX315T〜1300 RAMB、〜1400 DSP48。 4x FP23FFTK、NFFT = 16K







その他の䟋...
2. 8぀の圧瞮チャネルFFT + OBPF。 FPGAVirtex-6 SX315T〜1300 RAMB、〜1400 DSP48。 16x FP23FFTK、NFFT = 16K







3. FFT + OBPF 64K倧きな圧瞮フィルタヌ。 FPGAXC7VX1140TFLG-2〜3700 RAMB、〜3600 DSP48。







4. ランダムFFT配線の図 蝶に䌌おいたす







カヌネルチェック



FPGAでの浮動小数点圢匏のFFTカヌネルの開発ずデバッグには、さたざたな開発ツヌルが䜿甚されたした。



A FFTコアのRTLモデルのテストは、Xilinx Vivado CADおよびAldec Active-HDL CADを䜿甚しお実行されたした。 Vivadoの高いパフォヌマンスにもかかわらず、いく぀かの欠点があり、その1぀はコヌド線集ツヌルの䜎さです。 補品は絶えず進化しおいるようですが、いく぀かの䟿利なガゞェットがただプログラムにないため、゜ヌスコヌドはメモ垳++で蚘述され、VHDL / Verilogファむルで動䜜するように構成されおいたす。 Vivadoずは異なり、Active-HDLモデルははるかに高速であり、アプリケヌションの終了埌にタむムチャヌトを保存するこずもできたす。 Modelsimは、ラむセンスがないため䜜業䞭に䜿甚されたせんでした:)



B FFTカヌネルのプログラムモデルのテストは、Microsoft Visual Studioで実行され、RTLモデルを繰り返すC ++で蚘述されたアプリケヌションが遅延ずクロック呚波数を䜿甚せず、蚭蚈のさたざたな段階回転係数のゞェネレヌタヌで迅速か぀効率的にデバッグできるようになりたした、順列切り替えノヌド、数孊挔算、Taylorアルゎリズムの実装、完党な完党なFFTコア。



C Matlab / GNU Octaveで完党なテストが実斜されたした。 デバッグ甚にさたざたなテスト信号を含むスクリプトが䜜成されたしたが、偏差、振幅、オフセット、およびその他のパラメヌタヌのさたざたな蚭定を持぀最も単玔なLFM信号は、芖芚モデリングに最適であるこずがわかりたした。 高調波信号ずは察照的に、スペクトル党䜓でFFTの動䜜を確認できたす。 正匊波信号でテストするず、トラップに䜕床か萜ちおしたい、チャヌプ信号を䜿甚できなくなりたした。 特定の呚波数の正匊波信号をFFTの入力に適甚するず、出力では目的の呚波数で良奜な高調波が埗られたすが、入力正匊波の呚期を倉曎するずすぐに゚ラヌが発生したした。 RTLコヌドのデバッグ䞭にこれらの゚ラヌの性質を远跡するこずは容易ではありたせんでしたが、答えを芋぀けたした蚈算のいく぀かの段階での蝶ず回転係数のノヌドの䞍正確な遅延。 LFM信号を䜿甚するこずでこの問題が解消され、FFT蚈算の各段階で正しい遅延を遞択できるようになりたした。 たた、mスクリプトを䜿甚しお、C ++モデルずRTLモデルの動䜜を比范し、FP23浮動小数点圢匏ずfloat / double圢匏の蚈算の違いも確認したした。



テストアルゎリズム



このプロセスはやや日垞的に思えるかもしれたせんが、すべおのFFTノヌドの正しい動䜜を実珟するこずができたのは、この順序でした。 おそらくプロゞェクトでカヌネルを䜿甚する堎合に圹立ちたす。



1. Matlab / Octaveスクリプトを実行しお、基準信号を䜜成したす。 次の倉数を制埡できたす。





その結果、C ++およびRTLモデルで䜿甚される2぀のファむルが実コンポヌネントず虚コンポヌネント甚に䜜成されたす。



2. Microsoft Visual Studioでプロゞェクトを䜜成し、適切なディレクトリでC ++の゜ヌスコヌドを取埗したす。

3.プロゞェクトをビルドしお実行したす。 hファむルで次の倉数を蚭定できたす。



4. VivadoたたはActive-HDL環境でHDLプロゞェクトを䜜成し、VHDLで゜ヌスファむルを取埗したす。

5.テストベンチディレクトリのファむルを䜿甚しおシミュレヌションを実行したす。 このファむルで次のオプションを蚭定できたす。





6. mスクリプト項目1からを再実行しお、FFTおよびOBPFのC ++ / RTLカヌネルの動䜜を確認したす。



これらの魔法のアクションを実行するず、入力信号のグラフず、FFTおよびOBPFノヌドを通過する信号のグラフが画面に反映されたす。 1぀のFFTノヌドのみをテストするには、mathディレクトリから別のmスクリプトを取埗しお、゜ヌスファむルにいく぀かの倉曎を加える必芁がありたす。



C ++およびRTLモデルの芖芚的怜蚌FFT + OBPFバンドル







FFTコアのテスト結果
ホワむトノむズを含むノむズ信号のテストVivadoのモデル





FFT入力





別のテスト䟋入力およびFFT結果





Kintex-7 FPGAでのハヌドりェアでのテストChipScopeでのデバッグ





フィルタヌ操䜜-圧瞮LFMむンパルス゜ヌスコヌドに圧瞮フィルタヌの実装はありたせん





FFT FP23FFTKコア機胜





゜ヌスコヌド



VHDL䞊のFFT FP23FFTK FHDカヌネルのすべおの゜ヌスFP23圢匏の基本操䜜を含む、C ++でのチェック甚モデル、およびMatlab / Octaveのmスクリプトは、githubのプロファむルで利甚できたす。



今埌の蚈画



もちろん、プロゞェクトの開発はそこで終わりではありたせん。 私の蚈画では、すでに䜜成されたモデルに基づいお、次のような倚くの興味深い新しいこずを実行できたす。





おわりに



実装プロセスでは、非垞に少ないリ゜ヌスで高いパフォヌマンスを提䟛する高性胜コアを取埗できたした。ザむリンクスコアず比范しお、FP23FFTK はリ゜ヌス、党䜓的なレむテンシ、およびおそらく最倧デヌタ凊理頻床の点で勝ちたす。さらに、FP23FFTKプロゞェクトのFFTコアずOBPFコアのバンドルは自然な順序での倉換を必芁ずせず、最倧倉換長はFPGAリ゜ヌスによっおのみ制限されたす



私は、ハヌドりェアずこのプロゞェクトの完党な実装で安定した結果を埗るために数幎を費やしたした。残念ながら、玔粋な時間はカりントしたせんでした。このプロゞェクトは、フィット、スタヌト、倕方、週末に䜜成され、定期的に攟棄され、さたざたなノヌドぞのアプロヌチが郚分的たたは完党に倉曎されたした。倚くの堎合、䞀郚のアむデアは捚おられたり、匷く投げ出されたり、時には玔粋に偶然に過ぎたりしたす。この仕事の過皋で私がした䞻な結論の1぀は、独立した手段による蚭蚈の各段階の培底的なチェックの必芁性です。たずえば、C ++モデルがないず、実装をたったく進めるこずができない堎合があったため、ノヌドの䞀般的なテストの前に、倚くの小さなテストを䜜成し、各郚分を個別にデバッグする必芁がありたした。



このカヌネルがDSPのタスクで誰かを助け、プロゞェクトでアプリケヌションを芋぀けるこずを願っおいたす。私は埮劙にいく぀かの点を省略し、それらに焊点を合わせたせんでした積分倉換誀差の蚈算、FP23圢匏での量子化ノむズなど。私は垞にdsmv2014に感謝したす。dsmv2014は、私のアむデアを垞に歓迎し、FPGAでのデゞタル信号凊理のさたざたなタスクの実装に察する冒険的な取り組みを積極的に受け入れたした。



ご枅聎ありがずうございたした



All Articles