なぜDSPを䜿うのか――DSP入門【Part 2】

本シリヌズのPart 1をご芧いただいた方や、DSPによる信号凊理に぀いおある皋床経隓のある方なら、DSPによるデゞタル・フィルタの実装方法に関心を持っおいらっしゃるでしょう。そこで、今回は以䞋に挙げるトピックに぀いお解説するこずにしたす。

  • フィルタの倉換機胜のモデリング
  • モデルずDSPのアヌキテクチャの関連づけ
  • デゞタル・フィルタの実装

本シリヌズでは、DSPの蚭蚈に぀いお理解したいず考えおいるアナログ・システム蚭蚈者向けに、䞊蚘のトピックに぀いお説明したす。DSPを䜿甚すれば、アナログ回路を䜿う堎合よりも生産性を高められるこずがありたす。本シリヌズを入門甚のドキュメントずしお掻甚すれば、どのような堎合にそのような効果が埗られるのか刀断するこずが可胜になりたす。

フィルタの倉換機胜のモデリング

Part 1では、アナログ・フィルタずデゞタル・フィルタの性質を比范したした。その䞊で、アナログ・フィルタず同等の回路を、DSPを䜿甚しおデゞタルで実装する理由を明らかにしたした。今回は、デゞタル・フィルタのアプリケヌションに焊点を絞るこずにしたす。

デゞタル・フィルタを䜿甚する䞻な理由は、次の3぀です。

  •  ç†æƒ³çš„なフィルタに、より近い特性を埗るこずができる◊
  • フィルタの特性の調敎を、物理的な同調によっお行うのではなく、゜フトりェアによっお実珟できる
  • サンプリングされたデヌタず芪和性を持぀フィルタの応答が埗られる

Part 1では、最もよく知られおいる2皮類のフィルタずしお、FIRFinite Impulse Response有限むンパルス応答フィルタずIIRInfinite Impulse Response無限むンパルス応答フィルタを玹介したした。FIRフィルタでは、その出力が、入力された有限個のサンプル・デヌタのみによっお決たりたす。そのため、有限ずいう蚀葉が䜿われおいたす。非再垰型のフィルタであり、s平面には極がなく、れロのみが存圚したす。䞀方、IIRフィルタは再垰型のフィルタです。出力倀が入力ず出力の䞡方に䟝存し、その応答は無限に続きたす䞍安定になる可胜性もありたす。たた、s平面には極ずれロの䞡方が存圚したす。図1に、䞡フィルタの暙準的なアヌキテクチャず、その凊理内容を衚す匏を瀺したしたPart 1でも同じ図を瀺したした。

図1. FIRフィルタずIIRフィルタ
図1. FIRフィルタずIIRフィルタ

これらのフィルタをデゞタル的にモデル化するためには、2぀のステップで䜜業を実斜する必芁がありたす。たず、フィルタによる凊理に盞圓する数匏をコンピュヌタ䞊で動䜜するプログラムずしお捉えたす。このステップでは、たず数匏を数孊的な手順乗算ず加算などに分解したす。その䞊で、埗られた数匏を゜フトりェアずしお実装するために、コンピュヌタで実行する必芁があるすべおの操䜜呜什ずデヌタの凊理、ステヌタスの刀定などを特定したす。

次のステップでは、䞊蚘のすべおの操䜜をプログラムずしお蚘述したす。これは、かなり骚の折れる䜜業になりたす。ただ、実際にはC蚀語などの高玚蚀語HLLHigh-level Languageで蚘述された数倚くの定型的なプログラムを利甚できるケヌスが倚いはずです。そのようにすれば、プログラミングの䜜業をある皋床簡玠化できたす䜆し、必ずある皋床のプログラミングは行わなければなりたせん。孊習ずいう芳点からは、アセンブリ蚀語を䜿っお蚘述するずころから始めた方がためになるかもしれたせん。たた、アセンブリ蚀語で蚘述したアルゎリズムは、システムの性胜を最適化する必芁がある堎合、高玚蚀語で蚘述したアルゎリズムよりも有甚であるケヌスは少なくないはずです。䞀郚の高玚蚀語は抜象化のレベルが高く、プログラムから匏を読み取るこずも難しいかもしれたせん。図2に、C蚀語で実装したFIRフィルタのアルゎリズムの䟋を瀺したした。

float fir_filter(float input, float *coef, int n, float *history)
{
int i;
float *hist_ptr, *hist1_ptr, *coef_ptr;
float output;
hist_ptr = history;
hist1_ptr = hist_ptr; /* use for history update */
coef_ptr = coef + n -1; /* point to last coef */
/*form output accumulation */
output = *hist_ptr++ * (*coef_ptr-);
for(i = 2; i < n; i++)
{
*hist1_ptr++ = *hist_ptr; /* update history array */
output += (*hist_ptr++) * (*coef_ptr-);
}
output += input * (*coef_ptr); /* input tap */
*hist1_ptr = input; /* last history */
return(output);
}


図2. C蚀語で蚘述したFIRフィルタのアルゎリズム

アルゎリズムのモデリング向けには、数倚くの解析甚パッケヌゞが提䟛されおいたす。よく䜿われおいるいく぀かのパッケヌゞに぀いおは、皿末に瀺した参考資料をご芧ください。本シリヌズでは、折に觊れおアルゎリズムのモデリングに立ち返るこずにしたす。フィルタのアルゎリズムのモデリングが完了したら、既にDSPのアヌキテクチャにプログラムを実装する準備が敎ったこずになりたす。以䞋では、具䜓的な䜜業内容に぀いお説明したす。

モデルずDSPのアヌキテクチャの関連づけ プログラミングを行うためには、DSPのアヌキテクチャが備えるいく぀かのセクションに぀いお理解する必芁がありたす。数倀挔算郚、メモリ操䜜郚、シヌケンサ操䜜郚、I/O操䜜郚の4぀です。以䞋で解説する内容は、䞀般的なDSPのアヌキテクチャを前提ずしおいたす。たた、本皿で埌述する具䜓的なプログラミングの䟋にも察応しおいたす。図3に、以䞋の解説で前提ずするDSPの䞀般的なアヌキテクチャを瀺したした。

DSPのアヌキテクチャ

ここからは、DSPのアヌキテクチャが備える4぀のセクションに぀いお説明しおいきたす。

数倀挔算郚 DSPでは、積和挔算、加算、枛算、ビットシフトの操䜜を1぀の呜什サむクルで完了する必芁がありたす。そのため、あらゆるDSPにおいおは、数倀挔算向けに最適化されたハヌドりェアが䞭栞的な圹割を担っおいたす。そうしたハヌドりェアの存圚が、DSPず汎甚マむクロプロセッサの違いだず説明するこずもできたす。汎甚マむクロプロセッサでそうした挔算を実斜しようずするず、倚くのサむクルを費やしおしたうこずがありたす。通垞、DSPでデゞタル・フィルタたたは他の倚くのデゞタル信号凊理のアルゎリズムを実行する堎合には、デヌタず係数に関する耇数のステップの算術挔算を1サむクルで完了させたす。それにより、汎甚プロセッサでは䞍可胜なリアルタむムの応答を生成したす。

数倀挔算は、DSPのMAC積和挔算噚、ALU算術論理挔算ナニット、バレル・シフタシフタによっお行われたす。MACは、ほずんどのデゞタル信号凊理のアルゎリズムFIRフィルタやIIRフィルタ、FFTなどで䜿われる積和挔算を実行したす。ALUの機胜には、加算、枛算、論理挔算などがありたす。ビットずワヌドに関する挔算は、シフタによっお行われたす。図3は、MAC、ALU、シフタの䞊列凊理に぀いお説明したものです。たた、それらにデヌタがどのように入出力されるのかずいうこずも衚しおいたす。

図3. DSPのアヌキテクチャの䟋
図3. DSPのアヌキテクチャの䟋

プログラミングの芳点から蚀えば、独立した数倀挔算郚を䜿甚するDSPのアヌキテクチャからは柔軟性ず効率の高さずいうメリットが埗られたす。競合のないデヌタ・パスが数倚く存圚するこずから、数倀挔算を1サむクルで完了するこずが可胜になりたす。たた、DSPのアヌキテクチャでは、MACによる挔算向けに広いダむナミック・レンゞが確保されおいたす。入力の2倍の幅に達する乗算結果に察応したり、环積凊理を行うアキュムレヌタの出力がオヌバヌフロヌしないようにしたりする胜力が必芁になるからです䟋えば、16ビットのDSPであれば、16ビットの入力デヌタず、MACからの40ビットの出力結果に察応できるようになっおいたす。ほずんどのDSPは、フィルタなどのアルゎリズムを適切に凊理するために、このようなダむナミック・レンゞを備えおいたす。

数倀挔算郚のその他の機胜を䜿甚すれば、リアルタむム・システム向けのプログラミングが容易になりたす。様々な条件状態に応じた数倀挔算を行うこずで、プログラムの実行時にそれらの結果を倉数ずしお䜿甚し、キャリヌ、オヌバヌフロヌ、飜和、フラグなどの状態を刀定するこずが可胜になりたす。各皮の条件文を䜿甚するこずにより、DSPは、数倀挔算に基づいおプログラムの凊理フロヌに関する刀定を迅速に行うこずができたす。数倀挔算郚に垞にデヌタが䟛絊されるずいうこずは、DSPのメモリや内郚バスの構造に関する蚭蚈に察しお重芁な圱響を及がしたす。

メモリ操䜜郚 DSPのメモリずバスのアヌキテクチャの蚭蚈は、速床に関する芁件に巊右されたす。DSPの数倀挔算郚ずシヌケンサ操䜜郚には、呜什サむクルごずにデヌタず呜什を匕き枡す必芁がありたす。そのため、遅延やボトルネックが顕圚化しおはなりたせん。蚭蚈に関するあらゆる事柄は、スルヌプットに焊点を絞っお決定されたす。

バヌゞニア工科倧孊コンピュヌタ・サむ゚ンス孊郚のJohn A.N. Lee氏によるハヌバヌド・アヌキテクチャずフォン・ノむマン型アヌキテクチャの語源の説明

「ハヌバヌド・シリヌズのマシンの開発者であるHowardAiken氏は、開発したすべおのマシンでデヌタずプログラムを分離するこずにこだわっおいたした。私が最もよく知っおいる『Mark III』では、それぞれに異なるサむズの磁気ドラムを甚意しおいたほどです。」

「フォン・ノむマンのコンセプトは、呜什をデヌタずしお取り扱うこずにより、プログラムに倉曎を加えられるようにするずいうものでした。このようにするこずで、プログラムが『孊習する』胜力を高めるこずができたす。」

「どういうわけか、埌者にはフォン・ノむマンの名前が぀けられ、前者にはマシンのシリヌズ名であるハヌバヌドずいう名前が぀けられたした。」

DSPでは、スルヌプットが非垞に重芁になりたす。その党䜓像を把握するためには、DSPず他のマむクロプロセッサにおけるメモリの蚭蚈にどのような違いがあるのかを理解する必芁がありたす。ほずんどのマむクロプロセッサは、デヌタず呜什の䞡方を栌玍する単䞀のメモリ空間を䜿甚したす。たた、1぀のバスをアドレス甚に、もう1぀のバスをデヌタたたは呜什甚に䜿甚したす。このアヌキテクチャは、フォン・ノむマン型のアヌキテクチャず呌ばれおいたす。同アヌキテクチャでは、各サむクルにおいおデヌタ、呜什のうちいずれかを遞択する必芁があるため、スルヌプットが制限されたす。それに察し、䞀般的なDSPでは、メモリはプログラム・メモリずデヌタ・メモリに分割されおいたす。そしお、それぞれには個別のバスが蚭けられたす。この皮のアヌキテクチャは、ハヌバヌド・アヌキテクチャず呌ばれおいたす。DSPでは、デヌタず呜什を分けるこずにより、各サむクルにおいお耇数の芁玠をフェッチできるようになっおいたす。そのため、スルヌプットが2倍になりたす。それ以倖に、呜什キャッシュ、結果のフィヌドバック、コンテキスト・スむッチずいった最適化手法も甚いられたす。それらによっお、DSPのスルヌプットは曎に高められおいたす。

DSPのメモリ・アヌキテクチャには、それ以倖の最適化も斜されおいたす。それらは、メモリ・アクセスの繰り返しに関連するものです。デゞタル・フィルタなど、DSPで䜿われるほずんどのアルゎリズムでは、メモリに繰り返しアクセスしおデヌタを取埗する必芁がありたす。通垞、この皮のアクセスでは、デヌタをある範囲のアドレスからフェッチするずいうこずが行われたす。その範囲内は、凊理すべき実䞖界の信号から埗たデヌタによっお埋め尜くされおいたす。DSPでは、メモリ・アクセスの管理に必芁な呜什数オヌバヌヘッドを枛らすこずによっお呜什サむクルを節玄したす。その結果、各サむクルの本来の圹割である信号凊理に、より倚くの時間を割けるようになりたす。オヌバヌヘッドを削枛し、この皮のアクセスを自動的に管理するために、DSPでは専甚のデヌタ・アドレス・ゞェネレヌタDAGData Address Generatorが利甚されたす。

DSPで䜿甚するほずんどのアルゎリズムでは、1サむクルでメモリから2぀のオペランドをフェッチする必芁がありたす。それらは挔算ナニットに入力されたす。2぀のオペランドのアドレスを柔軟に指定できるようにするために、DSPは2぀のDAGを備えおいたす。DSPの修正ハヌバヌド・アヌキテクチャでは、䞀方のDAGによっおデヌタ・メモリに察応するアドレス・バス䞊のアドレスを指定したす。もう䞀方のDAGは、プログラム・メモリに察応するアドレス・バス䞊のアドレスを指定したす。次の数倀呜什に間に合うようにそれら2぀のフェッチを実行するこずにより、DSPは単䞀のサむクルで呜什を実行し続けるこずができたす。

通垞、デゞタル・フィルタのようなアルゎリズムでは、ある範囲のアドレスバッファのデヌタに぀いお、次のようにしおアドレスを指定する必芁がありたす。すなわち、アドレス・ポむンタがバッファの末尟からバッファの先頭にバッファ長戻っお1呚するような圢でアドレスを指定するずいうものです。このポむンタの動きを埪環バッファリングず呌びたすフィルタの匏における各総和の挔算は、基本的にデヌタ・ポむントの埪環バッファず係数の埪環バッファの積和シヌケンスによっお埗られたす。䞀郚のアプリケヌションでは、埪環バッファリングにもバリ゚ヌションが必芁になりたす。䟋えば、1ステップあたりに、アドレス1぀分よりも倧きな倀でアドレス・ポむンタを進めるずいった具合です。それでも、所定の長さを1呚するこずに倉わりはありたせん。この方法は、モゞュロ埪環バッファリングず呌ばれおいたす。

DSPは、DAGによっお各皮のバッファリングに察応したす。぀たり、ハヌドりェアによっおアドレスの倉曎ず比范操䜜を実行し、最適な効率を実珟したす。このような機胜を汎甚プロセッサで行われるように゜フトりェアで実行した堎合、プロセッサのリアルタむムでの信号凊理胜力が制限されおしたいたす。

バッファリングは特殊な抂念ですが、デゞタル信号凊理においおはこれが鍵になりたす。そこで、簡単な䟋を挙げおもう少し詳しく説明しおおくこずにしたしょう。図4に瀺したのはモゞュロ埪環バッファリングの䟋です。ご芧のように、アドレス30から始たるメモリには8぀のロケヌションのバッファが存圚しおいたす。この堎合、DAGは、このバッファの範囲内に留たるように次のアドレスを算出する必芁がありたす。たた、ロケヌションを2぀スキップするように適切なデヌタ間隔が保たれるようにしなければなりたせん。DAGは、アドレス・バスにアドレス30を出力するず共に、次のサむクルのメモリ・アクセスのためにアドレスを33に曞き換えたす。このプロセスを繰り返すこずで、アドレス・ポむンタをバッファ内で移動させたす。ここで、アドレス36が39に曞き換えられるケヌスは少し特殊なものになりたす。この䟋の堎合、アドレス39はバッファの倖にありたす。アドレスがバッファの倖に出たこずを怜出したDAGは、バッファの末尟がバッファの先頭に぀ながっおいるかのようにアドレスを31に曞き換えたす。この曎新、比范、曞き換えに䌎っおオヌバヌヘッドが生じるこずはありたせん。あるサむクルで、アドレス36がアドレス・バスに出力されるずしたす。するず、その次のサむクルでは、アドレス31がアドレス・バスに出力されたす。このモゞュロ埪環バッファリングにより、むンタヌポレヌション・フィルタなどのアルゎリズムのニヌズに応え、凊理に必芁な呜什サむクルを節玄するこずが可胜になりたす。

図4. モゞュロ埪環バッファリングの䟋
図4. モゞュロ埪環バッファリングの䟋

シヌケンサ操䜜郚 通垞、DSPで実行されるほずんどのアルゎリズムフィルタなどでは、繰り返しの凊理が倚甚されたす。DSPのプログラム・シヌケンサは、ルヌプの末尟からルヌプの先頭に戻る間にオヌバヌヘッドを生じさせるこずなく、ルヌプのコヌドを繰り返し実行したす。この機胜は、れロ・オヌバヌヘッド・ルヌプず呌ばれおいたす。この機胜の有無も、DSPず汎甚マむクロプロセッサの倧きな違いになりたす。通垞、マむクロプロセッサでは、プログラムのルヌプを゜フトりェアずしお維持し、ルヌプの末尟には条件呜什を配眮するずいうこずが行われたす。この条件呜什により、アドレス・ポむンタをルヌプの先頭に戻すゞャンプか、別のアドレスに移動させるかが決たりたす。そしお、これらのアドレスをメモリから取埗するためには時間がかかりたす。䞀方、DSPのアプリケヌションでは信号凊理のための時間を確保するこずが䞍可欠です。そのため、マむクロプロセッサずは異なり、DSPでは、条件付きのプログラム・シヌケンス分岐のアドレスを取埗するためにサむクルを無駄にするこずはできたせん。そこで、DSPでは、必芁なアドレスをハヌドりェアによっお保持しおおき、そうした条件刀定ず分岐の機胜を実行したす。

図5に瀺すように、DSPがあるサむクルにおいおルヌプの最埌の呜什を実行したずしたす。その次のサむクルでは、DSPは条件文を評䟡し、ルヌプの先頭の最初の呜什たたはルヌプ倖の最初の呜什のうちいずれかを実行したす。DSPでは、これらの凊理を専甚のハヌドりェアが担いたす。そのため、゜フトりェアによる条件文の評䟡、アドレスの取埗、分岐プログラムの実行によっお䜙分な時間を浪費するこずはありたせん。  

図5. ルヌプのプログラムの䟋
図5. ルヌプのプログラムの䟋

I/O操䜜郚 ここたでに䜕床も觊れたずおり、DSPではデヌタのスルヌプットが非垞に重芁です。その蚭蚈においおは、数倀挔算郚、メモリ操䜜郚、シヌケンサ操䜜郚に察するデヌタの入出力に重点が眮かれたす。デヌタの䟛絊元ず出力信号凊理の結果先は、DSPず実䞖界を぀なぐ接点になりたす。信号凊理のタスクを完了するためには、数倚くのI/O機胜が必芁になりたす。DSP倖郚のメモリ・アレむは、プロセッサの呜什ずデヌタを栌玍するために䜿甚されたす。たた、通信チャンネルシリアル・ポヌト、I/Oポヌト、DMADirect Memory Accessチャンネルなどは、DSPずの間でデヌタを高速に転送するために䜿われたす。その他の機胜タむマヌやプログラムのブヌト甚ロゞックなどは、DSPベヌスのシステム開発を容易にするためのものです。DSPを䜿甚するシステムには数倚くのI/Oタスクが存圚したすが、代衚的な䟋ずしおは以䞋のようなものが挙げられたす。

  • ブヌト・ロヌディングリセットをかける際、DSPは、通垞は倖郚メモリ・むンタヌフェヌスを介しお倖郚゜ヌスEPROMやホストから呜什をロヌドしたす。
  • シリアル通信DSPは、同期シリアル・ポヌトSPORTを介しおデヌタを送受信するこずにより、コヌデック、A/DコンバヌタADC、D/AコンバヌタDACなどのデバむスずの通信を実珟したす。
  • メモリ・マップドI/ODSPは、倖郚デバむスによっおデコヌドされたDSP倖郚のメモリ・ロケヌションを介しおデヌタを送受信したす。

デゞタル・フィルタの実装䟋

ここたでで、フィルタのアルゎリズムのモデリングを行うず共に、DSPのアヌキテクチャが備える各皮の機胜に぀いお確認するこずができたした。これにより、DSPのアセンブリ蚀語によっおデゞタル・フィルタをどのようにコヌディングすればよいのか怜蚎する準備が敎ったこずになりたす。ここたでに行った説明や瀺した䟋は、ほがすべおのDSPに圓おはたる䞀般的なものでした。それに察し、ここではアナログ・デバむセズの「ADSP-2181」ずいう固有の補品を䟋にずるこずにしたす。同補品は、16ビットに察応する固定小数点のDSPです。固定小数点ずいうのは、敎数郚ず小数郚を分ける小数点のビット䜍眮が、算術挔算䞭に倉化しないずいう意味です。この皮のDSP補品の堎合、プログラミングが難しくなる可胜性がありたすが、浮動小数点に察応するDSP補品ず比べお、傟向ずしおは安䟡です。16ビットずいうのは、DSPのデヌタ・ワヌドのサむズのこずを衚しおいたす。ADSP-2181では、16ビットのデヌタ・ワヌドず24ビット幅の呜什ワヌドを䜿甚したす。このように、DSP補品は、呜什の幅ではなくデヌタのサむズによっお芏定されたす。DSP補品が最も効率的に凊理できるデヌタの幅は、デヌタ・ワヌドのサむズによっお衚されるからです。

図6に瀺したコヌドの䟋をご芧ください。これは、ADSP-2181のアセンブリ蚀語によっおFIRフィルタの機胜を蚘述したものです。このプログラムは、倧きく2぀の郚分から成りたす。メむン・ルヌチンには、レゞスタずバッファの初期化、割り蟌みベクトル・テヌブル、サンプル・デヌタが準備できた際に実行する割り蟌みルヌチンが定矩されおいたす。DSPは、初期化が行われたらメむン・ルヌチンの呜什を実行しおいく぀かのバックグラりンドのタスクやコヌドのルヌプ凊理を実行するか、たたはADCから割り蟌みがかかるたで消費電力の少ないスタンバむ・モヌドに移行しおアむドル状態になりたす。この䟋では、プロセッサはスタンバむ・モヌドに移行し、アむドル状態で割り蟌みを埅ちたす。

コヌドの最埌の郚分には、FIRフィルタの割り蟌みサブルヌチンが定矩されおいたす。この郚分が、このフィルタのプログラムの心臓郚になりたす。プロセッサは割り蟌みに応答し、メむン・ルヌチンのコンテキストを保存しお割り蟌みルヌチンにゞャンプしたす。この割り蟌みルヌチンは、フィルタの入力サンプルを凊理し、デヌタずフィルタ係数をメモリから読み出しおDSPのデヌタ・レゞスタに栌玍したす。入力サンプルの凊理を行った埌、DSPは出力サンプルをDACに送信したす。

.module/RAM/ABS=0 FIR_PROGRAM;
/******** Initialize Constants and Variables *****************/
.const taps=127;
.var/dm/circ data[taps];
.var/pm/circ fir_coefs[taps];
.init fir_coefs: ;
.var/dm/circ output_data[taps];
/******** Interrupt vector table *****************************/
reset_svc: jump start; rti; rti; rti;
/*00: reset */
irq2_svc: /*04: IRQ2 */
si=io(0); /* get next sample */
dm(i0,m0)=si; /* store in tap delay line */
jump fir; /* jump to fir filter */
nop; /* nop is placeholder */
irql1_svc: rti; rti; rti; rti; /*08: IRQL1 */
irql0_svc: rti; rti; rti; rti; /*0c: IRQL0 */
sp0tx_svc: rti; rti; rti; rti; /*10: SPORT0 tx */
sp0rx_svc: rti; rti; rti; rti; /*14: SPORT1 rx */
irqe_svc: rti; rti; rti; rti; /*18: IRQE */
bdma_svc: rti; rti; rti; rti; /*1c: BDMA */
sp1tx_svc: rti; rti; rti; rti; /*20: SPORT1 tx or IRQ1 */
sp1rx_svc: rti; rti; rti; rti; /*24: SPORT1 rx or IRQ0 */
timer_svc: rti; rti; rti; rti; /*28: timer */
pwdn_svc: rti; rti; rti; rti; /*2c: power down */
/******* START OF PROGRAM - initialize mask, pointers **********/
start:
/* set up various control registers */
ICNTL=0x07; /* set IRQ2, IRQ1, IRQ0 edge sensitive */
IFC=0xFF; /* clear all pending interrupts */
NOP; /* add nop because of one cycle */
/* synchronization delay of IFC */
SI=0x0000;
DM(0x3FFF)=SI; /* sports not enabled */
/* sport1 set for IRQ1, IRQ0, FI, FO */
IMASK=0x200; /* enable IRQ2 interrupt */
i0=^data; /* index to data buffer */
l0=taps; /* length of data buffer */
m0=1; /* post modify value */
i4=^fir_coefs; /* index to fir_coefs buffer */
l4=taps; /* length of fir_coefs buffer */
m4=1; /* post modify value */
i2=^output_data; /* index to data buffer */
l2=taps; /* length of data buffer */
cntr=taps;
do zero until ce;
dm(i0,m0)=0; /* clear out the tap delay data buffer */
zero: dm(i2,m0)=0; /* clear out the output_data buffer */
/**** WAIT for IRQ2 Interrupt - then JUMP to INTERRUPT VECTOR **/
wait: idle; /* wait for IRQ2 interrupt */
jump wait;
/******* FIR FILTER interrupt subroutine ***********************/
fir cntr=taps-1; /* set up loop counter */
mr=0, mx0=dm(i0,m0), my0=pm(i4,m4);
/* fetch data and coefficient */
do fir1loop until ce; /* set up loop */
fir1loop: mr=mr+mx0*my0(ss), mx0=dm(i0,m0), my0=pm(i4,m4);
/* calculations */
/* if not ce jump fir1loop;*/
mr=mr+mx0*my0(rnd); /* round final result to 16-bits */
if mv sat mr; /* if overflow, saturate */
io(1)=mr1; /* send result to DAC */
dm(i2,m0)=mr1;
rti;
/******* END OF PROGRAM *************************************/
.endmod;


図6. FIRフィルタのプログラム。ADSP-2181のアセンブリ蚀語で蚘述しおいたす。

なお、このプログラムでは、通垞であれば条件文によっお発生するオヌバヌヘッドを生じさせるこずなく挔算を実行するDSPの機胜を䜿甚しおいたす。特に、プログラムのルヌプずデヌタ・バッファが、オヌバヌヘッドがない状態で保持されたす。フィルタのルヌプの䞭栞ずなる倚機胜呜什により、積和挔算を実行するず同時に、次のデヌタ・ワヌドずフィルタの係数がメモリからフェッチされたす。

このプログラムでは、フィルタ挔算の最終結果にオヌバヌフロヌがないかどうかが確認されたす。最終的な倀がオヌバヌフロヌしおいた堎合、アナログ信号のクリッピングのように信号波圢デヌタを飜和させる凊理が適甚されたす。最埌に、メむン・ルヌチンのコンテキストが埩元され、割り蟌みからの埩垰RTI呜什によっお呜什フロヌがメむン・ルヌチンに戻りたす。

たずめ

本皿の目的の1぀は、フィルタの理論ずデゞタル・フィルタの実装を結び぀けるこずです。それに向けお、高玚蚀語をベヌスずするフィルタのモデリング、DSPのアヌキテクチャの詳现、フィルタ甚プログラムの実装䟋に぀いお説明したした。すなわち、以䞋のようなトピックを玹介したした。

  • プログラムによるフィルタの衚珟
  • DSPの䞀般的なアヌキテクチャ
  • DSPのアセンブリ蚀語

各トピックの抂芁に぀いおはご理解いただけたず思いたす。しかし、DSPシステムの蚭蚈に挑むにはそれだけで十分だずは蚀えたせん。DSPに぀いおより詳现に孊びたい方は、皿末に参考資料ずしお挙げた「Digital Signal Processing in VLSIVLSIにおけるデゞタル信号凊理」や「C Algorithms for Real-Time DSPC蚀語で実珟するリアルタむムDSP向けのアルゎリズム」をぜひご䞀読ください。これらの曞籍では、DSPに関する理論の党䜓像、実装䞊の問題点、具䜓的な実装方法それぞれの発行時点で入手可胜だったデバむスを䜿甚などに぀いお解説しおいたす。たた、挔習や䟋題なども提䟛されおいたす。他の参考資料も掻甚すれば、本皿で網矅しきれなかった内容に぀いおも理解できたす。特に、本シリヌズのPart 3をご芧になる前に、「ADSP-2100 Family User's ManualADSP-2100ファミリのナヌザ・マニュアル」ず「ADSP-21060/62 SHARC User's ManualADSP-21060/62 SHARCのナヌザ・マニュアル」を入手しおおくずよいでしょういずれも無料。これらにより、本シリヌズの䞻芁なトピックに関する情報を埗るこずができたす。泚目しおいただきたいのは、アナログ・デバむセズが提䟛するDSP補品が採甚しおいる固定小数点浮動小数点のアヌキテクチャに぀いおです。本シリヌズを読砎しおいただけば、DSPシステムの開発に圹立぀機胜に぀いおの知識や情報を埗るこずができたす。Part 3では、ADSP-2181の開発プラットフォヌムEZ-KIT LITEに぀いお解説したす。たた、DSP開発に関連するその他の話題も取り䞊げたす。

参考資料

  • G. Dearborn線「Digital Signal Processing Applications Using the ADSP-21000 Family- Volume 1ADSP-21000ファミリを䜿甚したDSPアプリケヌション 第1巻」Norwood、MA:Analog Devices、1994幎。アナログ・デバむセズから賌入するこずができたす。
  • P. M. Embree「C Algorithms for Real-Time DSPC蚀語で実珟するリアルタむムDSP向けのアルゎリズム」Upper Saddle River、NJ、 Prentice Hall1995幎。アナログ・デバむセズからは賌入はできたせん。
  • R. J. Higgins「Digital Signal Processing in VLSIVLSIにおけるデゞタル信号凊理」Englewood Cliffs、NJ: Prentice Hall、1990幎。DSPの基瀎に぀いお解説しおおり、数倚くの参考文献が取り䞊げられおいたす。アナログ・デバむセズから賌入するこずができたす。
  • A. Mar線「Digital Signal Processing Applications Using the ADSP-2100 Family- Volume 1ADSP-2100ファミリを䜿甚したDSPアプリケヌション 第1巻」Englewood Cliffs、NJ:Prentice Hall、1992幎。アナログ・デバむセズから賌入するこずができたす。
  • A. Mar、J. Babst線「Digital Signal Processing Applications Using the ADSP-2100 Family- Volume 2ADSP-2100ファミリを䜿甚したDSPアプリケヌション 第2巻」Englewood Cliffs、NJ: Prentice Hall、1994幎。アナログ・デバむセズから賌入するこずができたす。
  • A. Mar、H. Rempel線「ADSP-2100 Family User's ManualADSP-2100ファミリのナヌザ・マニュアル」Norwood、MA:Analog Devices、1995幎、無料
  • A. Mar、H. Rempel線「ADSP-21020 Family User's ManualADSP-21020ファミリのナヌザ・マニュアル」Norwood、MA:Analog Devices、1995幎、無料
  • 「MATLAB For DSP Design (an analysis and design package for DSP)MATLABを掻甚したDSP蚭蚈DSP甚の解析蚭蚈パッケヌゞ」電話508647-7000、fax508647-7101、たたはりェブサむトhttps://www.mathworks.comでThe MathWorksにお問い合わせください。
  • 「QEDesign (digital filter design software)QEDesignデゞタル・フィルタ蚭蚈甚の゜フトりェア」電話714557-6884、fax714557-6969、たたはりェブサむトhttps://www.mds.comでMomentum Data Systemsにお問い合わせください。
  • H. Rempel線「ADSP-21060/62 SHARC User's ManualADSP-21060/62 SHARCのナヌザ・マニュアル」Norwood、MA: Analog Devices、1995幎、無料
  • P. M. Embree「C algorithms for real-time DSPC蚀語で実珟するリアルタむムDSP向けのアルゎリズム」Upper Saddle River、NJ、 Prentice Hall 1995幎
  • このシリヌズのPart 1、Part 3、Part 4はこちらから

著者

Generic_Author_image

David Skolnick

Generic_Author_image

Noam Levine

Noam Levine氏は、The MathWorksのテクニカル・マヌケティング郚門に所属しおいたす。2008幎に入瀟したした。䞻に、組み蟌みプラットフォヌムを察象ずしたモデル・ベヌス蚭蚈のワヌクフロヌを担圓しおいたす。

本蚘事に関するご泚意

本蚘事は過去に䜜成されたものであり、本文内で取り䞊げられおいる補品や゜フトりェアの䞀郚に぀きたしおは、堎合により新芏蚭蚈には非掚奚、補造䞭止ずなっおいる堎合がございたす。
ご了承のほど、お願い申し䞊げたす。
Image
本蚘事に関するご泚意