DSPと標準マイクロコントローラーの違いは何ですか?


84

DSPはデジタル信号処理用に最適化されていることを理解していますが、それがICを選択するタスクにどのように影響するかはわかりません。私がマイクロコントローラーで行うほとんどすべてのことは、デジタル信号の処理を伴います!

たとえば、人気のあるMicrochip dsPIC30または33 DSPとその他の16ビット製品であるPIC24汎用マイクロコントローラーを比較してみましょう。dsPICとPICは、同じメモリと速度を持つように構成でき、同様の周辺機器セット、同様のA / D機能、ピン数、消費電流などがあります。Digikeyのリストに表示される唯一の大きな違いは、発振器。価格(または他のフィールド)を見ても違いはわかりません。

さまざまなプロトコル(I2C、SPIなど)を使用していくつかの外部センサーを操作し、A / D変換を行い、シリアルフラッシュにデータを保存し、ボタンに応答して、キャラクターにデータをプッシュする場合LCDとFT232(かなり汎用的な組み込みシステム)で、どのチップを使用すればよいですか?DSPがPICに遅れをとるとは思われず、この神秘的な「DSPエンジン」を提供します。私のコードは常に数学を行い、時々浮動小数点または小数が必要ですが、DSPを使用することで利益が得られるかどうかはわかりません。

別のベンダーのDSPとマイクロコントローラーのより一般的な比較も同様に役立ちます。これらを議論の出発点として使用しています。

回答:


64

正直に言うと、この2つの間の境界線はほとんどなくなっており、両方(AD Blackfinなど)に分類できるプロセッサーがあります。

一般的に言えば:

マイクロコントローラーは、割り込みサブシステムを備えた整数演算プロセッサーです。ハードウェア乗算ユニットを使用する場合と使用しない場合などがあります。ポイントは、単純な数学用に設計されており、主に他のデバイスを制御するためです。

DSPは、ストリーミング信号処理用に最適化されたプロセッサです。多くの場合、単一の命令での積和などの一般的なタスクを高速化する特別な命令があります。多くの場合、他のベクトルまたはSIMD命令もあります。歴史的には、割り込みベースのシステムではなく、目的に合わせて最適化された非標準のメモリシステムで動作していたため、プログラミングが難しくなりました。それらは通常、データストリームを処理する1つの大きなループで動作するように設計されています。DSPは、整数、固定小数点、または浮動小数点プロセッサとして設計できます。

歴史的に、オーディオストリーム、ビデオストリームの処理、高速モーター制御、高速でのデータストリームの処理を必要とするものはすべて、DSPに依存していました。

一部のボタンを制御したり、温度を測定したり、文字LCDを実行したり、物を処理している他のICを制御したい場合は、マイクロコントローラーを使用します。

現在、ほとんどの場合、DSPのような命令が組み込まれた、またはストリーミングデータやその他のDSP操作を処理するオンチップコプロセッサを備えた汎用マイクロコントローラタイプのプロセッサがあります。特定の業界を除いて、純粋なDSPが使用されることはもうありません。

プロセッサ市場は、以前よりはるかに広く、ぼやけています。例えば、ARM cortex-A8 SoCをマイクロコントローラーとはほとんど考えていませんが、特にPoPパッケージでは、おそらく標準定義に適合しています。

編集:アプリケーションプロセッサの時代でさえDSPをいつ/どこで使用したかを説明するために少し追加すると思いました。

私が設計した最近の製品は、「ゾーン」ごとに入力のXチャンネルと出力のXチャンネルでオーディオ処理を行っていました。製品の使用目的は、何もしないで何年もそこに座って、何年もオーディオチャンネルを処理することを意味します。オーディオ処理は、さまざまな音響フィルターと機能で構成されていました。システムはまた、「ホットプラグ可能」であり、いくつかの独立した「ゾーン」をすべて1つのボックスに追加できます。合計3つのPCBデザイン(メインボード、バックプレーン、プラグインモジュール)で、バックプレーンは4つのプラグインモジュールをサポートしていました。ソロをやっていたので、とても楽しいプロジェクトでした。システム設計、回路図、PCBレイアウト、ファームウェアをやらなければなりませんでした。

単一のかさばるARMコアですべてを実行できたので、ゾーンごとに24ビットの固定小数点数で約50MIPSのDSPのみが必要でした。しかし、私はこのシステムが非常に長い間動作することを知っていたため、クリックやポップなどを絶対にしないことが重要であることを知っていました。ゾーンごとに低電力DSPと、システム管理の役割を果たした単一のPICマイクロコントローラーで実装することにしました。このように、uC機能の1つがクラッシュした場合(多分そのイーサネットポートに対するDDOS攻撃)でも、DSPは喜んで離れてしまい、誰も知らないでしょう。

そのため、マイクロコントローラーは2行の文字LCD、いくつかのボタン、温度監視、ファン制御(各ボードにはかなり高出力のオーディオアンプもありました)を実行する役割を果たし、イーサネット経由でAJAXスタイルのWebページを提供しました。また、シリアル接続を介してDSPを管理しました。

そのため、単一のARMコアを使用してすべてを行うことができた日でさえ、専用の信号処理ICが設計に必要な状況でした。

DSPに出会った他の領域:

*ハイエンドオーディオ-非常にハイエンドのレシーバーとコンサート品質のミキシングおよび処理装置

*レーダー処理-ローエンドアプリでもこれにARMコアを使用しました。

*ソナー処理

*リアルタイムコンピュータビジョン

ほとんどの場合、オーディオ/ビデオ/同様のスペースのローエンドとミッドエンドは、さまざまなアプリケーションの汎用CPUとco-procオフロードエンジンを組み合わせたアプリケーションプロセッサに引き継がれています。


1
おそらく別の追加。約80のI / Oラインと12のアナログ入力を備えたアプリケーションでは、I / Oストリームを処理するためにリンクされたFPGAを備えた単一のマイクロコントローラーを使用しています。このようなソリューションはより一般的になっています。このシステムは、embeddedarm.com / products / board-detail.php?product = ts-7800を使用して、短い市場投入までの時間を短縮するために開発を迅速に行います。このような製品は、より低い販売価格/期待値を持つアプリケーションには適さない可能性があります。)– Wouter Simons 33秒前
Wouter Simons

すべてのマイクロコントローラーに割り込みがあるわけではありません。ミッションクリティカルなアプリケーションでは使用されません。適切なケース:戦闘機で使用されるViperコントローラー。
-stevenvh

15

多くのデジタルシグナルプロセッサには、「通常の」プロセッサにはないさまざまな機能が含まれています。

  1. オペランドのペアごとに1サイクルのレートで、RAMから両方のオペランドをフェッチして、積和を実行する機能。
  2. ポインタをラップするために手動コードを使用せずにバッファを繰り返し使用できるように、「モジュロ」または「ラッピング」アドレッシングの何らかの形式を実行する機能。たとえば、3205xには「バッファ開始」および「バッファ終了」レジスタがあります。コードが「バッファスタート」を指すポインタレジスタをインクリメントまたはデクリメントしようとすると、プロセッサは「バッファエンド」でポインタをロードします。3205xには、逆キャリーモードもあります。このモードでは、アドレスの追加がMSBをLSBに伝達します。これにより、Nが2の累乗である場合、モジュロNアドレッシングが可能になりますが、データはごちゃ混ぜに保存されます。
  3. 命令を再フェッチすることなく「n」回実行するように指定する機能。8088などの一部のプロセッサでは、いくつかの命令でこれが含まれていますが、多くのDSPでは多くの命令でこれが許可されています。
  4. 分岐を必要とせずに、コードブロックを最大 'n'回繰り返し実行するように指定する機能。各コードフェッチの前に、プログラムカウンターが「ループエンド」レジスタに対してチェックされます。一致し、ループが有効になっている場合、プログラムカウンターは 'loop-start'で再読み込みされます(それ以外の場合は増加します)。'loop-count'がゼロの場合、ループは無効になります。それ以外の場合、「ループカウント」は減少します。

多くのDSPには、積和演算の両方のオペランドを同時にフェッチできるようにするための個別のバスがあることに注意してください。それを行うことができる非DSPを見たことはありません。チップがDSPであるために「不足」しなければならない機能については知りませんが、ダブルオペランドフェッチを可能にするために必要な追加のシリコンスペースは、他のより一般的に有用な目的には使用されないシリコンスペースです。


私は積和に精通していましたが、モジュロアドレッシングと繰り返しフェッチなしのコード実行は私がよく知らなかった機能でした。
ケビンフェルメール

1
たくさんのすばらしい答えがありますが、古い質問と新しい質問の両方に取り組むことはクールです。詐欺検出アルゴリズムと日次担当者キャップがなければ、すべての回答に賛成します。ただし、1日に数回期待してください!すばらしい仕事を続けてください!
ケビンフェルメール

@reemrevnivek:私の回答がお役に立ててうれしいです。先ほど述べたように、ダブルフェッチ積和の設計は、非DSPプロセッサーでは見たことのない機能です。ARMは、積和とモジュロアドレッシング(256バイトのテーブルに対して(R0 +(R1 >> 24)などの実効アドレスを使用)を必要とする操作で優れた仕事をしますが、典型的なARMは、4つの命令を必要としますDSPは1サイクルで実行します。
スーパーキャット

MACは、3つのオペランド命令a <-a + b * cであり、2ではありません。
トリメジストス

@Trismegistos:N項目の繰り返しMAC操作には、合計2N + 1のオペランドが含まれます。各アイテムの前にアキュムレーターを取得して、後で保存する必要はありません。非反復の積和演算を行うプロセッサには3つのオペランドがありますが、repeat-MACはサイクルごとに2つのオペランドのみをフェッチします。
supercat

13

他の人が言及しなかったことの1つは、数値オーバーフローの動作です。通常のプロセッサでは、これは通常、最大値から最小値にラップアラウンドします。

DSPを使用する場合、多くの場合、代わりに飽和を使用するオプションが少なくとも1つあります。つまり、オーバーフロー時に値は最大値のままになるため、歪みが少なくなり、アナログ回路の動作をよりよく模倣します。


9

DSPと標準uControllerの最大の違いは、uCにはないDSPの積和機能(MAC)です。これは、FFTなどの真のデジタル信号処理数学を実行する場合に役立ちます(1つの例)。標準のマイクロコントローラーでFFTを実行すると、DSPのMACでFFTを実行するのに比べて時間がかかります。

I2Cおよびシリアル信号の処理は、DSPでの波形の処理と同じではありません。シリアル信号は単なるビットバンギングなので、まったく異なる種類の処理が行われます。

DSPフォーラムでも同様の議論があります:DSP vs.マイクロプロセッサ


DSPブロック図にアキュムレータが表示されましたが、それが何をするのかわかりませんでした。知っておきたい!I2Cとシリアルは、ASCIIデータを送信するときの波形の処理とは異なりますが、一部の周辺機器(シリアルアクセス加速度計、外部A / D、GPSなど)は、データストリームの波形をエンコードします。何とかDSPに!
ケビンフェルメール

3
ほとんどの信号処理は、数学的には行列および/またはベクトルの乗算で構成されます。これを行うプロセスは、多くの答え= a b + c d + e * fタイプの計算になります。MACのないCPUでは多くの指示が必要ですが、MACの場合は何倍も高速になります。
マーク

1
このコメントは間違っています。すべてではありませんが、多くのMCUにはMAC機能を備えたハードウェア乗算器が含まれています。これは、DSPとMCUの区別とは関係ありません。はい、DSPはMCUよりもMACを持っている可能性が高いですが、この小さな機能よりもはるかに基本的な違いがあります。

2
時計を15年前に戻すと、この機能を備えたMCUはほとんどありません。DSPからMACまたは同等の機能を使用する場合、DSPがあると正直に言うことができますか?持っていなかったり、近くにあるものがなければ、絶対に買いたくないでしょう。ハーバードとフォンノイマン、およびメモリアクセスを使用すると、アーキテクチャに違いがありますが、詳細な説明を長くすることなく簡単な答えを出しました。「Flat out WRONG」と言って、あなたのコメントがきつすぎると思います。あなたがカバーする必要があると思う深さについて議論する答えを投稿することを歓迎します。
ジェイアトキンソン

@adrian:あなたのコメントは間違っています。MCUにMAC機能がある場合、DSPとして販売されます。
Johan.A

5

DSPを際立たせていたのは、算術演算、特に乗算の最適化でしたが、最近では乗算と除算の命令がマイクロコントローラーに与えられることは珍しくありません。マイクロチップには整数ユニットが含まれる可能性が高いのに対し、DSPチップの一部が固定小数点演算のハードウェアサポートを備えている限り(たとえば、TI TMS320s 'IQ' lib)、DSPチップで信号処理を行うにはまだエッジがあります。

個人的に、設計のために2つを選択することに直面したとき、アプリケーションがモード変更ロジックをたまにしか持たない反復計算を要求したか、必要に応じて短い計算シーケンスのみを実行する必要があるかを分類しようと思います。前者はDSPで、後者はマイクロです。

そしてもちろん、OMAPのように両方を備えた楽しいものがあります。= P


1
意図の違い(2番目の段落)を理解していると思いますが、マイクロにDSPのような数学能力がなく、DSPにマイクロのような周辺機能セットがある場合、なぜそうするのかわかりません。OPで述べたように、dsPIC33とPIC24は、ほぼ同じ機能セットと同じ価格を持つことができます。間違っている場合は修正しますが、DSPには反復処理機能がありますが、PIC24(または私が見た他のマイクロ)がデュアルのようなモード変更のDSPよりも有利であるとは思いませんパイプラインまたは高速のフラッシュ。
ケビンフェルメール

@reemrevnivek:あなたが言っているのは、なぜ単にDSPを選ぶだけではないのですか?
ジャストジェフ

@JustJeff:はい、それはまさに私が言っていることです。
ケビンフェルメール

1

MAC命令が持つことのできるもう1つの可能な機能は、被乗数を指すレジスタの自動インクリメントです。(16ビット固定小数点)Clarkspurコアを使用するZilog DSPをプログラムしました。3つのバスを備えたハーバードアーキテクチャのバリエーションで、命令メモリ、データRAMバンク1、データRAMバンク2の3つのメモリ領域に同時にアクセスできます。一方のRAMバンクにデータストリーム、もう一方に係数があれば、 MAC /ポインタインクリメント操作ごとに1つのシングルサイクル命令でFIRフィルタを実行します。Cでは、単一の命令は次のようになります。

アキュムレータ+ = rambank1 [r1 ++] * rambank2 [r2 ++];

そしてもちろん、この指示は係数ごとに繰り返されます。

また、以前に指摘されていませんが、DSP(少なくとも私が使用した古いもの)は、一般にRISCアーキテクチャであり、1サイクル(または同じサイクル数)で実行される多くまたはほとんどの命令で設計されています。これにより、確定的な割り込み応答(アクティブになる割り込みラインと実行されるISRの最初の命令との間の固定クロックカウント)をプログラムできますが、他のほとんどのプロセッサは、何に応じてさまざまなクロックサイクルで割り込みに応答します割り込みが発生するマルチサイクル命令をポイントします。実行時間が固定されているため、繰り返し出力での複数時間のジッターがなくなります。

OPのMicrochip PicとDSPicの比較では、DSPicが導入されたとき、それは主にMAC命令といくつかの追加機能を備えたPicであり、信号処理機能を実行するマイクロコントローラを確実に高速化できることを理解していましたが、 (説明されている他の機能が不足しているため)、用語をDSPと呼んでいる可能性があります。MSP430は、ハードウェアMACを備えたバージョンでも利用できますが、DSPを呼び出す人はいません。

10年から15年前、Intelのメインストリームプロセッサが「ネイティブ」信号処理を行うためのMACおよび同様の命令を追加していたことを思い出しました(専用のDSPプロセッサを備えた拡張カードではなく、 56kのダイヤルアップPCバスモデムは、A / DおよびD / Aコンバーターであり、モデム信号のエンコードおよびデコード機能を行うためにメインプロセッサに依存していたため、その場でより効率的なプロセッサの使用が求められていました。ビデオの編集/エンコード/デコード、オーディオの録音/制作などのメディアの使用は、DSPタイプの命令によって大幅に高速化されます。


太陽の下で新しいものは何もありません。<g>Cの初期の頃、増分演算子と減分演算子は、PDPの単一のハードウェア命令に直接変換されるように設計されていました。
ピートベッカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.