Dspと組み込みプログラミング
ディジタルシグナルプロセッサ(DSP)は、信号処理演算に特化したマイクロプロセッサの一種である。信号処理アルゴリズムの実現においては高速なリアルタイム処理が必要な場合が多いため、一般的な機器組み込み用のマイコンでは性能が不足し、かと言ってPentiumのような汎用プロセッサで実現すると価格対性能比が悪い・消費電力が大きいため電池動作を前提とする携帯機器には適さないなどの問題がある。
そのため、積和演算など信号処理特有の演算を高速に実行可能なマイクロプロセッサとしてDSPが利用されている。現在のDSPは、低消費電力で非常に安価なタイプ(固定小数点型が多い)と、新しい信号処理アルゴリズムをいち早く実装するのに向いた高性能タイプ(浮動小数点型が多い)とに二極分化しており、ディジタル機器を実装する際に欠かせないキーデバイスとなっている。今回の実験では、後者のタイプのDSPを扱う。
DSPに実装するプログラムは、組み込みプログラムと呼ばれ、次のような特徴がある。
(1)機器組み込み用である。 Pentiumに代表されるパソコン用のプロセッサのように、不特定のアプリケーションプログラムを実行する環境としてではなく、特定の電子機器等に組み込まれて、専用の処理をするために使われる。システム全体として省電力・低コストが要求される。
(2)実時間信号処理 1サンプル周期内に処理を終了するために、プログラムの処理速度が高いことが要求される。
組み込みプログラミングは、デバイスドライバの開発などと並んで、計算機の動作原理に対する深い理解とプログラミングスキルが要求されるプロフェショナルな分野の一つである。
Dsk(dsp starter kit)の概要
C6711DSKは、製品開発のためにDSPの評価を行う技術者や、DSPプログラミングについて学びたい人などのためにTI社が販売しているDSPボードおよび開発環境のセットである。このボードの主な仕様を以下に示す。
DSPチップ:TMS320C6711を搭載(DSPコアはクロック周波数150MHzで動作)
16bit A/D・D/A変換器(TLC320AD535)搭載(サンプリング周波数Fs=8[kHz]、1入力1出力)
16MB SDRAM、128kBフラッシュ・メモリ搭載
C6711dspの概要
このボードに搭載されているDSPチップであるC6711のチップ内部の構成を図1に示す。
DSPチップTMS320C6711の内部構成(文献[2]より引用)
TMS320C6711は、VLIW(Very Large Instruction Word)型アーキテクチャを有する32bit浮動小数点DSPであり、以下の特徴を有する。
演算ユニットが内部に8個(Aレジスタ側とBレジスタ側に4個ずつ)もあり、最大で同時8命令実行可能である。
チップ内部に32個(A0~A15およびB0~B15)という多くのレジスタが存在する。
RISC(Reduce Instruction Set Computer)プロセッサと同じくレジスタアーキテクチャのチップであり、演算はレジスタ上のデータに対してしか行えない(一般的なDSPのように、メモリ上のデータ同士を直接演算するアセンブリコードは書けない)。
チップ内部に32bitバスが9本、256bitバスが1本存在し、544本ものバス配線がチップ内部を走っている(データおよびアドレスのread / writeを並列的かつ高速に行うことができる構造を有する)。しかし、外部メモリインタフェースとしてはアドレスおよびデータ用32bitバスが1本ずつしかないので、外部メモリへのアクセスは内部メモリよりも格段に遅い(チップ外部に内部バスをそのまま引き出すと、DSPチップのピン数が現実的でなくなる・浮遊容量により消費電力が非常に大きくなる・速度が低下するなどの弊害がある)。
2レベル・キャッシュメモリを有する。
4kBの一次データ・キャッシュ(L1D)(2WaySetAssociative)
4kBの一次プログラム・キャッシュ(L1P)(DirectMapped)
64kBの二次キャッシュ/マップド・メモリ(4バンク)(L2)
プログラム開発は、C/C++、アセンブリ、リニアアセンブリなど多様な方法がある。
アドレス空間は32bitリニア(4GB)である(int型が32bit)。
sin( )などの数学ライブラリは、通常のdouble型(64bit)に加えて sinf( )などのようにfloat型(32bit)でも準備されている(演算速度重視のため)。