論理回路デザイン
ArchiTek home page
全体像(大きなパイプライン)

LoadData(パイプライン1/3)について

StoreData(パイプライン2/3)について

BfCalc(パイプライン3/3)について

SRAM制御について

回路デザイン > 設計例 [FFT] > 実装にあたって    次のページ(コーディング1)   このページのTOP ▲

[1]
大きなモジュールはフレームバッファなどを介して通信し合います。このような結合の強さでブロック分けすることが多いのではないでしょうか。疎結合になるほどブロックの独立性が高くなりますね。もちろん、長所・短所それぞれです。
[2]
LoadData, StoreDataと言うのはパイプラインの入出力として相応しくなさそうですか?

実は機能の高度化に伴って自動的にメモリ間のLoad/Storeが必要になることを見越た命名にしています。

メモリに対するアドレスリクエスト系を加えれば一丁上がりです。
[3]
ここはついうっかり忘れてしまいがちの箇所です。これをしないと、Stall発生時にデータの格納位置がずれます。

Stallの発生頻度が低いシステムでは、LSIになってようやく発見されたりしますのでご注意を。
[4]
Nが決め打ちなら領域制御はいたって簡単です。

例えば、Nが64ならPhaseは3回になります。これは常に排他的な関係なので、LoadDataは領域A、BfCalcは領域A→領域B、StoreDataは領域Bに予め決めておけます。

また、Nが256ならPhaseは4回になります。これは常に同じ関係なので、全てのユニットにおいて、最初は領域A、その次は領域B、その次は領域Aと言うように反転制御すればいいだけです。
[5]
サンプルコードには記述が分かりやすいように演算器を残します。また、論理合成においても係数が固定値入力になるので自然に回路縮小すると信じています。
[6]
Radix-8以上になると回転因子に1,j以外の数字が表れ、また対称性もくずれるので、複素数乗算に必要な乗算器と加算器が一気に増えます。残念ながら正確に値は算出していません。とりあえず、Radix-4はアルゴリズム的に絶妙なポジションにあると思います。
[7]
見にくくなるので、ここの機能はサンプルコードに含んでいません。実装は簡単なので試される方はどうぞ。ちなみにこの機能がなくても、2個までの連続したFFTは問題なく実行できます(衝突がないので)。