いまさらですが、DSP( Digital Signal Processor )ってなんでしょうか。ディジタル信号処理を行うプロセッサ(そのままやんけ)なのですが、では汎用マイクロプロセッサとはどう違うのでしょうか。古典的なDSPならともかく最近のDSPはかなりRISCマイコンを意識したつくりになっています。また、マイコンにも信号処理機能が取り入れられており、DSPとマイコンの境界は以前よりあいまいです。そこでDSPマイコンで行ったような比較論ではなく、機能面でDSPと呼ぶために必要だと思われる点を列挙してみました。
なんと言ってもこれははずせません。SUM+=A*B を1命令で行えなければDSPは名乗れないでしょう。なお、ADSP-2116xの浮動小数点演算のように積和演算はないけれど加算と乗算を同時に行えるのでパイプライン実行できるといったアーキテクチャーもあります。
最近のアーキテクチャーではSIMDなどの並列演算機能を使って1サイクルで同時に実行できる積和演算数が増えています。サイクルあたりの16ビット積和演算を見てみると以下のようになります
固定小数点積和演算の場合、アキュームレーターを長くして畳み込み演算時の桁落ちやあふれを回避します。ワード長x2.5のビット長が多いようです。たとえば
などがあります。
FIRフィルタをはじめとする畳み込み演算ではデータをずらしながらベクトルの内積を計算することが多くあります。このずらし処理のオーバーヘッドを除くため、循環アドレッシングが用意されます。
畳み込みを高速に行うため、二つのオペランドフェッチを演算実行と並行して行います。
固定小数点演算を行えないようじゃぁ、DSPとしては認められませんね。浮動小数点DSPは別ですが。
ハードウェアループを最初に実装したのはMotorolaでした。DSP56000がそれです。以後、ハードウェアループはDSPにとって必須機能になっています。
なお、VelociTI および TigerSHARC はハードウェアループを持っていません。その代わりにプリフェッチとVLIWの並列実行を使ってループオーバーヘッドを見えなくしています。
FFTアルゴリズムに特有のビット反転並び替えを行うために何らかのハードウェア対応があるのが普通です。FFTは「もういらない」と思うたびに顔を出す処理です。ビット反転には二つの方法があり、出力との組み合わせで4種類が存在します。
必須とは言わないけど、これないとやだなぁ。
「ないとDSPとは呼ばん」とまでは言いませんが、是非ほしい機能です。ビット操作演算を持っていないプロセッサなどないと思いますが、ビットフィールド操作のあるなしで圧縮・伸張アルゴリズムや通信での性能が大幅に変わります。ADSP-219xをはじめとする設計の古いDSPにはビットフィールド操作演算がないものが多くあります。
ざっと見てみると、DSPと呼ぶにはやはり1サイクルごとの連続積和演算、高速なFFT演算を抜くわけにはいきません。逆にこの二つを満足していれば、DSPと呼んでかまわないと思います。
⇒次は振幅変調