Connexions

You are here: Home » Content » FIR Filtering: Basic Assembly Exercise for TI TMS320C54x (Japanese - 日本語)
Content Actions

FIR Filtering: Basic Assembly Exercise for TI TMS320C54x (Japanese - 日本語)

Module by: Douglas L. Jones, Swaroop Appadwedula, Matthew Berry, Mark Haun, Jake Janovetz, Michael Kramer, Dima Moussa, Daniel Sachs, Brian Wade, Patrick Frantz, Emiko Yamai, Hironori Takaryo, Yoji Yamada Based on: FIR Filtering: Basic Assembly Exercise for TI TMS320C54xDouglas L. Jones, Swaroop Appadwedula, Matthew Berry, Mark Haun, Jake Janovetz, Michael Kramer, Dima Moussa, Daniel Sachs, Brian Wade

Summary: TI社 TMS320C54x アセンブリコードを手作業により学びます。ここで扱う命令セットには、2の補数表現を利用した固定小数点表現での乗算を含みます。

アセンブリ演習

 下記のコード例を分析して下さい。不明な点はTwo's Complement and Fractional Arithmetic for 16-bit Processors, Addressing Modes for TI TMS320C54x および Mnemonic Instruction Setを参照して下さい。
	
	1  FIR_len .set    3
	2
	3  ; Assume: 
	4  ;   BK = 3
	5  ;   AR0 = 1
	6  ;   AR2 = 1000h
	7  ;   AR3 = 1004h
	8  ;
	9  ;   FRCT = 1
	10
	11      stl     A,*AR3+%
	12      rptz    A,(FIR_len-1)
	13      mac     *AR2+0%,*AR3+0%,A
	
      
 ";"から始まる行は全てコメントです。この例でのコメントは、11行目に示した最初の命令文stlを実行する前の段階での補助レジスタBKの値とアドレスレジスタAR0,AR2, 及び AR3の内容を示しています。1行めのFIR_len .set 3という文は、FIR_lenという文字列が3に等しいということを定義しています(訳注:C言語の#define文と同等です)。BKレジスタの値は、このコード例で使用したいサーキュラー・バッファの長さを示しています。記号%は、インクリメント演算子+を修飾しており、これによりサーキュラー・バッファを実現しています。すなわち、メモリアドレスをBKレジスタの値で除算した剰余がゼロになるまでアドレスレジスタがインクリメントする、ということです。インクリメント演算子+の次に0を置いた場合、レジスタAR0が指定する値までインクリメントするという動作になります。 注意:hが末尾に付いている数および0xで始まる数は、16進数の値を表しています。
例 1 
1000hと0x1000は、両方とも10進数の4096を表しています。
 データメモリは1000h番地から始まり、下記のよに初期化されていると仮定します。
図 1: データメモリの内容(実行前)
 まずstl,rptz, 及び mac命令を各自で理解してから、コード例を一行ずつ実行したときのアキュムレータAおよび補助レジスタAR2AR3の値を 2の空欄に記入して下さい。さらに、3行のコードをすべて実行した後でのメモリの内容を 3の空欄に記入して下さい。
A AR2 AR3  
00 0000 8000h 1000h 1004h at start of code
      after stl instruction
      after rptz instruction
      after first mac instruction
      after second mac instruction
      after third mac instruction
図 2: 実行結果
 この演習を行う際、アキュムレーターAが40ビットレジスタであることや、乗算が固定小数点演算モードであることを考慮に入れてください。このモードでは、DSP上での整数は分数(いわゆるQフォーマットの小数)として解釈され、また乗算器もそのように扱うでしょう。このような扱いは、ALU内の整数の乗算結果を1ビット左シフトすることによりなされます(ここに示すすべての例では、すべての演算は固定小数点演算であると仮定します)。したがって、mac命令によりALUによって実行される乗算結果は、単に2つの整数を乗算したときの結果の2倍の値となります。DSPにおける数値表現および演算は、Two's Complement and Fractional Arithmetic for 16-bit Processorsという文書にさらに詳しく記述されていますので、適宜参照して下さい。
図 3: データメモリの内容(実行後)

Comments, questions, feedback, criticisms?

Discussion forum

Send feedback