FPGAファームウェア設計:大きすぎますか?


12

matlabからVHDLに移植する必要のある特に大きな信号処理トランスフォームがあります。間違いなく何らかのリソース共有が必要です。少し計算すると、次のことがわかりました。

  • 512 fftの64ポイント
  • 41210積和演算

最大のVirtex 6 FPGAには最大2000個のDSP48Eブロックがあることを考えると、リソースを複数回再利用するためにリソースを共有できることがわかります。実行時間は実際には問題ではなく、FPGAの観点からすると処理時間は比較的長くかかる場合があります。

リソースの使用状況を見ると、radix-2 liteアーキテクチャを使用すると、4dspブロック/ FFT操作= 2048 DSPブロック、合計で約43kになります。最大のVirtex FPGAには2kブロック、つまり20オペレーション/ muxがあります。

明らかに、このような大きなマルチプレクサをファブリックに含めると、スライスが占有されます。この制限の上限はどこにありますか?FPGAリソースを無限に共有することはできません。41210乗数は大きすぎますか?大きすぎるものを計算するにはどうすればよいですか?

他のリソース(スライス、Bramsなど)も調べました。Radix-2 Liteは、4 x 18kブラム/ fft = 2048ブラムも提供します。最大のザイリンクスFPGAには2128ブラムが含まれます。非常に境​​界線。デザインが大きすぎるのではないかと心配しています。


更新:

デザイン自体に関する詳細情報。詳細に説明することはできませんが、ここで説明します。

Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host 

                 ^------re-calculate initial conditions----|

出力データレートの仕様:「MATLABシミュレーションよりも高速」

賢明な計算、これは私がいる場所です:

FFTステージ:簡単。1/2/4/8 FFTを実装し、結果をSDRAMに保存して後でアクセスできます。比較的小さく、時間がかかっても問題ありません。radix-2 liteを使用すると、2つのDSP48Eと2つの18k BRAMS / FFTを取得できます。ストリーミングでは、6個のDSP48Eに0BRAMS / FFTが与えられます。どちらの場合も、64ポイントFFTはFPGAリソースの観点からは小さいです。

乗数:これは私の問題です。乗算入力は、ルックアップテーブルまたはFFTデータから取得されます。これは、実際には乗算加算の単なる全体です。最適化することはあまりありません。フィルターではありませんが、フィルターに似た特性があります。

FPGAでのリソースの共有を考慮すると、数学は次のようになります。1つのLUT-6を4方向マルチプレクサとして使用できます。N-way、Mビットmuxの式は次のとおりです。

N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).

実装のために数値を計算しても、良い結果は得られません。virtix-6ファミリの90%には、40k操作を実行するためにDSPをリソース共有するのに十分なスライスがありません。


リソース共有の最も効率的な形式は、メモリをアドレス指定してデータにアクセスできる部分的なシリアル化です。もちろん、この極端な場合、従来のストアドプログラムプロセッサに戻ります。ハードパフォーマンス要件の欠如は、おそらくコンピューティングクラウドで実行されるソフトウェア実装の柔軟性に向けられ始めます。
クリスストラットン

1
これは質問の一部ではありませんが、リソースの計算では、どのサイズのオペランドを指定していませんでした。512 FFT x 64ポイントx何ビット?FPGAでは、オペランドのサイズは完全にユーザー次第であるため、問題のサイズを判断する際に考慮しなければなりません。
ザフォトン

あなたが気付いたかどうかはわかりませんが、それらの大きなFPGAは非常に高価です。5,000ドルを超える場合もあります。おそらく、コストが問題にならない限り、それも考慮すべきです。
グスタボリトフスキー

1
残念ながら、これまでの回答で得られたさまざまな代替ソリューションの提案を超えて、私たちがあなたのためにもっともっとできるかどうかは疑問です。つまり、FFTコアを1つだけ作成し、512個の入力を順番に実行することができます。これは、かなり小さいFPGAにも適合することは明らかです。その間のどこかですべてを並行して行うことは、アプリケーションの速度とリソースの適切なバランスです...しかし、そのバランスがどこにあるべきかを言うのは誰にとっても難しいです。
ザフォトン

1
このための予算番号はありますか?Gustavoが指摘したように、ハイエンドFPGAは、それらを搭載するPCBの開発と同様に高価です。計算ハードウェアの量を2倍(または4倍に...)し、既存の実績のある(?)を引き続き使用するのに対し、Matlabコードはおそらく指定された速度仕様を満たすことができます。
光子

回答:


8

問題を見る別の方法があるのだろうか?

512個のFFT操作(それぞれ64ポイント)と42kのMAC操作の推定値を再生します...これは、アルゴリズムを1回通過するために必要なものだと思いますか?

これで、4つのDSPユニットを使用するFFTコアが見つかりました...しかし、FFTごとに何クロックサイクルかかりますか?(待ち時間ではなくスループット)?64、つまりポイントごとに1サイクルとしましょう。次に、これらの42kのMac操作を64サイクルで完了する必要があります。おそらく、各MACが42の操作を処理するサイクルあたり1kのMACです。

ここで、アルゴリズムの残りの部分をさらに詳しく見てみましょう。MACではなく、再利用可能な高レベルの操作(フィルタリング、相関など)を特定します。再利用可能性を備えたこれらの各操作のコアを構築し(異なる選択可能な係数セットを持つフィルターなど)、すぐに、比較的大きなコア間に必要なマルチプレクサーが比較的少ないことがわかります...

また、強度の低下は可能ですか?2次(およびそれ以上)を生成するためにループでの乗算が必要になる場合がありました。それらを展開すると、乗算せずに反復的に生成できました。FPGAで差分エンジンを構築した日に、私は非常に満足しました。

アプリケーションを知らない限り、これ以上詳細を説明することはできませんが、そのような分析のいくつかは、大幅な簡素化を可能にする可能性があります。

それはあなたが心の中で明確なプラットフォームを持っていないかのように聞こえるので、 - -また、あなたは...複数のFPGA間でパーティションを見てとることができるかどうかを検討し、このボードまたはこのいずれかの便利なプラットフォームで複数のFPGAを提供します。また、100個のSpartan-3デバイスを搭載したボードもあります...

(psソフトウェア担当者がこの他の質問を閉じたときに失望しました-私はそれが少なくともそこに適切であると思います)

編集:編集をやり直します-あなたはそこに着き始めていると思います。すべての乗算器入力がFFT出力、または「フィルターなし」係数のいずれかである場合、利用する必要がある規則性の種類が見え始めています。各乗算器への1つの入力はFFT出力に接続され、他の入力は係数ROM(BlockRamは定数配列として実装されます)に接続されます。

同じFFTユニットで異なるFFT操作をシーケンスすると、この乗算器を通過したFFT出力が自動的にシーケンスされます。正しい係数を他のMPY入力にシーケンシングすることは、「単なる」正しい時刻に正しいROMアドレスを整理することの問題です。MUXの大きな頭痛の種ではなく、組織の問題です。

パフォーマンスについて:Dave Tweedは不必要に悲観的だったと思います-FFTはn * log(n)演算を取りますが、O(n)バタフライユニットとO(logN)サイクル、またはO(logN)ユニットとO( n)サイクル、またはリソースと速度の目標に合わせた他の組み合わせ。そのような組み合わせの1つにより、FFT後の乗算構造が他のものよりもはるかに単純になる可能性があります。


単一のハードウェアバタフライで実装されたFFTは、NlogNクロックサイクルを完了する必要があります。512ポイントの場合、256 * 8の蝶、つまり2048クロックになります。つまり、41210(または32768?)MACは、同じ時間で完了するために8〜10個のハードウェア乗算器のみを必要とします。
デイブツイード

つまり、16〜20の乗数です。
デイブツイード

申し訳ありませんが、私はそれが逆になったことに気付きました。個々のFFTは64ポイントであるため、シングルバタフライの実装には32 * 5 = 160クロックが必要です。MACは、200〜250のハードウェア乗算器で実行できます。
デイブツイード

これが私を困らせるものです。ザイリンクスは、400kの積和演算(NlogN)を必要とする16k / 32k fftを実行できるコアをどのように設計できますか?方法がなければなりません!
スタンリ

@Dave:160サイクルではなく、160乗算を意味すると思いますか?それほど本質的にFFTで連載は何も...ありません
ブライアン・ドラモンド

2

この問題に厳しいリアルタイムの制約がなく、そうでないように思える場合-「より高速に」実行したいだけであれば、1つまたは複数のGPUのアクセラレーションに非常に適しているようです。これを比較的簡単な提案にするソフトウェアライブラリがいくつかあり、これはカスタムFPGAハードウェアに直接進むよりも1桁簡単です。

「GPU対応ライブラリ」または「GPUアクセラレーションライブラリ」の場合は、Googleで始めましょう。


興味深いことに、このプロジェクトについて聞いたとき、クライアントにGPUについて言及しましたが、彼は興味がありませんでした。
スタンリ

@StaceyAnneRieck:彼はなぜ言ったのですか?
デイブツイード

彼は、FPGAを使用する前にそれを調べただけで、どうして仕事が減ったように見えたのか、実際には理由を言っていませんでした。私は再びそれを持ち出さなければなりません。
スタンリ

@stanri:最終的にFPGA実装になったとしても、GPUはシステムアーキテクチャ全体を「ブレッドボード」するのに良い方法であるように思えます。アルゴリズムのある種の高レベルのデータフローグラフはありますか(共有できますか?)、関係するデータの量のアイデアを教えてください。このような質問に対する答えがなければ、非常に一般的なアドバイス以外のものを提供するのは非常に困難になります。
デイブツイード

実際には非常に単純なアルゴリズムであり、スケールが非常に複雑になっています。基本的には次のとおりです。初期条件-> 512 ffts並列-> 32768のFFT出力の乗算操作->初期条件の調整->すすぎと繰り返し
スタンリ

1

特定の種類の数学演算を大幅に高速化するために、専用のハードウェアまたはFPGA(またはCPLD)を使用することができます。数学演算を高速化するためにハードウェア(回路またはFPGAロジック)を設計しようとする際に留意すべき重要なことは、デバイスに出入りするデータの順序を把握することです。効率的なI / Oレイアウトを備えたデバイスは、後者のデバイスがより多くの回路を必要とする場合でも、非効率的なレイアウトを備えたデバイスよりもはるかに優れたパフォーマンスを提供します。

FFTのハードウェアアシスト設計を試していませんが、大規模な乗算操作(RSA暗号化に使用される可能性があります)のハードウェア支援について検討しました。多くのマイクロコントローラは、特別な高速乗算ハードウェアを備えたものであっても、多くのレジスタシャッフルを必要とするため、このような操作ではそれほど効率的ではありません。レジスタのスワッピングを最小限に抑えるように設計されたハードウェアは、ハードウェア自体がそれほど洗練されていなくても、多精度乗算演算ではるかに優れたパフォーマンスを達成できます。たとえば、一度に2ビットのパイプライン16xN乗算を実行できるハードウェア(multiplcandの下位2ビットをシフトし、結果の上位2ビットをシフトアウト)は、1サイクルで8x8乗算を実行できるハードウェアよりも優れたパフォーマンスを実現します。前者のほうが回路が少なくて済みます(パイプラインにより、クリティカルデータパスが短くなります)。重要なのは、必要なコードの「内部ループ」がどのように見えるかを把握し、簡単に解消できる非効率性があるかどうかを把握することです。


この形式の最適化に特に適しているのはどのような操作ですか?上記の質問を編集して、乗算演算の性質についてもう少し詳しく説明しました。ハードウェア支援設計は本当に面白いですね!
スタンリ

0

実行時間に問題はありませんか?

これは、実際にはソフトMCU、ハードMCUが統合されたFPGA、または別個のMCUデバイスを実際に実装し、すべての操作をシリアル化する必要がある状況のようです。

実行時間があると仮定すると、ソフトウェアでFFTを実行すると、デバッグがはるかに簡単になり、設計もはるかに簡単になります。


1
FPGAのソフトコアCPUで重い計算を行うのはばかげています。格納されたプログラムアーキテクチャ(考慮されるべきもの)で計算を行う場合、高性能/ドルのハードCPU上で、同等のファブよりも柔軟なロジックの速度のペナルティを支払わないため、世代のハードロジック。
クリスストラットン

@ChrisStratton-良い点。その効果に追加の注記を追加しました。
コナーウルフ

1
組み込みのハードCPUでさえ、ソフトウェアベースのタスクのための汎用の従来のプロセッサ/ GPUにろうそくを抱かず、大幅にコストがかかります。
クリスストラットン

@ChrisStratton-最も一般的な統合ハードCPUアーキテクチャはARMまたはPOWERのいずれかだと思いましたか?その場合、基本的に汎用CPUです。
コナーウルフ

1
FPGAに関する他の質問を考えると、FPGAボードの構築は学習経験になる可能性が高く、推定よりもかなり費用がかかります。この時点で行うべきことは、試用コンピューティングクラウド実行(最終的に購入したハードウェアになる可能性があります)からクライアントにハードな価格/パフォーマンスの数値を提供することであると思います。 。
クリスストラットン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.