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をリソース共有するのに十分なスライスがありません。