(57)【要約】【課題】  CPU・DSPのデータ処理とDMAによるデータ転送を並列的に効率よく行う。【解決手段】  DMA制御回路5は総転送長レジスタ5-1と転送長レジスタ5-2を備え、転送長レジスタ5-2に設定された転送長分のデータをDMA転送すると一時停止し、再開を指示されると転送を再開する。全転送データが総転送長レジスタ5-1に設定された転送長に達するとDMA転送を終了する。【選択図】  図１
2006119711.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置、ローカル記憶装置、入出力装置を含む周辺装置間のデータ転送を行うDMA転送装置であって、
転送すべき総データ量を指示するための第1の転送長設定手段と、
前記総データ量よりも小さいデータ量を指示するための第2の転送長設定手段とを備え、
プロセッサ装置によって転送開始を指示されるとデータ転送を開始し、
前記第2の転送長設定手段によって指示されたデータを転送し終わったときに、データ転送を一時中断し、プロセッサ装置によって転送再開を指示されると、再び前記第2の転送長設定手段によって指示されたデータを転送した後にデータ転送を一時中断する動作を繰り返し、
転送開始からの総データ転送量が、前記第1の転送長設定手段によって指示されるデータ量に到達すると、データ転送を終了するように構成されていることを特徴とするDMA転送装置。
【請求項２】
前記周辺装置上のデータを転送受すべきアドレスを指示するための転送元開始アドレス設定手段と転送先開始アドレス設定手段と、
前記転送元開始アドレス設定手段によって示されるアドレスに加算すべき正負オフセット値を指示するための転送元オフセットアドレス設定手段と、前記転送先開始アドレス設定手段によって示されるアドレスに加算すべき正負オフセット値を指示するための転送先オフセットアドレス設定手段とを備え、
データ転送の一時停止後、再開する際の転送受すべきアドレスを指示するために、前記転送元開始アドレス設定手段によって示されるアドレスと前記転送元オフセットアドレス設定手段によって示されるオフセット値を加減して得られたアドレスを新たに転送元開始アドレス設定手段に設定し、前記転送先開始アドレス設定手段によって示されるアドレスと前記転送先オフセットアドレス設定手段によって示されるオフセット値を加減して得られたアドレスを新たに転送先アドレス設定手段に設定するように構成されていることを特徴とする請求項１に記載のDMA転送装置。
【請求項３】
前記周辺装置上のデータを転送受すべきアドレスを指示するための転送元開始アドレス設定手段と転送先開始アドレス設定手段と、
データ転送一時停止・再開時にアドレスに加算すべき正負オフセット値を指示するための転送元オフセットアドレス設定手段と、データ転送一時停止・再開時に加算すべき正負オフセット値を指示するための転送先オフセットアドレス設定手段とを備え、
データ転送の一時停止後、再開する際の転送受すべきアドレスを指示するために、データ転送一時停止直前の転送元アドレスと前記転送元オフセットアドレス設定手段によって示されるオフセット値を加減して得られた新たなアドレスを前記転送元開始アドレス設定手段に設定し、データ転送一時停止直前の転送先アドレスと前記転送先オフセットアドレス設定手段によって示されるオフセット値を加減して得られた新たなアドレスを前記転送先開始アドレス設定手段に設定するように構成されていることを特徴とする請求項１に記載のDMA転送装置。
【請求項４】
データ転送の一時停止後、再開する際に、新たに得られた転送元開始アドレスと新たに得られた転送先開始アドレスを入れ替えて再設定するとともに、転送元オフセットアドレス設定手段により示されるオフセット値と転送先オフセットアドレス設定手段により示されるオフセット値を入れ替えて再設定することを特徴とする請求項２および３に記載のDMA転送装置。
【請求項５】
前記転送元オフセットアドレス設定手段で指示されるオフセット値のビット長は前記転送元開始アドレス設定手段によって示されるアドレスのビット長よりも短く、
前記転送先オフセットアドレス設定手段で指示されるオフセット値のビット長は前記転送先開始アドレス設定手段によって示されるアドレスのビット長よりも短いことを特徴とする請求項２、３および４に記載のDMA転送装置。
【請求項６】
データ転送一時中止後、再開する際の新たな転送元開始アドレスと新たな転送先開始アドレスを前記オフセット値の加減によって求めるときに、アドレスの全ビットのうち、オフセット値のビット長以上のLSB部のみを加減の対象とし、MSB部は値を保持することを特徴とする請求項５に記載のDMA転送装置。
【請求項７】
前記加減の対象となるLSB部のビット長が可変であることを特徴とする請求項６に記載のDMA転送装置。
【請求項８】
一時中断するまでに繰り返すDMA転送数を設定する転送数設定手段を備え、前記転送数設定手段に設定された回数は一時中断しないで連続的にDMA転送を繰り返し、設定回数に達すると一時中断することを特徴とする請求項７に記載のDMA転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はDMA転送装置に関し、特にローカルメモリへ、またはローカルメモリからのDMAデータ転送と、CPU・DSPによるローカルメモリ上のデータ処理を並列的に実行するようなシステムにおけるDMA転送装置に適用できるものである。
【背景技術】
【０００２】
近年、半導体技術やプロセッサ設計技術の発展にともなって、従来ハードウエアによって処理を行っていた信号処理等の複雑な演算をCPUやDSPのソフトウエアによって実行することが可能になってきており、処理内容の変更や新たな処理の追加のような要求に対して柔軟に対応することができるようになっている。CPUやDSPによって、従来のハードウエアによる処理と同等のスループットを得るために、非常に高速のローカルメモリをCPU・DSPに直結し、入出力装置または主記憶装置からデータをDMA転送しながら処理を行うことが一般に行われている。DMA転送を用いることにより、CPU・DSPはデータ転送処理にわずらわされること無くデータ処理に専念することができる。
【０００３】
しかしながら、大容量の高速なローカルメモリをLSIに実装することは、ダイサイズを拡大し、チップコストが高価になるため、通常は必要最小限の容量を実装している。そのため、処理すべき全データをローカルメモリに格納可能な小容量のデータに分割し、これを順次DMA転送している。
【０００４】
また、DMA転送が実行されている間に、CPU・DSPはすでに転送され終わったデータの処理を行うことにより、データ転送とデータ処理を並列化させることが可能となり、より高いスループットを得ることができる。
【０００５】
しかしながら、データ転送とデータ処理を並列化させるためには、小容量のローカルメモリをさらに細分化し、データ転送用領域とデータ処理用領域に分割して、ダブルバッファーまたはリングバッファーとして使用する必要があるため、DMA転送の転送単位もさらに細分化される。
【０００６】
上記のような細分化されたデータをDMA転送する際には、分割された各データ転送毎にCPU・DSPに割り込みを通知し、転送アドレス、転送長等を再設定してDMA転送を再起動する必要があるため、CPU・DSPのデータ処理能力を無駄に消費してしまうという問題点があった。
【０００７】
そのため、従来技術のDMA転送においては、チェーニングと呼ばれる技法を用いて、次の転送アドレス・転送長等を予め設定しておき、現在のDMA転送が終了すると自動的に次のDMA転送を継続する方法が採用された。
【０００８】
あるいは、リンクリストと呼ばれる一連のDMA転送に必要な情報テーブルを主記憶に格納しておき、1回のDMA転送が終了するたびに自動的に主記憶上のリンクリストを参照して、次のDMA転送を継続する手法が採られてきた（たとえば［特許文献１］参照）。
【特許文献１】特開平１１−１４９４３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来技術のチェーニングを用いたDMA転送を採用した場合においても、高々1回先の転送設定が可能だけであり、連続するDMA転送の転送効率は向上するが、割り込みを受けたCPU・DSPの再設定の負荷が減じられるものではない。また、リンクリストを利用するDMA転送は確かに転送毎の柔軟な設定が可能であるが、DMA転送装置の構成が複雑になり、回路規模が増大するという問題点があった。また、ローカルメモリをダブルバッファーまたはリングバッファーとして使用するために、CPU・DSPのデータ処理とDMA転送の同期をとるのが困難になるという問題点があった。
【００１０】
本発明は上記従来例に鑑みてなされたもので、頻繁に転送アドレスを変更しながら行うDMA転送を用いて細分化されたデータをローカルメモリに転送しながら、CPU・DSPがデータ転送のオーバーヘッドなくデータ処理を並列的に行うことのできるDMA転送装置を、簡易な回路構成を用いて提供することを目的とする。
【課題を解決するための手段】
【００１１】
以上の目的を達成するために、本発明による主記憶装置、ローカル記憶装置、入出力装置を含む周辺装置間のデータ転送を行うDMA転送装置においては、転送すべき総データ量を指示するための第1の転送長設定手段と、前記総データ量よりも小さいデータ量を指示するための第2の転送長設定手段とを備え、プロセッサ装置によって転送開始を指示されるとデータ転送を開始し、前記第2の転送長設定手段によって指示されたデータを転送し終わったときに、データ転送を一時中断し、プロセッサ装置によって転送再開を指示されると、再び前記第2の転送長設定手段によって指示されたデータを転送した後にデータ転送を一時中断する動作を繰り返し、転送開始からの総データ転送量が、前記第1の転送長設定手段によって指示されるデータ量に到達すると、データ転送を終了するように構成する（第１の構成）。
【００１２】
前記第1の構成に加えて、前記周辺装置上のデータを転送受すべきアドレスを指示するための転送元開始アドレス設定手段と転送先開始アドレス設定手段と、前記転送元開始アドレス設定手段によって示されるアドレスに加算すべき正負オフセット値を指示するための転送元オフセットアドレス設定手段と、前記転送先開始アドレス設定手段によって示されるアドレスに加算すべき正負オフセット値を指示するための転送先オフセットアドレス設定手段とを備え、データ転送の一時停止後、再開する際の転送受すべきアドレスを指示するために、前記転送元開始アドレス設定手段によって示されるアドレスと前記転送元オフセットアドレス設定手段によって示されるオフセット値を加減して得られたアドレスを新たに転送元開始アドレス設定手段に設定し、前記転送先開始アドレス設定手段によって示されるアドレスと前記転送先オフセットアドレス設定手段によって示されるオフセット値を加減して得られたアドレスを新たに転送先アドレス設定手段に設定するような構成も好ましい（第２の構成）。
【００１３】
前記第1の構成に加えて、前記周辺装置上のデータを転送受すべきアドレスを指示するための転送元開始アドレス設定手段と転送先開始アドレス設定手段と、データ転送一時停止・再開時にアドレスに加算すべき正負オフセット値を指示するための転送元オフセットアドレス設定手段と、データ転送一時停止・再開時に加算すべき正負オフセット値を指示するための転送先オフセットアドレス設定手段とを備え、データ転送の一時停止後、再開する際の転送受すべきアドレスを指示するために、データ転送一時停止直前の転送元アドレスと前記転送元オフセットアドレス設定手段によって示されるオフセット値を加減して得られた新たなアドレスを前記転送元開始アドレス設定手段に設定し、データ転送一時停止直前の転送先アドレスと前記転送先オフセットアドレス設定手段によって示されるオフセット値を加減して得られた新たなアドレスを前記転送先開始アドレス設定手段に設定するように構成することも好ましい（第３の構成）。
【００１４】
前記第2の構成または第3の構成に加えて、データ転送の一時停止後、再開する際に、新たに得られた転送元開始アドレスと新たに得られた転送先開始アドレスを入れ替えて再設定するとともに、転送元オフセットアドレス設定手段により示されるオフセット値と転送先オフセットアドレス設定手段により示されるオフセット値を入れ替えて再設定するように動作させることも好ましい（第４の構成）。
【００１５】
前記第2、第3および第4の構成において、前記転送元オフセットアドレス設定手段で指示されるオフセット値のビット長は前記転送元開始アドレス設定手段によって示されるアドレスのビット長よりも短く、前記転送先オフセットアドレス設定手段で指示されるオフセット値のビット長は前記転送先開始アドレス設定手段によって示されるアドレスのビット長よりも短く構成することも好ましい（第5の構成）。
【００１６】
前記第5の構成において、データ転送一時中止後、再開する際の新たな転送元開始アドレスと新たな転送先開始アドレスを前記オフセット値の加減によって求めるときに、アドレスの全ビットのうち、オフセット値のビット長以上のLSB部のみを加減の対象とし、MSB部は値を保持することも好ましい（第6の構成）。
【００１７】
前記第6の構成において、前記加減の対象となるLSB部のビット長が可変とするとさらに好ましい（第７の構成）。
【００１８】
前記第7の構成に加えて、一時中断するまでに繰り返すDMA転送数を設定する転送数設定手段を備え、前記転送数設定手段に設定された回数は一時中断しないで連続的にDMA転送を繰り返し、設定回数に達すると一時中断するように構成することも好ましい（第８の構成）。
【発明の効果】
【００１９】
以上に述べたように本発明のDMA転送装置によれば、頻繁に転送アドレスを変更しながら行うDMA転送を用いて細分化されたデータを主記憶とローカルメモリの間で転送しながら、CPU・DSPがデータ転送のオーバーヘッドなくデータ処理を並列的に行うことができるため、高いデータ処理能力を得ることができる。また、回路構成が簡易であるため、高いデータ処理能力をもつDMA転送装置を安価に実現することが可能になる。
【発明を実施するための最良の形態】
【００２０】
（実施形態１）
次に、本発明に係る一実施例を図面を用いて詳細に説明する。図１は本発明の一例であるDMA転送装置の電気的な構成を示すブロック図である。
１はシステム全体の制御を統括しデータ処理も行うCPUである。CPU1は主記憶制御装置2にアクセスすることにより主記憶制御装置２に接続されたROM３に格納された命令コードを実行する。またDRAM4にはシステムで処理されるデータが一時的に格納される。DMA制御回路５はDRAM４上に格納されたデータをローカルメモリ６に転送する。CPU1はローカルメモリ６上のデータを読み出し、データ処理を行って処理後のデータをローカルメモリ６に書き戻す。DMA制御回路５は処理後のデータをローカルメモリ６からDRAM4に転送する。
【００２１】
DMA制御回路５の内部に実装された総データ転送長レジスタ5-1には転送すべき全データのバイト数を設定する。データ転送長レジスタ5-2には、ローカルメモリ６の容量よりも小さいバイト数で、一回のDMA転送につき処理されるデータのバイト数を設定する。レジスタは、システムバスを経由してCPU１により、しかるべき値が設定される。
【００２２】
図２はDMA制御回路５の内部の詳細なブロック図である。DMA制御FSM5−37はDMA制御回路５の全体動作をつかさどるシーケンサーである。
【００２３】
図示しないシステムバスからのレジスタアクセスにより転送開始ビット5−38に１が設定されるとDMA制御FSM5−37はDMA転送を開始する。まず、総データ転送長レジスタ5-1に設定された値を総転送長カウンタ5−35にロードする。また、データ転送長レジスタ5−2に設定された値を転送長カウンタ５−33にロードする。
【００２４】
総転送長カウンタ5−35および転送長カウンタ５−33は、転送元アドレスから転送先アドレスに1バイトのデータが転送される毎に１デクリメントされる。比較器5−34は、転送長レジスタ5−2の値と転送長カウンタ5−33の値を比較し、一致を検出するとDMA制御FSMに対して一時停止要求を発生する。また、比較器5−36は、総転送長レジスタ５−１の値と総転送長カウンタ5−35の値を比較し、一致を検出するとDMA制御FSMに対してDMA停止要求を発生する。
【００２５】
32ビットのアドレスレジスタ１、２（5−3、５−１７）には、転送元または転送先の開始アドレスが設定される。マスクレジスタ1、２（5−4、５−１８）にはオフセットを加算すべきLSB部と加算されないべきMSB部を分離するためのMSB部、LSB部を識別するための情報を設定する。すなわち、例えば0xFFF０_0000が設定されたとすると、1がセットされたビット位置すなわちビット３１からビット20がMSB部となり、０がセットされたビット位置すなわちビット１９からビット０がLSB部となる。ゲート５−６、５−２０はアドレスレジスタ１、２（５−３、５−１７）に設定されたアドレスのMSB部を抽出し、ゲート５−７、５−２１はLSB部を抽出する。
【００２６】
オフセットレジスタ１，２（５−５，５−１９）には、アドレスのLSB部に加算すべきオフセット値が格納される。加算器５−８、５−２２により、ゲート５−７、５−２１によって抽出されたアドレスのLSB部とオフセットレジスタ１，２（５−５，５−１９）に格納されたオフセット値が加算される。
【００２７】
前記加算された新たなアドレスLSB部はゲート５−９、５−２３により桁上がりがマスクされ、ゲート５−１０、５−２４によりアドレスMSB部と結合される。
【００２８】
加算器５−１１、５−２５は前記結合された新たなアドレスに転送長レジスタ5−2に格納された転送長を加算する。セレクタ５−１２、５−２６は、前記結合された新たなアドレスか、前記結合されたアドレスに転送長を加算したアドレスかを、図示しない結線によりDMA制御FSM５−３７から出力されるsel_add_len1、sel_add_len2信号の値によって選択する。
【００２９】
DMA制御FSM５−３７は設定レジスタの＋LENビット５−１３の値に基づいて、sel_add_len1、sel_add_len2信号の値を制御する。＋LENビットは4ビットで構成され、上位2ビットがsel_add_len1を制御し、下位2ビットがsel_add_len2を制御する。上位2ビットが"00"のときは、sel_add_len1は常に０であり、"11"のときは常に１である。"01"が設定されているときは、一時停止要求が発生する毎に０，１，０，１のようにトグルし、"10"が設定されている場合は、一時停止要求が発生する毎に１，０，１、0のようにトグルする。＋LENビットの下位2ビットの設定に応じたsel_add_len2の制御も同様である。
【００３０】
セレクタ５−１４、５−２７はアドレスレジスタ１（５−３）から生成された新たなアドレスか、アドレスレジスタ２（５−１７）から生成された新たなアドレスかを、DMA制御FSM５−３７が出力するSWAP信号に応じて選択する。
【００３１】
SWAP信号が０の場合、アドレスレジスタ１（５−３）から生成された新たなアドレスがセレクタ５−１４により選択されて、転送元アドレスレジスタ５−１６に入力され、アドレスレジスタ２（５−１７）から生成された新たなアドレスがセレクタ５−２７により選択されて、転送先アドレスレジスタ５−２８に入力される。
【００３２】
SWAP信号が１の場合、アドレスレジスタ１（５−３）から生成された新たなアドレスがセレクタ５−１４により選択されて、転送先アドレスレジスタ５−２８に入力され、アドレスレジスタ２（５−１７）から生成された新たなアドレスがセレクタ５−２７により選択されて、転送元アドレスレジスタ５−１６に入力される。
【００３３】
転送元アドレスレジスタ５−１６、転送先アドレスレジスタ５−２８はDMA制御FSM５−３７の出力するload信号に応じて、入力値をラッチする。DMA制御FSM５−３７は、一時停止要求がアサートされる毎にload信号を出力する。また、DMA制御FSM５−３７は、転送元からデータを読み出す毎に転送元アドレスレジスタ５−１６に対してup信号を出力し、転送先へデータを書き込む毎に転送先アドレスレジスタ５−２８に対してup信号を出力する。転送元アドレスレジスタ５−１６、転送先アドレスレジスタ５−２８は、up信号に応じて値をカウントアップする。なお、転送開始直後は、図示しないパスを用いて、転送元アドレスレジスタ５−１６にはアドレスレジスタ１（５−３）の内容がコピーされ、転送先アドレスレジスタ５−２８にはアドレスレジスタ２（５−１７）の内容がコピーされる。
【００３４】
DMA制御FSM５−３７は、設定レジスタのSWAPビット５−１５の値に応じて、SWAP信号を制御する。すなわち、SWAPビットが０の場合は、常にSWAP信号として０を出力する。SWAPビットが１の場合は、一時停止要求がアサートされる毎にSWAP信号を０、１、０、１、、のようにトグルする。
【００３５】
DMA制御FSM５−３７は転送許可信号（転送EN）とともに、現在の転送が転送元からの読み出しであるか、転送先への書き込みであるかを識別するための信号(source/dist)を出力し、この信号に基づいてセレクタ５−２９は転送元アドレスか転送先アドレスかを選択する。選択されたアドレスは、デコーダ５−３０によりデコードされ、転送のターゲットがシステムバスであるか、ローカルメモリであるかが決定される。システムバスインターフェース５−３１は、転送ターゲットがシステムバスである場合にシステムバス転送を発生し、転送元の場合(source/dist="1")、システムバス上からデータを読み込み、転送先の場合(source/dist="０")、システムバス上へデータを書き込む。ローカルメモリインターフェース５−３２は、転送ターゲットがローカルメモリである場合にローカルメモリアクセスを発生し、転送元の場合(source/dist="1")、ローカルメモリからデータを読み込み、転送先の場合(source/dist="０")、ローカルメモリへデータを書き込む。
【００３６】
TWICEビット5−40が１にセットされている場合は、転送長レジスタ５−２に設定された転送長分の転送を２回行った後に一時停止する。
【００３７】
図３はシステムのメモリマップを示している。アドレスは32ビットで４Gバイトの空間にアクセス可能である。0x0000_0000から0x3FFF_FFFFの１GバイトがDRAM４にアサインされた空間である。0x4000_0000から0x4000_1FFFの８Kバイトはローカルメモリ６にアサインされた空間である。0xC000_0000から0xDFFF_FFFFの512Mバイトが内部レジスタにアサインされた空間であり、DMA制御回路５の設定レジスタや主記憶制御装置2の設定レジスタなどが存在する。0xE000_0000から0xFFFF_FFFFの512MバイトはROM3にアサインされた空間である。
【００３８】
次に、図３に示されるメモリマップにおいて、主記憶とローカルメモリ間のデータ転送とローカルメモリに転送されたデータのCPUによる処理を並列化する場合の設定および動作の詳細をいくつかの例を用いて説明する。
【００３９】
第1の例として、主記憶からローカルメモリへのデータ転送とCPUのデータ処理の並列化の例を説明する。処理すべき総データ数が１Mバイトとし、これがDRAMの0x0000_0000から0x000F_FFFFに格納されているとする。ローカルメモリは0x4000_0000から0x4000_0FFFまでの領域Aと0x4000_1000から0x4000_1FFFまでの領域Bに分割される。CPUは、領域Aにデータが転送されている最中は領域Bのデータを処理し、領域Bにデータが転送されている最中は領域Aのデータを処理することにより、転送と処理の並列化を実現する。
【００４０】
まず転送に先立って、総転送長レジスタ５−１に0x0010_0000を設定し、転送長レジスタ５−２には0x0000_1000を設定する。また、アドレスレジスタ１に0x0000_0000、マスクレジスタ１に0xFFE0_0000、オフセットレジスタ１に0x1000を設定する。アドレスレジスタ２には0x4000_0000、マスクレジスタ2に0xFFFF_E000、オフセットレジスタ１に0x1000を設定する。＋LENビットは"0000"、SWAPビットとTWICEビットはともに０を設定する。
【００４１】
以上の設定を行った後、転送開始ビット５−３８をセットすると、前述のように総転送長カウンタ５−３５に0x0010_0000がロードされ、転送長カウンタ５−３３に0x1000がロードされる。同時に、転送元アドレスレジスタには0x0000_0000がコピーされ、転送先アドレスレジスタには0x4000_0000がコピーされる。
【００４２】
次にDMA制御FSMは転送EN信号とsource/dist信号を１にして転送を開始する。セレクタ５−２９により、0x0000_0000がアドレスとして選択され、デコーダ5−30によりターゲットが主記憶であると識別されるので、システムバスインターフェースがデータ読み出し動作を行い、読み出したデータをローカルメモリインターフェースに向けて出力する。
【００４３】
次にDMA制御FSMは転送EN信号を１にし、source/dist信号を０にして転送を開始する。セレクタ５−２９により、0x４000_0000がアドレスとして選択され、デコーダ5−30によりターゲットがローカルメモリであると識別されるので、ローカルメモリインターフェースがシステムバスインターフェースから出力されているデータをローカルメモリに対して書き込む。更に、DMA制御FSMは転送長カウンタにデクリメントを指示し、転送長カウンタの内容は転送されたバイト数分減じられる。上記動作を繰り返し、転送長カウンタが０に到達すると、一時停止要求が出力されDMA制御FSMは動作を中断する。この動作により、領域Aに主記憶よりデータが転送された。
【００４４】
CPUが転送再開ビット5−39をセットすると、転送元アドレスレジスタおよびアドレスレジスタ１にはアドレスレジスタ１の値とオフセットレジスタ１の値が加算された値（0x0000_1000）がロードされ、転送先アドレスレジスタおよびアドレスレジスタ２にはアドレスレジスタ２の値とオフセットレジスタ２の値が加算された値（0x4000_1000）がロードされてデータ転送が再開され、主記憶より領域Bへデータが転送される。このとき、CPUは転送済みの領域Aのデータを処理する。
【００４５】
領域Bへのデータ転送が終了すると、一時停止要求が出力されてDMA転送は中断している。領域Aのデータ処理時間を領域Bへのデータ転送時間よりわずかだけ長くなるように調整しておくと、CPUは転送再開ビットをセットして、直ちに領域Bのデータ処理を開始できる。
【００４６】
再びCPUが転送再開ビット5−39をセットすると、転送元アドレスレジスタおよびアドレスレジスタ１にはアドレスレジスタ１の値とオフセットレジスタ１の値が加算された値（0x0000_2000）がロードされ、転送先アドレスレジスタおよびアドレスレジスタ２にはアドレスレジスタ２の値とオフセットレジスタ２の値が加算された値（0x4000_2000）がマスクレジスタ２の値によりマスクされた値（0x4000_0000）がロードされてデータ転送が再開され、主記憶より領域Aへデータが転送される。このとき、CPUは転送済みの領域Bのデータを処理する。
【００４７】
上記のように動作させることによって、データ転送とデータ処理をほぼ完全に並列化することができるので、全体の処理として高いスループットを得ることが可能となる。
【００４８】
第２の例として、主記憶からローカルメモリへのデータ処理前のデータ転送とCPUのデータ処理とローカルメモリから主記憶へのデータ処理後のデータ転送との並列化の例を説明する。処理すべき総データ数が５１２Kバイトとし、これがDRAMの0x0000_0000から0x000７_FFFFに格納されているとする。ローカルメモリの0x4000_1000から0x4000_1FFFまでの領域はCPUのスタック領域またはワーク領域としてデータ転送には使用せず、0x4000_0000から0x4000_0FFF までの領域を、0x4000_0000から0x4000_0３FFまでの領域A、0x4000_0400から0x4000_0７FFまでの領域B、0x4000_0800から0x4000_0BFFまでの領域C、0x4000_0C00から0x4000_0FFFまでの領域Dに分割してデータ転送およびデータ処理に利用する。CPUは、例えば領域Aに主記憶からの処理前データが転送され、領域Bから主記憶へ処理後のデータが転送されている最中に、領域Cのデータを処理し、領域Dに処理結果を格納することにより、転送と処理の並列化を実現する。
【００４９】
まず転送に先立って、総転送長レジスタ５−１に0x0008_0000を設定し、転送長レジスタ５−２には0x0000_0400を設定する。また、アドレスレジスタ１に0x0000_0000、マスクレジスタ１に0xFFE0_0000、オフセットレジスタ１に0x10_0000を設定する。アドレスレジスタ２には0x4000_0000、マスクレジスタ2に0xFFFF_F000、オフセットレジスタ２に0x0を設定する。＋LENビットには"0111"を設定し、SWAPビットとTWICEビットはともに1を設定する。
【００５０】
以上の設定を行った後、転送開始ビット５−３８をセットすると、前述のように総転送長カウンタ５−３５に0x0008_0000がロードされ、転送長カウンタ５−３３に0x400がロードされる。同時に、転送元アドレスレジスタには0x0000_0000がコピーされ、転送先アドレスレジスタには0x4000_0000がコピーされる。
【００５１】
次にDMA制御FSMは転送EN信号とsource/dist信号を１にして転送を開始する。セレクタ５−２９により、0x0000_0000がアドレスとして選択され、デコーダ5−30によりターゲットが主記憶であると識別されるので、システムバスインターフェースがデータ読み出し動作を行い、読み出したデータをローカルメモリインターフェースに向けて出力する。
【００５２】
次にDMA制御FSMは転送EN信号を１にし、source/dist信号を０にして転送を開始する。セレクタ５−２９により、0x４000_0000がアドレスとして選択され、デコーダ5−30によりターゲットがローカルメモリであると識別されるので、ローカルメモリインターフェースがシステムバスインターフェースから出力されているデータをローカルメモリに対して書き込む。更に、DMA制御FSMは転送長カウンタにデクリメントを指示し、転送長カウンタの内容は転送されたバイト数分減じられる。上記動作を繰り返し、転送長カウンタが０に到達すると、一時停止要求が出力されるがTWICEビットが１に設定されているため、動作を継続する。ここでSWAPビットがセットされているため、転送先アドレスレジスタおよびアドレスレジスタ１にはアドレスレジスタ１の値とオフセットレジスタ１の値が加算された値（0x0010_0000）がロードされ、転送元アドレスレジスタおよびアドレスレジスタ２にはアドレスレジスタ２の値とオフセットレジスタ２の値と転送長レジスタの値が加算された値（0x4000_０400）がロードされてデータ転送が再開され、領域Bより主記憶へデータが転送される。この転送はダミー転送であり、主記憶に転送されたデータはガベージである。再び転送長カウンタが０に到達すると、今度は転送が一時停止する。
【００５３】
引き続いてCPUが転送再開ビット5−39をセットすると、転送元アドレスレジスタおよびアドレスレジスタ１にはアドレスレジスタ１の値とオフセットレジスタ１の値と転送長レジスタの値が加算された値（0x0020_0400）がマスクレジスタ１の値によりマスクされた値（0x0000_0400）がロードされ、転送先アドレスレジスタおよびアドレスレジスタ２にはアドレスレジスタ２の値とオフセットレジスタ２の値が加算された値（0x4000_0800）がロードされてデータ転送が再開され、主記憶より領域Cへデータが転送され、引き続き、領域Dより主記憶へデータが転送される。領域Dから主記憶へのデータ転送は、ダミー転送であり、主記憶に転送されたデータはガベージである。このデータ転送と並行して、CPUは転送済みの領域Aのデータを処理し、処理後のデータを領域Bに書き込む。
【００５４】
引き続き転送再開すると、転送元アドレスレジスタおよびアドレスレジスタ１にはアドレスレジスタ１の値とオフセットレジスタ１の値と転送長レジスタの値が加算された値（0x0020_0800）がマスクレジスタ１の値によりマスクされた値（0x0000_0800）がロードされ、転送先アドレスレジスタおよびアドレスレジスタ２にはアドレスレジスタ２の値とオフセットレジスタ２の値が加算された値（0x4000_1000）がマスクレジスタ2の値によりマスクされた値（0x4000_0000）がロードされる。そして、主記憶から領域Aへのデータ転送に続き、領域Bから主記憶へのデータ転送が行われ、再び一時停止する。この間にCPUは、転送済みの領域Cのデータを処理し、処理後のデータを領域Dに書き込む。
【００５５】
上記の動作を繰り返し実行することによって、処理前データの読み出し転送と処理後データの書き出しとデータ処理をほぼ完全に並列化することができる。また、CPUはデータ処理後にただ転送再開ビットをセットするだけの簡単な処理を行うだけでよいため、複雑なデータ処理にCPUの処理能力を注力できる。したがって、全体の処理として非常に高いスループットを得ることが可能となる。
【図面の簡単な説明】
【００５６】
【図１】本発明の一例であるDMA転送装置の電気的な構成を示すブロック図。
【図２】メモリマップ。
【図３】ＤＭＡ制御回路５の詳細を示す内部構成図。
【符号の説明】
【００５７】
1  CPU
2  主記憶制御回路
3  ROM
4  DRAM
5  DMA制御回路
６  ローカルメモリ
5−1  総転送長レジスタ
5−2  転送長レジスタ
5−3  アドレスレジスタ1
5−4  マスクレジスタ１
5−5  オフセットレジスタ１
5−6，5−7，5−9，5−10  ゲート
5−8、5−11  加算器
5−12，5−14  セレクタ
5−13  ＋LENビット
5−15  SWAPビット
5−16  転送元アドレスレジスタ
5−17  アドレスレジスタ２
5−18  マスクレジスタ２
5−19  オフセットレジスタ２
5−20，5−21，5−23，5−24  ゲート
5−22，5−25  加算器
5−26，5−27  セレクタ
5−28  転送先アドレスレジスタ
5−29  セレクタ
5−30  デコーダ
5−31  システムバスインターフェース
5−32  ローカルメモリインターフェース
5−33  転送長カウンタ
5−34，5−36  比較器
5−35  総転送長カウンタ
5−37  DMA制御FSM
5−38  STARTビット
5−39  RESTARTビット
5−40  TWICEビット
【図１】
2006119711.tif 000003
【図２】
2006119711.tif 000004
【図３】
2006119711.tif 000005