(57)【要約】バスを介してＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータの指示に従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御装置であって、バス幅単位で区切った余りのデータでバス幅未満のデータである境界データが発生する場合に、ＤＭＡ制御装置内の境界データバッファに境界データを格納し、次のＤＭＡコマンドにより転送元から読み込むデータと先に格納しておいた境界データとをマージして転送先へバースト転送する。
2004057481.tif 000002
【特許請求の範囲】
【請求項１】
バスを介してＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータの指示に従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御装置であって、
転送元のデータセグメントを第１のデータとして読み込むバス読み込み部と、
データをバス幅単位で格納するバースト転送用バッファと、
バス幅単位で区切った余りのデータでバス幅未満のデータである境界データが発生する場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納する境界データバッファと、
前記イニシエータの指示から得られる転送元アドレスオフセットと前記境界データバッファが格納する転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するアキュムレータと、
前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを前記境界データバッファへ出力するとともに、前記第２のデータのうち前記境界データ以前のデータを前記バースト転送用バッファへ出力するデータシフト部と、
前記バースト転送用バッファに格納されたデータを転送先へバースト転送するバス書き込み部と
を備えてなるＤＭＡ制御装置。
【請求項２】
請求の範囲第１項に記載のＤＭＡ制御装置において、
前記データシフト部は、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを前記バースト転送用バッファへ出力することを特徴とするＤＭＡ制御装置。
【請求項３】
請求の範囲第１項に記載のＤＭＡ制御装置において、
転送先がキャッシュ制御されている場合、
前記アキュムレータは、さらにキャッシュラインの境界に合わせたバースト転送サイズを算出し、前記バス書き込み部は、前記バースト転送サイズに従って前記バースト転送用バッファに格納されたデータを転送先へバースト転送することを特徴とするＤＭＡ制御装置。
【請求項４】
請求の範囲第１項に記載のＤＭＡ制御装置において、
前記外部のイニシエータが複数ある場合、
前記境界データバッファは、境界データと次のデータセグメントの転送先アドレスオフセットの組を前記イニシエータの数と同数だけ格納し、前記アキュムレータは、指示したイニシエータ毎の前記転送元アドレスオフセットと転送先アドレスオフセットに基づいてデータのシフト量を算出することを特徴とするＤＭＡ制御装置。
【請求項５】
異なる幅を持つ複数のバスに接続されたＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータに従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御装置であって、
転送元のデータセグメントを第１のデータとして読み込むバス読み込み部と、
データを転送先バス幅単位で格納するバースト転送用バッファと、
転送元バス幅単位で区切った余りのデータで転送元バス幅未満のデータである境界データが発生する場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納する境界データバッファと、
前記イニシエータの指示から得られる転送元アドレスオフセットと前記境界データバッファが格納する転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するアキュムレータと、
転送元バス幅単位のデータを転送先バス幅単位のデータに並べ替えて前記バースト転送用バッファへ出力するデータ再構成部と、
前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを前記境界データバッファへ出力するとともに、前記第２のデータのうち前記境界データ以前のデータを前記データ再構成部へ出力するデータシフト部と、
前記バースト転送用バッファに格納されたデータを転送先へバースト転送するバス書き込み部と
を備えてなるＤＭＡ制御装置。
【請求項６】
請求の範囲第５項に記載のＤＭＡ制御装置において、
前記データシフト部は、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２データを前記再構成部へ出力することを特徴とするＤＭＡ制御装置。
【請求項７】
請求の範囲第５項に記載のＤＭＡ制御装置において、
前記データ再構成部は、転送先バス幅が転送元バス幅の整数倍である場合に、データシフト部の出力するデータを結合して前記バースト転送用バッファへ出力し、転送元バス幅が転送先バス幅の整数倍である場合に、データシフト部の出力するデータを分割して前記バースト転送用バッファへ出力することを特徴とするＤＭＡ制御装置。
【請求項８】
請求の範囲第７項に記載のＤＭＡ制御装置において、
転送先がキャッシュ制御されている場合、
前記アキュムレータは、さらにキャッシュラインの境界に合わせたバースト転送サイズを算出し、前記バス書き込み部は、前記バースト転送サイズに従って前記バースト転送用バッファに格納されたデータを転送先へバースト転送することを特徴とするＤＭＡ制御装置。
【請求項９】
請求の範囲第７項に記載のＤＭＡ制御装置において、
前記外部のイニシエータが複数ある場合、
前記境界データバッファは、境界データと次のデータセグメントの転送先アドレスオフセットの組を前記イニシエータの数と同数だけ格納し、前記アキュムレータは、指示したイニシエータ毎の前記転送元アドレスオフセットと転送先アドレスオフセットに基づいてデータセグメントのシフト量を算出することを特徴とするＤＭＡ制御装置。
【請求項１０】
バスを介してＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータの指示に従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御方法であって、
転送元のデータセグメントを第１のデータとして読み込むステップと、
前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントをバス幅単位で区切った余りのデータでバス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、
前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータをバースト転送用データとして格納するステップと、
前記バースト転送用データを転送先へバースト転送するステップと
を備えてなるＤＭＡ制御方法。
【請求項１１】
請求の範囲第１０項に記載のＤＭＡ制御方法において、
前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２データセグメントをバースト転送用データとして格納するステップを備えることを特徴とするＤＭＡ制御方法。
【請求項１２】
異なる幅を持つ複数のバスに接続されたＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータに従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御方法であって、
転送元のデータセグメントを第１のデータとして読み込むステップと、
前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントを転送元バス幅単位で区切った余りのデータで転送元バス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、
前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップと、
前記バースト転送用データを転送先へバースト転送するステップと
を備えてなるＤＭＡ制御方法。
【請求項１３】
請求の範囲第１２項に記載のＤＭＡ制御方法において、
前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップを備えることを特徴とするＤＭＡ制御方法。
【請求項１４】
バスを介してＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータの指示に従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送する動作をコンピュータに実行させるために、コンピュータにより読取可能な媒体に記憶されたＤＭＡ制御プログラムであって、
転送元のデータセグメントを第１のデータとして読み込むステップと、
前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントをバス幅単位で区切った余りのデータでバス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、
前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータをバースト転送用データとして格納するステップと、
前記バースト転送用データを転送先へバースト転送するステップと
をコンピュータに実行させるＤＭＡ制御プログラム。
【請求項１５】
請求の範囲第１４項に記載のＤＭＡ制御プログラムにおいて、
前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを前記バースト転送用バッファへ格納するステップをコンピュータに実行させることを特徴とするＤＭＡ制御プログラム。
【請求項１６】
異なる幅を持つ複数のバスに接続されたＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータに従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送する動作をコンピュータに実行させるために、コンピュータにより読取可能な媒体に記憶されたＤＭＡ制御プログラムであって、
転送元のデータセグメントを第１のデータとして読み込むステップと、
前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントを転送元バス幅単位で区切った余りのデータで転送元バス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、
前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップと、
前記バースト転送用データを転送先へバースト転送するステップと
をコンピュータに実行させるＤＭＡ制御プログラム。
【請求項１７】
請求の範囲第１６項に記載のＤＭＡ制御プログラムにおいて、
前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップをコンピュータに実行させることを特徴とするＤＭＡ制御プログラム。
【発明の詳細な説明】
【技術分野】  本発明は、メモリ同士のデータ転送やＩ／Ｏとメモリ間でのデータ転送を、ＣＰＵを経由せずに直接行うＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送において、制御を行うＤＭＡ制御装置、ＤＭＡ制御方法、ＤＭＡ制御プログラムに関するものである。
【背景技術】  従来、ＣＰＵを経由せずにメモリと他のデバイスの間等で直接データを転送する方法として、ＤＭＡ転送が知られている。一般的にＤＭＡ転送は、バースト転送が可能なことやＣＰＵにかかる負荷が分散されることなどから、ＣＰＵを経由するＰＩＯ（Ｐｒｏｇｒａｍｍｅｄ  Ｉ／Ｏ）転送に比べて、大量のデータ転送時に有利である。また、例えば、複数のデータセグメントを連結してひとつのデータパケットを作るイーサネットのような形態に対応するために、ＤＭＡ転送を制御するＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ：ＤＭＡ制御装置）には、転送元における１つのデータセグメントを転送する単発モードの他に、転送元における複数のデータセグメントを連続して転送するチェインモードが実装されているのが一般的である。
このチェインモードにおいて、転送元のデータセグメントの配置として任意のアドレスを許すことが可能な場合、ユーザプログラミングの柔軟性という意味で効果的である。
しかしながら、２バイト以上の幅を持つバスに接続されるＤＭＡＣにおいて、バイト単位の任意のアドレス境界で分割された複数のデータセグメントをチェインモードで転送する場合には、バースト転送の境界がバス幅と一致しない、ミスアラインメントが生じる。例えば、Ｉ／Ｏがイーサネットのネットワークアダプタである場合を想定する。メモリからＩ／Ｏへ転送するパケットは、ヘッダ部とペイロード部などの複数のパーツで構成されている。一般的にこれらのパーツは各々個別のメモリのワーク領域に準備されていることが多いが、個別に格納されているパーツを組みなおしてＩ／Ｏが認識できるパケットの形にする必要がある。このひとつの手段としてＤＭＡ転送が利用される場合があるが、個別のパーツが任意のアドレスに構築されているとバス幅にアラインしていないアドレスにあるデータに関してはバースト転送することができない。
従って、連続してバスを占有するバースト転送と、バス幅未満のデータを転送するパーシャル転送とを組み合わせる必要がある。この場合、転送の境界でバスのアービトレーションが入るため、全てをバースト転送した場合に比べてバス使用効率が低下するという問題が生じる。
このようなミスアラインメントの問題に対応するＤＭＡ制御方式として、例えば、特開平５−６７０３５や特開平９−１４６８７７や特開２０００−１３２４９７がある。特開平５−６７０３５で示される方式は、ＣＰＵ制御によりアラインメント調整を行うためＣＰＵの負荷分散としては好ましくない。また、特開平９−１４６８７７や特開２０００−１３２４９７で示される方式は、チェインモード時の転送に言及しておらず、チェインで使用する場合のミスアライメント時におけるバスオーバーヘッドの低下は免れない。
また、データの転送先である転送先メモリがキャッシュ制御されている場合に、受信したパケット毎に任意のアドレス境界でバースト転送を行うと無駄なキャッシュ制御オペレーションが発生する場合がある。
本発明は、このような問題を解決するためになされたものであり、バイト単位の任意のアドレス境界で分割されたデータセグメントをチェインモードでＤＭＡ転送する際に、バス使用効率を低下させないＤＭＡ制御装置、ＤＭＡ制御方法、ＤＭＡ制御プログラムを提供することを目的とする。
【発明の開示】
本発明は、バスを介してＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータの指示に従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御装置であって、転送元のデータセグメントを第１のデータとして読み込むバス読み込み部と、データをバス幅単位で格納するバースト転送用バッファと、バス幅単位で区切った余りのデータでバス幅未満のデータである境界データが発生する場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納する境界データバッファと、前記イニシエータの指示から得られる転送元アドレスオフセットと前記境界データバッファが格納する転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するアキュムレータと、前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを前記境界データバッファへ出力するとともに、前記第２のデータのうち前記境界データ以前のデータを前記バースト転送用バッファへ出力するデータシフト部と、前記バースト転送用バッファに格納されたデータを転送先へバースト転送するバス書き込み部とを備えてなるものである。
なお、前記データシフト部は、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを前記バースト転送用バッファへ出力する。
このような構成によれば、バイト単位の任意のアドレス境界で分割されたデータセグメントをチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。なお、実施の形態１におけるバス読み込み部とバス書き込み部は、バスサイクル制御部３１のことである。
また、本発明は、異なる幅を持つ複数のバスに接続されたＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータに従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御装置であって、転送元のデータセグメントを第１のデータとして読み込むバス読み込み部と、
データを転送先バス幅単位で格納するバースト転送用バッファと、転送元バス幅単位で区切った余りのデータで転送元バス幅未満のデータである境界データが発生する場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納する境界データバッファと、前記イニシエータの指示から得られる転送元アドレスオフセットと前記境界データバッファが格納する転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するアキュムレータと、転送元バス幅単位のデータを転送先バス幅単位のデータに並べ替えて前記バースト転送用バッファへ出力するデータ再構成部と、前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを前記境界データバッファへ出力するとともに、前記第２のデータのうち前記境界データ以前のデータを前記データ再構成部へ出力するデータシフト部と、前記バースト転送用バッファに格納されたデータを転送先へバースト転送するバス書き込み部とを備えてなるものである。
なお、前記データシフト部は、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを前記データ再構成部へ出力する。
このような構成によれば、バイト単位の任意のアドレス境界で分割されたデータセグメントを、転送元とは異なるバス幅を持つ転送先へチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。なお、実施の形態２におけるバス読み込み部とバス書き込み部は、バスサイクル制御部１３１，１４１のことである。
また、本発明に係るＤＭＡ制御装置において、前記データ再構成部は、転送先バス幅が転送元バス幅の整数倍である場合に、データシフト部の出力するデータを結合して前記バースト転送用バッファへ出力し、転送元バス幅が転送先バス幅の整数倍である場合に、データシフト部の出力するデータを分割して前記バースト転送用バッファへ出力することを特徴とするものである。
このような構成によれば、転送先バス幅が転送元バス幅の整数倍、または転送元バス幅が転送先バス幅の整数倍である場合に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。
また、本発明に係るＤＭＡ制御装置において、転送先がキャッシュ制御されている場合、前記アキュムレータは、さらにキャッシュラインの境界に合わせたバースト転送サイズを算出し、前記バス書き込み部は、前記バースト転送サイズに従って前記バースト転送用バッファに格納されたデータを転送先へバースト転送することを特徴とするものである。
このような構成によれば、転送先メモリがキャッシュ制御されている場合に、転送先メモリのキャッシュライン境界に合わせてバースト転送を行うことにより、ＤＭＡＣ外部のキャッシュ制御部の負荷を低減することができる。
また、本発明に係るＤＭＡ制御装置において、前記外部のイニシエータが複数ある場合、前記境界データバッファは、境界データと次のデータセグメントの転送先アドレスオフセットの組を前記イニシエータの数と同数だけ格納し、前記アキュムレータは、指示したイニシエータ毎の前記転送元アドレスオフセットと転送先アドレスオフセットに基づいてデータセグメントのシフト量を算出することを特徴とするものである。
このような構成によれば、複数のイニシエータによるＤＭＡ転送の指示に対応することができる。
また、本発明は、バスを介してＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータの指示に従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御方法であって、転送元のデータセグメントを第１のデータとして読み込むステップと、前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントをバス幅単位で区切った余りのデータでバス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータをバースト転送用データとして格納するステップと、前記バースト転送用データを転送先へバースト転送するステップとを備えてなるものである。
なお、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２データセグメントをバースト転送用データとして格納するステップを備える。
このような構成によれば、バイト単位の任意のアドレス境界で分割されたデータセグメントをチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。
また、本発明は、異なる幅を持つ複数のバスに接続されたＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータに従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送するＤＭＡ制御方法であって、転送元のデータセグメントを第１のデータとして読み込むステップと、前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントを転送元バス幅単位で区切った余りのデータで転送元バス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップと、前記バースト転送用データを転送先へバースト転送するステップとを備えてなるものである。なお、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップを備える。
このような構成によれば、バイト単位の任意のアドレス境界で分割されたデータセグメントを、転送元とは異なるバス幅を持つ転送先へチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。
また、本発明は、バスを介してＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータの指示に従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送する動作をコンピュータに実行させるために、コンピュータにより読取可能な媒体に記憶されたＤＭＡ制御プログラムであって、転送元のデータセグメントを第１のデータとして読み込むステップと、前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントをバス幅単位で区切った余りのデータでバス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータをバースト転送用データとして格納するステップと、前記バースト転送用データを転送先へバースト転送するステップとを備えてなるものである。
なお、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２データセグメントをバースト転送用データとして格納するステップを備える。
このような構成によれば、バイト単位の任意のアドレス境界で分割されたデータセグメントをチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。
また、本発明は、異なる幅を持つ複数のバスに接続されたＤＭＡ転送の転送元と転送先にアクセスし、外部のイニシエータに従って転送元における複数のデータセグメントをチェインし、転送先へバースト転送する動作をコンピュータに実行させるために、コンピュータにより読取可能な媒体に記憶されたＤＭＡ制御プログラムであって、転送元のデータセグメントを第１のデータとして読み込むステップと、前記イニシエータの指示から得られる転送元アドレスオフセットと、前のデータセグメントを転送元バス幅単位で区切った余りのデータで転送元バス幅未満のデータである境界データが発生した場合の転送先アドレスオフセットとに基づいて前記第１のデータのシフト量を算出するステップと、前記シフト量に応じて前記第１のデータのシフトを行い、前のデータセグメントで発生した境界データとシフトした前記第１のデータとをマージして第２のデータを生成し、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする場合に、該境界データと次のデータセグメントの転送先アドレスオフセットとを格納するとともに、前記第２のデータのうち前記境界データ以前のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップと、前記バースト転送用データを転送先へバースト転送するステップとを備えてなるものである。
なお、前記第２のデータに境界データが発生し且つ次のデータセグメントをチェインする前記場合以外においては、前記第２のデータを転送先バス幅単位のデータに並べ替えてバースト転送用データとして格納するステップを備える。
このような構成によれば、バイト単位の任意のアドレス境界で分割されたデータセグメントを、転送元とは異なるバス幅を持つ転送先へチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。
【図面の簡単な説明】  第１図は、実施の形態１に係るＤＭＡＣの構成の一例を示すブロック図である。
第２図は、実施の形態１に係るＤＭＡＣの動作の一例を示すフローチャートである。
第３図は、バス幅が２バイトの場合におけるデータシフト部と境界データバッファの構成の一例を示すブロック図である。
第４図は、転送元のバス幅が２バイト、転送先のバス幅が２バイトである場合のデータシフト部の入出力データの一例を表す図である。
第５図は、３回のＤＭＡコマンドにより転送元から読み込んだデータをバースト転送用バッファへ格納する動作の一例を示す図である。
第６図は、キャッシュラインの境界に合わせたバースト転送サイズでバースト転送する動作の一例を示す図である。
第７図は、実施の形態２に係るＤＭＡＣの構成の一例を示すブロック図である。
第８図は、転送元のバス幅が２バイト、転送先のバス幅が４バイトである場合のデータシフト部の入出力データの一例を表す図である。
第９図は、転送元のバス幅が２バイト、転送先のバス幅が４バイトである場合のデータシフト部の入出力データの一例を表す図である。
【発明を実施するための最良の形態】  以下、本発明の実施の形態について図面を参照して詳細に説明する。
実施の形態１．
本実施の形態では、ＤＭＡ転送対象の転送元バスと転送先バスが共通である場合のＤＭＡＣの動作について説明する。ここではチェインモードによりＤＭＡ転送を行うものとする。また、本発明では、アドレス／データ／制御信号の使用方法などのバス形態を限定しない。第１図は、実施の形態１に係るＤＭＡＣの構成の一例を示すブロック図である。ＤＭＡＣ１とＣＰＵ４とＩ／Ｏ５とメモリ６は、２バイト以上のバス幅を持つバス７を介して接続されている。ここで、ＣＰＵ４は、ＤＭＡＣ１のイニシエータであり、Ｉ／Ｏ５とメモリ６は、ＤＭＡ転送における転送元または転送先となり得るＤＭＡ転送対象である。
第１図に示すように、本実施の形態に係るＤＭＡＣ１は、ＤＭＡコア２とデータ転送部３から構成される。ＤＭＡコア２は、コマンドデコーダ２１と、メインコントローラ２２と、アキュムレータ２３から構成される。データ転送部３は、バスサイクル制御部３１と、データシフト部３２と、バースト転送用バッファ３３と、境界データバッファ３４から構成される。
以下、本実施の形態に係るＤＭＡＣ１の動作について説明する。第２図は、実施の形態１に係るＤＭＡＣの動作の一例を示すフローチャートである。まず、ＣＰＵ４がＤＭＡコマンドをＤＭＡＣ１へ通知することにより、このフローは開始する。転送元における１つのデータセグメントを転送するために１回のＤＭＡコマンドがＤＭＡＣへ通知される。さらに、チェインモードにおいては複数のＤＭＡコマンドがＤＭＡＣへ通知される。ＤＭＡコマンドは、転送元アドレスと転送先アドレスと転送サイズとチェインフラグからなる。チェインフラグとは、複数のＤＭＡコマンドで示されるデータセグメントをチェインしてデータ転送を行うか否かを示すフラグであり、チェインフラグが有りであれば前のチェインモードで転送されたデータとチェインすることを示し、チェインフラグが無しであれば前の転送とは独立にデータを転送することを示す。
また、チェインフラグとは、データセグメントかチェインの最後尾であるか否かを示すフラグでもある。ここで、一般的にＤＭＡコマンドの通知方法は、ＣＰＵがＰＩＯにより共通バス経由でＤＭＡＣへＤＭＡ起動コマンドを通知する方法と、ＣＰＵが予め一連のＤＭＡコマンドを共通メモリ領域に準備しておき、ＤＭＡＣへ起動トリガのみを通知する方法等があるが、ここではいずれの方法を用いても良い。
ＣＰＵ４から送信されたＤＭＡコマンドは、バス７を介してバスサイクル制御部３１で受信され、コマンドデコーダ２１へ入力される。ここで、バスサイクル制御部３１は、バスにおけるプロトコルに沿った送受信を行う。
次に、コマンドデコーダ２１は、ＤＭＡコマンドを解釈し、その結果得られたＤＭＡ転送に関する指示をメインコントローラ２２へ出力する。メインコントローラ２２は、アキュムレータ２３に転送元アドレスオフセットと転送先アドレスオフセットを与える。アキュムレータ２３は、転送元アドレスオフセットと転送先アドレスオフセットに基づいて、データシフト部３２に与えるシフト量を算出し、メインコントローラ２２へ出力する（Ｓ１）。
ここで、チェインフラグが有りであれば、メインコントローラ２２は境界データバッファに格納されたアドレスオフセットを読み込み、転送先アドレスオフセットとしてアキュムレータ２３に与える。境界データバッファ３４は、前のデータセグメントにおいてバス幅単位で区切った余りのデータでバス幅未満のデータである境界データと、その境界データによって生じる転送先アドレスオフセットを格納している。
次に、メインコントローラ２２は、バスサイクル制御部３１に対して、転送元からのデータの読み込みの指示を行う。バスサイクル制御部３１は、転送元からデータを読み込み、データシフト部３２へ出力する（Ｓ２）。
次に、メインコントローラ２２は、チェインモードでありかつ境界データバッファ３４に境界データがあるか否かの判断を行う（Ｓ３）。
チェインモードでありかつ境界データバッファに境界データがある場合（Ｓ３，Ｙ）、データシフト部３２は、メインコントローラ２２から与えられるシフト量に応じて、転送元から読み込んだデータをシフトした後、境界データとシフトしたデータをマージし（Ｓ４）、バス幅単位でバースト転送用バッファ３３へ出力する（Ｓ６）。バースト転送用バッファ３３は、入力されたデータをバス幅単位で格納する。
一方、前述の場合以外であれば（Ｓ３，Ｎ）、データシフト部３２はメインコントローラ２２から与えられるシフト量に応じて、転送元から読み込んだデータをシフトし（Ｓ５）、シフトしたデータをバス幅単位でバースト転送用バッファ３３へ出力する（Ｓ６）。バースト転送用バッファ３３は、入力されたデータをバス幅単位で格納する。
次に、メインコントローラ２２は、データをバス幅単位で格納した時に、境界データが残ったか否かの判断を行う（Ｓ７）。境界データが残らなければ（Ｓ７，Ｎ）、処理Ｓ１１へ移行する。一方、境界データが残った場合（Ｓ７，Ｙ）、メインコントローラ２２は、チェインモードでありかつチェインの最後尾ではないか否かの判断を行う（Ｓ８）。
チェインモードでありかつチェインの最後尾ではない場合（Ｓ８，Ｙ）、データシフト部３２は、境界データと次のデータセグメントの転送先アドレスオフセットを境界データバッファ３４へ格納し（Ｓ９）、処理Ｓ１１へ移行する。
一方、前述の場合以外（チェインフラグが無し、又はチェインモードの最後尾の場合）であれば（Ｓ８，Ｎ）、データシフト部３２は、境界データをバースト転送用バッファ３３へ格納し（Ｓ１０）、処理Ｓ１１へ移行する。
次に、メインコントローラ２２は、バースト転送用バッファ３３に格納されたデータのバースト転送が可能か否かの判断を行う（Ｓ１１）。ここで転送先バスへのバースト転送を開始するか否かは、転送先バスの使用状況に応じて決定され、もしバスの使用権を獲得できれば転送を開始し、もしビジー状態であれば、転送先バスへのバースト転送の開始を遅延させることも可能であり、遅延させている間に次のＤＭＡコマンドによって転送するデータが追加される場合もありえる。バースト転送が不可能であれば（Ｓ１１，Ｎ）、このフローは終了する。バースト転送が可能であれば（Ｓ１１，Ｙ）、メインコントローラ２２はバスサイクル制御部３１に対して、転送先へのデータの書き込みの指示を行う。バスサイクル制御部３１は、バースト転送用バッファ３３に格納されたデータを、バス７を介して転送先へバースト転送することにより転送先へデータを書き込み（Ｓ１２）、このフローは終了する。以上のフローは、チェインが継続する限り繰り返し実行される。
次に、データシフト部３２と境界データバッファ３４の構成について説明する。第３図は、バス幅が２バイトの場合におけるデータシフト部と境界データバッファの構成の一例を示すブロック図である。第３図に示すように、データシフト部３２は、データ選択部３２１と、シフトバッファ３２２と、ゲート３２３から構成される。境界データバッファ３４とシフトバッファ３２２等のサイズはバス幅で決定される。この例では、境界データバッファ３４のサイズを１バイトとし、シフトバッファ３２２のサイズを３バイトとする。第３図において、ｉ０、ｉ１は入力データの各バイトを表し、ｏ０、ｏ１は出力データの各バイトを表す。ここで、入力データは転送元から読み込んだデータがバス幅単位で入力されるものであり、出力データはバースト転送用バッファ３３へ格納されるデータである。また、ｆ０、ｆ１、ｆ２はシフトバッファ３２２の各バイトを表し、ｂ０は境界データバッファ３４の各バイトを表す。データは全てバイト単位である。
次に、データシフト部３２と境界データバッファ３４の動作について具体例を用いて説明する。第４図は、転送元のバス幅が２バイト、転送先のバス幅が２バイトである場合のデータシフト部の入出力データの一例を表す図である。第４図の表において、列の上側に記した数値は、対応する列に記されたケースにおける転送元アドレスオフセットを表し、行の左側に記した数値は、対応する行に記されたケースにおける転送先アドレスオフセットを表す。第４図の表における１つのセルは、列に対応する転送元アドレスオフセットと行に対応する転送先アドレスオフセットを持ったケースを表し、セルの内容はそのケースにおける入力データｉ０，ｉ１と出力データｏ０，ｏ１を表す。また、ｘは、チェインモードにおける前のＤＭＡコマンドにより転送元から読み込まれたデータであり、ａ，ｂ，ｃ，ｄは、チェインモードにおける現在のＤＭＡコマンドにより転送元から読み込まれるデータであり、チェインが継続する場合、ｚはチェインモードにおける次のＤＭＡコマンドで転送元から読み込まれる次のデータであり、チェインが継続しない場合、ｚは存在しない。２バイトの入力データｉ０，ｉ１は、データシフト部３２でシフトされ、必要に応じて境界データとマージされた後、２バイトの出力データｏ０，ｏ１としてバースト転送用バッファ３３へ出力される。
まず、転送元から読み込むデータセグメントの転送元アドレスオフセットが０ｘ０，転送先アドレスオフセットが０ｘ０のケースについて説明する。まず、データ選択部３２１は、最初の入力データａ（ｉ０）をシフトバッファｆ０へ出力し、最初の入力データｂ（ｉ１）をシフトバッファｆ１へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータａをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータｂをゲート３２３へ出力する。ゲートは、データａを出力データｏ０、データｂを出力データｏ１としてバースト転送用バッファ３３へ出力する。
次に、データ選択部３２１は、次の入力データｃ（ｉ０）をシフトバッファｆ０へ出力し、次の入力データｄ（ｉ１）をシフトバッファｆ１へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータｃをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータｄをゲート３２３へ出力する。ゲートは、データｃを出力データｏ０、データｄを出力データｏ１としてバースト転送用バッファ３３へ出力する。
次に、転送元から読み込むデータセグメントの転送元アドレスオフセットが０ｘ１，転送先アドレスオフセットが０ｘ０のケースについて説明する。まず、データ選択部３２１は、最初の入力データａ（ｉ１）をシフトバッファｆ２へ出力する。シフトバッファ３２２は、ｆ２に入力されたデータａをデータ選択部３２１へ出力する。
次に、データ選択部３２１は、データａをシフトバッファｆ０へ出力し、次の入力データｂ（ｉ０）をシフトバッファｆ１へ出力し、次の入力データｃ（ｉ１）をシフトバッファｆ２へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータａをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータｂをゲート３２３へ出力し、ｆ２に入力されたデータｃをデータ選択部３２１へ出力する。ゲート３２３は、データａを出力データｏ０、データｂを出力データｏ１としてバースト転送用バッファ３３へ出力する。すなわち、データａ，ｂは、データシフト部３２でメインコントローラ２２から与えられるシフト量に従ってシフトされ、バースト転送用バッファ３３へ出力される。
次に、データ選択部３２１は、データｃをシフトバッファｆ０へ出力し、次の入力データｄ（ｉ０）をシフトバッファｆ１へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータｃをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータｄをゲート３２３へ出力する。ゲートは、データｃを出力データｏ０、データｄを出力データｏ１としてバースト転送用バッファ３３へ出力する。
次に、転送元から読み込むデータセグメントの転送元アドレスオフセットが０ｘ０，転送先アドレスオフセットが０ｘ１のケースについて説明する。まず、データ選択部３２１は、境界データバッファｂ０が格納しているデータｘをシフトバッファｆ０へ出力し、最初の入力データａ（ｉ０）をシフトバッファｆ１へ出力し、最初の入力データｂ（ｉ１）をシフトバッファｆ２へ出力する。ここで、データｘは前のデータセグメントで発生した境界データである。シフトバッファ３２２は、ｆ０に入力されたデータｘをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータａをゲート３２３へ出力し、ｆ２に入力されたデータｂをデータ選択部３２１へ出力する。ゲートは、データｘを出力データｏ０、データａを出力データｏ１としてバースト転送用バッファ３３へ出力する。すなわち、データａは、データシフト部３２でメインコントローラ２２から与えられるシフト量に従ってシフトされた後、境界データｘとマージされ、バースト転送用バッファ３３へ出力される。
次に、データ選択部３２１は、データｂをシフトバッファｆ０へ出力し、次の入力データｃ（ｉ０）をシフトバッファｆ１へ出力し、次の入力データｄ（ｉ１）をシフトバッファｆ２へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータｂをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータｃをゲート３２３へ出力し、ｆ２に入力されたデータｄをデータ選択部３２１へ出力する。ゲート３２３は、データｂを出力データｏ０、データｃを出力データｏ１としてバースト転送用バッファ３３へ出力する。
次に、データ選択部３２１は、データｄをシフトバッファｆ０へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータｄをゲート３２３へ出力するとともに境界データバッファｂ０へ出力する。ここで、チェインが継続する場合、ゲート３２３はデータｄを出力せず、データｄは境界データバッファｂ０で保持され、次のデータセグメントで転送元から読み込まれるデータｚにマージされ、バースト転送用バッファ３３へ出力される。チェインが継続しない場合、ゲート３２３はデータｄをバースト転送用バッファ３３へ出力する。次に、転送元から読み込むデータセグメントの転送元アドレスオフセットが０ｘ１，転送先アドレスオフセットが０ｘ１のケースについて説明する。まず、データ選択部３２１は、境界データバッファｂ０が保持しているデータｘをシフトバッファｆ０へ出力し、最初の入力データａ（ｉ１）をシフトバッファｆ１へ出力する。ここで、データｘは前のデータセグメントで発生した境界データである。シフトバッファ３２２は、ｆ０に入力されたデータｘをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータａをゲート３２３へ出力する。ゲート３２３は、データｘを出力データｏ０、データａを出力データｏ１としてバースト転送用バッファ３３へ出力する。すなわち、データａは、データシフト部３２で境界データｘとマージされ、バースト転送用バッファ３３へ出力される。
次に、データ選択部３２１は、次の入力データｂ（ｉ０）をシフトバッファｆ０へ出力し、次の入力データｃ（ｉ１）をシフトバッファｆ１へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータｂをゲート３２３へ出力するとともに境界データバッファｂ０へ出力し、ｆ１に入力されたデータｃをゲート３２３へ出力する。ゲート３２３は、データｂを出力データｏ０、データｃを出力データｏ１としてバースト転送用バッファ３３へ出力する。
次に、データ選択部３２１は、データｄをシフトバッファｆ０へ出力する。シフトバッファ３２２は、ｆ０に入力されたデータｄをゲート３２３へ出力するとともに境界データバッファｂ０へ出力する。ここで、チェインが継続する場合、ゲート３２３はデータｄを出力せず、データｄは境界データバッファｂ０で保持され、次のデータセグメントで転送元から読み込まれるデータｚにマージされ、バースト転送用バッファ３３へ出力される。チェインが継続しない場合、ゲート３２３はデータｄをバースト転送用バッファ３３へ出力する。以上のように、転送元から読み込まれたデータは、メインコントローラ２２から与えられるシフト量に従ってシフトされ、さらに前のデータセグメントで境界データが発生していればマージされ、バースト転送用バッファ３３へ出力される。
次に、実際に、バイト単位の任意アドレス境界で分割されたデータセグメントをチェインし、連続アドレスのデータパケットを作る動作について説明する。第５図は、転送元から読み込んだデータをバースト転送用バッファへ格納する動作の一例を示す図である。
第５図（ａ）は１回目のＤＭＡコマンドにより読み込まれるデータを含む転送元データセグメントを示し、第５図（ｂ）は２回目のＤＭＡコマンドにより読み込まれるデータを含む転送元データセグメントを示し、第５図（ｃ）は３回目のＤＭＡコマンドにより読み込まれるデータを含む転送元データセグメントを示す。第５図（ａ）〜（ｃ）の図において、行はワードアドレスを示し、列は転送元バス幅を示す。また、第５図（ｄ）は３回のＤＭＡコマンドにより読み込まれたデータが格納されたバースト転送用バッファを示す。第５図（ｄ）の図において、行はエントリを示し、列は転送先バス幅を示す。
ここでは、転送元と転送先のバス幅を４バイトとし、３回のＤＭＡコマンドが起動されるものとする。１回目のＤＭＡコマンドは、チェインフラグ有り、転送サイズ２バイト、転送元アドレスオフセット０ｘ１、転送先アドレスオフセット０ｘ０とする。２回目のＤＭＡコマンドは、チェインフラグ有り、転送サイズ１２バイト、転送元アドレスオフセット０ｘ０、転送先アドレスオフセット０ｘ２とする。３回目のＤＭＡコマンドは、チェインフラグ無し、転送サイズ６バイト、転送元アドレスオフセット０ｘ２、転送先アドレスオフセット０ｘ２とする。
まず、１回目のＤＭＡコマンドを受け付けた場合について説明する。まず、データシフト部３２は、転送元から１ワードデータ（ａ１０〜ａ１３）を読み込み、シフト量に従って１バイト左シフトした２バイトのデータ（ａ１１，ａ１２）を境界データバッファ３４に格納する。このとき余分なａ１０，ａ１３は廃棄される。
次に、２回目のＤＭＡコマンドを受け付けた場合について説明する。まず、データシフト部３２は、転送元から３ワードデータ（ｂ１０〜ｂ３３）をバースト読み込む。先頭ワード（ｂ１０，ｂ１１，ｂ１２，ｂ１３）の読み込み時に、データシフト部３２は、シフト量に従って２バイト右シフトした先頭ワードを１回目のＤＭＡコマンドで境界データバッファ３４に格納されたデータ（ａ１１，ａ１２）とマージした後、バースト転送用バッファ３３のエントリ０ｘ０へ格納する。先頭ワードのうちバースト転送用バッファ３３に格納されなかったデータ（ｂ１２，ｂ１３）は２バイト右シフトした形でデータシフト部３２に残っている。
続いて２ｎｄワード（ｂ２０，ｂ２１，ｂ２２，ｂ２３）の読み込み時に、データシフト部３２は、シフト量に従って２バイト右シフトした２ｎｄワードを残っているデータ（ｂ１２，ｂ１３）とマージした後、バースト転送用バッファ３３のエントリ０ｘ４へ格納する。２ｎｄワードのうちバースト転送用バッファ３３に格納されなかったデータ（ｂ２２，ｂ２３）は２バイト右シフトした形でデータシフト部３２に残っている。
続いて３ｒｄワード（ｂ３０，ｂ３１，ｂ３２，ｂ３３）の読み込み時に、データシフト部３２は、シフト量に従って２バイト右シフトした３ｒｄワードを残っているデータ（ｂ２２，ｂ２３）とマージした後、バースト転送用バッファ３３のエントリ０ｘ８へ格納する。３ｒｄワードのうちバースト転送用バッファ３３に格納されなかったデータ（ｂ３２，ｂ３３）は境界データバッファ３４に格納される。
この時点でバースト転送用バッファのエントリ０ｘ０〜０ｘ８のデータが有効となるので、この３ワードデータを転送先バスへバースト転送可能となる。
次に、３回目のＤＭＡコマンドを受け付けた場合について説明する。まず、データシフト部３２は、転送元バスから２ワードデータ（ｃ２０〜ｃ３３）をバースト読み込む。先頭ワード（ｃ２０，ｃ２１，ｃ２２，ｃ２３）の読み込み時に、データシフト部３２は、シフト量に従って０バイトシフトした先頭ワードを２回目のＤＭＡコマンドで境界データバッファ３４に格納されたデータ（ｂ３２，ｂ３３）とマージした後、バースト転送用バッファ３３のエントリ０ｘＣへ格納する。このとき余分なｃ２０，ｃ２１は廃棄される。
続いて２ｎｄワード（ｃ３０，ｃ３１，ｃ３２，ｃ３３）の読み込み時に、データシフト部３２は、シフト量に従って０バイトシフトした２ｎｄワードをバースト転送用バッファ３３のエントリ０ｘ１０へ格納する。
この時点でバースト転送用バッファ３３のエントリ０ｘＣ〜０ｘ１０のデータが有効となるので、この２ワードを転送先バスへバースト転送可能となる。
上述した動作を、例えば従来のＤＭＡＣで転送する場合には、以下のように４回のパーシャルライトと１回のワードライトと１回の２ワードバーストライトに分割されることになる。ここで、従来のＤＭＡＣを用いて、バイト単位の任意アドレス境界で分割されたデータセグメントを転送先バスへ出力する動作について説明する。上述した具体例と同様、転送元バスと転送先バスのバス幅を４バイトとし、３回のＤＭＡコマンドが起動されるものとする。
まず、１回目のＤＭＡコマンドを受け付けた場合について説明する。データシフト部３２は、転送元から１ワードデータ（ａ１０〜ａ１３）を読み込む。データシフト部３２は、シフト量に従って１バイト左シフトした２バイトのデータ（ａ１１，ａ１２）を転送先バスへパーシャルライトする。
次に、２回目のＤＭＡコマンドを受け付けた場合について説明する。データシフト部３２は、転送元バスから３ワードデータ（ｂ１０〜ｂ３３）をバースト読み込む。先頭ワード（ｂ１０，ｂ１１，ｂ１２，ｂ１３）の読み込み時に、データシフト部３２は、シフト量に従って２バイト右シフトした先頭ワードのうち２バイトのデータ（ｂ１０，ｂ１１）を転送先バスへパーシャルライトする。先頭ワードのうちパーシャルライトされなかったデータ（ｂ１２，ｂ１３）は２バイト右シフトした形でデータシフト部３２に残っている。
続いて２ｎｄワード（ｂ２０，ｂ２１，ｂ２２，ｂ２３）の読み込み時に、データシフト部３２は、シフト量に従って２バイト右シフトした２ｎｄワードをデータシフト部３２に残っているデータ（ｂ１２，ｂ１３）とマージした後、バースト転送用バッファ３４のエントリ０ｘ４へ格納する。２ｎｄワードのうちバースト転送用バッファ３４に格納されなかったデータ（ｂ２２，ｂ２３）は２バイト右シフトした形でデータシフト部３２に残っている。
続いて３ｒｄワード（ｂ３０，ｂ３１，ｂ３２，ｂ３３）の読み込み時に、データシフト部３２は、シフト量に従って２バイト右シフトした３ｒｄワードをデータシフト部３２に残っているデータ（ｂ２２，ｂ２３）とマージした後、バースト転送用バッファ３３のエントリ０ｘ８へ書き込む。３ｒｄワードのうちバースト転送用バッファ３３に格納されなかったデータ（ｂ３２，ｂ３３）は２バイト右シフトした形でデータシフト部３２に残っている。
この時点でバースト転送用バッファのエントリ０ｘ４と０ｘ８のデータが有効となるので、この２ワードを転送先バスへ２ワードバーストライトする。３ｒｄワードのうちバーストライトされなかったデータ（ｂ３２，ｂ３３）は転送先バスへパーシャルライトする。
次に、３回目のＤＭＡコマンドを受け付けた場合について説明する。データシフト部３２は、転送元バスから２ワードデータ（ｃ２０〜ｃ３３）をバースト読み込む。先頭ワード（ｃ２０，ｃ２１，ｃ２２，ｃ２３）の読み込み時に、データシフト部３２は、メインコントローラの指示に従って、０バイトシフトした先頭ワードのうち指定された２バイトのデータ（ｃ２２，ｃ２３）のみを転送先バスへパーシャルライトする。
続いて２ｎｄワード（ｃ３０，ｃ３１，ｃ３２，ｃ３３）の読み込み時に、データシフト部３２は、メインコントローラの指示に従って、０バイトシフトした２ｎｄワードを転送先バスへワードライトする。
以上のように、本実施の形態に係るＤＭＡＣは、従来のＤＭＡＣと比較してバースト転送を積極的に用いることにより、バスの使用効率を上げることができる。
なお、本実施の形態では、境界データバッファ３４とバースト転送用バッファ３３を備えることから、チェインモード転送の間隙に単発モード転送が混在することを許すことができる。しかし、ＤＭＡＣ１のイニシエータが単独であり、かつチェインモード転送の間隙に単発モード転送が混在しないような特殊な場合には、バースト転送用バッファ３３にそのまま境界データを保持することも可能である。この場合、境界データバッファ３４は不要となる。
次に、転送先がキャッシュ制御されたメモリである場合において、キャッシュラインの境界に合わせたバースト転送サイズでバースト転送する動作について説明する。以後、転送先であるキャッシュ制御されたメモリを、転送先メモリと呼ぶことにする。また、転送先メモリのキャッシュ制御は、図示しない外部のキャッシュ制御部が行う。
第６図は、キャッシュラインの境界に合わせたバースト転送サイズでバースト転送する動作の一例を示す図である。本実施の形態では、説明を容易にするため、ＤＭＡＣが転送先メモリへＤＭＡ転送を用いてデータを書き込んだ場合に、外部のキャッシュ制御部は書き込まれた部分のキャッシュ状態を「無効」にするＩｎｖａｌｉｄａｔｅの単純な制御を行うだけとする。また、バースト転送用バッファに格納するまでの動作は、上述した動作と同様であり、ここではバースト転送用バッファに格納されたデータをバースト転送する動作だけを詳細に説明する。
第６図（ａ）は、バースト転送用バッファのデータの配置を示す図である。第６図（ａ）において、バースト転送用バッファには、２回のＤＭＡコマンドにより読み込まれたデータが格納されている。また、ｄ０，ｄ１は１回目のＤＭＡコマンドでバースト転送用バッファに格納されたデータ行を示し、ｅ０〜ｅ１５は２回目のＤＭＡコマンドでバースト転送用バッファに格納されたデータ行を示す。
第６図（ｂ）は、キャッシュライン境界と無関係にバースト転送された、従来の転送先メモリのデータの配置を示す図である。第６図（ｃ）は、キャッシュライン境界に合わせてバースト転送された、本発明の転送先メモリのデータの配置を示す図である。第６図（ｂ）と第６図（ｃ）において、点線はキャッシュライン境界を示す。
第６図（ｂ）に示すように、転送先メモリのキャッシュライン境界と無関係にバースト転送を行った場合、２回目のバースト転送でキャッシュライン境界をまたぐため、転送先メモリのキャッシュ制御部は、キャッシュラインの最初のエントリにおいてＩｎｖａｌｉｄａｔｅを２回、キャッシュラインの次のエントリにおいてＩｎｖａｌｉｄａｔｅを１回、合計３回のＩｎｖａｌｉｄａｔｅを行うことになる。
本発明では、アキュムレータ２３が転送先メモリのキャッシュラインの境界に合わせたバースト転送サイズを算出し、メインコントローラ２２が算出されたバースト転送サイズに従ってバスサイクル制御部３１を制御し、バスサイクル制御部３１がバースト転送用バッファに格納されたデータを転送先へバースト転送する。第６図（ｃ）に示すように、転送先メモリのキャッシュライン境界に合わせてバースト転送を行った場合、転送先メモリのキャッシュ制御部はキャッシュラインの２エントリ分のＩｎｖａｌｉｄａｔｅを１回ずつ、合計２回行うだけで済む。
以上のように、本実施の形態に係るＤＭＡＣは、転送先メモリがキャッシュ制御されている場合に、転送先メモリのキャッシュライン境界に合わせてバースト転送を行うことにより、ＤＭＡＣ外部のキャッシュ制御部の負荷を低減することができる。
次に、ＤＭＡＣ１のイニシエータであるＣＰＵ４が複数存在する場合、もしくはＣＰＵ４がマルチスレッドで動作するような場合のＤＭＡＣの構成について説明する。この場合は、第１図において、境界データバッファ３４の代わりに、ＤＭＡＣ１のイニシエータの数と同じ数の境界データと次のデータセグメントの転送先アドレスオフセットとの組を格納しておく境界データバッファを備え、さらにアキュムレータ２３の代わりに、指示したイニシエータ毎の転送元アドレスオフセットと転送先アドレスオフセットに基づいてデータのシフト量を算出するアキュムレータを備えることにより、イニシエータが複数存在する場合のＤＭＡＣを実現できる。
以上のように、本実施の形態に係るＤＭＡＣは、複数のイニシエータによるＤＭＡ転送の指示に対応することができる。
実施の形態２．
本実施の形態では、ＤＭＡ転送における転送元バスと転送先バスが物理的に別のバスで、バス幅が異なる場合のＤＭＡＣの動作について説明する。ここではチェインモードによりＤＭＡ転送を行うものとする。第７図は、実施の形態２に係るＤＭＡＣの構成の一例を示すブロック図である。ＤＭＡＣ１１とＣＰＵ１５とＩ／Ｏ１６とメモリ１７は、２バイト以上のバス幅を持つバスＡ１８を介して接続されている。また、ＤＭＡＣ１１とＩ／Ｏ１９とメモリ２０は、バスＡ１８のバス幅の整数倍のバス幅を持つバスＢ２１を介して接続されている。ここで、ＣＰＵ１５は、ＤＭＡＣ１１のイニシエータであり、Ｉ／Ｏ１６とメモリ１７とＩ／Ｏ１９とメモリ２０は、ＤＭＡ転送における転送元または転送先となり得るＤＭＡ転送対象である。
第７図に示すように、本実施の形態に係るＤＭＡＣ１１は、ＤＭＡコア１２とＡｔｏＢデータ転送部１３とＢｔｏＡデータ転送部１４から構成される。ＤＭＡコア１２は、コマンドデコーダ１２１と、メインコントローラ１２２と、アキュムレータ１２３から構成される。ＡｔｏＢデータ転送部１３は、バスサイクル制御部１３１と、データシフト部１３２と、バースト転送用バッファ１３３と、境界データバッファ１３４と、データ再構成部１３５から構成される。同様に、ＢｔｏＡデータ転送部１４は、バスサイクル制御部１４１と、データシフト部１４２と、バースト転送用バッファ１４３と、境界データバッファ１４４と、データ再構成部１４５から構成される。
以下、本実施の形態に係るＤＭＡＣ１１の動作について説明する。ここでは、一方のバスに接続されたＤＭＡ転送対象を転送元とし、もう一方のバスに接続されたＤＭＡ転送対象を転送先とする場合、すなわち転送元のバス幅と転送先のバス幅が異なる場合について説明する。
第１の例として、転送先のバス幅が、転送元のバス幅の整数倍である場合、すなわち、転送元がＩ／Ｏ１６またはメモリ１７で、転送先がＩ／Ｏ１９またはメモリ２０である場合について説明する。ＣＰＵ１５から送信されたＤＭＡコマンドは、バスＡ１８を介してバスサイクル制御部１３１で受信され、コマンドデコーダ１２１へ入力される。次に、コマンドデコーダ１２１は、ＤＭＡコマンドを解釈し、その結果得られたＤＭＡ転送に関する指示をメインコントローラ１２２へ出力する。メインコントローラ１２２は、アキュムレータ１２３に転送元アドレスオフセットと転送先アドレスオフセットを与える。アキュムレータ１２３は、転送元アドレスオフセットと転送先アドレスオフセットに基づいて、データシフト部１３２に与えるシフト量を算出し、メインコントローラ１２２へ出力する。
ここで、チェインフラグが有りであれば、メインコントローラ１２２は境界データバッファに格納されたアドレスオフセットを読み込み、転送先アドレスオフセットとしてアキュムレータ１２３に与える。境界データバッファ１３４は、前のデータセグメントにおいてバス幅単位で区切った余りのデータでバス幅未満のデータである境界データと、その境界データによって生じる転送先アドレスオフセットを格納している。
次に、メインコントローラ１２２は、バスサイクル制御部１３１に対して、転送元からのデータの読み込みの指示を行う。バスサイクル制御部１３１は転送元からデータを読み込み、データシフト部１３２へ出力する。データシフト部１３２は、実施の形態１と同様の動作を行うが、シフトや境界データとのマージを行ったデータをデータ再構成部１３５へ出力する。データ再構成部１３５は、バスＢ２１のバス幅に合うように、入力されたバスＡ１８のバス幅のデータを結合し、バースト転送用バッファ１３３へ出力する。例えば、バスＢ２１のバス幅がバスＡ１８のバス幅のｎ倍であれば、データ再構成部１３５は入力されたｎ個のデータを結合してバースト転送用バッファ１３３へ出力する。バースト転送用バッファ１３３は、データをバスＢ２１のバス幅単位で格納する。
次に、データシフト部１３２と境界データバッファ１３４の動作について具体例を用いて説明する。第８図は、転送元のバス幅が２バイト、転送先のバス幅が４バイトである場合のデータシフト部の入出力データの一例を示す図である。第４図と同様、第８図の表において、列の上側に記した数値は、対応する列に記されたケースにおける転送元アドレスオフセットを表し、行の左側に記した数値は、対応する行に記されたケースにおける転送先アドレスオフセットを表す。第８図の表における１つのセルは、列に対応する転送元アドレスオフセットと行に対応する転送先アドレスオフセットを持ったケースを表し、セルの内容はそのケースにおける入力データｉ０，ｉ１と出力データｏ０，ｏ１，ｏ２，ｏ３を表す。また、ｘは、チェインモードにおける前のＤＭＡコマンドにより転送元から読み込まれたデータであり、ａ，ｂ，ｃ，ｄは、チェインモードにおける現在のＤＭＡコマンドにより転送元から読み込まれるデータでありチェインが継続する場合、ｚはチェインモードにおける次のＤＭＡコマンドで転送元から読み込まれる次のデータであり、チェインが継続しない場合、ｚは存在しない。第４図と同様、２バイトの入力データｉ０，ｉ１は、データシフト部１３２でシフトされ、必要に応じて境界データとマージされた後、データ再構成部１３５により結合されて、４バイトの出力データｏ０，ｏ１，ｏ２，ｏ３としてバースト転送用バッファ１３３へ出力される。
バスサイクル制御部１４１は、バースト転送用バッファ１３３に格納されたデータを、バスＢ２１を介して転送先へバースト転送することにより転送先へデータを書き込む。
次に、第２の例として、転送元のバス幅が、転送先のバス幅の整数倍である場合、すなわち、転送元がＩ／Ｏ１９またはメモリ２０で、転送先がＩ／Ｏ１６またはメモリ１７である場合について説明する。ＣＰＵ１５から送信されたＤＭＡコマンドは、バスＡ１８を介してバスサイクル制御部１３１で受信され、コマンドデコーダ１２１へ入力される。次に、コマンドデコーダ１２１は、ＤＭＡコマンドを解釈し、その結果得られたＤＭＡ転送に関する指示をメインコントローラ１２２へ出力する。メインコントローラ１２２は、アキュムレータ１２３に転送元アドレスオフセットと転送先アドレスオフセットを与える。アキュムレータ１２３は、転送元アドレスオフセットと転送先アドレスオフセットに基づいて、データシフト部１４２に与えるシフト量を算出し、メインコントローラ１２２へ出力する。
ここで、チェインフラグが有りであれば、メインコントローラ１２２は境界データバッファに格納されたアドレスオフセットを読み込み、転送先アドレスオフセットとしてアキュムレータ１２３に与える。境界データバッファ１４４は、前のデータセグメントにおいてバス幅単位で区切った余りのデータでバス幅未満のデータである境界データと、その境界データによって生じる転送先アドレスオフセットを格納している。
次に、メインコントローラ１２２は、バスサイクル制御部１４１に対して、転送元からのデータの読み込みに関する指示を行う。バスサイクル制御部１４１は、メインコントローラ１２２からの指示に従って転送元からデータを読み込み、データシフト部１４２へ出力する。データシフト部１４２は、実施の形態１と同様の動作を行うが、シフトや境界データとのマージを行ったデータをデータ再構成部１４５へ出力する。データ再構成部１４５は、バスＡ１８のバス幅に合うように、入力されたバスＢ２１のバス幅のデータを分割し、バースト転送用バッファ１４３へ出力する。例えば、バスＢ２１のバス幅がバスＡ１８のバス幅のｎ倍であれば、データ再構成部１４５は入力されたデータをｎ個に等分してバースト転送用バッファ１４３へ出力する。バースト転送用バッファ１４３は、データをバスＡ１８のバス幅単位で格納する。
次に、データシフト部１４２と境界データバッファ１４３の動作について具体例を用いて説明する。第９図は、転送元のバス幅が２バイト、転送先のバス幅が４バイトである場合のデータシフト部の入出力データの一例を示す図である。第８図と同様、第９図の表における１つのセルは、列に対応する転送元アドレスオフセットと行に対応する転送先アドレスオフセットを持ったケースを表し、セルの内容はそのケースにおける入力データｉ０，ｉ１，ｉ３，ｉ４と出力データｏ０，ｏ１を表す。また、第８図と同様、ｘは、チェインモードにおける前のＤＭＡコマンドにより転送元から読み込まれたデータであり、ａ，ｂ，ｃ，ｄは、チェインモードにおける現在のＤＭＡコマンドにより転送元から読み込まれるデータであり、チェインが継続する場合、ｚはチェインモードにおける次のＤＭＡコマンドで転送元から読み込まれる次のデータであり、チェインが継続しない場合、ｚは存在しない。第４図と同様、４バイトの入力データｉ０，ｉ１，ｉ３，ｉ４は、データシフト部１４２でシフトされ、必要に応じて境界データとマージされた後、データ再構成部１４５により分割されて、２バイトの出力データｏ０，ｏ１としてバースト転送用バッファ１１４３へ出力される。
バスサイクル制御部１３１は、バースト転送用バッファ１４３に格納されたデータを、バスＡ１８を介して転送先へバースト転送することにより転送先へデータを書き込む。
以上のように、本実施の形態に係るＤＭＡＣは、バイト単位の任意のアドレス境界で分割されたデータセグメントを、転送元とは異なるバス幅を持つ転送先へチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。
なお、本実施の形態においても、転送先メモリがキャッシュ制御されている場合に、実施の形態１で説明したキャッシュライン境界に合わせたバースト転送を適用することができる。また、本実施の形態においてＤＭＡＣ１１のイニシエータであるＣＰＵが複数存在する場合、もしくはＣＰＵがマルチスレッドで動作するような場合についても、第７図において、境界データバッファ１３４，１４４の代わりに、イニシエータの数と同じ数の境界データと次のデータセグメントの転送先アドレスオフセットとの組を格納しておく境界データバッファをそれぞれ備え、さらにアキュムレータ１２３の代わりに、指示したイニシエータ毎の転送元アドレスオフセットと転送先アドレスオフセットに基づいてデータのシフト量を算出するアキュムレータを備えることにより、イニシエータが複数存在する場合のＤＭＡＣを実現できる。
【産業上の利用の可能性】
以上説明したように、本発明によれば、バイト単位の任意のアドレス境界で分割されたデータセグメントをチェインモードでＤＭＡ転送する際に、できるだけバースト転送を行うようにデータを組み立てなおすことにより、バスの使用効率を上げることができる。また、転送先メモリがキャッシュ制御されている場合に、転送先メモリのキャッシュライン境界に合わせてバースト転送を行うことにより、ＤＭＡＣ外部のキャッシュ制御部の負荷を低減することができる。結果として、任意のバイトアドレスで分割されたデータセグメントをチェインモードでＤＭＡ転送する場合にデータ転送回数を少なくして全体として転送時間を短縮することができる。
【図１】
2004057481.tif 000003
【図２】
2004057481.tif 000004
【図３】
2004057481.tif 000005
【図４】
2004057481.tif 000006
【図５】
2004057481.tif 000007
【図６】
2004057481.tif 000008
【図７】
2004057481.tif 000009
【図８】
2004057481.tif 000010
【図９】
2004057481.tif 000011
【国際調査報告】
2004057481.tif 000012
2004057481.tif 000013
2004057481.tif 000014
2004057481.tif 000015