(57)【要約】【課題】転送元データを並び替えし転送先のスタートアドレスを生成するためのロジックをデータ並び替え回路に組み込むことで、データ転送時間を短縮し回路規模を小さくする。【解決手段】複数Ｎバイト幅のバスを介してＤＭＡ転送を連続して行なうＤＭＡ制御装置において、変換レジスタはバイトレーンごとに１バイトデータを保持するＮ個のレジスタから成り、データ並び替え制御部は、転送元データについてバイトレーンごとにバイト位置をシフトして変換レジスタへ移送し、バッファアドレス生成部は、Ｎの平方根だけの転送元アドレスと転送元アドレスの下位ビットを比較して、当該読み書きサイクルにおける転送データを書き込むべき内部バッファの番地を指定するスタートアドレスを生成する。【選択図】図２
2010170164.tif 000002
【特許請求の範囲】
【請求項１】
複数Ｎバイト幅のバスを介してＮバイト（バイトレーン）単位のＤＭＡ転送を連続して行なうＤＭＡ制御装置において、
該ＤＭＡ転送は、少なくとも１バイトレーンのバースト読み書きを少なくとも１つ有する少なくとも１つの読み書きサイクルによって実行され、
転送元メモリが格納している転送データを前記バイトレーンごとにバイトアラインするデータ並び替え回路と、バイトアラインされた転送データを格納し転送先メモリへバースト転送するための内部バッファとから成り、
前記内部バッファは、それぞれが所定のバースト長に相当する段数のＮ個のバッファから成り、
前記データ並び替え回路は、データ並び替え制御部，変換レジスタおよびバッファアドレス生成部で構成され、
前記変換レジスタは、前記バイトレーンごとに１バイトデータを保持するＮ個のレジスタから成り、
前記データ並び替え制御部は、前記転送元メモリから読み出されたデータについて、バイトレーンごとに転送元アドレスと転送先アドレスの差分だけバイト位置をシフトして前記変換レジスタへ移送し、
前記バッファアドレス生成部は、前記Ｎの平方根だけの転送元アドレスの下位ビットと転送元アドレスの下位ビットを比較して、前記変換レジスタが保持している当該読み書きサイクルにおける転送データを書き込むべき前記内部バッファの番地を指定するスタートアドレスを生成することを特徴とするＤＭＡ制御装置。
【請求項２】
前記バッファアドレス生成部は、前記比較の結果により、前者が後者を超えないときは、前記バッファの内の両者の差分数に相当する数だけの下位バッファの第２段、
前者が後者を超えたときは、前記バッファの内の前記Ｎから両者の差分数に相当する数を減じた数だけの上位バッファの最終段を前記内部バッファの１回目の前記スタートアドレスとし、また前記バッファの内、両者の差分数に相当する数だけの下位バッファの第２段を２回目以降の前記スタートアドレスすることを特徴とする請求項１に記載のＤＭＡ制御装置。
【請求項３】
前記読み書きサイクルの当初における前記変換レジスタから前記内部バッファへの書込みは、前記バッファの全てについて第１段とすることを特徴とする請求項１または請求項２に記載のＤＭＡ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡ転送制御装置、特に、ＤＭＡ転送データに対してバイトアラインを行う機能を備えたＤＭＡ制御装置に関する。
【背景技術】
【０００２】
ＤＭＡ転送方式は、プロセッサを介さずに転送相手へ直接データ転送を行なうための技法の一つとして周知である。このようなＤＭＡ転送方式を用いることにより、プロセッサを使用しデータを転送する場合に比べて高速にデータ転送を行うことができる。
【０００３】
ＤＭＡ転送では、転送元アドレスを保持する転送元アドレスレジスタ、転送先アドレスを保持する転送先アドレスレジスタおよび転送サイズを保持する転送サイズレジスタを備え、プロセッサからこれらのレジスタへ設定が行われる。その後、転送開始リクエストが発生することにより、転送元アドレスレジスタで設定された転送元デバイスから転送先アドレスレジスタで設定された転送先デバイスへ転送サイズ分のデータが転送される。
【０００４】
データ転送単位はプロセッサ処理単位であり、例えば、３２ビットプロセッサであればデータ転送のバス幅は３２ビットとなる。しかし、現在のプロセッサの殆どは８ビットを最小の処理単位として扱うため、この場合は、１つのデータの単位が８ビット(１バイト)となり、３２ビットプロセッサの場合の３２ビット分のバス幅で８ビットの転送を行うこととなる。
【０００５】
このように、データの境界が例えば８ビット単位であるときは、データ転送元アドレスのバス幅に対する位置と、データ転送先アドレスのバス幅に対する位置が異なっている、というケースがあり得る。これらの位置を合わせる（バイトアラインという）ことにより、アドレスがどの位置であっても、所期のＤＭＡ転送を行なうことができるようにした従来技術を開示するものとして下記の特許文献が知られている。
【０００６】
特許文献１に記載の技術では、バイトアラインされた転送元データを内部バッファのアドレス“０”番地から書き込むため、レジスタで一度データを保持しシフトレジスタを使用し、転送先へのデータ転送は転送先アドレスに従いシフトレジスタを使用してバイトアラインを行っている。このため、バイトアラインされたデータを成形するため、転送元デバイスから転送元データを受け取る際にデータを成形するシフトレジスタがバス幅の１段分、転送先デバイスに転送先データを転送する際にデータを成形するシフトレジスタがバス幅の１段分、データを一時保持するレジスタがバス幅の１段分必要となり回路規模が増大してしまう。
【０００７】
また、１回目の転送元データと２回目の転送元データを受け取り、シフトレジスタでデータを成形し内部バッファへ書き込む構成となっているため、最低でも２クロック分の書き込み時間が必要となるので、３バースト以上のバースト転送の場合には必ずWAIT期間が必要となり、転送処理の高速化の妨げとなる。
【０００８】
更に、転送元から受け取るＤＭＡ転送の最終データがアドレスのワード境界であった場合には、そのアドレス以降のデータを空データと認識して内部バッファに保持しないため、続けて前ＤＭＡ転送終了アドレスからＤＭＡを開始するＤＭＡ連続転送の場合には、前ＤＭＡ転送時に受け取った転送元の最終データを再度受け取らなければならない。
【０００９】
この点は特許文献２に記載の技術でも同様である。そこで、転送元から受け取るＤＭＡ転送の最終データがアドレスのワード境界であった場合に、そのアドレス以降のデータを内部バッファに保持しようとすると、続けて、前ＤＭＡ転送終了アドレスからＤＭＡを開始するＤＭＡ連続転送の場合には、前ＤＭＡ転送時に受け取った転送元の最終データを保持した内部バッファのアドレスが先頭となってしまう。この場合、内部バッファはリングバッファ形式で構成しなければ実現できず、内部バッファのアドレス管理が非常に複雑になってしまうため回路規模が増大し、且つ全体の転送時間に影響を与えることとなる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００６−４３４０号公報
【特許文献２】特開２００２−２１５５６３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
解決しようとする問題点は、バイトアラインを要するＤＭＡ転送においてはデータ転送時間が長くなり、また、回路規模が大きくなるという点である。
【課題を解決するための手段】
【００１２】
本発明は、データ転送時間を短縮し、回路規模を小さくするため、転送元データを並び替えし転送先アドレスを生成するためのロジックをデータ並び替え回路に組み込んだことを最も主要な特徴とする。
【発明の効果】
【００１３】
本発明のＤＭＡ転送制御装置は、従来技術では、転送元デバイスから受け取る転送元データの成形を行うバス幅分のシフトレジスタが１段と、転送先デバイスへ転送する転送先データの成形を行うバス幅分のシフトレジスタ１段と、データの一時保持を行うバス幅分のレジスタ１段が必要であったが、本発明においては、転送元データを並び替えし、転送先のスタートアドレスを生成するためのロジックをデータ並び替え回路に組み込んだため、データの並び替えを行うレジスタ１段で足りる。
【００１４】
また、転送元データを並び替えし、転送先のスタートアドレスを生成するためのロジックをデータ並び替え回路に組み込んだため、転送元データ並び替えに際にて、レジスタの間をデータが移動することがなくなり、ＤＭＡ転送時にＷＡＩＴ期間なしに連続してデータ店を行なうことができる。
【００１５】
また、データ並び替え回路において、ＤＭＡ連続転送の場合に内部バッファの容量制約上書き込めなかった前ＤＭＡ転送終了アドレスの転送データを保持しておき、次のＤＭＡ転送における転送データの転送元メモリからの読出しと同時に、内部バッファへ書き込める構成としたので、上記の前ＤＭＡ転送終了アドレスの転送データ、つまり、次のＤＭＡ転送における先頭データを再度読み出す必要がなくなる。
【００１６】
このように、本発明によれば、どのアドレスからもバイトアライン境界に影響されることなく、小さい回路規模で効率的なＤＭＡ転送が可能となる。
【図面の簡単な説明】
【００１７】
【図１】本発明のＤＭＡ転送制御装置の内部構成ブロック図である。
【図２】本発明におけるデータ並び替え回路と内部バッファの詳細ブロック図である。
【図３】データ並び替え回路におけるデータ変換パターン一覧図である。
【図４】転送元メモリおよび転送先メモリにおけるデータ格納例を示す説明図である。
【図５】本発明の動作例を示した第１の説明図である。
【図６】本発明の動作例を示した第２の説明図である。
【図７】本発明の動作例を示した第３の説明図である。
【発明を実施するための形態】
【００１８】
ＤＭＡ転送においてデータ転送回数を少なくし、また、回路規模の縮小化を図るという目的を、転送元アドレスと転送先アドレスとに基づいて、転送データをシフト処理するロジックと、シフト処理した転送データを内部バッファへ書き込むべきスタートアドレスを生成するためのロジックをデータ並び替え制御部に組み込むことにより実現した。
【実施例１】
【００１９】
図１は、本発明の実施例１としてのＤＭＡ転送制御装置２００の概略構成をＣＰＵ１００、転送元メモリ３００および転送先メモリ３０１と共に示すブロック図である。このＤＭＡ転送制御装置２００は、転送元メモリ３００から転送先メモリ３０１へのバイトアラインを要するＤＭＡ転送を実行することができる。バイトアラインの必要なＤＭＡ転送について具体的なイメージを得るには、図４を一見するとよい。図４は、転送元メモリ３００に格納されている転送元アドレス０ｘ０００１〜０ｘ００２０３２バイトのデータ００〜１Ｆを転送先メモリ３０１へ転送先アドレス０ｘ０００２〜０ｘ００２１としてＤＭＡ転送しようとする様子を示す。この例においては、転送元アドレスと転送先アドレスに１アドレスのズレがある。
【００２０】
ＤＭＡ転送制御装置２００は、転送サイズを保持する為の転送サイズレジスタ２０１、転送元アドレスを保持する為の転送元アドレスレジスタ２０２、転送先アドレスを保持する為の転送先アドレスレジスタ２０３、ＤＭＡ転送を管理する為のＤＭＡ制御回路２０４、転送先メモリからのデータを並び替える為のデータ並び替え回路２０５、並び替えたデータをまとめて保持する為の内部バッファ２０６を備えている。
【００２１】
転送サイズレジスタ２０１は、ＣＰＵ１００によりアクセス可能で、ＤＭＡ転送動作前に、転送サイズをＣＰＵ１００から書き込まれ保持する。保持された転送サイズは、ＤＭＡ転送制御回路２０４にパラメータとして入力され処理される。転送元アドレスレジスタ２０２は、ＣＰＵ１００によりアクセス可能で、ＤＭＡ転送動作前に、転送元アドレスをＣＰＵ１００から書き込まれ保持する。保持された転送元アドレスは、ＤＭＡ転送制御回路２０４およびデータ並び替え回路２０５にパラメータとして入力され処理される。転送先アドレスレジスタ２０３は、ＣＰＵ１００によりアクセス可能で、ＤＭＡ転送動作前に、転送先アドレスをＣＰＵ１００から書き込まれ保持する。保持された転送先アドレスは、ＤＭＡ転送制御回路２０４およびデータ並び替え回路２０５にパラメータとして入力され処理される。
【００２２】
ＤＭＡ制御回路２０４は、転送サイズレジスタ２０１，転送元アドレスレジスタ２０２，転送先アドレスレジスタ２０３からそれぞれ入力された転送サイズ，転送元アドレス，転送先アドレスにより、読み書きサイクル数および読み書きサイクル当たりのバースト数を管理する。バースト数とは、バイトレーン、即ちデータ転送単位の数である。また、バースト毎に転送元メモリ３００からのデータの読出し動作と転送先メモリ３０１へのデータの書込み動作を実施する。
【００２３】
データ並び替え回路２０５は、転送元アドレスレジスタ２０２から入力された転送元アドレスと、転送先アドレスレジスタ２０３から入力された転送先アドレスとにより、転送元メモリ３００から読み出したデータの並び替え、即ちバイトアラインを行い、バイトアラインされたデータを内部バッファ２０６へ出力する。データ並び替え回路２０５は、このときのスタートアドレスを転送元アドレスと転送先アドレスとにより生成して内部バッファ２０６に出力する。
【００２４】
内部バッファ２０６は、データ並び替え回路２０５から入力してくるバイトアラインされたデータを、データ並び替え回路２０５から入力してくるスタートアドレスから書き込み保持する。保持されたデータは転送先メモリ３０１へ書き込まれる。
【００２５】
この実施例においては、ＣＰＵ１００における処理単位は、最低１バイトであり、そのために１バイトごとにアドレスが割り振られている。ＣＰＵ１００とＤＭＡ転送制御装置２００の間、並びにＤＭＡ転送制御装置２００と転送元メモリ３００および転送先メモリ３０１の間は３２ビット幅のバスで接続されている。
【００２６】
図２は、データ並び替え回路２０５と内部バッファ２０６の詳細図である。データ並び替え回路２０５は、データ並び替え制御部２０７，変換レジスタ２０８およびバッファアドレス生成部２０９で構成されている。データ並び替え制御部２０７は、転送元メモリ３００から読み出されたデータについて、転送元アドレスレジスタ２０２から入力される転送元アドレスと、転送先アドレスレジスタ２０３から入力される転送先アドレスにより、４つのバイトレーンごとに並び替えを実施して変換レジスタ２０８へ出力する。
【００２７】
変換レジスタ２０８は、バイトレーンごとに並び替えられた１バイトデータを保持する４つのレジスタ０〜３から成る。この変換レジスタ２０８は、転送元メモリ３００から読み出された最終データを常に保持しておき、バス幅に対するアライメントが合っていない転送時に発生する転送元メモリ３００の同じアドレスに対しての２度読みを防止し、転送効率を良くする目的を持っている。バッファアドレス生成部２０９は、並び替えられたデータが入力されるべき内部バッファ２０６のバッファアドレスを生成する。
【００２８】
内部バッファ２０６は、バイトレーンごとにアドレス０〜３を有するバッファ２１０〜２１３から成る。バッファ２１０〜２１３は、バッファアドレス生成部２０９からのバッファアドレスに従ってレジスタ０〜３からのデータをアドレス０〜３のいずれかに保持する。バッファ２１０〜２１３それぞれは、１バイト幅×４ワードのサイズのフリップフロップまたはＲＡＭで構成される。
【００２９】
図３は、データ並び替え回路２０５において実施されるデータ並び替えのためのデータ変換パターンの一覧と、バッファアドレス生成部２０９が生成する内部バッファ２０６のスタートアドレスの一覧と、内部バッファ２０６の転送可能な有効バッファの段数を示す。データ変換パターンは、転送元アドレスの下位２ビットと転送先アドレスの下位２ビットとで定められ、このようなロジックがデータ並び替え回路２０５に組み込まれている。例えば、転送元アドレスの下位２ビットが「００」、転送先アドレスの下位２ビットが「００」のときは、レジスタ０，１，２，３にはデータＤＯ，Ｄ１，Ｄ２，Ｄ３が入力するが、転送元アドレスの下位２ビットが「０１」、転送先アドレスの下位２ビットが「１０」のときは、レジスタ０，１，２，３にはデータＤ２，Ｄ１，Ｄ０，Ｄ３が入力する。
【００３０】
スタートアドレスは、転送元アドレスの下位２ビットと転送先アドレスの下位２ビットとで定められ、このようなロジックがバッファアドレス生成部２０９に組み込まれている。スタートアドレスは、最初（１回目）のバースト転送の時と、２回目以降の時で異なる場合が存在する。その場合は転送可能な有効バッファの段数も１段分少なくなる。
【００３１】
以上のような構成において、転送元メモリ３００からＤＭＡ制御回路２０４によって発生したバースト数分だけ連続で読み出されたデータは、データ並び替え回路２０５で変換され、内部バッファ２０６に保持されていく。その後、データが内部バッファ２０６のバッファサイズに達した時点、または転送サイズ分のデータの読出しが終了した時点で転送先メモリ３０１へデータの書込みが開始される。従って、バス幅に対するアライメントが合っていない転送元アドレスおよび転送先アドレスが設定されていても、連続で効率の良い転送が可能なDMA転送制御装置を実現することができる。尚、ここでは、データのバス幅は３２ビット、最大バースト数を４として内部バッファ２０６のサイズを４ワードとしているが、本発明はこれに限定されるものではない。
【００３２】
次に、本ＤＭＡ転送制御装置２００のデータ転送動作について、図４〜図７を参照しながら説明する。図４は、転送元メモリ３００に格納されている転送データおよびＤＭＡデータ転送動作終了後に転送先メモリ３０１に格納された格納データの状態を示す。先に言及したように、転送元アドレスと転送先アドレスには１アドレスのズレがあり、バイトアライン（図３の７行目を適用）が必要とされる。ここでは、このようなＤＭＡ転送について説明する。図４において、転送元メモリ３００および転送先メモリ３０１におけるワードは、４バイト構成であって、各バイトはＬＳＢ側から、ＤＡＴＡ[7:0]，ＤＡＴＡ[15:8]，ＤＡＴＡ[23:16]，ＤＡＴＡ[31:24]とする。
【００３３】
（基本動作フロー）
転送元メモリ３００からのデータの読出し及び転送先メモリ３０１へのデータの書込みは、必ずバス幅に対するアライメントが合っているアドレスから行なう。このＤＭＡデータ転送動作の例では、転送サイズが３２バイトで、最大バースト数が４バーストなので、第１回目が４バースト（１５バイト）の読出し／書込みサイクル、第２回目が４バースト（１６バイト）の読出し／書込みサイクル、第３回目が１バースト（１バイト）の読出し／書込みサイクルがＤＭＡ制御回路２０４により発生する。各処理は１クロックごとに実施される。
【００３４】
（１）１回目の読み書きサイクル
図５は、１回目の読み書きサイクルを説明した図であり、このサイクルは以下の手順で４回のバーストが実施される。この手順（処理１−１〜処理１−５）により、転送元メモリ３００のアドレス０ｘ００００〜０ｘ０００Ｃのデータが処理される。
【００３５】
（処理１−１）
処理１−１では、転送元メモリ３００の０ｘ００００番地から転送するデータが読み出される（１バースト目）。読み出されたデータは、図３の７行目のデータ変換パターンに従って、データ並び替え回路２０５で、ＤＡＴＡ[7:0]が変換レジスタ２０８のレジスタ１、ＤＡＴＡ[15:8]が変換レジスタ２０８のレジスタ２、ＤＡＴＡ[23:16]が変換レジスタ２０８のレジスタ３、ＤＡＴＡ[31:24]が変換レジスタ２０８のレジスタ０に移送される。ＤＡＴＡ[7:0]（Ｙと記す）は前回のＤＭＡ転送における最終データであり、ＤＡＴＡ[15:8]は転送データ“００”、ＤＡＴＡ[23:16]は転送データ“０１”、ＤＡＴＡ[31:24]は転送データ“０２”である。
【００３６】
同時に、変換レジスタ２０８に存在していたデータは、内部バッファ２０６を構成するバッファ２１０〜２１３のそれぞれのバッファアドレス０ｘ０番地に書き込まれる。このときのバッファ２１０〜２１３への書込みは、残留データについてのものであるから、図３におけるスタートアドレスの適用はなく、バッファアドレス０ｘ０番地とされるのである。即ち、変換レジスタ２０８には、前回のＤＭＡ転送におけるデータ（Ｘと記す）が残っており、そのまま内部バッファ２０６に書き込まれる。
【００３７】
（処理１−２）
処理１−２では、転送元メモリ３００の０ｘ０００４番地から転送するデータが読み出される（２バースト目）。読み出されたデータは、処理１−１と同じように、並び替えられ変換レジスタ２０８に移送される。変換レジスタ２０８に残っていたデータ（Ｘ）は、処理１−１の結果によりＤＡＴＡ[7:0]〜ＤＡＴＡ[31:24]で上書きされている。
【００３８】
同時に、変換レジスタ２０８に存在しているデータは、図３のスタートアドレスが示すように、内部バッファ２０６を構成するバッファ２１０のバッファアドレス０ｘ１番地、バッファ２１１のバッファアドレス０ｘ０番地、バッファ２１２のバッファアドレス０ｘ０番地、バッファ２１３のバッファアドレス０ｘ０番地に書き込まれる。バッファ２１０のバッファアドレス０ｘ０番地にはデータＸ、バッファ２１１のバッファアドレス０ｘ０番地にはデータＹが残っている。書込み終了後、それぞれのバッファアドレスは、＋１番地インクリメントされる。このように、転送元データは、アドレスがバイト単位に１つシフトされた形でローテンションされて変換レジスタ２０８に保持され内部バッファ２０６に書き込まれる。
【００３９】
（処理１−３）
処理１−３では、転送元メモリ３００の０ｘ０００８番地から転送するデータが読み出される（３バースト目）。読み出されたデータは、処理１−１と同じように、並び替えられ変換レジスタ２０８に移送される。同時に、変換レジスタ２０８に存在していたデータは、内部バッファ２０６を構成するバッファ２１０のバッファアドレス０ｘ２番地、バッファ２１１のバッファアドレス０ｘ１番地、バッファ２１２のバッファアドレス０ｘ１番地、バッファ２１３のバッファアドレス０ｘ１番地に書き込まれる。書込み終了後、それぞれのバッファアドレスは、＋１番地インクリメントされる。
【００４０】
（処理１−４）
処理１−４では、転送元メモリ３００の０ｘ０００Ｃ番地から転送するデータが読み出される（４バースト目）。読み出されたデータは、処理１−１と同じように、並び替えられ変換レジスタ２０８に移送される。同時に、変換レジスタ２０８に存在しているデータは、内部バッファ２０６を構成するバッファ２１０のバッファアドレス０ｘ３番地、バッファ２１１のバッファアドレス０ｘ２番地、バッファ２１２のバッファアドレス０ｘ２番地、バッファ２１３のバッファアドレス０ｘ２番地に書き込まれる。書込み終了後、それぞれのバッファアドレスは、＋１番地インクリメントされる。
【００４１】
（処理１−５）
処理１−５では、変換レジスタ２０８に存在しているデータが、内部バッファ２０６を構成するバッファ２１１のバッファアドレス０ｘ３番地、バッファ２１２のバッファアドレス０ｘ３番地、バッファ２１３のバッファアドレス０ｘ３番地に書き込まれる。処理１−４の時点で４バースト分のデータ読出しが完了しており、転送元メモリ３００からのデータの読出しは実施しない。また、バッファ２１０に対しては、処理１−４の時点で空きスペースがないので書込みは実施されない。
【００４２】
処理１−５が終了した時点で、内部バッファ２０６はデータを保持する為の空きスペースがない状態になっており、次のクロックにより、内部バッファ２０６に保持された転送データの転送先メモリ３０１への書込みサイクルが４バースト分実施される。この時、転送元メモリ３００から読み出されたデータ“０Ｅ”は、まだ転送先メモリ３０１へ書き込まれていない。ＤＭＡ制御回路２０４は、転送したデータ量を管理しており、２回目の読出し／書込みサイクルの準備をする。
【００４３】
（２）２回目の読み書きサイクル
図６は、２回目の読み書きサイクルを説明した図であり、このサイクルは以下の手順で４回のバーストが実施される。この手順（処理２−１〜処理２−５）により、転送元メモリ３００のアドレス０ｘ００１０〜０ｘ００１Ｃのデータが処理される。
【００４４】
（処理２−１）
処理２−１では、転送元メモリ３００の０ｘ００１０番地から転送するデータが読み出される（１バースト目）。読み出されたデータは、図３の７行目のデータ変換パターンに従って、データ並び替え回路２０５で、ＤＡＴＡ[7:0]が変換レジスタ２０８のレジスタ１、ＤＡＴＡ[15:8]が変換レジスタ２０８のレジスタ２、ＤＡＴＡ[23:16]が変換レジスタ２０８のレジスタ３、ＤＡＴＡ[31:24]が変換レジスタ２０８のレジスタ０に移送される。ＤＡＴＡ[7:0]は転送データ“０Ｆ”、ＤＡＴＡ[15:8]は転送データ“１０”、ＤＡＴＡ[23:16]は転送データ“１１”、ＤＡＴＡ[31:24]は転送データ“１２”である。
【００４５】
同時に、変換レジスタ２０８に存在しているデータは、内部バッファ２０６を構成するバッファ２１０〜２１３のそれぞれのバッファアドレス０ｘ０番地に書き込まれる。このときのバッファ２１０〜２１３への書込みは、残留データについてのものであるから、図３におけるスタートアドレスの適用はなく、バッファアドレス０ｘ０番地とされるのである。即ち、変換レジスタ２０８は、処理１−５におけるデータを保持しており、そのまま内部バッファ２０６に書き込まれる。この結果、処理１−５において内部バッファ２０６への書込みが留保された転送データ“０Ｅ”の書込みが実行される。従って、再度、転送元メモリ３００の０ｘ０００Ｃ番地からデータを読み直す必要はないのである。なお、他の転送データ“０Ｂ”，“０Ｃ”，“０Ｄ”も内部バッファ２０６に書き込まれる。
【００４６】
（処理２−２）
処理２−２では、転送元メモリ３００の０ｘ００１４番地から転送するデータが読み出される（２バースト目）。読み出されたデータは、処理２−１と同じように、並び替えられ変換レジスタ２０８に移送される。変換レジスタ２０８に残っていたデータは、処理２−１の結果により、転送データ“０Ｆ”〜“１２”で上書きさている。
【００４７】
同時に、変換レジスタ２０８に存在しているデータは、図３のスタートアドレスが示すように、内部バッファ２０６を構成するバッファ２１０のバッファアドレス０ｘ１番地、バッファ２１１のバッファアドレス０ｘ０番地、バッファ２１２のバッファアドレス０ｘ０番地、バッファ２１３のバッファアドレス０ｘ０番地に書き込まれる。この結果、処理２−１で内部バッファ２０６に書き込まれた転送データ“０Ｂ”，“０Ｃ”，“０Ｄ”は、これらのデータにより上書きされる。書込み終了後、それぞれのバッファアドレスは、＋１番地インクリメントされる。
【００４８】
（処理２−３）
処理２−３では、転送元メモリ３００の０ｘ００１８番地から転送するデータが読み出される（３バースト目）。読み出されたデータは、処理２−１と同じように、並び替えられ変換レジスタ２０８に移送される。また、同時に変換レジスタ２０８に存在しているデータは、内部バッファ２０６を構成するバッファ２１０のバッファアドレス０ｘ２番地、バッファ２１１のバッファアドレス０ｘ１番地、バッファ２１２のバッファアドレス０ｘ１番地、バッファ２１３のバッファアドレス０ｘ１番地に書き込まれる。書込み終了後、それぞれのバッファアドレスは、＋１番地インクリメントされる。
【００４９】
（処理２−４）
処理２−４では、転送元メモリ３００の０ｘ００１Ｃ番地から転送するデータが読み出される（４バースト目）。読み出されたデータは、処理２−１と同じように、並び替えられ変換レジスタ２０８に移送される。同時に、変換レジスタ２０８に存在しているデータは、内部バッファ２０６を構成するバッファ２１０のバッファアドレス０ｘ３番地、バッファ２１１のバッファアドレス０ｘ２番地、バッファ２１２のバッファアドレス０ｘ２番地、バッファ２１３のバッファアドレス０ｘ２番地に書き込まれる。書込み終了後、それぞれバッファアドレスは、＋１番地インクリメントされる。
【００５０】
（処理２−５）
処理２−５では、変換レジスタ２０８に存在しているデータが、内部バッファ２０６を構成するバッファ２１１のバッファアドレス０ｘ３番地、バッファ２１２のバッファアドレス０ｘ３番地、バッファ２１３のバッファアドレス０ｘ３番地に書き込まれる。処理２−４の時点で４バースト分のデータ読出しが完了しており、転送元メモリ３００からのデータの読出しは実施しない。また、バッファ２１０に対しては、処理２−４の時点で空きスペースがないので書込みは実施されない。
【００５１】
処理２−５が終了した時点で、内部バッファ２０６はデータを保持する為の空きスペースがない状態になっており、次のクロックより内部バッファ２０６に保持された転送データの転送先メモリ３０１への書込みサイクルが４バースト分実施される。この時、転送元メモリ３０１から読み出されたデータ“１Ｅ”は、まだ転送先メモリ３０１へ書き込まれていない。ＤＭＡ制御回路２０４は、転送したデータ量を管理しており、３回目の読出し／書込みサイクルの準備をする。
【００５２】
（３）３回目の読み書きサイクル
図７は、３回目の読み書きサイクルを説明した図であり、このサイクルは以下の手順で１回のバーストが実施される。この手順（処理３−１〜処理３−２）により、転送元メモリ３００のアドレスアドレス０ｘ００２０のデータが処理される。
【００５３】
（処理３−１）
処理３−１では、転送元メモリ３００の０ｘ００２０番地から転送するデータが読み出される（１バースト目）。読み出されたデータは、図３の７行目のデータ変換パターンに従って、データ並び替え回路２０５で、ＤＡＴＡ[7:0]が変換レジスタ２０８のレジスタ１、ＤＡＴＡ[15:8]が変換レジスタ２０８のレジスタ２、ＤＡＴＡ[23:16]が変換レジスタ２０８のレジスタ３、ＤＡＴＡ[31:24]が変換レジスタ２０８のレジスタ０に移送される。転送元メモリ３００の０ｘ００２０番地から読み出されたデータは、“１Ｆ”を除いては、当該ＤＭＡ転送対象外のデータである。
【００５４】
同時に、変換レジスタ２０８に存在しているデータは、内部バッファ２０６を構成するバッファ２１０〜２１３のそれぞれのバッファアドレス０ｘ０番地に書き込まれる。このときのバッファ２１０〜２１３への書込みは、残留データについてのものであるから、図３におけるスタートアドレスの適用はなく、バッファアドレス０ｘ０番地とされるのである。即ち、変換レジスタ２０８は、処理２−５におけるデータを保持しており、そのまま内部バッファ２０６に書き込まれる。この結果、処理２−５において内部バッファ２０６への書込みが留保された転送データ“１Ｅ”の書込みが実行される。従って、再度、転送元メモリ３００の０ｘ０００Ｃ番地からデータを読み直す必要はないのである。なお、他の転送データ“１Ｂ”，“１Ｃ”，“１Ｄ”も内部バッファ２０６に書き込まれる。
【００５５】
（処理３−２）
処理３−２では、変換レジスタ２０８に存在しているデータを、内部バッファ２０６を構成するバッファ２１０のバッファアドレス０ｘ１番地、バッファ２１１のバッファアドレス０ｘ０番地、バッファ２１２のバッファアドレス０ｘ０番地、バッファ２１３のバッファアドレス０ｘ０番地に書き込まれる。既に処理３−１で１バースト分のデータ読出しが完了しており、転送元メモリ３００からのデータの読出しは実施しない。このとき、変換レジスタ２０８に存在しているデータは、“１Ｆ”を除いては、当該ＤＭＡ転送対象外のデータである。処理３−１で内部バッファ２０６に書き込まれた転送データ“１Ｂ”，“１Ｃ”，“１Ｄ”は、これらのデータにより上書きされる。
【００５６】
処理３−２が終了した時点で、内部バッファ２０６に転送サイズ分のデータの読込みが完了しており、次のクロックより内部バッファ２０６に保持された転送データの転送先メモリ３０１への書込みサイクルが４バースト分実施される。
【００５７】
以上の処理により、ＤＭＡデータ転送動作が終了し、図４に示したように、転送元メモリ３００のデータが転送先メモリ３０１へ転送される。
【符号の説明】
【００５８】
１００  ＣＰＵ
２００  ＤＭＡ転送制御装置
２０１  転送サイズレジスタ
２０２  転送元アドレスレジスタ
２０３  転送先アドレスレジスタ
２０４  ＤＭＡ転送制御回路
２０５  データ並び替え回路
２０６  内部バッファ
２０７  データ並び替え制御部
２０８  変換レジスタ
２０９  バッファアドレス生成部
２１０  バッファ
２１１  バッファ
２１２  バッファ
２１３  バッファ
【図１】
2010170164.tif 000003
【図２】
2010170164.tif 000004
【図３】
2010170164.tif 000005
【図４】
2010170164.tif 000006
【図５】
2010170164.tif 000007
【図６】
2010170164.tif 000008
【図７】
2010170164.tif 000009