(57)【要約】【課題】  データ転送を効率的に制御してダイレクトメモリアクセスを行うことを課題とする。【解決手段】  データ転送元及びデータ転送先のデータバス幅が異なるか否かを判断する判断手段と、データ転送元の方がデータ転送先よりもデータバス幅が狭いときには、データ転送元からのデータをデータ転送先のデータバス幅分蓄積されるまでデータ転送元のデータバス幅ずつ入力し、その後該データ転送先のデータバス幅分のデータをデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う転送手段とを有するダイレクトメモリアクセス装置が提供される。【選択図】        図１０
2005209224.tif 000002
【特許請求の範囲】
【請求項１】
データ転送元及びデータ転送先のデータバス幅が異なるか否かを判断する判断手段と、
データ転送元の方がデータ転送先よりもデータバス幅が狭いときには、データ転送元からのデータをデータ転送先のデータバス幅分蓄積されるまでデータ転送元のデータバス幅ずつ入力し、その後該データ転送先のデータバス幅分のデータをデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う転送手段と
を有するダイレクトメモリアクセス装置。
【請求項２】
データ転送元及びデータ転送先のデータバス幅が異なるか否かを判断する判断手段と、
データ転送元の方がデータ転送先よりもデータバス幅が広いときには、データ転送元のデータバス幅分のデータをデータ転送元から入力し、該データをデータ転送先のデータバス幅ずつデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う転送手段と
を有するダイレクトメモリアクセス装置。
【請求項３】
前記転送手段は、データ転送元の方がデータ転送先よりもデータバス幅が狭いときには、データ転送元からのデータをデータ転送先のデータバス幅分蓄積されるまでデータ転送元のデータバス幅ずつ入力し、その後該データ転送先のデータバス幅分のデータをデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う請求項２記載のダイレクトメモリアクセス装置。
【請求項４】
前記判断手段は、そのデータバス幅に応じてデータ転送元及びデータ転送先のアドレスを決めておき、データ転送元アドレス及びデータ転送先アドレスを基にデータ転送元のデータバス幅及びデータ転送先のデータバス幅を判断し、両者のデータバス幅が異なるか否かを判断する請求項３記載のダイレクトメモリアクセス装置。
【請求項５】
前記転送手段は、入出力機器及びメモリ間又はメモリ同士間のデータ転送を行う請求項４記載のダイレクトメモリアクセス装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ダイレクトメモリアクセス装置に関し、特にデータ転送を制御するダイレクトメモリアクセス装置に関する。
【背景技術】
【０００２】
図１３は、従来技術によるダイレクトメモリアクセス方法を示す。ダイレクトメモリアクセス（ＤＭＡ）は、入出力機器及びメモリ間又はメモリ同士間のデータ転送を行う。クロックＣＫは、ＤＭＡの同期クロックである。アドレスＡＤは、例えば、０〜９９番地がデータ転送元のアドレスであり、１００〜１９９番地がデータ転送先のアドレスである。１〜３番地には、それぞれデータＤ０〜Ｄ２が格納されている。データＤ０〜Ｄ２は、それぞれ１バイトであり、全部で３バイトである。データバスＤＴは、１ワード（１６ビット）幅である。そのデータバスＤＴは、０〜７ビットが第１のバイトであり、８〜１５ビットが第２のバイトである。リード信号ＲＤのパルスは読み込み指示を示し、ライト信号ＷＲのパルスは書き込み指示を示す。転送方式Ｂ／Ｗは、ローレベルがバイト転送を示し、ハイレベルがワード転送を示す。以下、３バイト（奇数バイト）長のデータＤ０〜Ｄ２の転送を行う場合を例に説明する。
【０００３】
まず、タイミングｔ１で、アドレスＡＤの１番地からデータＤ０を読み出し、タイミングｔ２で、そのデータＤ０をアドレスＡＤの１０１番地に書き込む。次に、タイミングｔ３で、アドレスＡＤの２番地からデータＤ１を読み出し、タイミングｔ４で、そのデータＤ１をアドレスＡＤの１０２番地に書き込む。最後に、タイミングｔ５で、アドレスＡＤの３番地からデータＤ２を読み出し、タイミングｔ６で、そのデータＤ２をアドレスＡＤの１０３番地に書き込んで終了となる。
【０００４】
偶数アドレススタートのデータ転送のときには、ワード転送が可能であるが、上記のように奇数アドレス（１番地）スタートのデータ転送のときには、すべてバイト転送により行われる。読み出し及び書き込みのセットを１サイクルとすると、この転送では３サイクルかかることとなる。
【０００５】
図１４は、従来技術による他のＤＭＡ方法を示す。ここでは、１番地（奇数アドレス）スタート及び４バイト（偶数バイト）長のデータ転送の場合を例に説明する。
【０００６】
まず、タイミングｔ１でアドレスＡＤの１番地からデータＤ０を読み出し、タイミングｔ２でそのデータＤ０を１０１番地に書き込む。次に、タイミングｔ３で２番地からデータＤ１を読み出し、タイミングｔ４でそのデータＤ１を１０２番地に書き込む。続いて、タイミングｔ５で３番地からデータＤ２を読み出し、タイミングｔ６でそのデータＤ２を１０３番地に書き込む。最後に、タイミングｔ７で４番地からデータＤ３を読み出し、タイミングｔ８でそのデータＤ３を１０４番地に書き込んで終了となる。
【０００７】
この場合も、奇数アドレス（１番地）スタートのデータ転送であるため、すべてバイト転送により行われる。読み出し及び書き込みのセットを１サイクルとすると、この転送では４サイクルかかることとなる。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
バイト単位でデータ転送するよりもワード単位で転送した方が、半分の転送回数で済む。転送回数が減ればそれだけ速く転送できるが、奇数アドレススタートのデータ転送ではワード転送を行うことができず、バイト転送を行うことになる。
【０００９】
また、データバス幅が異なる機器間での転送は、データバス幅が小さい方に合わせてデータ転送を行う。これにより、頻繁にバスを使用することになり、効率的なバスの使用を妨げることになる。
【００１０】
本発明の目的は、データ転送を効率的に制御してダイレクトメモリアクセスを行うことである。
【課題を解決するための手段】
【００１１】
本発明の一観点によれば、データ転送元及びデータ転送先のデータバス幅が異なるか否かを判断する判断手段と、データ転送元の方がデータ転送先よりもデータバス幅が狭いときには、データ転送元からのデータをデータ転送先のデータバス幅分蓄積されるまでデータ転送元のデータバス幅ずつ入力し、その後該データ転送先のデータバス幅分のデータをデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う転送手段とを有するダイレクトメモリアクセス装置が提供される。
【発明の効果】
【００１２】
データ転送を適切に制御することにより、データ転送の際に使用するバスの使用時間を短縮し、効率的にバスを使用することができる。
【発明を実施するための最良の形態】
【００１３】
図１は、本発明の実施形態によるダイレクトメモリアクセス（ＤＭＡ）装置の構成を示す。バス１０１には、中央処理装置（ＣＰＵ）１０２、ＤＭＡコントローラ（ＤＭＡＣ）１０３、メモリ１０４及び入出力（Ｉ／Ｏ）機器１０５が接続される。メモリ１０４は、データバス１１１を介してバス１０１に接続される。入出力機器１０５は、データバス１１２を介してバス１０１に接続される。
【００１４】
ＤＭＡ転送について説明する。入出力（Ｉ／Ｏ）機器１０５又はメモリ１０４から、データの転送要求信号がバス１０１に出されると、それは本来ＣＰＵ１０２に送られて処理されるが、その信号をＤＭＡ１０３が受け取り、ＣＰＵ１０２ではなくＤＭＡＣ１０３が処理をする。そのため、バス１０１の使用権をＣＰＵ１０２からＤＭＡＣ１０３に移し、ＤＭＡＣ１０３の動作時にはＣＰＵ１０２が止まっている。ＤＭＡＣ１０３は、転送処理を始める時に、データ転送方向、転送回数等の転送情報（図２参照）をメモリ１０４から読み込み、その情報に沿って転送処理を開始する。転送が終了又は中断すると、バス１０１の使用権をＣＰＵ１０２に戻して転送処理を終了する。以上がＤＭＡ転送の一連の動作である。
【００１５】
ＤＭＡＣ１０３は、入出力機器１０５及びメモリ１０４間のデータ転送をダイレクトメモリアクセスにより行う。また、バス１０１に２つのメモリ１０４を接続すれば、メモリ１０４同士間のデータ転送を行うこともできる。ＤＭＡＣ１０３は、例えば入出力機器１０５からデータ転送の指示を受けると、そのデータのうちの最初及び最後のデータはバイト転送又はワード転送を行い、残りのデータはすべてワード転送を行うように転送方式を指示し、その指示による転送方式によりデータ転送元（例えば入出力機器１０５）からデータ転送先（例えばメモリ１０４）へのダイレクトメモリアクセスによるデータ転送を行う。
【００１６】
図２は、メモリ１０４に記憶されるＤＭＡディスクリプタ２０１を示す。ＤＭＡディスクリプタ２０１は、転送元アドレス２０２、転送先アドレス２０３、データカウンタ２０４及び転送データ長指定ビット２０５を有する。データカウンタ２０４は、合計転送データ長を格納し、転送を行う毎にその転送データ長をダウンカウントする。転送データ長指定ビット２０５は、０がバイト転送を示し、１がワード転送を示す。
【００１７】
図３は、本実施形態によるダイレクトメモリアクセス方法を示す。ダイレクトメモリアクセス（ＤＭＡ）は、入出力機器及びメモリ間又はメモリ同士間のデータ転送を行う。クロックＣＫは、ＤＭＡの同期クロックである。アドレスＡＤは、例えば、０〜９９番地がデータ転送元のアドレスであり、１００〜１９９番地がデータ転送先のアドレスである。１〜３番地には、それぞれデータＤ０〜Ｄ２が格納されている。データＤ０〜Ｄ２は、それぞれ１バイトであり、全部で３バイトである。データバスＤＴは、１ワード（１６ビット）幅である。そのデータバスＤＴは、０〜７ビットが第１のバイトであり、８〜１５ビットが第２のバイトである。図１において、転送元及び転送先のデータバス１１１，１１２が共に１６ビット幅の場合を説明する。リード信号ＲＤのパルスは読み込み指示を示し、ライト信号ＷＲのパルスは書き込み指示を示す。転送方式Ｂ／Ｗは、図２の転送データ長指定ビット２０５に相当し、ローレベルがバイト転送を示し、ハイレベルがワード転送を示す。以下、図１３に対応し、奇数アドレス（１番地）スタート及び３バイト（奇数バイト）長のデータＤ０〜Ｄ２の転送を行う場合を例に説明する。
【００１８】
まず、タイミングｔ１で、アドレスＡＤの１番地から１バイトのデータＤ０を読み出し、タイミングｔ２で、その１バイトのデータＤ０をアドレスＡＤの１０１番地に書き込む。すなわち、バイト転送を行う。次に、タイミングｔ３で、アドレスＡＤの２番地から１ワードのデータＤ１，Ｄ２を読み出し、タイミングｔ４で、その１ワードのデータＤ１，Ｄ２をアドレスＡＤの１０２番地に書き込む。すなわち、ワード転送を行う。以上、読み出し及び書き込みのセットを１サイクルとすると、この転送では２サイクルかかることとなる。
【００１９】
上記の図１３に示す方法では、奇数アドレス（１番地）スタートのデータ転送のときにはすべてバイト転送により行われる。これに対し、本実施形態では、最初の１バイトのデータのみをバイト転送で行い、その後のデータをワード転送する。これにより、高速な転送を行うことができる。
【００２０】
なお、偶数アドレススタート及び奇数バイト長のデータ転送の場合は、最後の１バイトデータのみバイト転送になり、その他のデータはワード転送になる。また、奇数アドレススタート及び偶数バイト長のデータ転送の場合は、最初及び最後のデータのみがバイト転送になり、その他のデータはワード転送になる。以上、本実施形態（図３）は、図１３の場合に比べ、バス１０１を占拠することなく、より効率的にバス１０１を使用することができる。
【００２１】
図４は、本実施形態による他のＤＭＡ方法を示す。ここでは、図１４に対応し、１番地（奇数アドレス）スタート及び４バイト（偶数バイト）長のデータ転送の場合を例に説明する。
【００２２】
まず、タイミングｔ１でアドレスＡＤの１番地から１バイトのデータＤ０を読み出し、タイミングｔ２でそのデータＤ０を１０１番地に書き込む。すなわち、バイト転送を行う。次に、タイミングｔ３で２番地から１ワードのデータＤ１，Ｄ２を読み出し、タイミングｔ４でそのデータＤ１，Ｄ２を１０２番地に書き込む。すなわち、ワード転送を行う。最後に、タイミングｔ５で４番地から１バイトのデータＤ３を読み出し、タイミングｔ６でそのデータＤ３を１０４番地に書き込む。すなわち、バイト転送を行う。
【００２３】
上記のように、奇数アドレススタート及び偶数バイト長のデータ転送の場合は、最初及び最後のデータを共にバイト転送し、残りはすべてワード転送を行う。このデータ転送は３サイクルで終了したことになる。本実施形態（図４）は、図１４の場合に比べ、高速に転送を行い、バス１０１を占拠することなく、より効率的にバス１０１を使用することができる。
【００２４】
図１のＤＭＡＣ１０３は、レジスタＲｅ［０］及びＲｅ［１］を有し、これらのレジスタに応じて最初及び最後のデータの転送方式を決定する。レジスタＲｅ［０］は、１が最初のデータをバイト転送することを示し、０が最初のデータをワード転送することを示す。レジスタＲｅ［１］は、１が最後のデータをバイト転送することを示し、０が最後のデータをワード転送することを示す。
【００２５】
図５は、ＤＭＡＣ１０３がレジスタＲｅ［０］及びＲｅ［１］の値を決定する処理を示すフローチャートである。ステップＳ５０１では、奇数アドレススタートか否かを判断する。奇数アドレススタートであればステップＳ５０６へ進み、偶数アドレススタートであればステップＳ５０２へ進む。
【００２６】
ステップＳ５０２では、レジスタＲｅ［０］に０を設定し、ステップＳ５０３へ進む。ステップＳ５０６では、レジスタＲｅ［０］に１を設定し、ステップＳ５０７へ進む。
【００２７】
ステップＳ５０３では、最後の転送アドレスが奇数アドレス（奇数アドレスエンド）か否かをチェックする。奇数アドレスエンドであればステップＳ５０５へ進み、偶数アドレスエンドであればステップＳ５０４へ進む。ステップＳ５０４では、レジスタＲｅ［１］に０を設定する。ステップＳ５０５では、レジスタＲｅ［１］に１を設定する。
【００２８】
ステップＳ５０７では、奇数アドレスエンドか否かをチェックする。奇数アドレスエンドであればステップＳ５０９へ進み、偶数アドレスエンドであればステップＳ５０８へ進む。ステップＳ５０８では、レジスタＲｅ［１］に０を設定する。ステップＳ５０９では、レジスタＲｅ［１］に１を設定する。
【００２９】
なお、ステップＳ５０３及びＳ５０７の判断は、最終データ転送時に行われる。すなわち、図２のデータカウンタ２０４の値が１になった時点で判断する。
【００３０】
図６は、ＤＭＡによるデータ転送処理を示すフローチャートである。
ステップＳ６０１では、転送元（例えば入出力機器１０５）がデータ転送要求をバス１０１に出力する。ステップＳ６０２では、ＤＭＡＣ１０３がデータ転送要求に応じたバス使用権の要求を入力する。ステップＳ６０３では、ＤＭＡＣ１０３がバス使用権を確保する。図２のＤＭＡディスクリプタ２０１には、転送情報が書き込まれる。ステップＳ６０４では、ＤＭＡＣ１０３がＤＭＡディスクリプタ２０１から転送情報を読み込む。転送元アドレスを参照して、奇数アドレススタートか偶数アドレススタートかを判定し、判定結果に応じて、レジスタＲｅ［０］の値を設定する。すなわち、図５のステップＳ５０１、及びＳ５０２又はＳ５０６が行われる。
【００３１】
ステップＳ６０５では、レジスタＲｅ［０］が１か否かをチェックする。１であればステップＳ６０６へ進み、０であればステップＳ６０７へ進む。ステップＳ６０６では、転送データ長指定ビット２０５（図２）を０にしてバイト転送を指示する。その後、ステップＳ６０９へ進む。ステップＳ６０７では、データカウンタ２０４（図２）が１、かつレジスタＲｅ［１］が１であることの条件を満たすか否かをチェックする。データカウンタ２０４は、残りのデータ転送数を示す。最終データ転送時は、データカウンタ２０４が１になる。上記の条件を満たすときにはステップＳ６０６へ進み、満たさないときにはステップＳ６０８へ進む。ステップＳ６０８では、転送データ長指定ビット２０５（図２）を１にしてワード転送を指示する。その後、ステップＳ６０９へ進む。
【００３２】
以上のように、レジスタＲｅ［０］の値に応じて、最初のデータがバイト転送方式又はワード転送方式のいずれかが指示される。その転送方式に従い、ステップＳ６０９で転送元アドレス２０２からデータを読み込み、ステップＳ６１０で転送先アドレス２０３にそのデータを書き込む。すなわち、転送元から転送先へのバイト転送又はワード転送を行う。
【００３３】
次に、ステップＳ６１１では、転送情報の書き換えを行う。具体的には、図２の転送元アドレス２０２、転送先アドレス２０３を増加させ、データカウンタ２０４を減少させる。なお、最初の転送時には、レジスタＲｅ［０］を０に設定する。最後の転送の時には、転送元アドレスを参照し、奇数アドレスエンドか偶数アドレスエンドかを判定し、判定結果に応じて、レジスタＲｅ［１］の値を設定する。すなわち、図５のステップＳ５０３〜Ｓ５０５又はＳ５０７〜Ｓ５０９が行われる。
【００３４】
次に、ステップＳ６１２では、転送回数終了又は転送中断の指示があるか否かをチェックする。データカウンタ２０４が０であれば、転送回数終了であると判断することができる。上記の指示があるときにはステップＳ６１３へ進み、転送処理を終了する。指示がないときにはステップＳ６０５へ戻る。
【００３５】
その後、ステップＳ６０５及びＳ６０７を介して、ステップＳ６０８でワード転送が指示され、ワード転送が繰り返し行われる。そして、最後の転送時には、ステップＳ６０７にて、レジスタＲｅ［１］が１か否かチェックされる。レジスタＲｅ［１］が１であればバイト転送が行われ、０であればワード転送が行われる。
【００３６】
上記では、図１において、メモリ１０４のデータバス１１１の幅及び入出力機器１０５のデータバス１１２の幅が同じ１６ビットの場合を説明した。次に、例えばメモリのデータバス１１１が１６ビット幅で、入出力機器のデータバス１１２が８ビット幅のように、転送元及び転送先のデータバス幅が異なる場合を説明する。
【００３７】
図７は、ＤＭＡＣ１０３内のデータ保持用レジスタ７０１を示す。データ保持用レジスタ７０１は、複数のバイトレジスタを有する。ビット長７０３は、１個のバイトレジスタのビット長である。ビット長７０２は、すべてのバイトレジスタの合計ビット長である。ビット長７０３は、例えば入出力機器のデータバス１１２に対応し、８ビットである。ビット長７０２は、例えばメモリのデータバス１１１に対応し、１６ビットである。
【００３８】
入出力機器１０５からメモリ１０４への転送時、入出力機器１０５のデータバス幅を８ビット、メモリ１０４のデータバス幅を１６ビットとする。その場合、入出力機器１０５のデータバス幅に合わせて８ビット毎に転送を行うのではなく、入出力機器１０５からのデータをＤＭＡＣ１０３内のレジスタ７０１に一時的に保持し、転送先であるメモリ１０４のデータバス幅に対応する１６ビット分蓄積されたらメモリ１０４に出力する。逆に、メモリ１０４から入出力機器１０５への転送時、メモリ１０４からの１６ビットのデータをＤＭＡＣ１０３内のレジスタ７０１に保持し、転送先の入出力機器１０５のデータバス幅である８ビットずつ入出力機器１０５へ出力する。以上から、常にデータバス幅の小さい入出力機器１０５のデータバス幅に合わせて８ビット転送でバスを使用するのではなく、ＤＭＡＣ１０３内のレジスタ７０１に一時的にデータを保持することにより、データ転送時のバス１０１の占有時間を短縮し、効率的にバス１０１を使用することを可能としている。
【００３９】
図８は、データバス幅が異なる転送元及び転送先間のデータ転送のタイミングチャートである。転送元のデータバス幅が１６ビットで、転送先のデータバス幅が８ビットの場合を示す。
【００４０】
まず、タイミングｔ１で、転送元の１番地から１６ビットのデータＤ０，Ｄ１をワード転送で読み出し、１６ビットのレジスタＲｅｇに書き込む。レジスタＲｅｇは、図７のレジスタ７０１に対応する。
次に、タイミングｔ２で、レジスタＲｅｇの下位８ビットのデータＤ０を転送先の１０１番地にバイト転送で書き込む。
次に、タイミングｔ３で、レジスタＲｅｇの上位８ビットのデータＤ１を転送先の１０２番地にバイト転送で書き込む。
次に、タイミングｔ４で、転送元の２番地から１６ビットのデータＤ２，Ｄ３をワード転送で読み出し、レジスタＲｅｇに書き込む。
次に、タイミングｔ５で、レジスタＲｅｇの下位８ビットのデータＤ２を転送先の１０３番地にバイト転送で書き込む。
次に、タイミングｔ６で、レジスタＲｅｇの上位８ビットのデータＤ３を転送先の１０４番地にバイト転送で書き込む。
次に、タイミングｔ７で、転送元の３番地から１６ビットのデータＤ４，Ｄ５をワード転送で読み出し、レジスタＲｅｇに書き込む。
【００４１】
図９は、データバス幅が８ビットの転送元からデータバス幅が１６ビットの転送先へのデータ転送のタイミングチャートである。
【００４２】
まず、タイミングｔ１で、転送元の１０１番地から８ビットのデータＤ０をバイト転送で読み出し、レジスタＲｅｇの下位８ビットに書き込む。
次に、タイミングｔ２で、転送元の１０２番地から８ビットのデータＤ１をバイト転送で読み出し、レジスタＲｅｇの上位８ビットに書き込む。
次に、タイミングｔ３で、レジスタＲｅｇの１６ビットデータＤ０，Ｄ１を転送先の１番地にワード転送により書き込む。
次に、タイミングｔ４で、転送元の１０３番地から８ビットのデータＤ２をバイト転送で読み出し、レジスタＲｅｇの下位８ビットに書き込む。
次に、タイミングｔ５で、転送元の１０４番地から８ビットのデータＤ３をバイト転送で読み出し、レジスタＲｅｇの上位８ビットに書き込む。
次に、タイミングｔ６で、レジスタＲｅｇの１６ビットデータＤ２，Ｄ３を転送先の２番地にワード転送により書き込む。
次に、タイミングｔ７で、転送元の１０５番地から８ビットのデータＤ４をバイト転送で読み出し、レジスタＲｅｇの下位８ビットに書き込む。
【００４３】
図１０は、データ保持用レジスタ１００５を内蔵するＤＭＡＣ１０３の詳細図である。データ保持用レジスタ１００５は、２個のバイトレジスタ１００５ａ，１００５ｂを有する。各レジスタ１００５ａ，１００５ｂはそれぞれ８ビット長である。データ保持用レジスタ１００５は、１６ビット長のワードレジスタであり、異なるデータバス幅間のＤＭＡ転送を行う場合、一時データを保持するために必要なものである。
【００４４】
バスコントローラ１００１は、バス１０１を介して必要なデータを転送制御部１００４及びアドレス格納部１００２に入出力する。アドレス格納部１００２は、デコーダを有し、図２のディスクリプタ２０１から供給される転送元アドレスＳＲＣ＿ａｄｄ及び転送先アドレスＤＳＴ＿ａｄｄを格納する。アドレス格納部１００２は、転送元アドレスＳＲＣ＿ａｄｄ及び転送先アドレスＤＳＴ＿ａｄｄに応じて、信号ＳＡ及びＤＡを転送制御部１００４に出力する。信号ＳＡは、転送元アドレスＳＲＣ＿ａｄｄが奇数アドレスであれば１、偶数アドレスであれば０である。信号ＤＡは、転送先アドレスＤＳＴ＿ａｄｄが奇数アドレスであれば１、偶数アドレスであれば０である。
【００４５】
ビット判定レジスタ１００３は、アドレス格納部１００２でデコードされたアドレスＳＲＣ＿ａｄｄ，ＤＳＴ＿ａｄｄのデータバス幅に応じて、信号ＳＢ及びＤＢを転送制御部１００４に出力する。信号ＳＢは、転送元のアドレスＳＲＣ＿ａｄｄのデータバス幅が８ビットであれば０、１６ビットであれば１である。信号ＤＢは、転送先のアドレスＤＳＴ＿ａｄｄのデータバス幅が８ビットであれば０、１６ビットであれば１である。
【００４６】
図１１は、データバス幅の判断方法を示す。アドレス空間１１０１は、例えば２００番地より小さいアドレス空間１１０２、及び２００番地以降のアドレス空間１１０３を有する。アドレス空間１１０２は、データバスが１６ビット幅のリソースのアドレス空間であり、例えばメモリ１０４のアドレス空間である。アドレス空間１１０３は、データバスが８ビット幅のリソースのアドレス空間であり、例えば入出力機器１０５のアドレス空間である。このように、アドレス空間を区分することにより、図１０のアドレス格納部１００２内のデコーダは、アドレスＳＲＣ＿ａｄｄ，ＤＳＴ＿ａｄｄに応じて、そのアドレスのリソースのデータバス幅を判断し、ビット判定レジスタ１００３は信号ＳＢ及びＤＢを出力する。
【００４７】
図１０において、転送制御部１００４は、信号ＳＡ，ＤＡ，ＳＢ，ＤＢに応じて、図１２に示す転送方式を制御してデータ転送を行う。信号（ＳＢ，ＤＢ）が（０，０）又は（１，１）のときは、上記の図６に示す通常のＤＭＡ転送を行う。信号（ＳＢ，ＤＢ）が（１，０）又は（０，１）のときは、データバス幅が異なる時のＤＭＡ転送を行う。ここで、（１，０）ならば転送元が１６ビットで、転送先が８ビットを表しており、広いデータバス幅から狭いデータバス幅への転送となる。この場合、まず広いデータバス幅の転送元から、データ保持用レジスタ１００５に１６ビットのデータを転送する。そして次に、そのレジスタ１００５から狭いデータバス幅の転送先へ８ビットずつデータの転送が行われる。一方、（０，１）のときには、逆に転送元が８ビットで、転送先が１６ビットを表しており、狭いデータバス幅から広いデータバス幅への転送となる。この場合、まず狭いデータバス幅の転送元から、データ保持用レジスタ１００５に８ビットずつ１６ビットになるまで転送する。そして次に、そのレジスタ１００５から広いデータバス幅の転送先に１６ビットデータの転送が行われる。
【００４８】
次に、図１２を参照しながら、具体的な転送方法を説明する。この転送方式の選択は、転送元から転送先への転送を行う度に、図２の転送元アドレス２０２及び転送先アドレス２０３が変化するので、その度に転送元アドレス信号ＳＡ及び転送先アドレス信号ＤＡを判断する。
【００４９】
（Ａ）ＳＡ＝０，ＤＡ＝０，ＳＢ＝０，ＤＢ＝１の場合
転送元が８ビットバス幅、転送先が１６ビットバス幅である。転送元の偶数アドレスの８ビットデータをデータ保持用レジスタの下位バイトレジスタ１００５ａに転送する。
【００５０】
（Ｂ）ＳＡ＝０，ＤＡ＝１，ＳＢ＝０，ＤＢ＝１の場合
転送元が８ビットバス幅、転送先が１６ビットバス幅である。転送元の偶数アドレスの８ビットデータをデータ保持用レジスタの上位バイトレジスタ１００５ｂに転送する。
【００５１】
（Ｃ）ＳＡ＝１，ＤＡ＝０，ＳＢ＝０，ＤＢ＝１の場合
転送元が８ビットバス幅、転送先が１６ビットバス幅である。転送元の奇数アドレスの８ビットのデータをデータ保持用レジスタの上位バイトレジスタ１００５ｂに転送する。
【００５２】
（Ｄ）ＳＡ＝１，ＤＡ＝１，ＳＢ＝０，ＤＢ＝１の場合
転送元が８ビットバス幅、転送先が１６ビットバス幅である。転送元の奇数アドレスの８ビットのデータをデータ保持用レジスタの下位バイトレジスタ１００５ａに転送する。
【００５３】
（Ｅ）ＳＡ＝０，ＤＡ＝０，ＳＢ＝１，ＤＢ＝０の場合
転送元が１６ビットバス幅、転送先が８ビットバス幅である。転送元から送られたデータ保持用レジスタ１００５内の１６ビットデータのうちの下位バイトレジスタ１００５ａの８ビットデータを転送先に転送する。
【００５４】
（Ｆ）ＳＡ＝０，ＤＡ＝１，ＳＢ＝１，ＤＢ＝０の場合
転送元が１６ビットバス幅、転送先が８ビットバス幅である。転送元から送られたデータ保持用レジスタ１００５内の１６ビットデータのうちの上位バイトレジスタ１００５ｂの８ビットデータを転送先に転送する。
【００５５】
（Ｇ）ＳＡ＝１，ＤＡ＝０，ＳＢ＝１，ＤＢ＝０の場合
転送元が１６ビットバス幅、転送先が８ビットバス幅である。転送元から送られたデータ保持用レジスタ１００５内の１６ビットデータのうちの上位バイトレジスタ１００５ｂの８ビットデータを転送先に転送する。
【００５６】
（Ｈ）ＳＡ＝１，ＤＡ＝１，ＳＢ＝１，ＤＢ＝０の場合
転送元が１６ビットバス幅、転送先が８ビットバス幅である。転送元から送られたデータ保持用レジスタ１００５内の１６ビットデータのうちの下位バイトレジスタ１００５ａの８ビットデータを転送先に転送する。
【００５７】
以上のように、本実施形態のＤＭＡ装置は、データ転送の指示を受けると、そのデータのうちの最初及び最後のデータはバイト転送又はワード転送を行い、残りのデータはすべてワード転送を行うように転送方式を指示する指示手段と、その指示による転送方式によりデータ転送元からデータ転送先へのダイレクトメモリアクセスによるデータ転送を行う転送手段とを有する。これにより、図１３及び図１４の転送の場合よりも効率的にバスを使用し、高速にＤＭＡ転送を行うことができる。また、奇数アドレス時のワード転送に対する問題（データ破壊等）を回避できる。
【００５８】
また、本実施形態のＤＭＡ装置は、データ転送元及びデータ転送先のデータバス幅が異なるか否かを判断する判断手段を有し、データ転送元の方がデータ転送先よりもデータバス幅が狭いときには、データ転送元からのデータをデータ転送先のデータバス幅分蓄積されるまでデータ転送元のデータバス幅ずつ入力し、その後該データ転送先のデータバス幅分のデータをデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う。逆に、データ転送元の方がデータ転送先よりもデータバス幅が広いときには、データ転送元のデータバス幅分のデータをデータ転送元から入力し、該データをデータ転送先のデータバス幅ずつデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う。図１０のレジスタ１００５を用いて転送を行うことにより、バスを効率的に使用し、転送能力を向上させることができる。
【００５９】
その際、図１１に示すように、判断手段は、そのデータバス幅に応じてデータ転送元及びデータ転送先のアドレスを決めておき、データ転送元アドレス及びデータ転送先アドレスを基にデータ転送元のデータバス幅及びデータ転送先のデータバス幅を判断し、両者のデータバス幅が異なるか否かを判断する。
【００６０】
また、図１０に示すように、判断手段は、データ転送元及びデータ転送先のデータバス幅が異なるか否か、及びデータ転送元アドレス及びデータ転送先アドレスがそれぞれ偶数アドレス又は奇数アドレスのいずれかを判断し、転送制御部１００４がその判断結果に応じて、データ転送元からデータ転送先へのダイレクトメモリアクセスによるデータ転送方式を制御する。
【００６１】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００６２】
本発明の実施形態は、例えば以下のように種々の適用が可能である。
（付記１）データ転送の指示を受けると、そのデータのうちの最初及び最後のデータはバイト転送又はワード転送を行い、残りのデータはすべてワード転送を行うように転送方式を指示する指示手段と、
前記指示による転送方式によりデータ転送元からデータ転送先へのダイレクトメモリアクセスによるデータ転送を行う転送手段と
を有するダイレクトメモリアクセス装置。
（付記２）前記指示手段は、前記転送方式をレジスタに書き込むことにより指示する付記１記載のダイレクトメモリアクセス装置。
（付記３）前記レジスタは、前記最初のデータがバイト転送又はワード転送のいずれか、及び前記最後のデータがバイト転送又はワード転送のいずれかを指示するための情報を含む付記２記載のダイレクトメモリアクセス装置。
（付記４）前記レジスタは、前記最初のデータがバイト転送又はワード転送のいずれかを指示するための第１のビット、及び前記最後のデータがバイト転送又はワード転送のいずれかを指示するための第２のビットを含む付記３記載のダイレクトメモリアクセス装置。
（付記５）前記指示手段は、前記最初及び最後のデータの転送元アドレス及び転送先アドレスがそれぞれ奇数アドレス又は偶数アドレスのいずれかに応じて、前記最初及び最後のデータについてそれぞれバイト転送又はワード転送のいずれかを指示する付記４記載のダイレクトメモリアクセス装置。
（付記６）前記指示手段は、奇数アドレススタート及び偶数バイト長のデータ転送の場合は、最初及び最後のデータを共にバイト転送し、残りはすべてワード転送を行うように指示する付記４記載のダイレクトメモリアクセス装置。
（付記７）前記転送手段は、入出力機器及びメモリ間又はメモリ同士間のデータ転送を行う付記５記載のダイレクトメモリアクセス装置。
（付記８）前記指示手段は、前記最初及び最後のデータの転送元アドレス及び転送先アドレスがそれぞれ奇数アドレス又は偶数アドレスのいずれかに応じて、前記最初及び最後のデータについてそれぞれバイト転送又はワード転送のいずれかを指示する付記１記載のダイレクトメモリアクセス装置。
（付記９）データ転送元及びデータ転送先のデータバス幅が異なるか否かを判断する判断手段と、
データ転送元の方がデータ転送先よりもデータバス幅が狭いときには、データ転送元からのデータをデータ転送先のデータバス幅分蓄積されるまでデータ転送元のデータバス幅ずつ入力し、その後該データ転送先のデータバス幅分のデータをデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う転送手段と
を有するダイレクトメモリアクセス装置。
（付記１０）データ転送元及びデータ転送先のデータバス幅が異なるか否かを判断する判断手段と、
データ転送元の方がデータ転送先よりもデータバス幅が広いときには、データ転送元のデータバス幅分のデータをデータ転送元から入力し、該データをデータ転送先のデータバス幅ずつデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う転送手段と
を有するダイレクトメモリアクセス装置。
（付記１１）前記転送手段は、データ転送元の方がデータ転送先よりもデータバス幅が狭いときには、データ転送元からのデータをデータ転送先のデータバス幅分蓄積されるまでデータ転送元のデータバス幅ずつ入力し、その後該データ転送先のデータバス幅分のデータをデータ転送先に出力することによりダイレクトメモリアクセスデータ転送を行う付記１０記載のダイレクトメモリアクセス装置。
（付記１２）前記判断手段は、そのデータバス幅に応じてデータ転送元及びデータ転送先のアドレスを決めておき、データ転送元アドレス及びデータ転送先アドレスを基にデータ転送元のデータバス幅及びデータ転送先のデータバス幅を判断し、両者のデータバス幅が異なるか否かを判断する付記１１記載のダイレクトメモリアクセス装置。
（付記１３）前記転送手段は、入出力機器及びメモリ間又はメモリ同士間のデータ転送を行う付記１２記載のダイレクトメモリアクセス装置。
（付記１４）データ転送元及びデータ転送先のデータバス幅が異なるか否か、及びデータ転送元アドレス及びデータ転送先アドレスがそれぞれ偶数アドレス又は奇数アドレスのいずれかを判断する判断手段と、
前記判断手段の判断結果に応じて、データ転送元からデータ転送先へのダイレクトメモリアクセスによるデータ転送方式を制御する転送手段と
を有するダイレクトメモリアクセス装置。
（付記１５）前記転送手段は、バイト転送又はワード転送のデータ転送方式を制御する付記１４記載のダイレクトメモリアクセス装置。
（付記１６）前記転送手段は、上位バイトレジスタ及び下位バイトレジスタを含むワードレジスタを有し、前記判断手段の判断結果に応じて、データ転送元から入力したデータを上位バイトレジスタ及び／又は下位バイトレジスタに入力し、上位バイトレジスタ及び／又は下位バイトレジスタのデータをデータ転送先へ出力する付記１５記載のダイレクトメモリアクセス装置。
（付記１７）前記転送手段は、入出力機器及びメモリ間又はメモリ同士間のデータ転送を行う付記１６記載のダイレクトメモリアクセス装置。
【図面の簡単な説明】
【００６３】
【図１】本発明の実施形態によるＤＭＡ装置の構成を示すブロック図である。
【図２】ＤＭＡディスクリプタを示す図である。
【図３】本実施形態によるＤＭＡ転送を示すタイミングチャートである。
【図４】本実施形態による他のＤＭＡ転送を示すタイミングチャートである。
【図５】レジスタＲｅ［０］及びＲｅ［１］の値を決定する処理を示すフローチャートである。
【図６】ＤＭＡの転送処理を示すフローチャートである。
【図７】ＤＭＡコントローラ内のデータ保持用レジスタを示す図である。
【図８】データバス幅が１６ビットの転送元からデータバス幅が８ビットの転送先へのデータ転送のタイミングチャートである。
【図９】データバス幅が８ビットの転送元からデータバス幅が１６ビットの転送先へのデータ転送のタイミングチャートである。
【図１０】データ保持用レジスタを内蔵するＤＭＡコントローラの構成を示す図である。
【図１１】データバス幅により区分されたアドレス空間を示す図である。
【図１２】転送方式を示す図である。
【図１３】従来技術によるＤＭＡ転送を示すタイミングチャートである。
【図１４】従来技術による他のＤＭＡ転送を示すタイミングチャートである。
【符号の説明】
【００６４】
１０１  バス
１０２  ＣＰＵ
１０３  ＤＭＡコントローラ
１０４  メモリ
１０５  入出力機器
２０１  ＤＭＡディスクリプタ
２０２  転送元アドレス
２０３  転送先アドレス
２０４  データカウンタ
２０５  転送データ長指定ビット
７０１  データ保持用レジスタ
１００１  バスコントローラ
１００２  アドレス格納部
１００３  ビット判定レジスタ
１００４  転送制御部
１００５  データ保持用レジスタ
【図２】
2005209224.tif 000003
【図１】
2005209224.tif 000004
【図３】
2005209224.tif 000005
【図４】
2005209224.tif 000006
【図５】
2005209224.tif 000007
【図６】
2005209224.tif 000008
【図７】
2005209224.tif 000009
【図８】
2005209224.tif 000010
【図９】
2005209224.tif 000011
【図１０】
2005209224.tif 000012
【図１１】
2005209224.tif 000013
【図１２】
2005209224.tif 000014
【図１３】
2005209224.tif 000015
【図１４】
2005209224.tif 000016