DSPってなんだ

いまさらですが、DSP( Digital Signal Processor )ってなんでしょうか。ディジタル信号処理を行うプロセッサ(そのままやんけ)なのですが、では汎用マイクロプロセッサとはどう違うのでしょうか。古典的なDSPならともかく最近のDSPはかなりRISCマイコンを意識したつくりになっています。また、マイコンにも信号処理機能が取り入れられており、DSPとマイコンの境界は以前よりあいまいです。そこでDSPマイコンで行ったような比較論ではなく、機能面でDSPと呼ぶために必要だと思われる点を列挙してみました。

積和演算

なんと言ってもこれははずせません。SUM+=A*B を1命令で行えなければDSPは名乗れないでしょう。なお、ADSP-2116xの浮動小数点演算のように積和演算はないけれど加算と乗算を同時に行えるのでパイプライン実行できるといったアーキテクチャーもあります。

最近のアーキテクチャーではSIMDなどの並列演算機能を使って1サイクルで同時に実行できる積和演算数が増えています。サイクルあたりの16ビット積和演算を見てみると以下のようになります

1
ADSP-219x, DSP56000, SHARC (2106x)
2
Blackfin, SHARC (2116x), VelociTI
4
VelociTI.2
8
TigerSHARC

長いアキュームレーター

固定小数点積和演算の場合、アキュームレーターを長くして畳み込み演算時の桁落ちやあふれを回避します。ワード長x2.5のビット長が多いようです。たとえば

36ビット
TigerSHARC
40ビット
ADSP-219x, DSP56016, Blackfin, VerociTI (TMS32C6xxx)
56ビット
DSP5600x
80ビット
SHARC, TigerSHARC

などがあります。

循環アドレッシング

FIRフィルタをはじめとする畳み込み演算ではデータをずらしながらベクトルの内積を計算することが多くあります。このずらし処理のオーバーヘッドを除くため、循環アドレッシングが用意されます。

並列デュアルロード

畳み込みを高速に行うため、二つのオペランドフェッチを演算実行と並行して行います。

固定小数点演算

固定小数点演算を行えないようじゃぁ、DSPとしては認められませんね。浮動小数点DSPは別ですが。

ハードウェアループ

ハードウェアループを最初に実装したのはMotorolaでした。DSP56000がそれです。以後、ハードウェアループはDSPにとって必須機能になっています。

なお、VelociTI および TigerSHARC はハードウェアループを持っていません。その代わりにプリフェッチとVLIWの並列実行を使ってループオーバーヘッドを見えなくしています。

ビット反転アクセス

FFTアルゴリズムに特有のビット反転並び替えを行うために何らかのハードウェア対応があるのが普通です。FFTは「もういらない」と思うたびに顔を出す処理です。ビット反転には二つの方法があり、出力との組み合わせで4種類が存在します。

ビット反転命令
SHARC, VelociTI
DAGからビット反転出力
ADSP-219x, SHARC
逆方向キャリー命令
Blackfin
DAGから逆方向キャリー出力
DSP56000, TigerSHARC

飽和演算

必須とは言わないけど、これないとやだなぁ。

ビット操作・ビットフィールド操作

「ないとDSPとは呼ばん」とまでは言いませんが、是非ほしい機能です。ビット操作演算を持っていないプロセッサなどないと思いますが、ビットフィールド操作のあるなしで圧縮・伸張アルゴリズムや通信での性能が大幅に変わります。ADSP-219xをはじめとする設計の古いDSPにはビットフィールド操作演算がないものが多くあります。

まとめ

ざっと見てみると、DSPと呼ぶにはやはり1サイクルごとの連続積和演算、高速なFFT演算を抜くわけにはいきません。逆にこの二つを満足していれば、DSPと呼んでかまわないと思います。

⇒次は振幅変調

2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |