HOME会社概況業務内容開発分野開発事例CANモジュールソフテックだよりお問い合わせ
HOME > ソフテックだより > 第95号(2009年8月5日発行) 技術レポート「マイコンソフトによるDMA制御」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより(技術分野別)のページへ
ソフテックだより(シーン別)のページへ


ソフテックだより 第95号(2009年8月5日発行)

技術レポート

「マイコンソフトによるDMA制御」

1. DMAとは

DMAとは、「ダイレクトメモリアクセス(Direct Memory Access)」の略で、CPUを介さずに入出力装置と主記憶装置の間でデータ転送を行う方式のことを指します。
Windows98で、「HDDのプロパティでDMAを選択する」等もありましたので、10年くらい前からパソコンを使用されている方は聞き覚えのある言葉だと思います。

データ転送方式は、PIO(プログラムI/O (Programmed I/O))方式というものもあります。この転送方式は、CPUを介してデータ転送を行う方式になります。
DMAは転送方式であるため、実際に制御を行うコントローラが存在します。 パソコンでは、マザーボード上に専用のコントローラを実装してDMAを実現していますが、マイコンでは、CPUの機能として搭載されているものがあります。

今回はマイコンにおけるDMA転送制御について説明していきます。

2. マイコン内部でのDMA機能の位置付け

マイコンでのDMA転送はCPUの一つの機能になり、それを実現するためのコントローラ部分があります。
CPU内部の機能構成は以下のようになります。

CPU内部機能ブロック構成例
図1. CPU内部機能ブロック構成例

DMAコントローラ(DMACと呼ばれます)は入出力装置と主記憶装置の間でデータ転送を行うため、入出力装置に対応する周辺機能へはバスコントローラを介して読み書きを行い、主記憶装置に対応するCPU内蔵ROM/RAMへは内部バスを介して読み書きを行います。
主記憶装置が外部ROM/RAMになる場合は、バスコントローラを介します。

マイコンのDMAでは、内部ROM/RAM、外部ROM/RAM、内蔵周辺機能、外部アドレスが転送元、転送先として選択することができるようになっています。

バスには使用権があり、使用権をもつ可能性があるものはバスマスタと呼ばれます。
マイコンでは、CPUコア、DMACなどがバスマスタになります。
バスの使用権は1度に1つのバスマスタが占有することが出来ます。

バスマスタはバスの使用権を獲得してから、読み込み、書き込みの動作を行うことになるため、CPUがバス使用権を持っているときは、DMACはバスを使用できず、転送動作が行えなくなります。 逆にDMACがバス使用権を持っているときは、CPUは動作できない(プログラム実行ができない)ということになります。

バスマスタが複数存在するときに、バス使用権の調停(arbitration)をするものがバスアービタと呼ばれます。この機能はバスコントローラに含まれるものになります。

3. マイコンでのPIO転送とDMA 転送
3-1. マイコンでのPIO転送

マイコンでのPIO転送は、ソフトウェアによるROM/RAM/周辺機能への読み書きになります。データ転送にソフトウェアが介在するため、データ転送にプログラム処理時間が加わることになります。

マイコンによるPIO転送の動作例
図2. マイコンによるPIO転送の動作例

CPUでのソフトウェア(プログラム)の実行は、命令フェッチ(命令コードの読み込み)、デコード(命令コードの解析)、命令実行(命令コードに対応する動作)の流れになり、命令フェッチ、命令実行時に内部バス、外部バス、周辺機能バスを使用することになります。

特徴
  • 1転送毎に転送元、転送先の指定を行うことができる。
  • データ転送にソフトウェアが介在するため、処理時間が長くなる。
3-2. マイコンでのDMA転送

DMA転送では、データ転送をDMAコントローラが行うことになります。 データ転送にはソフトウェアが介在しないため、PIOよりも高速にデータ転送を行うことが可能になります。 しかし、データ転送はソフトウェアから指定したサイズ、回数で行われるため、細かいチェックを行うことはできず、単純なデータ転送のみとなります。

マイコンによるDMA転送の動作例
図3. マイコンによるDMA転送の動作例

特徴
  • データ転送にソフトウェアが介在しないため、PIO転送と比較して転送処理時間は短い。
  • ソフトウェアによりDMAコントローラに対して転送元、転送先、転送サイズを指定する必要があるため、少量のデータ転送時はトータル時間がPIO転送より遅くなることがある。
  • DMAコントローラが転送処理を行うため、ソフトウェアはより多くのメイン処理を実行できる。
4. DMA使用時の問題点と注意点

DMAを使用する場合の問題点と注意点について説明します。

4-1. DMA設定の選択

DMA転送の使用はソフトウェアのパフォーマンスアップに効果が出ると考えられますが、データ転送が集中することによりバスの占有時間が長くなることを考慮する必要があります。
DMAコントローラがデータ転送を行うためにCPUのバス使用権を占有することが多くなってしまい、ソフトウェアの実行が通常よりも遅くなるということがあります。
特に組み込み機器では、複数の通信を行うことや、1マイクロ秒単位での制御を行うようなこと、時間のズレが出ないような制御を行うことがあるため、データ転送でバスが占有されて、メイン処理が動かなくなるというのは大きな問題になります。

このような問題を回避するために、適切にDMA転送でのバスモード(サイクルスチールモード(※1)、バーストモード(※2))を選択することや、組み込みシステム(ソフトウェア)動作に影響が出ないように転送回数を分割するなどの対策を取る必要があります。

※1
サイクルスチールモード(Cycle Steal Mode):CPUがバスを使用していないときにDMA転送を行うモード。
※2
バーストモード(Burst Mode):設定されたデータ転送が終わるまでDMAコントローラがバス使用権を占有するモード。
4-2 キャッシュを通らない

データキャッシュを搭載するCPUでDMAを使用する場合、プログラムでのデータ読み出しと実際のRAMのデータが異なる現象になり、期待通りの動きをさせることが出来ないことがあります。ソフトウェアブレークで止めると正常に見えるため、問題発生時に原因の特定まで時間がかかるということもあります。

この現象は、CPU(ソフトウェア)からのメモリアクセスはキャッシュを通り、DMAがキャッシュを通らないことによるコヒーレンシ問題(キャッシュと実メモリの不一致)になります。コヒーレンシはソフトウェアが考慮する問題であるため、ソフトウェアの設計時に問題の発生有無、対処方法を決めておく必要があります。

対処方法としては、キャッシュを無効にする(キャッシュを使用しない、キャッシュエントリを更新する)、キャッシュ無効アドレスでアクセスを行うことが考えられます。

5. マイコンでのSCI送信とDMAの使用例

マイコンでのSCI(Serial Communication Interface:シリアルコミュニケーションインターフェース)送信について、DMAを使用しない場合(ソフトウェア処理)とDMAを使用する場合の例を説明します。

5-1. DMAを使用しない場合

DMA転送を使用しないでSCI送信を行う場合、以下のようになります。

DMA転送を使用しないSCI送信の動作例
図4. DMA転送を使用しないSCI送信の動作例

(1). SCIの設定

通信フォーマットをもとに、SCIの動作設定を行います。

(2). 送信データレジスタ空き割り込み

SCIの送信データレジスタが空きになった場合、INTC(Interrupt Controller:割り込みコントローラ)へ送信データレジスタ空き割り込み発生を出します。 INTCからCPUへ割り込み発生を通知することで、ソフトウェアによる割り込み処理が実行されます。

(3). 送信データ設定処理

送信データレジスタ空き割り込みの中で、外部RAMにある送信データを読み込み、SCIの送信データレジスタへ書き込みを行います。

割り込み処理を使用すると、割り込み要因発生から割り込み処理ハンドラの呼び出し、割り込み処理実行、割り込み処理終了(元実行していたアドレスに戻る)という処理が行われることになり、1バイト送信するために一定の処理時間が必要になります。

5-2. DMAを使用する場合

DMA転送を使用してSCI送信を行う場合、以下のようになります。

DMA転送を使用したSCI送信の動作例
図5. DMA転送を使用したSCI送信の動作例

(1). SCIの設定

通信フォーマットをもとに、SCIの動作設定を行います。

(2). DMACの転送設定

DMAでの転送元をRAM or ROM、転送先をSCIの送信データレジスタに設定します。 この設定にすると送信データレジスタ空き発生がDMA転送開始のトリガになります。

(3). DMA転送指示

設定完了後、DMACに転送開始を指示します。

(4). DMACによるデータ転送動作

SCIの送信データレジスタが空くとDMACにより、転送元から転送先へデータ転送が行われ、SCI機能によりデータ送信が行われます。

(5). 転送完了通知

指定回数の転送が完了したあと、DMACからINTCへ転送完了割り込み要求を出します。 INTCからCPUへ割り込み発生を通知することで、CPU(ソフトウェア)は指定回数の送信が完了したことを知ることができます。

DMA転送を使用した場合は、1バイトごとに割り込み処理が実行されることがなく、送信可能になった時点で送信データがセットされる動作になり、ソフトウェアは別の処理を行うことができるようになります。

6. おわりに

DMA転送を使用することにより、ソフトウェア負荷を軽減することや、データ転送時間の短縮を行うことができるようになり、パフォーマンス向上が期待できます。 特に組み込み機器では時間制約が厳しいことが多いため、処理時間に余裕を持たせるため使用されることがあります。
このようにCPUの機能を使用して、目的の性能を発揮させることができるところも組み込みソフト開発の面白さであると思います。

(Y.S.)

[参考資料]
株式会社ルネサステクノロジ
SH3-DSP SH7727 ハードウェアマニュアル
株式会社ルネサステクノロジ
H8S/2357グループ ハードウェアマニュアル
NECエレクトロニクス株式会社
ユーザーズマニュアル V850ES/xxx ハードウェア編

関連ページへのリンク

関連するソフテックだより