57
マルチDSPシステム(MDS64) ユーザーズ・マニュアル 資料番号 MDS6400 3A1 2010 ( 平成 22 )0 8 17

マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

マルチDSPシステム(MDS64)

ユーザーズ・マニュアル

資料番号 MDS64003A1

2010 年(平成 22 年)08月 17 日

Page 2: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

はじめに

マルチDSPシステム(MDS64)はテキサス・インスツルメンツ社(以下TI社)製DS

Pスタータ・キット(C6000 系DSK)の多重接続を行うことにより高速演算を可能

にした、計算量の多いアルゴリズムを評価するディジタル信号処理システムです。

MDS64 を使用するためには、下記の資料が用意されています。これらの資料は製品と同

梱されていますので参照してください。また資料の改変が行われた場合には、登録ユー

ザー宛に通知されます。

l 技術資料:MDS64に使われている基本技術・機能等の説明

資料番号 MDS64001

l ユーザーズ・マニアル:MDS64のプログラム開発方法を説明(本資料)

資料番号 MDS64003

l ソフトウエア・マニアル:MDLOSライブラリーの説明、

資料番号 MDS64005

l エラー・コメントリスト:MDS64 動作中に表示される各種エラー、対処方法の説明

資料番号 MDS64007

現時点で発売されている MDS64 のファミリーには以下の製品群が含まれます。

l MDS64_twin (V1.2) TMS320C6416T DSK を2層含む

l MDS64_four (V1.2) TMS320C6416T DSK を4層含む

l MDS64_six (V1.2) TMS320C6416T DSK を6層含む

l MDS64_eight (V1.2) TMS320C6416T DSK を8層含む

l MDS64_Plugin (V1.2) TMS320C6416T DSK を2層含む

すべての商標および登録商標はそれぞれの所有者に帰属します。

Page 3: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

目次

1 Quick Start Guide

1.1 ソフトウエアーのインストール

1.1.1 Code Composer Studio(CCS-TI 社製品)のインストール

1.1.2 MDS64 システムのインストール

1.2 MDS64の接続

1.3 CCS の起動 および Project Work Space の読み込み

1.4 プロジェクトのコンパイラ・リンク

1.5 プログラムの実行

1.6 エラーが発生した場合

1.7 再コンパイル・リンク

1.8 MDS64_twin 以外のシステム

1.9 Diagnostics プログラムの概要

1.9.1 初期化

1.9.2 Super Visor DSK での乱数発生および次段への転送

1.9.3 Super Visor 以外の DSK の動作

1.9.4 一巡後のデータ確認

1.9.5 実際の転送、およびデバッグ

2 MDS64 システムの概略

2.1 特徴

2.2 接続

2.3 フロント パネル

2.4 MEMORY MAP

2.5 MDL BOOT

2.6 メッセージシステム

2.7 転送

2.8 プログラムモジュールのコピー

2.9 処理時間の測定

2.10 パラレル処理

3 パイプライン FFT の実装(MDS64_twin)

3.1 パイプライン FFT アルゴリズム

3.2 浮動小数点 Library(TI 社製品)

3.2.1.1 MDS64 システム CDから FastRTS library のインストール方法

3.2.1.2 使用方法

Page 4: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

3.3 FFT の実装 (その 1)

3.3.1 Work Space の Open

3.3.2 コンパイル・リンク

3.3.3 プログラム コードの説明

3.4 FFT の実装 (その 2)

3.4.1 Work Space の Open

3.4.2 MDS64 関連変数の指定

3.4.3 全 DSK 共通のファンクション

3.4.4 各 DSK での処理

3.4.4.1 Super Visor での処理:

3.4.4.2 Slave での処理:

3.4.5 デバッグ

3.4.5.1 参照データの確認

3.4.5.2 MDS64 の結果の表示

3.4.5.3 トレース

3.5 FFT の実装 (その 3)

3.5.1 TRIP TIME

3.5.1.1 Work Space の Open

3.5.1.2 Trip Time 測定の組み込み

3.5.1.3 Trip Time 測定の実行

3.5.2 転送時間の測定

3.5.2.1 転送時間測定の組み込み

3.5.2.2 転送時間 測定の実行

3.5.3 各 DSK の処理時間の測定

3.5.3.1 転送時間測定の組み込み

3.5.3.2 Super Visor での処理時間測定の実行

3.5.3.3 他の DSK での処理時間測定の実行

3.5.4 ループ・タイム測定

4 パラレル処理の実装例(MDS64_twin)

4.1 入出力

4.2 電源等の投入順序 および Work Space の Open

4.3 コンパイル・リンク

4.4 AIC23 コーデックの設定

4.5 DSP シリアルポート(McBSP2)の設定

4.6 MAIN プログラムの説明

Page 5: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

5 パイプライン FFT の実装(MDS64_eight)

5.1 Diagnostics プログラムの実行

5.2 FFT の実装

5.3 プログラム コードの説明

5.4 Trip Time 測定の実行

5.5 それ以外の時間測定

5.5.1 プロセス時間

5.5.2 転送時間

5.5.3 転送開始からプロセス終了まで

5.5.4 転送管理ファンクションの実行時間

5.5.5 最後にループタイムを測定します。

Page 6: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

1 Quick Start Guide

1.1 ソフトウエアーのインストール

1.1.1 CCS のインストール

MDS64システムをインストールする前に TI社のCode Composer Studio (CCS)がインストー

ルされている必要があります。新たに CCS をインストールする場合は、MDS64 システム

出荷時に同梱されている TI社の下記資料を参考にして CCS をインストールしてくださ

い。

l TMS320C6416T DSK インストレーション・ガイド(日本語)

l TMS320C6000 DSP Platform CCS IDE(CD ROM)

l 評価用ボード、キットに関する重要なお知らせ(日本語)

l DSP スターター・キット・ソフトウエア・ライセンス契約書(日本語)

l Code Composer Studio IDE 入門マニュアル (日本語)

l TMS320C6416T DSK Technical Reference(英語)

CCS のインストールの過程で USB ケーブルの接続、電源の投入、CCSの起動などの記載

がありますが、MDS64 システムを接続した後で行いますので、CCS のインストールのみ

を行った状態で作業を停止してください。なお USB ケーブルは MDS64システムに接続さ

れた状態で出荷されます。また形状は MDS64用に変更されていますので、DSK インスト

レーション・ガイドに掲載されている図面とは異なっています。

1.1.2 MDS64 システムのインストール

製品に同梱されている CD ROM(MDS64 Tools)に含まれている MDS64 システム関連のファ

イルが MDS64 ディレクトリーに格納されていますので、ディレクトリーごと、CCS のル

ートディレクトリーの boards サブディレクトリーの下にコピーしてください。サンプ

ル・プログラムおよび説明資料等は下記の様なディレクトリー構造を想定しています。

Page 7: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

1.2 MDS64の接続

MDS64 システムは実装されている DSK の枚数、筐体の種別、オプション等により引き出

されているケーブルの本数が異なります。いずれの場合でも、ケーブル類は MDS64 本体

の電源を入れる前に接続をしてください。この項では MDS64_twin を例にして接続に関

する一般的な方法を説明します。

下図は標準的なMDS64_twinの裏面パネルです。二枚のDSKのそれぞれの電源ケーブル、

および USB ケーブルが直接ボードのコネクターに接続されて、筐体から引き出されてい

ます。電源ケーブルは TI 社製 DSKの付属品を電源アダプターごとそのまま使用してい

ます。

l 電源ケーブルを接続する前に、USB ケーブルを CCS がインストールされた PC

の USB ハブに接続してください。(PC 上の CCS は閉じていることを確認してく

ださい。)

l 次に MDS64_twinの正面パネルの電源SWが両方とも OFFになっているのを確認

した後に電源ケーブルを 100V のコンセントに接続してください。コンセント

は接地端子つき 3 穴です。接地は完全に行ってください。

l 最後に正面パネルの電源 SW を ON にしてください。どちらのDSKが先でもか

まいません。

重要:この後、システムのハングアップ等の原因により、電源を入れなおすことがあり

ますが、USB ケーブルは USBハブから抜かないでください。USB ケーブルを抜くのは、

CCS を閉じてから、DSK の電源を OFF にした後にします。USB ケーブルの通電中に着脱

した場合に、DSK の USB 入力部を破損する恐れがあります。

MDS64_twin には 2 枚の DSK が組み込まれています。通常向かって右側が Super Visor

Page 8: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

として使用されますので、工場出荷時には、USB ケーブルはこの DSK に接続されていま

す。USB ケーブルの接続を変更した場合はそれに従ってください。

電源 SW を ON 側に倒すと;

l 両DSKの表面パネル上で”POWER” および”SLV1 DET”の LED が点灯します。(出

荷時の Slave は“1”を選択してジャンパーが設定されています。)

l また Super Visor DSK は POST を開始しますが、Slaveは HPI BOOT MODE に設定

されていますので、リセットがかかるだけです。(筐体に格納されていますの

で、外からは見えません。また No Boot を指定した場合は POST は行われませ

ん。)

1.3 CCS の起動および Project Work Space の読み込み

電源 SW を入れてから、Super Visor の POST が完了するまで、20 秒ほど待ってから、

通常の DSK を起動させるように、CCS を起動します。CCSは USB ケーブルが接続されて

いる DSK を対象として動作を開始します。

サンプル・プロジェクトとして MDS64の Diagnostics プロジェクトを読み込みます

が、すでに必要な GEL file や参照するメモリー領域を表示した Work Space が用意さ

れていますので、ProjectàOpen を使わずに、下記の要領で Work Space を読み込みま

す。

l CCS の メニューから FileàWork SpaceàLoad Workspace…を選択して開か

れた Load Workspace ダイアログ ボックスで下記の wks file を開いてくだ

さい。

(CCS ROOT)¥boards¥MDS64¥examples¥Diagnostics¥dskusb.wks

下の図は Work Space を開いた後です。(説明のためにファイル構成がわかるようにし

てあります。)プロジェクト構成ファイルの簡単な説明をしておきます。

l C64_DIAG.c:メイン・プログラム・ファイルです。

l C64_VECTORS.ASM:割り込みベクターテーブルを保持しています。

l MDS64ISR.c:割り込み処理ルーチーンを保持しています。

l C64_diagnostics.CMD:コマンドファイルです。MDS64システムは目的によりメ

モリーの割り振りが異なりますので、サンプル・プログラムではそれぞれに独

自のコマンドファイルを用意しています。

l Diagnostics.gel:GEL ファイルです。ブート(MDL_BOOT)やデバッグを行うた

めに使います。

注記:Work Space が開けない場合は、ProjectàOpen で上記プロジェクトを開いてく

Page 9: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

ださい。

1.4 プロジェクトのコンパイラ・リンク

以下のメニューでプロジェクトのRe Build を行い,エラーの無いことを確認してくださ

い。

ProjectàRebuild All

注記:エラーが発生した場合は、Include File や Library の格納場所が適切に設定

されていない場合が多いので、メニューの ProjectàBuild Options…で設定内容を確

認してください。

本プロジェックトで使用している Include File は以下の二箇所に格納されています。

l $(Install_dir)¥C6000¥dsk6416¥include;

l $(Install_dir)¥boards¥mds64¥include

また Library は以下の 3 箇所です。

l $(Install_dir)¥boards¥MDS64¥lib;

Page 10: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

l $(Install_dir)¥C6000¥dsk6416¥lib;

l $(Install_dir)¥C6000¥csl¥lib

1.5 プログラムの実行

Re_Build にエラーが無ければ、とりあえず実行してみます。下記のメニューで実行し

てください。

DebugàRun

正常に実行されれば、以下の二つのことが起こります。(下図参照)

l C64_DIAG.c ファイルの 262 行目に設定されている Breaking Point で停止しま

す。

l Memory Window(tmpbuf2)の内容が書き換えられ、赤色に変化します。

1.6 エラーが発生した場合

Page 11: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

MDS64 システムに同梱されている diagnostics サンプル・プログラムには出荷時にエラ

ーが含まれています。 プログラムを実行した際に CCS の Stdout ウインドウに下記の

ようなエラーメッセージを出力します。

*********ERROR******************ERROR******************ERROR********* (REF)( 2:SEC: 73:milSEC )(#16) Origin: F1 *msg(93): Illegal mix DBF ATTR and Calling module *VALUE Number= 40 , *VALUE(HEX)= D0000 *********ERROR******************ERROR******************ERROR*********

上記のエラーメッセージは;

Double Buffered File System (DBFS)として定義されているファイルの属性が、呼び出

しモジュールが要求しているファイル属性に合致していないためにエラーとして出力

されました。

DBFS のファイル属性は、ソースファイル(C64_DIAG.c)の 110 行目で DMABUF_set ファ

ンクションにファイル属性を引数で渡すことにより定義します。

DMABUF_set(0、bufmstr,NN,2); //send out buffer(間違い例)

この引数の間違いは、MSTRから出力ファイルとして定義しなければならないところを、

入力ファイルとして定義していることです。したがって、最後の引数を下のように”1”

に修正してください。

DMABUF_set(0、bufmstr,NN,1); //send out buffer(正しい例)

重要:この時点ではまだプログラムのコンパイル・リンクを行わないでください。追加

で行う作業があります。

重要:一つの DSK で二つ以上のエラーが含まれていても、最初のエラーが発生した時点

でエラー・ループに入りそれ以降の処理を行いませんので、二つ目のエラーは同時に表

示されません。

1.7 再コンパイル・リンク

MDS64 システムはすべてのプログラム開発を Super Visor DSK 上で行い、実行は各 DSK

に分散して行います。このようなシステムを可能にしているのは、すべての DSK で参照

する変数のアドレスを同一にしてあるためです。Super Visor 上でプログラムの修正を

行っても、他の DSK では古いプログラムを実行中です。(通常は無限ループで実行する。)

お互いの DSK は隣同士でデータのやり取りを行っていますので、変更したプログラムが

実行されているSuper Visor を他の古いプログラムで動作している DSKからアクセスし

たときにアドレスが異なっていれば、システムの誤動作が発生します。このような誤動

Page 12: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

作を防ぐために、MDS64 システムでは再コンパイル・リンクを行う前に、すべての DSK

の実行を特定ループ内に閉じ込め、他の DSK をアクセスしないようにしています。

Diagnostics.gel ファイルにはこのための GEL ファイルが記述されていますので、メ

ニューから下記の GEL を実行してください。

GELà Multi DSP Linkerà MDLHOLT

この GEL ファイルが実行されるとすべての DSK で mdlloop ファンクションが呼び出さ

れ、その中だけでループします。GEL の実行が正常終了したかどうかは、フロント・パ

ネルの”CONNECT” LED が消灯することで確認します。この処理が正常に行われない場合

にはメモリーの不正アクセスが発生する可能性が高くなり、ハングアップする場合があ

ります。ハングアップした場合には、CCS を閉じ、すべての電源の入れなおしから行っ

てください。(コールドスタート)

すべての”CONNECT” LED の消灯を確認したら以下のメニューにより再コンパイル・リン

クを行ってください。

ProjectàRebuild All

1.8 MDS64_twin 以外のシステム

Diagnostics プログラムは転送されたデータを次段の DSK へ再転送するだけですので、

すべての DSK で同一の動作を行います。 そのためこのプログラムはほぼ同じソースコ

ードですべての MDS64 システムに適用されますが、一行だけ違う場所があります。

ソースファイル(C64_DIAG.c)の 80 行目の以下の変数(UserDef_TOT_LAYER)は MDS64シ

ステムに含まれる LAYER の数を設定します。Diagnostics プログラムは, MDS64_twin を

想定していますので、”1”になっていますが、twin 以外のシステムでは変更する必要が

あります。この変数は“0”ベースです。 MDS64_eight システムの場合には”7”になり

ます。

UserDef_TOT_LAYER = 1; (MDS64_twin の場合)

この設定が間違えていると以下のエラーメッセージが出力されます。修正してから再コ

ンパイルをしてください。

*********ERROR******************ERROR******************ERROR********* (REF)( 1:SEC: 475:milSEC )(#14) Origin: F1 *msg(81): Fail BOOT START at SLAVE *VALUE Number= 36 , *VALUE(HEX)= 0 *********ERROR******************ERROR******************ERROR*********

Page 13: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

********ERROR******************ERROR******************ERROR********* (REF)( 0:SEC: 0:milSEC )(# 7) Origin: 11 *msg(63): Fail, Illegal User defined Total Layer *VALUE Number= 16 , *VALUE(HEX)= 3 *********ERROR******************ERROR******************ERROR*********

(エラーはアクセス時刻により付随的エラーは発生しない場合があります。上記のエラ

ーで Origin: F1で発生したエラーは付随的エラーです。)

1.9 Diagnostics プログラムの概要

1.9.1 初期化

システムの状態

呼び出されるファンクション

概要

init_MSTR 実行中のDSKを MSTR として初期化します。

C64_Init_SLAVE 次段のDSKを SLAVE として初期化します。 C64MDL_SYSQUE_SET MDLOS で使用する転送(MDL)QUE を設定 load_SLAVE_module ロードモジュールを次段のDSKにコピーし

ます。 Load_SLAVE_END 次段のDSKの起動を行います。

初期化

TEST_MDS_CONNECT すべての DSK の接続を確認します。 Proc_array[16] = 555;

プロセス#16 を予約します。

Srand(1); 乱数発生プログラムの初期化 While(1) 無限ループの開始 MDL_RUNLED LED の点滅管理

本体プログラム

Process_CNTL プロセス全体の管理

1.9.2 Super Visor DSK での乱数発生および次段への転送

最初のプロセスは Super Visor DSK で乱数表を作成して、次段 DSK に転送しています。

MDLPROC(0xF1、16)

は 実行している DSK の Address が 0xF1(Super Visor)でかつプロセス#16 の実行

予約がされていれば、while 文内を実行します。

(unsigned int *)MDL_DBF_MSTR_OPEN_UPDATE((unsigned int *)&bufmstr);

は Double Buffered File (DBFS)が書き込み可能かどうかを確認しています。可能な場

合には書き込み開始アドレスを戻します。

次の rand 関数で乱数を発生させて DBFSファイルに格納しています。

乱数発生後同じデータを tmpbuf1 にコピーしているのは、一巡して戻ったデータとの確

認をするためです。

“tstcnt” もエラーが発生した場合に、何順目で発生したかを確認するためです。

C64MDL_FIX_GO(Ptdmafix);

は転送予約を行います。Ptdmafix は転送 QUE 番号です。

Page 14: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

MDL_BUF_CNTL_RESET(&bufmstr);

は予約が出来なかった場合に、DBFS の制御ブロックを元に戻します。

While(MDLPROC(0xF1, 16)==777) //inititalize original data at MSTR { //test buffer(send out) availability for update bufmstrPt = (unsigned int *)MDL_DBF_MSTR_OPEN_UPDATE((unsigned int *)&bufmstr); if(bufmstrPt == (unsigned int *)0xFFFF0000) break; bufin1pnt = bufmstrPt; // case: Random Number Generation for (i=0; i<ibufsize; i++) *bufin1pnt++ =((rand()) | (((rand()) << 16) ^ 0xFFFF0000)); bufin1pnt = bufmstrPt; //Copy original data for reference for (i=0; i<ibufsize; i++) tmpbuf1[i]= *bufin1pnt++; tstcnt++; //data transfer from MSTR to SLAVE i = C64MDL_FIX_GO(Ptdmafix); if(i) MDL_BUF_CNTL_RESET(&bufmstr); break; }

1.9.3 Super Visor 以外の DSK の動作

MDLPROC(0、0)

はすべての DSK で無条件で実行します。ただし

if(DSK_ADRS == 0xF1) break;

の条件により Super Visor では実行されません。

If(!TSTFILE)

は上位 DSK からのデータ転送状態を確認します。DBFS を使ってデータを受け取るすべ

ての DSK でこの変数を使って確認する必要があります。データを受け取ったら、下のよ

うに“1”をセットします。

TSTFILE = 1; //MARK received data is avail

(unsigned int *)MDL_DBF_MSTR_OPEN_READ((unsigned int *)&bufslav);

は Slave 側で受信したデータがあるかどうかの確認を行います。受信済みの場合には、

読み出しの最初のアドレスを戻しますので、直ちに tmpbuf1 にコピーをします。すべて

の DSK で同じ tmpbuf1 にコピーをしていますが、DSK が異なりますので、お互いにデー

タを破壊することはありません。

Page 15: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

MDL_DBF_MSTR_CLOSE_READ((unsigned int *)&bufslav);

を使って、コピーが完了したら DBFS を開放します。

(unsigned int *)MDL_DBF_MSTR_OPEN_UPDATE((unsigned int *)&bufmstr);

は Super Visor のときと同じです。DBFS の送信バッファーが書き込み可能かどうかを

確認しています。可能な場合には書き込み開始アドレスを戻します。

データの送信バッファーへの書き込みが終了したら、以下のように TSTFILE をクリアし

て次の受信データの受け入れが可能な状態にします。

TSTFILE = 0; //CLEAR : indicate ready to receive data

その後に下のように転送予約をするのは、Super Visor と同じです。

C64MDL_FIX_GO(Ptdmafix);

//Main Process start – same process at all DSKs while(MDLPROC(0, 0)==777) {

if(DSK_ADRS == 0xF1) break; //if supervisor skip this process //test data received already or not if(!TSTFILE)

{ //get passed DBLBUF file

bufin1pnt = (unsigned int *)MDL_DBF_MSTR_OPEN_READ((unsigned int *)&bufslav); if(bufin1pnt == (unsigned int *)0xFFFF0000) break;

//if DATA ready, copy into temp buffer I for(i=0; i<ibufsize; i++)

tmpbuf1[i] = *bufin1pnt++; TSTFILE = 1; //MARK received data is availe

//release input DBFS file test = MDL_DBF_MSTR_CLOSE_READ((unsigned int *)&bufslav); if(test) break;

} //open DBF for input

bufmstrPt = (unsigned int *)MDL_DBF_MSTR_OPEN_UPDATE((unsigned int *)&bufmstr);

if(bufmstrPt == (unsigned int *)0xFFFF0000) break; bufin1pnt = bufmstrPt; //copy

for(i=0; i<ibufsize; i++) *bufin1pnt++ = tmpbuf1[i]; TSTFILE = 0; //CLEAR : indicate ready to receive data

(下の表に続く)

Page 16: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

//data transfer from MSTR to SLAVE i = C64MDL_FIX_GO(Ptdmafix); if(i) MDL_BUF_CNTL_RESET(&bufmstr); break; }

1.9.4 一巡後のデータ確認

MDLPROC(0xF1, 0)==777

は動作している DSK のアドレスが 0xF1(Super Visor)ならば while 文内を実行します。

If(!TSTFILE)

は前節で説明したように、受信データを受信済みかどうかの確認をしています。

データを受信した後に、tmpbuf2 にコピーをしたあとに、最初に作製して保存してある

tmpbuf1 と比較しています。

ファイルの開放や受信データの状態(TSTFILE)を変更するのは前と同じです。

データの確認後、以下の命令で、プロセズ#16 の実行予約を行います。予約を行う DSK

は現在実行中の DSK(Super Visor)です。

Proc_array[16] = 555;

while(MDLPROC(0xF1,0)==777) //process in MSTR for data check { //test data received already or not if(!TSTFILE) { //get passed DBLBUF file bufin1pnt =

(unsigned int *)MDL_DBF_MSTR_OPEN_READ((unsigned int *)&bufslav); if(bufin1pnt == (unsigned int *)0xFFFF0000) break; //if DATA ready, copy into temp buffer I for(i=0; i<ibufsize; i++) tmpbuf2[i] = *bufin1pnt++; //release input DBFS file test = MDL_DBF_MSTR_CLOSE_READ((unsigned int *)&bufslav); if(test) break; } TSTFILE = 1; //MARK received data is availe

Page 17: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

for (i=0;i<ibufsize;i++) { if(tmpbuf2[i] != tmpbuf1[i]) { printf(“Error: data transmission loop at point of %x,%x!¥n”,I,tstcnt); DSK6416_rset(DSK6416_USER_REG, 7); } } TSTFILE = 0; //CLEAR ; ready to receive data Proc_array[16] = 555; break; }

1.9.5 実際の転送、およびデバッグ

ソースファイルの最後にある以下のファンクションは実際の転送を管理します。

MDLQUE_exec(0); //転送管理

また以下のファンクションは MDS64 システムのデバッグを行う際に Super Visor DSK

以外の DSK のメモリー内容を読み出すために使用します。

C64MDL_DEBUG();//debug routine

Page 18: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

2 MDS64 システムの概略

本章は技術資料の抜粋です。詳細は(資料番号 MDS64001)を参照してください。

2.1 特徴

各 DSK 間の接続は C6000 系 DSP の有する Host Port Interface (HPI)および External

Memory Interface (EMIF)機能を使用してバス接続を行っており、以下のような特徴が

あります。

l 演算負荷が大きく、単一DSPによる実時間処理ができないような計算処

理を、

1. カスケード接続されたDSPで分担してパイプライン処理を行う。ある

いは

2. 並列処理(*1)を行うことにより高速化を実現する。

l プログラムの開発は一台の DSK に接続された Code Composer Studio (C

CS)で行い、通常の単一DSKのプログラム開発と同じように処理する

ことが出来る。 また TI 社の供給するツール、ライブラリィなどが利用

できる。

l CCSが接続されていない他のDSPの初期化、 プログラム・モジュー

ルの格納、処理の分担およびスケジューリング、DSP間のデータ転送、

メッセージ伝達などは、MDS64 上で動作するライブラリィ(MDLOS)により

管理される。

l アルゴリズムに含まれる演算量に応じて接続する DSPの個数を増減できる。

l DSK に用意されている各種バスを使用することにより、TI社製DSP固

有の機能をそのまま使用できる。(*2)

(注記)

(*1)並列処理は隣り合う2台のDSK間でのみで実行される。

(*2) MDS64はDSK上に実装されている既存の3個の 80ピンコネクター(J1,J3,

および J4)を使用しているので、このコネクターを使用するほかのドータカードは

接続できない。

2.2 接続

下に MDS64_08 の場合の接続図をしめしてあります。

DSP間のデータ転送は、主DSP側(MASTER)のEMIF(外部メモリー・インターフ

ェース)ポートから従DSP側(SLAVE)のHPI(ホスト・ポート・インターフェース)

ポートを介して、各DSPが管理するメモリー領域間に直接転送されます。転送は双方

向に行われます。転送されるデータには、ユーザーデータおよびシステム管理用データ

Page 19: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

が含まれます。この転送を直接起動できるのは、主DSPです。

この目的のためにTI社製DSKに 接続するドータカードが用意されています(Mu

lti DSP Linker(MDL6000))。MDL6000 により接続された各D

SKはアルゴリズムの一部の処理を行い、順次次段のDSKに処理結果を転送します。

このようにこのシステムはアルゴリズムのパイプライン処理を行うことを基本として

いますが、一方主(MASTER)DSPからデータを従(SLAVE)DSPに転送

させてから MASTER での処理を継続すると同時に、SLAVEでMASTERの処理の

一部の処理を行い、計算結果を再度MASTER DSPに送り返すことによる並列処

理も実行します。 このシステムは演算量の多いアルゴリズムを複数のDSPに分散さ

せて処理することが出来ますが、順次データを下位のDSPに転送させるパイプライン

処理の場合には、原データの取り込み時期と最終の演算処理結果を得る時間には遅延が

生じます。また この項で説明している主DSP(MASTER)と従DSP(SLAVE)とは相対

的呼び名であり、すべてのDSKが下位のDSKに対しては主DSPですが、上位のD

SKに対しては従DSPになります。

一方各 DSKは絶対アドレスでも管理されています。CCSが接続されたDSKが Super Visor

DSK として全体を管理します。Super Visor DSK のアドレスは 0xF1 として定義され

ています、以下のアドレスは 0x11,0x21,0x31, となり最後のDSKが 0x71となります。

2.3 フロント パネル

MDS64 のフロント・パネルはおのおののDSKの状態をLEDで表示します。

l POWER: MDL6000 の 5V電源はDSKより供給されています。このLEDは電源

Page 20: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

モニターです。

l SLV1DET:本DSKのHPIポートを介して接続されているDSKのジャンパー

(JP1)が選択されている場合にこのLEDが点灯します。JP2 は使用しませんの

で SLV2DET も使用しません。

l CONNECT: 本DSKの上位DSKが本DSKを Slave として接続した場合(ソ

フトウエア接続)に点灯します。プログラムの実行は MSTR で行われます。

MDLBOOT でDSKを停止する場合にこのLEDが消えるのを確認してください。

l DOWN LINK: MSTR から Slave へデータ転送を行う場合に点灯します。プログラ

ムの実行は MSTR です。次の UP LINK の場合も同じですが、MDS64 システムでは

ユーザーデータも管理データも同じバスを使用しています。そのために DOWN

LINK の場合でも実際には管理用データのやり取りのために、UP LINK 状態が発

生しますので、両方の LED が点灯します。

l UP LINK: Slave から MSTR へのデータ転送時に点灯します。

l 電源SW: このスィッチはDSKへの 5V 電源供給のスイッチです。

Page 21: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

2.4 MEMORY MAP

MDS64のシステム開発はすべてスーパーバイザーに接続されたCCS上でのみ行います。

実際に実行するDSPのメモリーアドレスをスーパーバイザーDSPと同一にしてあ

るためにこのことが可能になります。そのためにすべてのDSPに格納されるロード

モジュールと MEMORY MAP の定義は同一である必要があります。下図は MDS64システム

の MEMORY MAPです。この領域は MDLOS で予約されていますので、ユーザーは任意に変

更できません。

Page 22: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

各領域の説明

領域 サイズ 機能 INTERRUPT Vector 0x200 割り込みテーブル MDL QUE 0x200 DSK間転送制御レジスター、一回の転送を制御するブ

ロックは 4 ワードで構成されている。32 ブロックの転送を定義できるが、送り出し側と受け取り側でブロックがペアーになっているので、32 種類の転送は定義できない。この領域は高速転送を行うためと、領域への書き込みを最小にするために、システムの初期化時に定義する。

MSG QUE 0x180 DSK内で発生したメッセージは一旦 MSG QUE に格納され、順次スーパーバイザーまで転送され出力される。ブロックは 3 ワードで構成され、32 個のメッセージを処理できる。この領域はバッファーであり、書き込みスペースがなければ、可能になるまでループ状態で停止するために他の処理はできない。エラーメッセージは同様の処理を行うが本領域は使用しない。

Control 0x180 MDLOS の使用するレジスター類の格納域 MDL VAR 0x100 MDLOS で使用する変数領域 MDL BOOT 0x100 MDL_BOOT 専用領域

2.5 MDL BOOT

MDS64 でシステム開発を行う場合に、何回もプログラムのコンパイル・リン

クやローディングを行う必要があります。CCSの接続されているSuper

VisorDSKはCPUを停止させることができますが、それ以外のDSK

は外部から強制的に停止させ、かつ新しいモジュールがローディングされた後

に再起動する必要があります。この機能を提供しているのがMDL BOOT

で、以下のように処理されています。

l Mdlloop 領域(0x800 – 0x8FF)にループ専用の領域が設けられています。

ループの開始および終了を制御するのは IDLTST レジスター(0x8F8)

です。 この Slave DSK の Mdlloop 領域の初期化は初回電源投入時の実行

のときに最終段 DSK 以外のすべてのDSKで行われます。この内容と場所

はプログラムを変更しても変わりませんので、以降の処理のときに書き換

えないようにします。

l MDS64 システムを停止させたいときは、SuperVisorDSKの

IDLTST レジスターを特定数値(0xFFFFF0F0)で書き換えて実行します。

GEL の MDLHOLT に準備されていますので、MDLHOLTを実行すればすべての

DSKが停止します。GEL Fileの内容が 0x08FC の内容を変更するように

Page 23: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

なっていますが、内部レジスターへの直接書き込みをしないようにするた

めで、システムのなかで 0x8F8 への書き換えを行っています。

l IDLTST の変更はすべてのDSKのループ内でチェックされています。チェ

ックしているループは (1)MAIN LOOP (Process_CNTL)(2)BREAK POINT

(C64_debug_Break) (3)ERROR 処理(C64_HPI_ERROR)の三箇所です。こ

れ以外のループは正常動作ではループが自然解消されますので IDLTST の

チェックは行っていません。またユーザーが独自に設定したループでは

IDLTST のチェックを行う必要があります。

l MDLHOLT が実行されると;

Ø 実行中のDSK間転送が終了するのを待ちます。終了しないばあいは

エラーになります。

Ø 転送チャンネルの排他制御権を獲得します。

Ø 最後のDSKになるまで次段のDSKの IDLTST に特定数値

(0xFFFFF0F0)を書き込みます。これにより次段以降のDSKも同様

の処理を行います。

Ø SlaveDSKが選択されている場合は選択を解除します。この時

点でユーザは”CONNECT”のLEDが消えるので正常動作を確認できま

す。このLEDはHOLTになったDSKの次段のDSKの表示です

ので注意してください。

Ø すべての未処理の割り込み信号、EDMA,をリセットします。

Ø EVENT を停止します。

Ø 割り込みは DSPINT のみを受け付けます。

Ø IDLTST の値を 0xF0F0 に変更します。

Ø そして 0x800 の領域内でのみループを実行します。

l 新しいモジュールのローディングはHPI BOOTと同じです。HPI

BOOTのときはローディング完了時に DSPINT を発生させましたが、M

DL BOOTも同じ処理を行います。ただひとつ違うのはHPI BO

OTの際は DSPINT 割り込み後 BOOTが開始しましたが、MDL BOOT

の場合には DSPINT 後にいったん割り込み処理ルーチン(dspint_isr)が

実行されます。その過程で IDLTST=0xF000 と変更され、その値を読み込

んだ Mdlloop がループを停止して、アドレス 0x00000000(reset)にブラ

ンチします。

2.6 メッセージシステム

MDS64 システムでは、Code Composer Studio が接続された SUPERVISOR DSK のみにメ

ッセージが出力されます。そのために SUPERVISOR DSK以外の DSK で発生したエラーを

Page 24: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

含むメッセージは、すべて SUPERVISOR DSK まで転送されます。この転送はメッセージ

専用の MSGQUE を使用して行われます。

MDS64 システムでは、メッセージ処理の負荷を低減するために、各 DSK で発生したメッ

セージ転送要求に対して、MDLOS はそのテキスト内容を直接 SUPERVISOR DSK まで転送

するのではなく、該当するメッセージにあらかじめ付与されているコード番号を転送し

ています。したがってユーザーはすべてのメッセージを MDL_MSG_LIST に登録しておく

必要があります。生成されたメッセージはすべて一旦 MSG_QUE スペースに格納されま

す。格納を実際に実行するのは MDL_MSG ファンクションです。Layer 0(Super visor)

に格納されたメッセージは, MDL_MSGtest2 ファンクション により出力されますが、そ

れ以外の Layer のメッセージは隣接する Layer を介して Supervisor まで転送されま

す。 この転送を行っているのは MDL_MSGexec2 ファンクションです。メッセージの

転送方向は Slave から Master へ転送されます。転送速度は遅くなりますが、確実にメ

ッセージを処理するためです。MSG_QUE スペースはアクセススピードの異なるファンク

ションが任意の時間にアクセスしますので、不正なデータの書き換えを防止するために

アクセスを管理しています。それが MSGQUE_CNTL レジスターです。 MSG_QUEスペース

へのアクセス優先順位は設定されていません。 MSGQUE_CNTL レジスターによる管理権

を受け取ったファンクションから実行されます

メッセージ出力

下の表は Super Visorでのメッセージの出力例です。

(REF)( 0:SEC: 0:milSEC )(#12)=MSG= Origin: 11 *msg(67): Begin IDLE *VALUE Number= 37 , *VALUE(HEX)= 2

メッセージ出力の各項目の説明

( 0:SEC: 0:milSEC ):はこのメッセージが発生したDSK(この場合は DSK address = 0x11)のシステムクロックです。レジスターに格納される最小単位は 524 マイクロ秒ですが、出力は milSEC 単位です。メッセージの発生間隔が 1milSEC 以内の場合には同一時刻に発生したものとして表示されます。その際の発生順番は COUNTER で確認します。 (# 12) :は COUNTER です。同一DSK内で発生したメッセージに連続して付番された番号です。出力順番はバッファーの空き状態により前後しますので、この番号により判断してください。特にエラーメッセージは早く出力されます。 =MSG= :通常のコメントです。 他に ****ERROR***、や ***WARN *** があります。 Origin: 11 :は発生したDSKのアドレスです。HEX 表示です。 Msg(67) :は MDL_MSG_LIST 内のインデックスです。 Begin IDLE :は上記リスト内に登録されているコメントです。

Page 25: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

*VALUE Number= 37 , *VALUE(HEX)= 2 はユーザーが指定します。 システム・メッセージの場合はマニアル(資料番号 MDS64007)を参照してください。

2.7 転送

MDS64 システムのDSK間データ転送は,MDLOS が管理する4ワードで構成されている

転送制御ブロックにより制御されます。予約域(MDLQUE)は 32個の転送制御ブロック

を含みますが、送出側DSKと受け入れ側DSKで対になっていますので、ユーザーは

16個の転送を定義することが出来ます。転送はプログラム中どこでも任意に定義する

ことが出来ますが、実行時間を短縮するために、通常はシステムの初期化時に定義しま

す。また一度定義した制御ブロックは削除できませんので、ダイナミックに再定義する

ことはできません。MDLOS 内では、下記の三種類の転送を定義するサブ・ファンクショ

ンが用意されています。

<あらかじめ用意されている転送の種類>

l 順方向非固定転送(MSTR から Slave)

l 逆方向転送(SLAVE から MSTR)

l 順方向固定転送(MSTR から Slave)

これらの転送のうち順方向非固定転送と逆方向転送は MDLOS で使用しますので、初期化

のときにあらかじめ設定されます。順方向固定転送はパイプライン処理を高速で行うた

めの転送で必要に応じてユーザーが設定します。

2.8 プログラムモジュールのコピー

上位DSKから下位DSKへのモジュールのコピーは “load_SLAVE_module“の中

に組み込まれている” C64MDL_NONF_GO“により実行されます。この際使用される転

送QUE(DMAQUE ID)は C64MDL_SYSQUE_SET ファンクションの実行の際に生成され

た ”順方向非固定転送“の QUE ID を用います。”C64MDL_NONF_GO“はQDMAを

使用してデータ転送を行いますので、QDMAの仕様に従う必要がありますが、QD

MAの最大転送エレメント数の 65535(0xFFFF)ワードを超えたサイズを指定した

ばあいには“load_SLAVE_module“は要求された全転送が完了するまでQDMAを繰

り返します。転送サイズはMAPファイルを参照して決定しますが、MAPファイル

はバイト表示になっていますので、ワード単位に変更する必要があります。ユーザー

アプリでモジュールサイズが未定の場合には大きめに設定します。

2.9 処理時間の測定

Page 26: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

MDS64システムにディジタル信号処理プログラムを組み込む際に各DSKに処理をどの

ように割り振るかは極めて重要です。そのために各プロセスの処理時間を測定してバラ

ンスよく各DSKに割り振る必要があります。またあるいは処理時間の長いプロセスは、

アルゴリズムやプログラミングの再検討を行わなければなりません。本章ではMDLO

Sに用意されている処理時間の測定方法について説明します。処理時間の測定はMDL

OSの基本クロックである、”TIMER1_COUNT”レジスターと一秒ごとにカウントアップさ

れる “C64_TIMER_SEC” レジスターを使用して行われます。通常信号処理プログラムは

無限ループに組み込まれておりますので、内部にメッセージ処理ルーチーンや割り込み

処理を含みます。そのために測定期間の指定は注意深く行う必要があります。MDLO

Sにはトリップ時間(同一DSK内で処理が一巡する時間)の測定などメッセージ処理

部が含まれてしまう期間の測定を行う場合のために、五回の処理時間の測定を行った後

に結果の出力を行い、メッセージ処理ルーチーンの影響を最小限にする測定方法(トラ

ップモード)が用意されていますので、できるだけトラップモードを使用してください。

[[重重要要]] MDS64 システムのクロックは各DSKで独立して動作しています。処理時間の

測定は同一DSK内での測定のみが可能であり、DSKをまたがる時間の測定はできま

せん。

2.10 パラレル処理

l パラレル処理は MSTR からデータを Slave に転送することにより開始します。

転送するファンクションは MSTR_PARAPUT で、その引数に転送データを指定し

ます。指定できるデータは 1ワードです。

l Slave 側では SLAVE_PARAGET ファンクションが受信バッファーを確認して、

データを受信していればその値を戻しますので、ユーザプログラムの中で処理

を開始します。

l 処理が完了したら SLAVE_PARAPUT ファンクションの引数に MSTR へ戻す値を指

定して呼び出します。SLAVE_PARAPUTファンクションは成功すればMSTRへHINT

割り込みを発生します。

l MSTR 側では INT#6(DEFAULT)が HINT 割り込みを処理して mdl_hint_isr 割り込

み処理ルーチーンが受信データをバッファーにコピーします。

l 最終的には MSTR_PARAGET ファンクションの戻り値が受信データを返して完了

します。

Page 27: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール
Page 28: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

3 パイプライン FFT の実装

この実装サンプルは下記論文に記載されているマルチDSPシステムに適用可能なFFTア

ルゴリズムを実装したものです。

(参考文献)

Shunichiro Egami , “A Flexible Bandwidth Multiple Beam System Using Onboard DSP”,

AIAA ICSSC 2002-1888

3.1 パイプライン FFT アルゴリズム

下の図は 16 ポイント入力の FFT 演算方式を表示したものです。通常の FFT アルゴリズ

ムと異なる点は、バタフライ演算の出力位置を変更することにより、各段での演算の型

がすべて同一になることです。そのためマルチ DSP システムに実装するばあいに各段を

それぞれのDSPに割り当てれば、各DSPの演算は同じ関数を用いて行うことが出来ます。

このアルゴリズムの長所は以下の三点があげられます;

(1)各段で同じ関数を使いますのでプログラミングが単純になります。

(2)均一化された演算負荷です。パイプライン処理システムでマルチ DSP の効率を悪

化させる要因は、DSP 間の演算負荷がバランスしていない場合です。全体の処理速度は

もっとも遅い DSP により決定されますので、本アルゴリズムは MDS64システムに実装す

るために適しています。

(3)既存のシステムとの整合性が保たれています。 回転因子の参照順序は異なりま

すが、回転因子の演算、ビットリバースなど既存のプログラムと同じになります。

Page 29: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

3.2 浮動小数点 Library (TI社の製品です。)

MDS64 システムに使用されている TI社製 DSK(TMS320C6416TDSK)は固定小数点 DSP を

組み込んでいます。したがって固定小数点演算を用いたアルゴリズムを処理する場合に

は、TI 社より提供されている通常ライブラリーを用いての高速処理が可能です。一方

アルゴリズムの評価を行う上では、固定小数点演算よりも、浮動小数点演算を用いたほ

うが、より現実的評価結果を得ることが出来ます。本資料で取り上げているパイプライ

ン FFT は、浮動小数点演算を用いた例です。そのために通常ライブラリーとは異なった

処理手続きが必要になりますので、本項で説明します。

重要:TI 社製ライブラリーの使用にあたり、頻繁に RTS(Run Time Support)の表記が出

てきますが、MDS64 システムは RTS をサポートしていません。MDS64システムでは、ロ

ード・モジュールを最初に読み込むときにすべてのファンクションを組み込む必要があ

ります。

3.2.1 C62x/64x FastRTS library

TI 社から提供されている浮動小数点 Library の名称は、”C62x/64x FastRTS library”

です。詳細は TI 社の下記資料に明記されていますので参考にしてください。

TI 社 C62x/64x FastRTS library 説明書: SPRU653.pdf

本 Library は TI 社の標準品のパッケージに含まれておりませんので、TI 社ホームペー

ジから最新版をダーンロードして使用しますが、MDS64 システムではサンプル・プログ

ラムを動作する必要がありますので、必要箇所のみを MDS64 の CD に含めて出荷してお

ります。

3.2.1.1 MDS64 システム CDから FastRTS library のインストール方法

製品に同梱されている CD ROM(MDS64 Tools)に FastRTS 関連のファイルが”fastRTS”ディ

レクトリーに格納されていますので、ディレクトリーごと、CCS のルートディレクトリ

ーにコピーしてください。サンプル・プログラムおよび説明資料等は下記の様なディレ

クトリー構造を想定しています。

Page 30: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

上図は MDS64 の CD に含まれている C62x/64x FastRTS 関連のディレクトリー構造です

が、ユーザーが TI 社のホームページからダーンロードをして本 Library をインストー

ルした場合には、異なるデイレクトリーに格納されます。 Library あるいは Include

File の格納場所を変更する必要がありますので注意をしてください。

3.2.1.2 使用方法

FastRTS を使用するためには、該当する Library がリンクされていなければなりません

が、通常Library とファンクション名が重複する場合がありますので、下記のようにコ

マンドファイル内で、FastRTS 関連 Library を先行して記載する必要があります。

-lC:¥CCStudio_v3.1¥fastRTS¥c6400¥mthlib¥lib¥fastrts64x.lib -lC:¥CCStudio_v3.1¥C6000¥cgtools¥lib¥rts6400.lib

また BUILD OPTION の設定でも”fastrts62x64x.h”の格納されている場所を下記のように

記載してください。

“$(Install_dir)¥fastRTS¥c6400¥mthlib¥include”

重要:C62x/64x FastRTS libraryはTI社の製品です。ユーザーは¥fastRTS¥c6400¥mthlib

ディレクトリーに含まれている TI_license.PDF ファイルに記載されているとおりに、

本製品使用にあたり付与されるライセンス形態に同意をする必要があります。

3.3 FFT の実装 (その 1)

第一段階では主に MDS64 システムの初期化の設定を行います。アルゴリズムは単一 DSP

上で処理するようにすべてのプログラム・コードを Super Visor 上に作製します。これ

はアルゴリズム内の処理時間の分布を測定して、各 DSP の処理分担を最適化するためで

す。またマルチ DSP で処理をしたときに正常に処理されているかどうかの参照データと

しても必要です。

3.3.1 Work Space の Open

CCS の メニューから FileàWork SpaceàLoad Workspace…を選択して開かれた

Load Workspace ダイアログ ボックスで下記の wks file を開いてください。

(CCS ROOT)¥boards¥MDS64¥examples¥twin¥floatfft¥FFT_1ststage¥dskusb.wks

この Project にはすでに必要な初期化設定がされていますので、順を追って説明します。

Project に含まれている主なファイルは以下のようになっています。

Page 31: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

ファイル名 説明 floatlFFT_twin_1st.C MAIN コードです。 Function.c FFT 演算のためのサブファンクションを含みます。 MDS64ISR.c 割り込み処理ルーチーンを保持しています。 C64_VECTORS.ASM 割り込みベクターテーブルを保持しています。 Datamove.sa Copy や Bit Reverse のサブファンクションです。 C64_CONFIG.CMD コマンドファイルです。 fft.gel GEL ファイルです。

3.3.2 コンパイル・リンク

とりあえず、本プロジェクトがなにを目的としているかを理解するために、Rebuild を

して実行します。

正常に動作すれば Output ウインドウに30項目以上のメッセージが出力されます。MDS64

システムはそのまま無限ループになっていますので、プログラムを停止してください。

下の表はメッセージ出力の抜粋です。いかに簡単に説明します。

l 一番目の MSGで DSK Address(0x11)で ”Complete Master/Slave set up”とあるのは

この DSK(二番目の DSK)のセットアップが完了した後に出力されます。

l 二番目の MSG で同じく DSK Address(0x11)で ”Begin IDLE”の表示があるのは、プロ

グラムの中でアイドリングをするように指定してあるためです。この DSKは処理を

停止しています。

l 三番目の MSG “########### MDS6x SYSTEM ready to start#############”は MDS64

システム内のすべての DSK の初期化が完了した場合に出力されますのでこれ以降

に本体処理を開始します。ただし初期化のメッセージもこの後に出力される場合が

ありますが、各 DSK 間でのメッセージ処理中に順番がずれたためです。COUNT で前

後を確認してください。

l 最後の MSG で”Elapse time”とあるのは、時間の測定を指示してあるためで、この

例の場合は 24032 nano Sec です。

(REF)( 0:SEC: 0:milSEC )(#11)=MSG= Origin: 11 *msg(62): Complete Master/Slave set up *VALUE Number= 0 , *VALUE(HEX)= 0 (REF)( 0:SEC: 0:milSEC )(#12)=MSG= Origin: 11 *msg(67): Begin IDLE *VALUE Number= 37 , *VALUE(HEX)= 2 (REF)( 1:SEC: 890:milSEC )(#13)=MSG= Origin: F1 *msg(117): ########### MDS6x SYSTEM ready to start############# *VALUE Number= 0 , *VALUE(HEX)= 0

Page 32: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

(REF)( 1:SEC: 890:milSEC )(#14)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 0) , 0 Second: 24032 nano_sec

3.3.3 プログラム コードの説明

ステップごとに動作をしながら説明します。下記のようにプログラムをローディングし

なおしてください。

l MDLBOOT を行うために、メニューから GEL を実行してください。

GELà Multi DSP Linkerà MDLHOLT

l GEL が正常動作したばあいには、全面パネルの CONNECT LED がすべて消えま

すので確認してください。システムは MDLLLOOP で無限ループになっています

ので、実行停止をしてください。

l メニューから FileàReload Program を選択してください。

l モジュールがローディングされて、プログラムの MAINで停止します。

PC のファンクション・キー(F10)は Step Overで一行ずつ実行しますので、F10 KEY

を押しながら、実行します。

l 下記関数は、TI 社より提供される C6416 DSK の初期化を行います。

DSK6416_init();

l 変数(DSK_ADRS)は初期値として 0x9999 が設定されていますので、下記の

IF 文はコンパイラー後初めての実行のときにのみプリントアウトされるプロ

グラムに関する注意事項などを出力しますが、なくてもかまいません。

If(DSK_ADRS == 0x9999)

l 下記の変数(UserDef_TOT_LAYER)の設定は重要です。MDS64 システムは実装され

ている DSK の Layer 数とこの設定値が合致しなければ、エラーになり、停止し

ます。MDS64_twin の場合は “1”です。(0ベース)

UserDef_TOT_LAYER = 1;

l 下記の変数は転送速度を規定します。外部メモリーの使用や、EDMA転送の多用

は、DSK 間転送に影響を及ぼしますので、変更する必要があります。

MDL_EMIFA_CE2 =0x1091C622;

l init_MSTR ファンクションは、現 DSK の初期化を行います。

Init_MSTR(MDL_EMIFA_CE2、UserDef_TOT_LAYER)

l AVAILSLAVE 変数は現 DSK に接続されている Slave をチェックしています。

l 割り込みは、EXT6, EXT7, 8(DMA_Send/Receive),13(DSPINT),15(TIMER1)で設

定されています。EXT6, EXT7 は HINT 割り込みです。

Page 33: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

IER |= 0xA1C2;

l 下記のファンクションは現DSK に接続されている Slave の初期化を行っていま

す。

C64_Init_SLAVE(MDL_EMIFA_CE2)

l DMABUF_set ファンクションは DBFS ファイルの初期化を行います。DBFS はこの

ファンクションによる初期化が必要です。 下の例では”bufmstr”が DBFS です。

DBFS は構造体として宣言されていなければなりません。構造体は 4ワードのフ

ァイル制御レジスターと連続する二つのバッファーによりなりたっています。

DMABUF_set(0, bufmstr, nFFT*2, 1);

l MDLOS で使用する、順方向非固定転送と逆方向転送を定義します。

C64MDL_SYSQUE_SET()

l パイプライン処理を行う場合には、順方向固定転送を使用しますので、下記の

ファンクションにより定義します。この転送は高速に行うために、転送ワード

数、転送元ファイル名、および転送先ファイル名は後で変更できません。ファ

イルはともに DBFS を指定します。 また転送後に行う特定のプロセスの実行

も指定できません。

C64MDL_FIX_SET

l 転送 QUE の定義が完了しましたので、現 DSK から SLAVE へロードモジュールの

コピーを行います。この転送に使われるのは、順方向、非固定転送です。

START_adrsはコピーの開始点です。Slave側の同じアドレスにコピーされます。

この例ではモジュールを 3箇所に格納しているために load_SLAVE_module を 3

回実行しています。START_adrs が、0,0x900,0x80000000 となっていますが、

MDS64 システムで固定定義されていますので、0x80000000 以外は変更できませ

ん。最初の 0 番地から始まる 128 ワードの転送は割り込みベクターのコピー

を行っています。ワード数は正確に設定してください。アドレスが 0x200 を超

えると MDLOS の作業域を破壊します。二番目の 0x900から始まる領域はメイン

プログラムのコピーです。この領域のサイズは MAP ファイルを参照して決定し

ますが、デバッグ中に増減しますので、かなり大きめの数値を設定してくださ

い。サイズオーバーでも通常はシステムに影響がありません。少ないばあいに

は、必要な実行モジュールがコピーされませんので Slave で動作エラーを起こ

します。またこの種のエラーが発生した場合は、原因の特定が難しくなります。

転送は QDMA を使用しています。メモリーが実装されていればコピーを行いま

す。

Load_SLAVE_module

l ロードモジュールの Slave へのコピーが完了したら、load_SLAVE_END ファンク

ションを用いて Slave を起動します。起動する信号は dspint 割り込み信号で

す。

Page 34: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

Load_SLAVE_END();

l Slave の起動に成功すれば、自 DSK の処理を開始してもかまいませんが、

TEST_MDS_CONNECT ファンクションを使って後段のすべての DSK が動作するま

で待ちます。’ ########### MDS6x SYSTEM ready to start#############”のコ

メントはこのファンクションが成功したときに表示されます。これからアルゴ

リズムの実処理を開始します。

TEST_MDS_CONNECT()

l 次の設定はシステムの開発初期段階で重要です。この命令は,DSK Address が

0x11(すなわち Super Visor の次の DSK)のときは、MDL_Repeat を 0 にするよ

うにしています。この処理は C64_debug_Break ファンクションを実行可能にし

ます。DEBUG_BreakCNT 変数を 2 に設定してこの場所でループするように指定し

ています。このようにして、二段目以降の DSK の動作を停止して、アルゴリズ

ムを実装するときのプログラム上のバグを Super Visor 上で取り除くことを目

的にしています。

If(DSK_ADRS == 0x11) MDL_Repeat =0; DEBUG_BreakCNT = 2; C64_debug_Break(0x11,2);

l irpt は FFT 演算の段数を計算しています。サンプル・プログラムは 256 ポイ

ント FFT ですので、irptは 8 になります。

l fft_table ファンクションは回転因子、およびビットリバースのポインターを

計算しています。

Fft_table(wn_FFT, br_FFT, nFFT);

3.3.5

l MDL_TimeGET を使って 5箇所の処理時間を測定しています。

Pointer 内容 コメント 例(μS) 0 矩形波の生成 2.8 1 データコピー 1.0 2 FFT 演算 パイプライン FFT アルゴリズム 323.0 3 Bit Reverse 1.9 4 全期間 FFT 演算から Bit Reverse まで 326.4

より正確な時間測定のためには、一区間ごとに測定してください。

重要:そのほかの注意事項:

Project の Build Option の Compiler タグは以下のように設定します;

1 Endianness: Little Endian 2 Memory Models: Far(--mem_model:data=far) 3 Opt Level=3, 開発初期に None に設定したときは、処理時間不足によ

る不具合が発生しますので注意してください。

Page 35: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

Project の Build Option の Linker タグで;

1 Output Module: は Absolute Executable(-a) 2 Autoinit Model: は Load-Time Initialization(-cr) 3 Stack Size:はかなり大きめに設定すること

に注意してください。 特に上記 2および 3 項目はエラーが発生したときにエラーメ

ッセージが出力されませんので、原因の特定が難しくなります。

そのほか Include File や Library はエラーメッセージがでますので、場所の確認を

して指定してください。

Page 36: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

3.4 FFT の実装 (その 2)

次に前段階で作製した演算部分を各 DSK に分散します。 この段階で重要な確認項目は

Slave での処理結果が、Super Visor 上での処理の該当する途中結果と同一であること

を確認することです。

3.4.1 Work Space の Open

CCS の メニューから FileàWork SpaceàLoad Workspace…を選択して開かれた

Load Workspace ダイアログ ボックスで下記の wks file を開いてください。

(CCS ROOT)¥boards¥MDS64¥examples¥twin¥floatfft¥FFT_2ndstage¥dskusb.wks

3.4.2 MDS64 関連変数の指定

最初に以下の変数の設定をします。

//initialize MDS64 related varaiables 説明 MDL_Repeat = 8000; 一巡するたびにカウントダウンします。

MDL_TimeGET や C64_debug_Break はMDL_Repea が 0でなければ動作しません。システムが安定するまで上記測定を休止させるために挿入します。

CLR_TimeBUF(); MDL_TimeGET で使用するバッファーをリセットします。

TSTFILE11 = 0; 転送データの受信状況を保持します。 *(unsigned int *)MDL_SEQUENCETST = 1; Sequence 制御を ON にします。

3.4.3 全 DSK 共通のファンクション

下の 4 個のファンクションは全 DSK で使用されます。任意使用の場合や、必要不可欠な

場合、また場合によっては、使用が禁止されるものもあります。

ファンクション 説明 MDL_RUNLED(); LED を制御します。ハードウエアデバッグに使用します。 Process_CNTL(); プロセスの管理を行いますので、必ず必要です。 MDLQUE_exec(0); パイプライン転送を管理します。パラレル処理には使用禁止です。 C64MDL_DEBUG(); デバッグに使用します。

3.4.4 各 DSK での処理

3.4.4.1 Super Visor での処理:

l MDLPROC ファンクションは、引数で渡す二つの変数(DSK Address, Process#)

が一致すれば、While 文内を実行します。この例では Process#が“0”ですの

で、Process#のチェックを行わずに、DSK addressが“0xF1”すなわちSuper Visor

でのみ実行します。

While(MDLPROC(0xF1, 0)==777)

Page 37: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

l 順方向固定転送の場合は前の転送で QUE が使用中でも転送の準備を進めます。

転送直前になって、前の転送が完了していれば転送 QUE を新しく書き換えて転

送を開始します。しかし転送準備が完了したにもかかわらず前の転送が完了し

ていない場合は、FIXQUEKEY をセットしますが、これ以上の転送準備はできま

せんので、Process はスキップします。FIXQUEKEY を書き換えているのは MDLOS

です。無視をすると転送データを破壊します。

If(*(unsigned int *)FIXQUEKEY) break;

l 以下のファンクションは Double Buffered File (DBFS)が書き込み可能かどう

かを確認しています。可能な場合には書き込み開始アドレスを戻します。

(float *)MDL_DBF_MSTR_OPEN_UPDATE((unsigned int *)&bufmstr);

l 次に pipefftSP ファンクションを 4個続けて実行していますが、これらは前 4

段のバタフライ演算を行っています。For ループにしていないのは xorg(原

データ)を保持するためです。

l ほかの部分はいままで説明してきましたので、理解できると思いますが、

TSTFILE11 変数を使用していません。これは読み出した後にすぐクローズ処理

をしているために必要ないからです。

3.4.4.2 Slave での処理:

l DSK address が“0x11”すなわち次段の DSK でのみ実行します。

While(MDLPROC(0x11, 0)==777)

l その 1 で使用したブレーキィングポイントを下のように設定します。ここでの

条件式は;MDL_CURCNT 変数です。Sequence 制御を行った場合には何番目の処

理を行っているかわかりますので、最初の転送データの受信を確認した時点で

プログラムを停止してループ状態にはいります。

If(DSK_ADRS == 0x11) MDL_Repeat =3000; if((*(unsigned int *)MDL_CURCNT == 1) && (DSK_ADRS == 0x11))

MDL_Repeat =0; DEBUG_BreakCNT = 2; C64_debug_Break(0x11,2);

l pipefftSP ファンクションは残りの 4段のバタフライ演算を実行します。

l 二番目の DSK 処理の最後にビットリバース処理を実行します。最後の結果は

bufin1pnt に格納しますが、これは順方向固定転送の送り出し側ファイルです。

C64MDL_FIX_SET ファンクションの引数と確認してください。

Swapsp(bufin2pnt, bufin1pnt, nFFT, br_FFT);

pipefftSP(xorg, tmpbuf1, wn_FFT, 1, nFFT);

Page 38: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

3.4.5 デバッグ

いよいよプログラムが所定の動作をしているかどうかを、確認します。問題があればそ

の箇所を調べて修正します。

3.4.5.1 参照データの確認

最初にどのような結果が期待されるのかを調べて起きます。

“supervisor special”ですべての FFT 演算が終わったところでブレーキィングポイント

を設定して結果をグラフ表示しておきます。この例では下記のフアンクションでプログ

ラムをとめています。

MDL_TimeGET(0xF1,3,TIMEGET_Stop);

メニューで

ViewàGraphàTime/Frequency…

を選択して “Graph Property Dialog”ウインドウを表示します。

Start Address, Acquisition Buffer, Index Increment, DSP data Type などに注意を

しながら FFT の演算結果を表示します。 アドレス tmpbuf2[0]から開始するグラフは

実数部、tmpbuf2[1]からのグラフは虚数部の結果です。データは実数、虚数が交互に

256 格納されています。

結果は以下のグラフのようになりますので、Slave の計算結果も同じになるかどうかを

確認します。

Page 39: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

3.4.5.2 MDS64 の結果の表示

Slave での計算結果は,Super Visor DSK の下記のファンクションまで処理が到達した時

点で調べますので、下記命令にブレーキィングポイントを設定してください。

データを受信したときに、このファンクションまで到達するからです。

Test = MDL_DBF_MSTR_CLOSE_READ((unsigned int *)&bufslav);

3.4.5.1 でのグラフ表示と同じように、アドレス”bufin1pnt”でのグラフを表示しますと

かなり違っていることがわかります。

3.4.5.3 トレース

MDS64 システムのトレースは各 DSK の要所、要所のデータを Super Visor まで転送して

正しいデータと比較します。

最初に転送されたデータが正しく Slave 側で受信されているかどうかの確認をします。

Super Visor の下記の命令文にブレーキィングポイントを設定してプログラムを最初か

ら実行します。この場所は Super Visor からのデータの出力点です。

I = C64MDL_FIX_GO(Ptdmafix);

Page 40: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

以下のように bufin1pnt のグラフを表示して他の場所に保存しておきます。

次に Slave 側プログラムで転送データを受信した直後に以下の処理を挿入します。

//copy received data into buffer for test copysp(bufin2pnt,tmpbuf1,nFFT); if(DSK_ADRS == 0x11) MDL_Repeat =3000; if((*(unsigned int *)MDL_CURCNT == 1) && (DSK_ADRS == 0x11)) MDL_Repeat =0; DEBUG_BreakCNT = 2; C64_debug_Break(0x11,2);

上の命令はデータ受信後にその内容を tmpbuf1 にコピーをして、MDL_CURCNT が”1”(すな

わち最初に受信されたデータ)の場合にはプログラムを停止してループするように指定

しています。

l MDLHLT を実行後、Super Visor のすべてのブレーキィングポイントを解除後、

Rebuild をして実行します。

l Output ウインドウで下記のメッセージを確認後、プログラムを停止します。

Begin IDLE

l プログラム・ソースコードの一番下に下記のファンクションが用意されていま

すので、その点にブレーキィングポイントを設定し、実行してその場所で停止

させます。

C64MDL_DEBUG();

l DEBUG_SW 変数を Memory ウインドウに表示します。

l 下記のようにメニューから GEL を実行します。DEBUG_SW の Memory ウインドウ

が下記のように変化するのを確認してください。GEL 実行後最後に DEBUG_SW

に 0x00000001 が設定されます。この状態で C64MDL_DEBUG ファンクションを実

Page 41: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

行すると,DSK address(0x11)の 0x000D0000 から サイズ(0x200)ワードの

データが Super Visor の buffer tmpbuf2(0x000D0800)にコピーされます。

GELà Multi DSP Linkerà Gettmpbuf1

l プログラムを実行してから、“Complete Debug data transmission“のメッセ

ージを確認後、 tmpbuf2 のグラフを、オリジナル データと比較して、転送

は間違いなく行われていることを確認します。

l 転送は間違いなく行われているので、その後のステップを調べると、バタフラ

イ演算を 2 回しか行っていないことに気がつきます。挿入したテスト関連命令

を除去した後に、プログラムを修正して Rebuild 後結果を再確認します。

Page 42: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

3.5 FFT の実装 (その 3)

計算結果に間違いがないことを確認したら、処理時間の計測を行います。アルゴリズム

の検証と同じように、信号処理システムでは処理時間の検証も重要項目ですので、処理

時間のデバッグ方法も説明します。

3.5.1 TRIP TIME

ディジタル信号処理システムにおいて重要な時間は、一連のアルゴリズム処理を完了す

る時間です。パイプライン処理では一連のアルゴリズムを複数の DSK に分散して処理を

行っていますので、それぞれの DSK が割り振られた演算処理を完了する時間になります。

MDS64 システムでは、Sequence Control を行い、計算データの送受信を管理しておりま

すので、すべての DSK の処理時間は待ち時間を含めて、ほぼ同じ時間になります。した

がって処理時間の測定は Super Visor DSK で行っています。この処理時間は Super

Visor DSK で割り振られたすべての演算(アルゴリズムおよび制御)を一巡する時間

で、MDS64システムでは “TRIP TIME”として定義されています。

3.5.1.1 Work Space の Open

下記の wks file を開いてください。

(CCS ROOT)¥boards¥MDS64¥examples¥twin¥floatfft¥FFT_3rdstage¥dskusb.wks

3.5.1.2 Trip Time 測定の組み込み

Main ソースファイル(floatlFFT_twin_3rd.C)の MDLQUE_exec ファンクションの実行

結果により、MDL_TimeGET ファンクションを呼び出し、時間測定を行っている箇所があ

りますので、コメントアウトされている場合は、下記のように実行できるようにしてく

ださい。

/* SKELETON #xx Time Measure: TRIP TIME */ if(!MDLQUE_exec(0)) //return 0 if succeed to kick off transmission { MDL_TimeGET(0xF1,5,TIMEGET_Stop); MDL_TimeGET(0xF1,5,TIMEGET_Begin); } /* END of SKELETON # xx */

l MDLQUE_exec ファンクションは転送のキックオフに成功した場合は、“0”を戻

しますので、成功したかどうかを確認しています。

l MDL_TimeGET ファンクションの測定 DSK は Super Visor です。Option = 5 です

ので、同じ箇所の測定を繰り返します。

l また測定完了(TIMEGET_Stop)が先に設定されていますので、転送が開始された

Page 43: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

ときまでの時間を測定します。開始されていなければ無視されます。測定完了

後ただちに時間測定を開始していますので、結局この場所までの一巡する時間

を測定していることになります。

重要:MDLQUE_execファンクションを同時に複数組み込んだ場合には、注意が必要です。

3.5.1.3 Trip Time 測定の実行

すでに実行した後のばあいには、MDLHLT を実行後、Super Visor のすべてのブレーキィ

ングポイントを解除して、Rebuild をして実行します。Build Option はどの設定でも

かまいませんが、Option = 3 を選んだ場合は、下記のような測定結果が得られます。

(REF)( 3:SEC: 584:milSEC )(#21)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 181392 nano_sec (REF)( 3:SEC: 584:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 181464 nano_sec

l Pointer は 0 から 4 まで同じような測定値が繰り返されます。

l Trip Time は約 181 マイクロ秒になります。単一 DSK での処理時間が約 325で

すから約 44%の改善をしています。

3.5.2 転送時間の測定

転送の開始は MDLQUE_exec ファンクション内部で実行されますが、開始直後に呼び出し

プログラムに制御が戻されますので、MDLQUE_exec ファンクションの終了時点を転送開

始時間としても誤差は許容範囲です。QDMA による転送完了後は割り込みの発生により

割り込み処理ルーチーン(mdl_edma_isr)で転送の後処理を行った後に、転送チャンネル

を開放します。転送チャンネルの開放は MDLREADY 変数を 0 クリアすることにより完

了しますので、転送の終了は MDLREADYが 0 になる時になります。

3.5.2.1 転送時間測定の組み込み

Main ソースファイル(floatlFFT_twin_3rd.C)の MDLQUE_exec ファンクションの実行

結果により、MDL_TimeGET ファンクションを呼び出し、時間測定を行っている箇所があ

りますので、コメントアウトされている場合は、下記のように実行できるようにしてく

ださい。

Page 44: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

/* SKELETON #xx Time Measure: TRASMISSION TIME from Master to Slave */ if(!MDLQUE_exec(0)) //return 0 if succeed to kick off transmission { MDL_TimeGET(0xF1,5,TIMEGET_Begin); while(TEST_MDLRDY(1)!=0); MDL_TimeGET(0xF1,5,TIMEGET_Stop); }

l TEST_MDLRDY(1)は MDLREADY が 0になるまでループをします。

l この例では Super Visor での測定を行っていますが、ほかの DSK でも同様に測

定できます。

重要:MDLQUE_exec ファンクションを複数組み込んだ場合には、測定できません。

3.5.2.2 転送時間 測定の実行

すでにプログラムを実行したばあいには、MDLHLT を実行後、Super Visor のすべてのブ

レーキィングポイントを解除して、Rebuildをして実行します。下の表は実行結果です。

本サンプル・プログラムは 512 ワード(256x2)の転送をしています。

(REF)( 2:SEC: 325:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 19344 nano_sec (REF)( 2:SEC: 325:milSEC )(#23)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 19344 nano_sec

3.5.3 各 DSK の処理時間の測定

TRIP TIME を最適化するためには、各 DSK の処理時間をできるだけ同じようにする必要

があります。本項では各 DSK のアルゴリズム処理に要する時間を測定します。

3.5.3.1 転送時間測定の組み込み

l MDLPROC ファンクションの直後に、時間測定を開始します。

注意:FIXQUEKEY 変数がセットされている場合には、内部の処理がスキップされますの

で、測定終了点が MDLPROC ファンクションの外にある場合は、FIXQUEKEY 変数の直後か

ら開始するようにします。本例題では FIXQUEKEY 変数の前でもかまいません。

MDL_TimeGET(0xF1, 5, TIMEGET_Begin);

l MDLPROC ファンクションの終了の”break;”の直前に測定終了点を挿入します。

Page 45: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

MDL_TimeGET(0xF1, 5, TIMEGET_Stop);

l これ以外のMDL_TimeGETファンクションはすべてコメントアウトしてください。

l MDLQUE_exec ファンクションは”MDLQUE_exec(0);”のみを使用します。

3.5.3.2 Super Visor での処理時間測定の実行

すでにプログラムを実行したばあいには、MDLHLT を実行後、Super Visor のすべてのブ

レーキィングポイントを解除して、Rebuildをして実行します。下の表は実行結果です。

Super Visor での処理時間は 約 175 マイクロ秒になります。

(REF)( 3:SEC: 708:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 174720 nano_sec (REF)( 3:SEC: 708:milSEC )(#23)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 174656 nano_sec

3.5.3.3 他の DSK での処理時間測定の実行

同様に DSK address(0x11)での処理時間を測定します。その際、MDLHLT の実行を忘れな

いようにします。下の表は実行結果です。

Slave (0x11)での処理時間は約 167 マイクロ秒になります。これ以上合わせこむこと

は難しいのでこれでとめてあります。

(REF)( 1:SEC: 429:milSEC )(#15)=MSG= Origin: 11 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 166664 nano_sec (REF)( 1:SEC: 429:milSEC )(#16)=MSG= Origin: 11 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 166632 nano_sec

3.5.4 ループ・タイム測定

MDS64 ではシステムを統合的に管理するクロックが存在しません。そのために複数の

DSKにまたがる処理時間の測定方法は用意されていません。ただし Super Visor

DSKから順次下位のDSKに転送されたデータが最終段のDSKで演算が完了す

Page 46: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

るまでどの程度の時間がかかるかは極めて重要なことです。

MDS64 システムでは、この時間をループタイムと呼び、測定は下のように;

*(unsigned int *)MDL_SEQUENCETST = 3;

MDL_SEQUENCETST に 3 を指定することにより行っています。したがってループ・タイ

ムの測定は SEQUENCE CONTROL を動作状態にして測定しています。

l ループタイムは Super Visor DSK の処理中に MDL_CURCNT が 1 から 5 までの値

のときに測定を開始します。また Super Visorでのデータの処理時間を含んだ

値になります。 MDL_Repeat 変数を指定した場合(通常は指定します。)はプ

ログラムの開始直後は時間測定ができませんので、MDL_CURCNT が 99999 を超え

て次のサイクルに再度 1 になったときに測定を開始します。そのためにプログ

ラム実行後しばらくしてから表示されますし、また何回も表示されます。

l ループタイムの終了時刻は Super Visor DSK が上記 MDL_CURCNT の転送データ

の受信を確認したときです。

重要:MDL_TimeGET ファンクションは明示的に使用していませんが、Process_CNTL ファ

ンクション内で使われていますので、ユーザは他の場所で MDL_TimeGET ファンクション

を使えません。すべてコメントアウトしてください。

下の表は表示例です。このサンプルプログラムの場合のループタイムは約 544 マイクロ

秒です。

(REF)( 20:SEC: 206:milSEC )(#21)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 544664 nano_sec (REF)( 20:SEC: 206:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 544400 nano_sec

Page 47: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

4 パラレル処理の実装例(MDS64_twin)

このサンプル・プログラムはパラレル処理の実装例です。MDS64 システムの動作は;

l MSTR DSK は 48kHz でサンプリングをしているコーデックから入力信号を取り

込み、

l Slave DSK に転送して、512 タップのハイパスフィルター(FIR)処理を行い。

その結果を MSTR DSK に戻します。

l MSTR DSK は同じ入力データを 512 タップのローパスフィルター(FIR)処理を

行います。

l 両方のフィルター処理が完了した時点で MSTR DSK のコーデックから出力しま

す。

4.1 入出力

MDS64 システムの入出力は “L型オーディオケーブル”を使用します。

本サンプル・プログラム での入出力は以下のように設定されています。

DSK への入力は : J303(LINE IN)

DSK からの出力は: J304(LINE OUT)

下図は L型オーディオケーブルの信号極性です。

入力信号は RIGHT 端子へ供給します。テストのために 2Vrms のサイン波を供給してくだ

さい。この入力信号は DSK の内部で反転されて、AIC23コーデックへは信号レベルが半

分になります。

出力信号は RIGHT 端子から HPF の出力が、LEFT端子から LPF 処理された信号が出力さ

れます。

Page 48: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

4.2 電源等の投入順序 および Work Space の Open

機器の接続、電源等は以下の手順に従ってください。

l MDS64 を含むすべての機器(PC 以外)の電源が OFF 状態であることを確認。

l 入出力ケーブル(L 型オーディオケーブル)を信号源、測定器に接続

l PC 上の CCS が起動していないことを確認して、MDS64システムの L型 USB ケー

ブルを PC に接続

l 信号源の出力レベルが“0“であることを確認して、信号源、測定器の電源を

投入

l MDS64 システムの電源を投入する。投入後30秒ほど POST の完了するのを待つ

l PC 上で CCS を立ち上げる。

CCS の起動後に機器の電源を入れると、投入の際のノイズにより CCS がハングアップす

る場合があります。

CCS の メニューから FileàWork SpaceàLoad Workspace…を選択して開かれた

Load Workspace ダイアログ ボックスで下記の wks file を開いてください。

(CCS ROOT)¥boards¥MDS64¥examples¥twin¥mulFIR¥dskusb.wks

この Project にはすでに必要な初期化設定がされています。

Project に含まれている主なファイルは以下のようになっています。

ファイル名 説明 C64_mulFIR.C MAIN コードです。 subfunc_FIR.c FIR 演算のためのファンクションを含みます。 MDS64ISR.c 割り込み処理ルーチーンを保持しています。 aic23.c AIC23 コーデックの設定ファイルです。 C64_VECTORS.ASM 割り込みベクターテーブルです。 C64_CONFIG.CMD コマンドファイルです。 mulFIR.gel GEL ファイルです。

4.3 コンパイル・リンク

Rebuild をして実行します。

正常に動作すれば Output ウインドウにメッセージが出力されます。MDS64 システムは

そのまま無限ループになっています。

入力信号レベルを徐徐に増やして(最大 2Vrms)出力を確認してください。10kHzを

境にして出力が切り替わります。動作確認がされたらプログラムを停止してください。

4.4 AIC23 コーデックの設定

Page 49: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

TI 社の TMS320C6416T DSK には “TLV320AIC23” Stereo Audio Codec が組み込まれてい

ます。本サンプル・プログラムは入出力信号の ADC /DAC 変換を AIC23 コーデックで処

理していますので、その本プログラムに関係する項目の設定方法を説明します。

AIC23コーデックはコーデック自体に組み込まれた10本の制御レジスターにより動作

が規定されます。そのため、ユーザーはあらかじめ AIC23 コーデックの該当するレジス

ターに所定の値を書き込む必要があります。このレジスターへの書き込みは、DSP のシ

リアルポート(McBSP1)を使用して行われ、実際の値は、“subfunc_FIR.c”ファイル内

の“AIC23_Params config“変数に記述されています。

#7(0-based)レジスターは“Digital audio interface format”を規定します。

Master/Slave は Master.

DAC left/right phase は Right channel on, LRCIN low

Input bit length は 16bit

Data format は DSP

以上の設定によりコーデックと DSP の間の信号フォーマットは以下のようになります。

#8レジスターはサンプル周波数を規定します。

Page 50: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

D5-D2=0011 : Sampling rate control 8kHz

D5-D2=0110 : Sampling rate control 32kHz

D5-D2=0000 : Sampling rate control 48kHz

D5-D2=0111 : Sampling rate control 96kHz

D1=0 : Base oversampling rate(BOSR)

USB mode : 0=250fs, 1=272fs

Normal mode: 0=Normal 1=USB

D0=1 : Clock mode select 0= Normal, 1 =USB

サンプル・プログラムでは以下の設定になっています。デバッグ等プログラムの

Optimize が出来ない場合はサンプリング周波数を下げてください。

D0=1(USB clock mode),

D1=0(USB mode, 250fs),

D5-D2=0000(48kHz sampling rate)

4.5 DSP シリアルポート(McBSP2)の設定

AIC23コーデックの出力データは DSPのシリアルポート(McBSP2)を介してDSPへ取り込

まれ、DSP での処理が完了後に同じシリアルポートから出力されます。本項ではサンプ

ルプログラム特有の設定を説明します。

McBSP ポートの初期化は、“subfunc_FIR.c”ファイル内の“mcbsp2_init “ファンク

ションで行われています。McBSP2_RCR レジスター(McBSP2_XCR(送出側)も同じ設定)

は下記のように設定されています。

McBSP2_RCR = 0x00000A0; // 0000:0000:1010:0000 /* element=32bit 1word

14–8(bit) RFRLEN1 Receive frame length in phase 1

RFRLEN1 = 000 0000b: 1 word per phase

7–5(bit) RWDLEN1 Receive element length in phase 1

RWDLEN1 = 101b: 32 bits

これは16ビット、2 ワードの連続信号を32ビットとして入出力を行っています。処

理上面倒になりますが、左右のデータを確実に保証するためです。

4.6 MAIN プログラムの説明

l load_SLAVE_module は二箇所のメモリー領域のコピーをしています。これ

は”C64_CONFIG.CND”ファイル内で “.eprog > IRAM”の指定により MDLOSの

初期化部分を内部メモリーに格納しているためです。

l TEST_MDS_CONNECT ファンクションを削除してあります。あってもかまいません。

l 重要: Parallel 処理の場合には “*HINTCNTL = 0;”の命令により HINTCNTL

Page 51: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

レジスターをクリアしなければなりません。この命令が無い場合には HINT 割

り込み処理が行われません。

l 重要: *(unsigned int *)MDL_SEQUENCETST = 0;の命令により明示的にシー

ケンス制御を無効にします。

l init_codec ファンクションはコーデックの初期化を行います。

l MDL_RUNLED ファンクションはオプションです。無くてもかまいません。

l Process_CNTL ファンクションは必要です。無い場合には MDLBOOT が起動しませ

ん。

l TSTFILE11 変数はパイプライン処理と同じように入力データがあるかどうかの

ID です。

l inData1 = inData1 & 0x0000FFFF;は右側データのみを取り込んでいます。

l MSTR_PARAPUT ファンクションは取り込んだデータを Slave に送信しています。

l fir_filter ファンクションは FIR フィルターの演算です。引数でローパスフィ

ルターの係数を渡しています。

l MSTR_PARAGET ファンクションは Slave での演算が完了したかどうかを確認し

ています。完了していればデータを受け取ります。

l outData2 に16ビットの出力データを同時に出力するように格納します。

McBSP2_write(outData2);

l SLAVE_PARAGET ファンクションは MSTR からのデータを受け取ります。

l SLAVE_PARAPUT は演算結果を MSTR へ出力する準備をします。この時点で HINT

割り込みを発生します。

l Parallel処理を行う場合は MSTR から Slaveへの DMA 転送が使えません。その

ために MDLQUE_exec ファンクションを含めることが出来ません。MDLQUE_exec

ファンクションのメッセージ処理も出来なくなりますので、下記の二行を付け

加えます。

MDL_MSGexec2(); if(DSK_ADRS == 0xF1) MDL_MSGtest2();

l C64MDL_DEBUG ファンクションはオプションです。デバッグの際に必要になりま

す。

Page 52: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

5 パイプライン FFT の実装(MDS64_eight)

MDS64システムはアルゴリズムのパイプライン処理を行うことによる実行速度の改善を

主目的としておりますので、DSK を追加することによりトリップタイムを短縮させるこ

とが出来ます。本項では8枚の DSK を用いたシステム(MDS64_eight)の使用方法につい

て説明します。なおアルゴリズムを各 DSK へ分担する場合の制約等(たとえば分離でき

ない演算があるなど)により DSK の枚数を増やしても実行速度の改善が出来ない場合も

あります。

5.1 Diagnostics プログラムの実行

l CCS の メニューから FileàWork SpaceàLoad Workspace…を選択して開か

れた Load Workspace ダイアログ ボックスで下記の wks file を開いてくだ

さい。

(CCS ROOT)¥boards¥MDS64¥examples¥Diagnostics¥dskusb.wks

l MDS64_eight システムの場合のUserDef_TOT_LAYER は ”7” になりますので修

正してください。

UserDef_TOT_LAYER = 7; (MDS64_eight の場合)

l Rebuild 後に実行してください。

l 8 枚すべての DSK を初期化しますので、twin に比べて時間がかかります。また

途中メッセージバッファーの空き待ちにより停止する場合もあります。

l 初期化のメッセージはすべて Output ウインドウに表示されません。古いもの

は削除されます。すべてのメッセージログを確認したい場合は下記のようにフ

ァイルに書き出してください。

<Stdout のログ書き出し>

Output の Stdout タグのウインドウ上で右クリックをして、下記のよう

に”Save Output to File”ダイアログに必要な設定をしてOKをクリックする。

重要:本設定によりアクセス時間は増えます。内容確認後、必ず設定を解除し

てください。

Page 53: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

5.2 FFT の実装

Diagnosticsプログラムに続けてFFTのワークスペースあるいはProjectを開きますが、

その前にかならずMDLHOLTを実行してすべてのDSKがお互いにアクセスをしないように

します。

l CCS の メニューから FileàWork SpaceàLoad Workspace…を選択して開か

れた Load Workspace ダイアログ ボックスで下記の wks file を開いてくだ

さい。

(CCS ROOT)¥ boards¥MDS64¥examples¥eight¥floatfft¥FFT¥dskusb.wks

l Rebuild 後に実行してください。

5.3 プログラム コードの説明

システムの初期化は前出の 3.3.3 項を参照してください。

各段の DSK はデータを受け取ると直ちに一段のバタフライ演算のみを行い、結果を次段

に送っています。コピーによる処理時間の遅延を防止するために、入出力バッファーは

転送バッファーをそのまま使用しています。

5.4 Trip Time 測定の実行

すでに実行した後のばあいには、MDLHLT を実行後、Super Visor のすべてのブレーキィ

ングポイントを解除して、Reload Program でプログラムを読み込んだ後に実行します。

サンプルプログラムには Trip Time 測定ルーチーンが組み込まれていますので、下記

のような測定結果が得られます。

Page 54: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

(REF)( 9:SEC: 128:milSEC )(#21)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 59680 nano_sec (REF)( 9:SEC: 128:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 59648 nano_sec

l Pointer は 0 から 4 まで同じような値が繰り返されます。

l Trip Time は約 60 マイクロ秒になります。単一 DSK での処理時間が約 325 です

から約 82%の改善をしています。

5.5 それ以外の時間測定

実際には時間配分を検討するために、下記のような各部の測定を行います。

5.5.1 プロセス時間

下のように DSK Address = 0xF1(Super Visor)での処理時間を測定します。

while(1) { MDL_TimeGET(0xF1,5,TIMEGET_Begin); ・ ・ ・ test = MDL_DBF_MSTR_CLOSE_READ((unsigned int *)&bufslav); if(test) //reset file setting __NOT READY break; MDL_TimeGET(0xF1,5,TIMEGET_Stop); break; ・

結果は下図のように約 53マイクロ秒になります。

(REF)( 8:SEC: 996:milSEC )(#21)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 53152 nano_sec (REF)( 8:SEC: 996:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 53136 nano_sec

5.5.2 転送時間

以前測定したように下記のようにソースコードを変更します。

Page 55: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

if(!MDLQUE_exec(0)) //return 0 if succeed to kick off transmission { MDL_TimeGET(0,5,TIMEGET_Begin); while(TEST_MDLRDY(1)!=0); MDL_TimeGET(0,5,TIMEGET_Stop); }

結果は前と同じような値が得られます。

(REF)( 9:SEC: 996:milSEC )(#21)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 19416 nano_sec (REF)( 9:SEC: 996:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 19416 nano_sec

5.5.3 転送開始からプロセス終了まで

下のようにコードを修正します。 これは転送開始からプロセス終了までを測定して以

前測定したプロセス時間と比較します。

・ test = MDL_DBF_MSTR_CLOSE_READ((unsigned int *)&bufslav); if(test) //reset file setting __NOT READY break; MDL_TimeGET(0xF1,5,TIMEGET_Stop); break; } ・ ・ ・ if(!MDLQUE_exec(0)) //return 0 if succeed to kick off transmission { MDL_TimeGET(0xF1,5,TIMEGET_Begin); }

結果は下のように転送開始直後にプロセスが開始され余分な待ち時間がないことがわ

かります。

(REF)( 9:SEC: 64:milSEC )(#21)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 53168 nano_sec (REF)( 9:SEC: 64:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 53160 nano_sec

Page 56: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

5.5.4 転送管理ファンクションの実行時間

プロセス時間には転送管理ファンクションの実行時間が含まれていませんので、下記の

ように測定します。

MDL_TimeGET(0xF1,5,TIMEGET_Begin); if(!MDLQUE_exec(0)) //return 0 if succeed to kick off transmission { MDL_TimeGET(0xF1,5,TIMEGET_Stop); }

結果は以下のようになります。 約 6.4 マイクロ秒時間かかっています。

(REF)( 10:SEC: 262:milSEC )(#22)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 6368 nano_sec (REF)( 10:SEC: 262:milSEC )(#23)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 6384 nano_sec

5.5.5 最後にループタイムを測定します。

測定は下のように MDL_SEQUENCETST に“3“を設定します。かならず他の MDL_TimeGET

ファンクションがコメントアウトされていることを確認してください;

*(unsigned int *)MDL_SEQUENCETST = 3;

結果は下のように約 715 マイクロ秒になります。

(REF)( 31:SEC: 896:milSEC )(#32)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 3) , 0 Second: 714800 nano_sec (REF)( 31:SEC: 896:milSEC )(#33)=MSG= Origin: F1 *msg(91): Elapse time *Elapse Time (Pointer= 4) , 0 Second: 714896 nano_sec

Page 57: マルチDSPシステム(MDS64)dsping.com/download/usersmanual.pdf · 2010-10-19 · 1 Quick Start Guide 1.1 ソフトウエアーのインストール 1.1.1 CCSのインストール

ユーザーズ・マニュアル終了(資料番号 MDS64003)

都筑通信商会(The DSPing Company) 〒224-0012 横浜市都筑区牛久保 1-8-6 電話/FAX: 045-349-5815

初版:リリース 2010/08/17 MDS64003 二版:2010/10/19 (保障範囲、電源入力変更)MDS64003A1