東京大学工学部授業「マイクロプロセッサ応用」資料                                          Ver. 1.1

                               2002/12/10 坂井修一

 

TI DSK (DSP Starter Kit) TMS320C6711のプログラミング

 

目次

 

1.     概要

2.     TMS320C6711のアーキテクチャとソフトウェア

3.     手順

4.     課題

 


1.概要

 「マイクロプロセッサ応用」のソフトウェア課題として、Texas Instruments社のディジタル信号処理プロセッサ(Digital Signal Processor, DSP)を使った実習を行う。

 DSPとは、その名の通り、信号処理を行うコンピュータである。信号処理は、社会のあらゆるところで必要な情報処理であるが、ひと昔前までは時間がかかりすぎたり、装置がたいへん高価であったりして、(特に個人用途では)なかなか気軽に使うことができなかった。しかし、デバイス技術・システム技術の進歩により、実時間のディジタル信号処理を行うことのできる安価なDSPが出現し、この分野は情報化社会の発展とともに飛躍的な広がりを見せている。

 DSPの用途として携帯電話、CD/MD/DVDプレイヤーやディジタルTV/カメラ/ビデオの信号処理装置、サーボモータの制御装置、自動車やロボットの制御、カーナビ、インターネット電話やマルチメディアデータのネット配信、などがあり、現代社会で私たちは、つねに数多くのDSPに囲まれ、これらに依存して暮らしていると言える。

 DSPは、マイクロプロセッサの一種であるが、PentiumなどのPC用マイクロプロセッサと比較すると、次のような特徴がある。

(1)組込型

PC用のCPUのように、ユーザないし不特定のアプリケーションプログラマがプログラムすることを前提として作られておらず、特定の機器に組み込まれて、専用の処理をするために使われる。プログラムは、一度作成されると、基本的には変更されない。DSPは、コンピュータとしての基本機能を備えており、メモリが許す限りどんなプログラムでも稼働させることができる。しかし、仮想記憶、マルチプロセスなどの機能は無いか、あってもあまり強くない。一方で次の(2)で述べるような機能があり、また、省電力や低コスト化への配慮がなされている。

(2)実時間信号処理

音声信号の入出力、積和計算やアドレッシング、メモリアーキテクチャ、プログラムの応答性を見るためのソフトウェアツールなどが強化されている。

 

こうしたDSPも、ここ数年で次のように進歩してきた。

(a)    2極化

そもそもDSPといえば、積和器つきの素朴なマイコンであり、制御機構も単純で、データパスだけの計算機、という感じであった。もちろん、こうした「アキュミュレータ型」のDSPは、今も低コスト・低消費電力の専用機として活躍している。他方、汎用レジスタをたくさん積み、広大なメモリ空間をもつ「RISC型」のDSPも開発され、使われるようになっている。これは通常のマイクロプロセッサに近く、PCプログラマにはプログラムしやすい構成であり、やや高価な(といってもPentium系の高性能CPUよりは一桁以上安いが)汎用機として使われている。「RISC型」のDSPは、多くの有名メーカの競合するホットな技術分野となっている。

(b)    ソフトウェア

昔は「DSPといえばアセンブラプログラミング」が常識であった。しかし、現在では、組込型システムも複雑な情報処理が要求されるようになっており、また、プログラム開発期間も短くなくてはならない。そのためには、高級言語のプログラミングが必須である。ありがたいことに、コンパイラ最適化技術の発達によって、エキスパートのアセンブラプログラミングに(それほど)見劣りしない高級言語コンパイルが可能になった。以上のような理由から、TIのDSPでも、C言語が使われる。

 また、エディタ、デバッガ、リンカ、ランタイムカーネル、環境設定ツール、可視化ツール、などが昔より格段によくなっており、使いやすく効率的なプログラム開発環境が提供されるようになっている。

 

 ここでは、「RISC型」DSPであるTMS320C6711のプログラム開発を行う。このチップを用いるのは、「汎用マイクロプロセッサに近いプログラミングが可能」であり、かつ「実時間信号処理の専門性の高い実習が可能」という、二重の利点があるからである。

 

2.TMS320C6711のアーキテクチャとソフトウェア

2.1 TMS320C6711のアーキテクチャ

 TMS320C6711のアーキテクチャの特徴を以下に列挙する。

1)     VLIW(VelociTITM)による並列処理

4種類の機能ユニット(.L/.M/.S/.D Unit)が2セット、計8個の機能ユニットにより、8命令同時実行可能(図1参照)。同時に実行する命令は、アセンブリプログラム(あるいはコンパイラ)が静的に決定する。

 

 L:加算器、S:シフト、M:乗算器、D:メモリLoad/Store、レジスタはすべて32ビット

図1 TMS3206711のコア・データパス

 

2) 命令形式は、32ビットのRISC型。演算は、レジスタどうしに限られ、メモリとのデータのやりとりは、Load/Storeのみ。詳細は、オンラインマニュアルであるTMS320C6000 CPU and Instruction Set Reference Guideを参照のこと。

3)     150MHzクロック。32bit/64bitデータ。特に、単精度/倍精度小数点演算、32ビット整数乗算。最大900MFLOPS(Floating point Operations Per Second).

4)     メモリ階層

4.1) 1次命令キャッシュ:4KB、一次データキャッシュ:4KB

4.2) 2次キャッシュ64KB(オンチップ, 4バンク)

アプリケーション・プログラムにより、L2をキャッシュまたはマップド・メモリをバンク毎に選択可能

4.3) アドレス空間は4GB。

5)     16チャネルのエンハンストDMA

6)     割り込みセレクタにより、13種類の割り込みから12個の選択優先順位を決定

7)     パワーダウン・モード

8)     その他、命令セットの特徴に関しては、TMS320C6000 Assembly Language Tools User's Guideを参照のこと。

 

図2.6711-DSPブロック図

 

 次に、貸し出しを行うDSK(DSP Starter Kit)ボードの特徴を列挙する。

1)     16MB SDRAM(100MHz), 128KB Flash ROM

2)     8 bit Memory mapped I/O port

3)     16 bit 音声/データコーデック(DA/AD converter)

4)     ホストPCとの接続: Parallel IO (プリンタケーブル)

図3.C6711DSK

 

2.2 TMS320C6711のソフトウェア

  TMS320C6711の利用にあたってTIは、Code Composer Studio(CCS)(図4)と呼ばれる統合ソフトウェア環境を用意している。

 

図4.Code Composer Studio 全体像

 

 CCSは次のソフトウェアから成る。

(1) C, C++コンパイラ

 C(++)のプログラムをDSPのアセンブリ言語に翻訳する。このさい、通常の最適化に加えて、ソフトウェアのパイプライン処理、コードの変換および暗示的な実行、メモリ・アドレス複製、およびメモリ・アドレス依存性除去など、DSP固有の最適化を行う。

(2) アセンブラ

 アセンブリプログラムを機械語に翻訳する。アセンブリ言語になってから後の最適化を行う「アセンブリオプティマイザ」も入っている。

(3) ビジュアル・リンカ

WindowsTM Explorerライクなインターフェイスを利用してさまざまな機能を提供する。プログラム・コンポーネントを多数の異なるメモリー・タイプやエリアにドラッグ・アンド・ドロップする、標準デバイス・メモリー・マップのライブラリからメモリー・マップを選択する、メモリー割り当ての即時画像フィードバックを使って最適化可能な場所を見つける、不要なコードやデータを自動的に除去する高精度な機能によりアプリケーションのサイズを縮小する、など。

(4) エディタ

(普通のエディタでソースプログラムなどを編集する)

(5) デバッガ

     条件ブレークポイント、ハードウェア・ブレークポイントなど、さまざまなブレークポイントの設定が可能

     General Extension LanguageGEL)スクリプト・ファイル: 特定のブレークポイントがヒットすると実行

     サブルーチンの選択的なステップ・イントゥ、ステップ・オーバー、ステップ・アウト機能

     ProbePointTM :通常のブレークポイントとは異なり、ProbePointをヒットした後でプログラム実行が再開され、接続されている動作(例:信号データの送信または抽出、信号の監視、GELスクリプトの実行)が実行される。

(6) DSP/BIOS

  オブジェクトベース・ランタイムカーネル。タイマ割込や周期動作、統計データの収集、タスクスケジューリング、など。特に実時間のインタラクティブなデバグに大変強力な道具を提供する。

(7) Real-Time Data Exchange (RTDXTM)

ホスト・DSP間のリアルタイムデータ通信機能。ターゲット・アプリケーションを停止せずにホスト・コンピュータとDSP間でデータを転送する。DSP/BIOSを支える技術。

 

図5.Code Composer Studioの実行例

 

 

3.手順

3.1 最初にすること (1 hour)

 DSKの貸し出しを受けたら、まず、箱の中身を確認しよう。箱の中には、次のものが入っている。

 

(1)   DSK基板: C6711 DSP搭載

(2)   5V 電源アダプタ

(3)   電源コード

(4)   PC接続ケーブル(プリンタケーブルと同じ)

(5)   Code Composer Studio (CCS) CD-ROM (Ver2など)

(6)   インストレーションガイド (英語):ハード、ソフト各1

(7)   その他

 

 最初に、(6)のインストールガイドを読み、PCとDSKの接続、DSK Toolsのインストール、DSKのリセットを行う。

 

注意.DSK基板は、裸同然の形で袋に入っている。取り出し・格納のときも、実験中も静電気や衝撃などによって回路や基板を傷つけることのないよう、細心の注意を払うこと。

 

3.2 Manuals and Tutorial  (1-3 days)

 続いて、PC上で、マニュアル類がどこにあるかを確認する。

 CCS(Ver.2)を立ち上げて、Helpのプルダウンメニューを開くと、User Manualという項目がある。ここをクリックすると、たくさんのハイパーリンクが入ったページが現れる。ハイパーリンクの先には、Code Composer Studio全体, API, Compiler Assembler, Programming, DSP/BIOS, Peripheralなどに関するマニュアル(PDF形式)がある。マニュアルはそれぞれに大部なので、印刷は肝心なところだけとし、ふだんは画面に出して使う。

 同じくHelpを開くと、Tutorialがあるので、まずはここから見ていく。これは、その名の通り、Code Composer Studioのチュートリアルである。頭から順番にこれに書いてある通りのことを実行すると、DSKプログラム開発の実態がかなりわかるようになっている。

 「習うより慣れろ」ということわざもある。まずは、チュートリアルをひととおりやってみよ。

 

注.坂井の使っているCCSのVersionは、(やや古く)1.2.3である。本CCSの場合、ドキュメントの場所などは、上記とかなり異なる。このように、自分に配られたCCS Ver. 2でなかった場合でも、TutorialとManual類は必ず入っているので、探してみること。

 

3.3 課題までの試行錯誤 (1 week)

 次に自分で簡単な問題を考え、Cでプログラムし、DSKで実行する。マニュアル類は、必要に応じてこまめに利用するとよい。

 やりかたの例として、まず、四則演算や文字列処理、ソートなどのプログラムを書いてみて、動くことを確認してみる。次に、時間依存性のあるプログラムを書いてみて、トレースやデバグのやりかた、実時間性を保証するやりかた、入出力のやりかた、DPS/BIOSの使い方、などを学ぶ。

 あるいは、下に記した参考書に書いてあるプログラムを実行してみるのもよい。ソースを丸ままコピーしたとしても、実作業上で学ぶことはある。さらにソースを書き換えて、参考書のプログラムとは違ったものを作るよう試みればよい。

 

注.時間のない人はいきなり課題にチャレンジしてもよいが、さまざまに試行錯誤してみるのがものごとを広く深く学ぶためには必要である。要するに「よく遊べ」ということ。

 

[参考書]瀬谷啓介「DSP Cプログラミング入門」技術評論社

 


4.課題

 下の2題の両方に回答せよ。

 

課題1 DSKによるボイスチェンジャー

(1) ボイスチェンジャーのCプログラムを書き、これをDSKで実行させて、結果を評価せよ。ただし、ボイスチェンジャーとは、入力された音声信号を変調する道具を指す。

 ボイスチェンジャーの作り方の手順として、(a)音声信号の入力(AD変換)、(b)IIRフィルタを使ったサイン波の生成、(c)(a)と(b)の掛け合わせ、という手順を踏むのが簡単である(IIRフィルタを使ってサイン波を生成するやりかたは、各自調査せよ)。

このように、周波数を変えるアルゴリズム自体は単純なものであるが、DSP/BIOSの使い方などによって、プログラムはかなり異なったものとなる。課題が一応こなせた諸君は、できるだけ独自性の高いプログラミングに挑戦せよ。

(2) (1)のアセンブラのソースを見て、DSPらしい最適化や並列処理が施されている場所を指摘せよ。もしも、さらなる最適化が可能であれば、これを行え。必要に応じて、オンラインマニュアルとして提供されているTMS320C6000 Assembly Language Tools User's Guide、TMS320C6000 CPU and Instruction Set Reference Guideを参照すること(以下同様) 

 

 

課題2 自由課題

(1) 自分で興味深い課題を作り、Cプログラムを書き、これをDSKで実行させて、結果を評価せよ。ただし、実時間的な信号処理を伴う課題であること。

(2) (1)のアセンブラのソースを見て、DSPらしい最適化や並列処理が施されている場所を指摘せよ。もしも、さらなる最適化が可能であれば、これを行え。

 

レポートについて

 レポートは読めるものを書くこと

(1) プログラムの処理の概略、設計の方針。

(2) ソースコード(コメントを入れること)

(3) 結果

(4) 考察、問題点

(5) その他のコメント、提案、気づいたこと、または期待した成果が得られなかった場合の問題分析などを記述すること。

(6) 参考書などのプログラムをもとにして作成するのはかまわないが、その場合、オリジナルの出典を明らかにし、自分が工夫した点を明記すること。他の学生(昨年度含む)のプログラムを参照してもよいが、自分独自の改良を施すこと。

 レポートは、2月15日までに事務室宛に提出のこと。なお、所属する専攻名、学生証番号、氏名などの他に提出日を表紙に入れること。